一:概念
程序是一系列有序指令的集合(代码段+数据段=未初始化数据段bss、已初始化数据段)。程序是静态的
进程(代码段+数据段+堆栈段+PCB进程控制块):
从用户角度看,进程是程序的一次动态执行过程
从操作系统的内核来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位
进程是资源分配的最小单位,每一个进程都有自己独立的地址空间和执行状态
进程的数据结构:
我们进程的静态描述,由三部分组成:
1、PCB(进程控制块):用于描述进程情况以及控制进程运行所需的全部信息。PCB(是操作系统感知进程存在的一个重要数据结构)、有关程序段和该程序段对其进行操作的数据结构集
2、代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。
3、数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或者最后数据。
进程与程序的区别:
1、进程是动态的,程序是静态的
2、进程的生命周期是相对短暂的,而程序是永久的
3、进程有数据结构PCB(进程控制块)
4、一个进程只能对应一个程序,一个程序可以对应多个进程
二:进程状态
1、进程状态变迁:
就绪:除了CPU资源,其他资源都满足
等待:比就绪态层次更低,不仅CPU资源不满足,其他一些资源(外设等)也不满足
运行:资源都满足了
运行-->就绪:CPU时间片用完或者被高优先级进程强占
创建-->就绪-->运行:进程调度
运行-->等待:发生等待事件
运行-->撤销:代码执行完毕
等待-->就绪:等待结束
2、实际linux操作系统状态变迁:
运行状态、可中断睡眠状态、不可中断睡眠状态、暂停状态、僵死状态
三、进程控制块PCB
进程控制块是操作系统用来感知进程存在的数据结构, Linux系统的PCB包括很多参数,每个PCB约占1KB多的内存空间。主要有以下几部分
1、进程描述信息:
进程标识符用于唯一的标识一个进程。(pid ppid)
2、进程控制信息:
进程当前状态: 进程状态总共有TASK RUNN ING ( 可运行状态)、TASK INTERRUPT IBLE ( 可中断的等待状态)、TASK UNINTERRUPT IBLE(不可中断的等待状态)、TASK ZOMB IE( 僵死状态)、TASK STOPPED(暂停状态) 等5种。
进程优先级:prio rity 的值给出了进程每次获取CPU 后, 可使用的时间片长度( 单位是jiffies)。
程序开始地址、各种计时信息(cpu使用率、使用信息等)、通信信息
3、资源信息:
占用内存大小及管理用数据结构指针、交换区相关信息、I/O设备号、缓冲、设备相关的树结构、文件系统相关指针
4、现场保护信息:
寄存器、PC、程序状态字、栈指针
四、进程标识
每个进程都会分配到一个独一无二的数字编号,我们称之为进程标识PID.它是一个正整数,取值范围2—32768。(在文件/proc/sys/kernel/pid_max中查看)
当一个进程被启动时,它会顺序挑选下一个未使用的数字编号作为自己的PID。数字1一般为特殊的Init进程(/sbin/init),它是一个用户进程。ID为0的通常是内核调度进程。
五、进程创建
1、给新创建的进程分配一个内部标识,在内核中建立进程结构。
2、复制父进程的环境。
3、为进程分配资源,包括进程映像所需要的所有元素
4、复制父进程地址空间的内容到该进程地址空间中。
5、置该进程的状态为就绪,插入就绪队列。
六、进程撤销(代码执行完毕)
1、关闭软中断:因为进程即将终止而不再处理任何软中断信号;
2、回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应地数据结构等
3、写记账信息:将进程在运行过程中所产生的记账数据(其中包括进程运行时的各种统计信息)记录到一个全局记账文件中。
4、置该进程为僵死状态:向父进程发送了子进程死的软中断信号,将终止信息status送到指定的存储单元中;
5、转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。
六、进程终止的五种方法
从main函数返回、调用exit、调用_exit、调用abort、由信号终止。