01_linux进程专题讲座v1.0.1-王保明.docx

上传人:pu****.1 文档编号:552255040 上传时间:2024-03-11 格式:DOCX 页数:25 大小:749.16KB
返回 下载 相关 举报
01_linux进程专题讲座v1.0.1-王保明.docx_第1页
第1页 / 共25页
01_linux进程专题讲座v1.0.1-王保明.docx_第2页
第2页 / 共25页
01_linux进程专题讲座v1.0.1-王保明.docx_第3页
第3页 / 共25页
01_linux进程专题讲座v1.0.1-王保明.docx_第4页
第4页 / 共25页
01_linux进程专题讲座v1.0.1-王保明.docx_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《01_linux进程专题讲座v1.0.1-王保明.docx》由会员分享,可在线阅读,更多相关《01_linux进程专题讲座v1.0.1-王保明.docx(25页珍藏版)》请在金锄头文库上搜索。

1、轻松入门 实战应用 从项目开发角度 为你搭建完整的知识体系 wangbaominglinux进程-应用编程-专题讲座 written by 王保明进程基本概念1程序pk进程什么是程序程序是完成特定任务的一系列指令集合。什么是进程从用户的角度来看进程是程序的一次执行过程从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是资源分配的最小单位每一个进程都有自己独立的地址空间与执行状态。像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程进程数据结构进程的静态描述:由三部分组成:PCB、有关程序段和该程序段对其进行操作的数据结构集。进

2、程控制块:用于描述进程情况及控制进程运行所需的全部信息。代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据进程和程序的区别进程是动态的,程序是静态的进程的生命周期是相对短暂的,而程序是永久的。进程数据结构PCB一个进程只能对应一个程序,一个程序可以对应多个进程。总结:中断早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念分式操作系统 基于时间片轮转进程是操作系统对资源的一种抽象,一个进程:代码段、数据段、堆栈段、+进程控制块(PCB)PCB是操作系统感知进程存在的一个重要

3、数据结构(cpu通过进程控制块来控制进程)2进程状态进程状态 操作系统经典三态q 就绪q 等待(阻塞)q 运行总结状态条件和原因因创建而就绪,因调度而执行;因时间片用完而重新就绪;执行中因I/O请求而阻塞;I/O完成而就绪注意:阻塞以后不能直接执行,必须进入就绪状态。Linux内核中的进程状态q 运行状态(TASK_RUNNING)q 可中断睡眠状态(TASK_INTERRUPTIBLE)q 不可中断睡眠状态(TASK_UNINTERRUPTIBLE)q 暂停状态(TASK_STOPPED)q 僵死状态(TASK_ZOMBIE)备注:就绪态深入理解:内存中就绪和交换空间中就绪,操作系统支持虚拟

4、内存。虚拟内存实现需要操作系统支持:内存段式管理、业式管理、段页管理。进程状态编程事件进程调度及调度算法3进程编程相关术语进程控制块q 进程描述信息q 进程标识符用于唯一的标识一个进程。q 进程控制信息q 进程当前状态q 进程优先级q 程序开始地址q 各种计时信息q 通信信息q 资源信息q 占用内存大小及管理用数据结构指针q 交换区相关信息q I/O设备号、缓冲、设备相关的数结构q 文件系统相关指针q 现场保护信息q 寄存器q PCq 程序状态字PSWq 栈指针进程标示q 每个进程都会分配到一个独一无二的数字编号,我们称之为“进程标识”(process identifier),或者就直接叫它P

5、ID.q 是一个正整数,取值范围从2到32768q 当一个进程被启动时,它会顺序挑选下一个未使用的编号数字做为自己的PIDq 数字1一般为特殊进程init保留的进程创建q 不同的操作系统所提供的进程创建原语的名称和格式不尽相同,但执行创建进程原语后,操作系统所做的工作却大致相同,都包括以下几点:q 给新创建的进程分配一个内部标识,在内核中建立进程结构。q 复制父进程的环境q 为进程分配资源, 包括进程映像所需要的所有元素(程序、数据、用户栈等),q 复制父进程地址空间的内容到该进程地址空间中。q 置该进程的状态为就绪,插入就绪队列。进程撤销q 进程终止时操作系统做以下工作:q 关闭软中断:因为

