Operating System -- Chapter 5
CPU Scheduling
Basic Concepts
多道程序设计的目的是在任何时候都有某些进程在运行。
CPU-I/O Burst Cycle
CPU 区间 (CPU burst)开始,在这之后是I/O区间
CPU Scheduler
Preemptive Scheduling
CPU调度决策可在如下四种环境下发生:
- 当一个进程运行状态切换到等待状态(running -> wait)(例如,I/O请求、调用wait等待子进程的终止)
- 当一个进程从运行状态切换到就绪状态(running -> ready)(例如,当出现中断)
- 当一个进程从等待状态切换到就绪状态(wait -> ready)(例如,I/O完成)
- 当一个进程终止(running -> terminal)
对于1和4,没有选择而只有调度。一个新进程(如果就绪队列中已有一个进程存在)必须被执行。对于2和3,可以进行选择。
非抢占的或者说协作的 ;否则为抢占的
Dispatcher
分派程序是一个模块,用来将CPU的控制交给短期调度程序选择的进程。功能包括:
- 切换上下文
- 切换到用户模式
- 跳转到用户程序的合适位置,以重新启动程序
分派延迟
Scheduling Criteria
- CPU utilization:CPU使用率
- Throughput:吞吐量,一个时间单元内完成进程的数量
- Turnaround time:周转时间,从进程提交到进程完成的时间,为所有时间段之和,包括等待进入内存、在就绪队列中等待、在CPU上执行和I/O执行
- Waiting time:等待时间,在就绪队列中等待所花费的时间和
- Response time:响应时间,从提交请求到产生响应的时间
Scheduling Algorithms
First-come-first-serve(FCFS) scheduling
先到先得
Shortest-Job-First (SJF) Scheduling
最短下一个CPU区间
SJF算法的真正困难是如何知道下一个CPU区间的长度。对于批处理系统的长期(作业)调度,可以将用户提交作业时所指定的进程时间极限作为长度。
以下我没看懂,所以暂时贴出来,引用标注一下
P140
近似SJF调度
抢占SJF或者最短剩余时间优先调度
Priority Scheduling
每个进程都有一个优先级相关联。SJF是优先调度算法的一个特例,只是以时间作为优先级的判断标准。
无穷阻塞或饥饿
老化
Round-robin scheduling
轮转法调度算法是专门为分时系统设计的。它类似于FCFS算法,但是增加了抢占以切换进程。定义一个较小的时间单元,时间片
处理器共享
Multilevel Queue
多级队列调度算法将就绪队列分成多个独立队列。根据进程的属性,如内存大小、进程优先级、进程类型等,一个进程被永久地分到一个队列。每个队列有自己的调度算法。如前台进程采用RR算法调度,后台采用FCFS算法调度。另外,队列之间必须有调度,通常采用固定优先级抢占制度
Multilevel Feedback Queue
多级反馈队列调度允许进程在队列之间移动。如果进程使用过多的CPU时间,那么它将会被移动到更低的优先级队列中去,在较低优先级队列中等待时间过长的程序将会被移到更高的优先级队列。
Multiple-Processor Scheduling
···