文章目录
- 第二章 进程管理
- 进程调度的时机、方式、切换与过程
- (一)进程调度的时机
- (二)进程调度的方式
- (三)进程的切换与过程
- 小结
第二章 进程管理
进程调度的时机、方式、切换与过程
- 时机
- 什么时候需要进程调度?
- 什么时候不能进行进程调度?
- 切换与过程
- “狭义的调度”与“切换”的区别
- 进程切换的过程需要做什么?
- 方式
- 非剥夺调度方式(非抢占式)
- 剥夺调度方式(抢占式)
(一)进程调度的时机
进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
什么时候需要进行进程调度与切换?
(1)当前运行的进程主动放弃处理机
①进程正常终止;
②运行过程中发生异常而终止;
③进程主动请求阻塞(如 等待I/O)。
(2)当前运行的进程被动放弃处理机
①分给进程的时间片用完;
②有更紧急的事需要处理(如 I/O中断);
③有更高优先级的进程进入就绪队列。
而进程调度并不是什么时候都能进行的,有些时候不能进行进程调度与切换。
(1)在处理中断的过程中。由于中断处理过程很复杂,与硬件密切相关,因此很难做到在进行中断处理过程、处理到一半的时候,去进行进程切换的。
(2)进程在操作系统内核程序临界区中。(下文会具体讲)
(3)在原子操作过程中(原语)。原子操作不可中断,要一气呵成(如之前讲过的修改PCB中进程状态标志,并把PCB放到相应队列。而如果在执行到一半去进行进程调度与切换了,就有可能导致数据不匹配、安全隐患)
进程在操作系统内核程序临界区中不能进行调度与切换。(正确表述)
(2012年联考真题)进程处于临界区时不能进行处理机调度。(错误!)
临界资源:一个时间段内只允许一个进程使用的资源。各个进程需要互斥地访问临界资源。(你访问临界资源的时候我不能访问,我访问临界资源的时候你不能访问,这就是互斥的意思)
临界区:访问临界资源的那段代码。(因此,各个进程肯定也要互斥地进入临界区。因为“进入临界区” = 运行访问临界资源的代码 = 访问临界资源)
内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)。
当一个进程正处于内核程序临界区,而这个临界区是访问就绪队列的话。那么,在访问之前,它会把这个就绪队列上锁。
而如果说这个进程当前还没有退出内核程序临界区的话,也就意味着,这个临界资源并没有被解锁。那么,在没有解锁的情况下,如果我们要发生进程调度的话,那么进程调度是肯定要访问就绪队列这一临界资源的。而由于就绪队列这一临界资源此时还处于上锁的状态,所以,如果在这种情况下去进行进程调度的话,那么此时肯定是没办法顺利进行进程调度的。
所以,可以看到,对于内核程序临界区访问的这些临界资源,也就是这些内核数据结构而言。如果这些内核数据结构、这些临界资源被上锁了,并且没有被尽快释放的话,那么就有可能影响到操作系统内核其他的管理工作。
所以,我们在访问内核程序临界区的期间内,我们不能进行进程的调度和切换。我们必须让进程尽快执行完那些内核程序临界区的代码,之后尽快地把对临界资源上的锁给解除,只有这样其他的操作系统内核才能有序进行管理工作。
而另外一种情况。
假如这个进程访问的是一种普通的临界资源,比如是一个打印机。那么,它在访问打印机的时候,会先对打印机上锁。
打印机在打印完成之前,这个进程一直是在临界区内的,一直保持着对打印机的访问,由于这个进程没有退出临界区,所以打印机一直是上锁的状态。但是,又由于打印机是一种慢速的设备,如果这个情况下,不允许进程调度、切换的话,那么就需要这个进程一直空等着这个打印机的打印结束。同时在这个进程空等的时候,它还霸占着CPU,所以CPU一直是在空闲的状态,什么有用的也没有做。
所以,如果进程在访问普通的临界资源,在普通的临界区当中的话,这个情况下其实是应该进行进程调度的。因为普通的临界区访问的这些普通的临界资源,并不会直接地影响到操作系统内核的管理工作。所以,为了增加操作系统的并发度、增加CPU的利用率,那么在访问这些普通的临界区的时候,是可以进行进程调度和切换的。
至此,对于开头的两个表达,为什么一个对一个错,已经可以理解了。
接下来看下一个问题。
在有的操作系统里,它只允许进程主动地放弃处理机,而不允许这个进程在运行过程中被迫地被剥夺处理机资源。
但是还有的操作系统,是允许当有更紧急的任务需要处理时,能强行地剥夺当前运行进程的处理机资源的。
所以由“当前进程是否可以被强行剥夺处理机资源”这个问题,我们引出了下一个知识点——进程调度的方式。
(二)进程调度的方式
分为非剥夺调度方式(非抢占式)和剥夺调度方式(抢占式)。
非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。
剥夺调度方式,又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的过程,将处理机分配给更重要紧迫的那个进程。
可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统。
(三)进程的切换与过程
“狭义的进程调度”与“进程切换”的区别:
狭义的进程调度指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)
进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。
广义的进程调度包含了选择一个进程和进程切换两个步骤。
进程切换的过程主要完成了:
1、对原来运行进程各种数据的保存
2、对新的进程各种数据的恢复
(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块)
因此,我们可知,进程的切换是有代价的,是需要付出一定的时间代价的。所以不能简单的认为,进程切换越频繁、进程的并发度就越高。如果过于频繁地进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间花在了进程切换上,而真正用于执行进程的时间减少。