处理机调度
调度的概念
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
例如:在银行中普通客户需要取票排队而VIP客户可以优先服务。
调度的3个层次
高级调度
首先理解一下作业的概念,作业并不是学生时代时的作业,而是一个具体的任务
。用户用户向系统提交一个作业 ≈ 用户让操作系统启动一个程序(来处理一个具体的任务)
高级调度的概念
高级调度
(作业调度)。按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次
。作业调入时会建立PCB,调出时才撤销PCB。
中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存。一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
当内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时再重新调入内存。
暂时调到外存等待的进程状态为挂起状态。被挂起的进程PCB会被组织成挂起队列
低级调度:低级调度(进程调度/处理机调度)—— 按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
进程调度的频率很高,一般几十毫秒一次。
三层调度的联系和对比
要做什么 | 调度发生在… | 发生频率 | 对进程状态的影响 | |
---|---|---|---|---|
高级调度(作业调度) | 按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程 | 外存->内存(面向作业) | 最低 | 无->创建态->就绪态 |
中级调度 (内存调度) | 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存 | 外存->内存(面向进程) | 中等 | 挂起态->就绪态(阻塞挂起->阻塞态) |
低级调度(进程调度) | 按照某种规则,从就绪队列中选择一个进程为其分配处理机 | 内存->CPU | 最高 | 就绪态->运行态 |
切换与过程调度方式
进程调度的时机
- 进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
需要进行进程调度与切换的情况
1.当前运行的进程主动放弃处理机
- 进程正常终止
- 运行过程中发生异常而终止
- 进程主动请求阻塞(如 等待I/O)
2.当前运行的进程被动放弃处理机
- 分给进程的时间片用完
- 有更紧急的事需要处理(如 I/O中断)
- 有更高优先级的进程进入就绪队列
还有不能进行进程调度与切换的情况:
- 在
处理中断的过程中
。中断处理过程复杂,与硬件密切相关,很难
做到在中断处理过程中进行进程切换。 - 进程在
操作系统内核程序临界区
中。 - 在
原子操作过程中
(原语)。原子操作不可中断,要一气呵成(如之前讲过的修改PCB中进程状态标志,并把PCB放到相应队列)
注意下面的说法:
临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
临界区:访问临界资源的那段代码。
进程调度的方式
1.非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
非抢占方式的特点:实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统
2.剥夺调度方式,