6、进程即将终止而不再处理任何软中断信号;q 回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应的数据结构等;q 写记帐信息:将进程在运行过程中所产生的记帐数据(其中包括进程运行时的各种统计信息)记录到一个全局记帐文件中;q 置该进程为僵死状态:向父进程发送子进程死的软中断信号,将终止信息status送到指定的存储单元中;q 转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。进程创建其他实践1)Win PK Linux进程观察工具0号进程(也称为)空闲进程内存=交换空间,支持虚拟内存。1号进程 第一个用户进程。2)which init /sbin/3)查看内核

7、进程pid最大配置rootlocalhost # cat /proc/sys/kernel/pid_max 327684)终止进程方法中SIGABORT进程编程实践 1fork系统调用相关说明复制一个进程映象forkq 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。q 子进程与父进程的区别在于:q 1、父进程设置的锁,子进程不继承q 2、各自的进程ID和父进程ID不同q 3、子进程的未决告警被清除;q 4、子进程的未决信号集设置为空集。for

8、k系统调用q 包含头文件 和 q 函数功能:创建一个子进程q 函数原型 pid_t fork(void);q 参数:无参数。q 返回值:q 如果成功创建一个子进程,对于父进程来说返回子进程IDq 如果成功创建一个子进程,对于子进程来说返回值为0q 如果为-1表示创建失败注意点:q 理解1:fork系统调用之后,父子进程将交替执行。q 理解2:怎么样理解一次调用2次返回?q 理解3:怎么样理解,fork返回值大于零的是父进程,为什么这样设计:?q 理解4:怎么样理解分支在fork之后,而不是父进程main函数的开始?总结:怎么样理解,一次调用,二次返回?问题的本质是:两次返回,是在各自的进程空间

9、中返回的。 子进程和父进程各有自己的内存空间 (fork:代码段、数据段、堆栈段、PCB进程控制块的copy)。总结:#include #include #include #include #include #include #include #include #include #include int main(void )int fd;pid_t pid;signal(SIGCHLD, SIG_IGN);printf(befor fork pid:%d n, getpid();int num = 10; /思考打印fd = open(11.txt, O_WRONLY);if (fd = -

10、1)return 0;pid = fork();if (pid = -1)printf(pid 0)printf(parent: pid:%d n, getpid();write(fd, parent, 6);close(fd);/sleep(1);else if (pid = 0)printf(child: %d, parent: %d n, getpid(), getppid();write(fd, child, 5);close(fd);/sleep(100);printf(fork after.n);return 0;强化训练/请问打印几句hello.int main()fork();

11、fork();fork();printf(hello.n);return 0;写时复制copy on writeq 如果多个进程要读取它们自己的那部分资源的副本,那么复制是不必要的。q 每个进程只要保存一个指向这个资源的指针就可以了。q 如果一个进程要修改自己的那份资源的“副本”,那么就会复制那份资源。这就是写时复制的含义原因分析:加快速度,linux内核是段页式管理机制(因段管理从0开始,),也可叫页式管理机制。只复制对应的页。缺页,在中断查询,再赋值。概念要深入理解2孤儿进程和僵尸进程孤儿进程和僵尸进程q 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程。(注:任何一个

12、进程都必须有父进程)q 如果子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程就成为僵进程。孤儿进程如果父亲进程先结束,子进程会托孤给1号进程root 14121 14089 0 22:20 pts/18 00:00:00 su - wbm01wbm01 14122 14121 0 22:20 pts/18 00:00:00 -bashwbm01 14300 1 0 22:38 pts/18 00:00:00 ./dm02_forkwbm01 14308 14028 0 22:38 pts/17 00:00:00 ps -efwbm01

13、localhost 01process$ ps ef 僵尸进程如果子进程结束,父进程还没有查询子进程的状态,那么子进程就会是僵尸状态wbm01localhost 01process$ ps -u wbm01 PID TTY TIME CMD14028 pts/17 00:00:00 bash14122 pts/18 00:00:00 bash14233 pts/18 00:00:00 dm02_fork14234 pts/18 00:00:00 dm02_fork 14235 pts/17 00:00:00 ps避免僵尸进程#include signal(SIGCHLD, SIG_IGN);3fork之后父子进程共享文件父进程的文件描述符q 如果父进程中打开了一个文件,那么子进程不需要在打开q 会不会像int 赋值两份。赋值的文件描述符是什么意思?void main(void)pid_t pid;signal(SIGCHLD, SIG_IGN);int fd;fd = open(test.txt, O_WRONLY);if (fd = -1)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号