进程调度的时机
定义:操作系统按照某种算法从就绪队列中选择1个进程为其分配CPU
进程调度和切换的情况:
一、进程主动放弃:
- 进程正常终止
- 进程运行过程中发生异常
- 进程主动进入阻塞状态(等待I/O)
二、进程被动放弃
- 操作系统分给进程的时间片用完
- 有更高优先级的进程进入就绪队列
- CPU有更紧急的事情需要处理(中断处理)
我们理解的进程调度:包含了从就绪队列中选择一个进程来使用当前的CPU,同时需要进行进程切换:即一个进程让出CPU,让另一个进程来使用。
进程切换的过程包含了以下两个步骤:
- 对原来进程各自数据的保存(将数据保存在PCB控制块中)
- 对新的进程各自数据的恢复(将PCB中的数据重新恢复到相对应的寄存器中。)
进程调度的方式:
- 非抢占式调度:只允许进程主动放弃CPU,即使有更紧急的任务到达,当前进程依旧会使用CPU,直到该进程终止或者主动进入阻塞状态。
- 抢占式调度:当一个进程被分配给CPU之后,如果时间片用完,或者有更重要紧急的进程需要使用CPU,那么当前进程会被终止,CPU资源会被分配给更重要紧急的进程。
以上两者方式,后者的灵活性更高,适用于分时操作系统和实时操作系统,前者使用于早期的批处理系统。
进程不能调度的情况
- 在处理中断的过程中,是不能发生进程的切换和调度的。
- 进程处于操作系统内核程序的临界区中。
临界区的定义:一段时间只允许一个进程访问该区域的资源,所以进程之间需要互斥的访问临界资源。
临界资源:访问临界资源的那段代码
内核程序临界区:访问内核的数据结构的,比如进程的就绪队列。 - 在原子操作的过程中,它是不可中断,一气呵成的。