操作系统
2.3.4 进程三态转换分析
1.三态:
***运行态或执行态:***进程正在使用CPU
***等待态(封锁、冻结、挂起、睡眠):***进程正在等待I/O完成(或其他事件发生),不在使用也不能使用CPU
***就绪态(可运行态):***进程不在使用CPU,但已经准备好使用CPU(不再等待I/O或其他事件)
2. 三态转换原因候任实现工作内容(p48图)
(1)刚从其他状态进入就绪态的进程需要置入调度队列(就绪队列):大部分调度算法都需要把所有就绪进程排成一个进入序列来体现顺序。通常排在队首的就是将被调度首先选中的进程。队列不一定按照进入队列的先后顺序排序,还涉及这个进程的紧急程度和优先程度
直接从等待态进入运行态属于抢占式调度。由于等待态的转变通常由中断引起,相应的中断称为抢占式中断。
(2)“运行-就绪”发生在抢占式中断中,如I/O或分时状态下的时间片。
用户对时间的要求包括:
- 响应时间越快越好,不能超过用户等待的的忍耐程度(与程序独占CPU时所需的运行时间成正比)
- 对公平的要求
- 特权要求:有些程序需要快速响应或者实时响应,有些用户需要享受高优先级
分时技术是多个用户同时以交互方式使用计算机时采用的一种技术:每当时钟中断发生并且发现当前运行进程已连续在CPU上运行了一定时间(称为时间片),就强制发生进程切换,使当前进程退出CPU,重新选出另一进程上机运行。被退出的进程发生“运行-就绪”的转变(它处于任何时候都可以在上CPU运行的状态)
(3)“建立-就绪”“建立-运行”
当建立一个新进程时,计算机上正在运行的程序是它的父进程。刚刚建立的程序不能马上进入运行态而是进入就绪态,这涉及新进程与其父进程之间的优先关系。如果需要,新进程也可以立即进入运行态
(4)运行-结束
意味着 从运行结束的用户进程进入操作系统,由操作系统处理进程结束的一些收尾工作。
进程结束分为正常结束和非正常结束。无论正常与否,进程都可能返回(输出)数据给其父进程。
2.3.5 进程模型实现机制(p50,51页有几个图)
进程控制块表简称PCB表或者进程表。每个系统一张进程表,每个进程在表中占一行,每个进程的那行信息称为一个进程控制块。(在c语言的具体实现中,一个PCB表就是一个结构数组 ,该结构数组可能存在嵌套现象,结构现象一般来说就是多维表,无结构嵌套就是二维表)
PCB表的列包括:进程号,进程状态,进程调度优先级,现场信息,就绪队列(即调度队列)指针和等待队列指针(与就绪队列指针为同一列),页表或界址寄存器、打开文件表(或其指针),记账信息(所用系统时间,CPU时间,时间限额,账号等)
进程处于运行态时,可能在执行用户程序代码,处于用户态,也可能在执行操作系统代码,处于系统态。对于系统态,可能是处于系统调用内部,也可能属于中断处理期间(就是也可能忙着,也可能刚好在等待?)。
*进程切换不可能在用户态下发生。只有在以系统调用或者中断方式进入操作系统后,才可能需要和可能进行进程切换。进程切换时需要保存现场内容:所有通用和专用寄存器的值,一些高速缓存和块表的内容,还包括内部的体系结构相关的内容。
在建立进程的过程中,若子进程建立后直接进入运行态(则父进程进入就绪态),这似乎意味着父进程的“建立进程”系统调用是不返回的。事实并非如此、当父进程在以后某个时间从就绪进入运行时,就是父进程的“建立进程”系统调用返回之时。
由于一个进程不会同时既处于就绪队列又处于等待队列中,也不会同时处于多个等待队列中,因此在PCB表(进程控制表)中,这些队列(指针)共用一个表列(这属于数据结构中的多队链接存储)