1. 进程的状态
- 三种基本状态
就绪状态:当进程已获得除cpu以外的其他资源后,只要获得cpu,便可立即执行,此时进程的状态就称为就绪状态
执行状态:进程已获得cpu,正在执行
阻塞状态:正在执行的进程由于由于发生某事件而暂时无法继续执行,便放弃处理机而处于暂停状态,这种赞停状态就是阻塞状态
图 - 具有挂起状态的状态转换图
图
处于静止就绪状态的进程不能再被调度执行
2. 进程控制块
2.1 作用
记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。OS是根据PCB来对并发执行的进程进行控制和管理的。例:当OS要调度某进程执行时,要从该进程的PCB中查出状态及优先级,在调度到某进程后,根据其PCB中的所保存的处理机状态信息,设置该进程恢复运行的现场,并根据PCB中的程序中的程序和数据的内存地址,找到其程序和数据;进程间同步,通信活访问文件时都要访问PCB…
2.2 PCB中的信息
主要包括下面四方面信息:
- 进程标识符
(1) 内部标识符:在所有的OS中,都为每个进程赋予一个唯一的数字标识符,通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。
(2)外部标识符:由创建者提供,往往是由用户(进程)在访问该进程时使用,还应设置父进程标识子进程标识,还可以设置用户标识。 - 处理机状态
处理及在运行时,许多信息都放在寄存器中,当处理机被中断时,所有这些信息都要保存在PCB中,以便切回来的时候,能继续从断点处执行,这些寄存器包括:
(1)通用寄存器:用户程序可以访问的,用于暂存信息
(2)指令计数器:存放要访问的下一条指令的地址
(3)程序状态字PSW:存放一些状态信息(进位位,溢出位等),执行方式(在内核态还是用户态执行),一些控制信息(如是否允许中断等)
(4)用户栈指针:指向栈顶
用户栈:就是应用程序直接使用的栈。它位于应用程序的用户进程空间的最顶端。
当用户程序逐级调用函数时,用户栈从高地址向低地址方向扩展,每次增加一个栈帧,一个栈帧中存放的是函数的参数、返回地址和局部变量等,所以栈帧的长度是不定的。
内核栈:主要用于进程陷入内核时使用的栈,主要涉及进程切换时保存用户态进程信息(寄存器值,一部分硬件上下文等),以及进程在内核执行时分配空间使用。 - 进程调度信息
(1)进程当前状态
(2)进程优先级
(3)进程调度所需要的其他信息:和进程调度算法有关,比如进程已等待cpu的时间总和,已执行的时间总和等
(4) 事件:由执行状态转为阻塞状态所等待发生的事件,即阻塞原因 - 进程控制信息
(1)程序和数据的地址:程序和数据所在内存或外存的地址,以便再次调度到该进程时能从PCB中找到程序和数据
(2)进程同步和通信机制
(3)资源:除cpu以外,进程所需的全部资源及已分配到的资源
(4) 链接指针:本进程(PCB)所在队列中的下一个进程的PCB的首地址
2.3 进程控制块的组织方式
链接方式
索引方式
3. 进程控制
3.1 进程创建
- 引起进程创建的事件
(1)用户登录
(2)作业调度:当调度到某作业时,将该作业装入内存,为其分配必要的资源,并为它创建进程,插入就绪队列
(3)提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需的服务。例用户程序要求文件答应,系统则为他创建一个打印进程
(4)应用请求:由进程自己创建一个新进程,以便新进程并发完成特定的任务 - 创建过程
一旦操作系统发现了要求创建新进程事件后,调用进程创建原语Creat(),过程如下:
(1) 申请唯一的数字标识符,并从PCB集合中索取一个空白PCB
(2)为新进程的程序和数据及用户栈分配必要的内存空间
(3)初始化PCB:将系统分配的标识符和父进程标识符写进PCB,让PC指向程序入口地址,让栈指针指向栈顶,将进程的状态设为就绪或静止就绪,设置优先级
(4) 将新进程插入就绪队列
3.2 进程终止
- 引起进程终止的事件
(1)正常结束
(2)异常结束:
保护错:如写了一个不允许写的文件
非法指令
特权指令错:如用户进程去执行一条只允许OS执行的命令
运行超时
等待超时
算术运算错
I/O故障
(3)外界干预:如操作员,父进程等 - 过程
(1) 根据标识符,从PCB集合中检索出PCB,从中读出进程状态
(2)若是执行状态,立刻停止执行,置调度标志为真,用于指示该进程被终止后应重新进行调度
(3)若该进程还有子孙进程,应将所有子孙进程终止,以防他们成为不可控进程
(4)将进程拥有的全部资源归还给父进程或系统
(5)将PCB从所在队列中移出,等待其他程序来搜集信息