
01_linux进程专题讲座v1.0.1-王保明.docx
25页轻松入门 实战应用 从项目开发角度 为你搭建完整的知识体系 wangbaominglinux进程-应用编程-专题讲座 written by 王保明进程基本概念1程序pk进程什么是程序程序是完成特定任务的一系列指令集合什么是进程从用户的角度来看进程是程序的一次执行过程从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位进程是资源分配的最小单位每一个进程都有自己独立的地址空间与执行状态像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程进程数据结构进程的静态描述:由三部分组成:PCB、有关程序段和该程序段对其进行操作的数据结构集进程控制块:用于描述进程情况及控制进程运行所需的全部信息代码段:是进程中能被进程调度程序在CPU上执行的程序代码段数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据进程和程序的区别进程是动态的,程序是静态的进程的生命周期是相对短暂的,而程序是永久的进程数据结构PCB一个进程只能对应一个程序,一个程序可以对应多个进程。
总结:中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念分式操作系统 基于时间片轮转进程是操作系统对资源的一种抽象,一个进程:代码段、数据段、堆栈段、+进程控制块(PCB)PCB是操作系统感知进程存在的一个重要数据结构(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)备注:就绪态深入理解:内存中就绪和交换空间中就绪,操作系统支持虚拟内存虚拟内存实现需要操作系统支持:内存段式管理、业式管理、段页管理进程状态编程事件进程调度及调度算法3进程编程相关术语进程控制块q 进程描述信息q 进程标识符用于唯一的标识一个进程。
q 进程控制信息q 进程当前状态q 进程优先级q 程序开始地址q 各种计时信息q 通信信息q 资源信息q 占用内存大小及管理用数据结构指针q 交换区相关信息q I/O设备号、缓冲、设备相关的数结构q 文件系统相关指针q 现场保护信息q 寄存器q PCq 程序状态字PSWq 栈指针进程标示q 每个进程都会分配到一个独一无二的数字编号,我们称之为“进程标识”(process identifier),或者就直接叫它PID.q 是一个正整数,取值范围从2到32768q 当一个进程被启动时,它会顺序挑选下一个未使用的编号数字做为自己的PIDq 数字1一般为特殊进程init保留的进程创建q 不同的操作系统所提供的进程创建原语的名称和格式不尽相同,但执行创建进程原语后,操作系统所做的工作却大致相同,都包括以下几点:q 给新创建的进程分配一个内部标识,在内核中建立进程结构q 复制父进程的环境q 为进程分配资源, 包括进程映像所需要的所有元素(程序、数据、用户栈等),q 复制父进程地址空间的内容到该进程地址空间中q 置该进程的状态为就绪,插入就绪队列进程撤销q 进程终止时操作系统做以下工作:q 关闭软中断:因为进程即将终止而不再处理任何软中断信号;q 回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应的数据结构等;q 写记帐信息:将进程在运行过程中所产生的记帐数据(其中包括进程运行时的各种统计信息)记录到一个全局记帐文件中;q 置该进程为僵死状态:向父进程发送子进程死的软中断信号,将终止信息status送到指定的存储单元中;q 转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。
进程创建其他实践1)Win PK Linux进程观察工具0号进程(也称为)空闲进程 内存===》交换空间,支持虚拟内存1号进程 第一个用户进程2)which init /sbin/3)查看内核进程pid最大配置[root@localhost ~]# cat /proc/sys/kernel/pid_max 327684)终止进程方法中 SIGABORT进程编程实践 1fork系统调用相关说明复制一个进程映象forkq 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等q 子进程与父进程的区别在于:q 1、父进程设置的锁,子进程不继承q 2、各自的进程ID和父进程ID不同q 3、子进程的未决告警被清除;q 4、子进程的未决信号集设置为空集fork系统调用q 包含头文件
q 理解2:怎么样理解一次调用2次返回?q 理解3:怎么样理解,fork返回值大于零的是父进程,为什么这样设计:?q 理解4:怎么样理解分支在fork之后,而不是父进程main函数的开始?总结:怎么样理解,一次调用,二次返回? 问题的本质是:两次返回,是在各自的进程空间中返回的 子进程和父进程各有自己的内存空间 (fork:代码段、数据段、堆栈段、PCB进程控制块的copy)总结:#include
q 每个进程只要保存一个指向这个资源的指针就可以了q 如果一个进程要修改自己的那份资源的“副本”,那么就会复制那份资源这就是写时复制的含义原因分析:加快速度,linux内核是段页式管理机制(因段管理从0开始,),也可叫页式管理机制只复制对应的页缺页,在中断查询,再赋值概念要深入理解2孤儿进程和僵尸进程孤儿进程和僵尸进程q 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程注:任何一个进程都必须有父进程)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 -ef[wbm01@localhost 01process]$ ps –ef 僵尸进程如果子进程结束,父进程还没有查询子进程的状态,那么子进程就会是僵尸状态[wbm01@localhost 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
赋值的文件描述符是什么意思?void main(void){ pid_t pid; signal(SIGCHLD, SIG_IGN); int fd; fd = open("test.txt", O_WRONLY); if (fd == -1) 。
