1.调度的概念
为什么要CPU调度?
- 答:进程的数量往往多于CPU的个数。因此进程争用CPU的情况在所难免。CPU的调度是对CPU的分配。
- 若没有CPU1调度,则意味着要等到当前运行的进程执行完毕后,下一个进程才能执行,而时间情况中,进程时常需要等待一些外部设备的输入,而外部设备的速度与CPU相比是非常缓慢的,若让CPU总是等待外部设备,则是对CPU的资源是极大的浪费。
什么事调度研究的问题?
答:当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是调度研究的问题。
调度的三个层次:
->高级调度:按一定的原则从外存的作业后背队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才会撤销PCB。
->低级调度(进程调度/处理机调度):按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
->中级调度:按照某种策略决定将哪个处于挂起状态的进程重新调入内存。一个进程可能被多次调入、调出内存,因此中级调度发生的频率要比高级调度发生的频率更高。
对此解释:内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时再重新调入内存,暂时调到外存等待的进程被称为挂起状态。被挂起的进程PCB会被组织成挂起队列。
->进程的挂起态与七状态模型
总结:
2.调度的实现
2.1调度的时机
进程调度(低级调度):就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
需要进程调度与切换的情况
1.当前运行的进程主动放弃处理机:
- 进程正常终止
- 运行过程中发生异常而终止
- 进程主动请求阻塞(如等待I/O中断)
2.当前运行的进程被动放弃处理机:
- 分给进程时间片用完
- 有更紧急的事需要处理(I/O中断)
- 有更高优先级的进程进入就绪队列
不能进行进程调度与切换的情况:
- 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进程切换
- 进程在操作系统内核程序临界区中
- 在原子系统操作过程中(原语)。原子操作不可中断,要一气呵成(如之前讲过的修改PCB中进程状态标志,并把PCB放到相应队列)
临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临届资源。
临界区:访问临界资源的那段代码
内核程序临界区:用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程中PCB组成)
考题:进程处于临界区时不能进行处理机调度。X
应该是在操作系统内存程序临界区中不能进行调度与切换。
2.2调度的方式
非剥夺调度方式:只允许进程主动放弃处理机。在运行中即便有更紧急的任务达到,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
特点:系统开销小,但是无法及时处理紧急任务。
剥夺调度方式:又称抢占式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。
特点:可以优先处理更紧迫的进程。使用与分时操作系统、实时操作系统。
3.调度程序(调度器)
用于调度和分派CPU的组件称为调度程序,包括三部分:
排队器。将系统中的所有就绪进程按照一定算法排成一个或多个队列,负责将新就绪进程插入队列。
分派器。将CPU分配给调度算法选中的进程。
上下文切换器。切换CPU到另一个进程需要保存当前进程状态并恢复另一个进程的状态,这个任务称为上下文切换。有的处理器提供多个通用寄存器,上下文切换只需保存寄存器指针即可。
内核级线程与用户级线程调度
- 支持内核级线程调度的系统调度的对象是内核级线程,缺点是切换线程需要更大开销;
- 只支持用户级线程的系统调度的对象还是进程。
4.闲逛进程
idle
当就绪队列有新进程时立刻切换。
可以是0地址指令,指令执行周期末尾例行检查中断。能耗低。
5.调度算法的评价指标
为了在不同方面比较调度算法的性能,我们有以下性能指标:
- CPU利用率。忙碌的时间 / 总时间。有的题目还会要求计算某种设备的利用率。
- 系统吞吐率:单位时间完成的作业数量。
- 周转时间:从用户提交作业到作业被完成所用的时间。包括:等待高级调度时间+等待低级调度时间+总执行时间+等待I/O操作完成的时间。注意题目描述的侧重点
- 平均周转时间:多个作业周转时间之和 / 作业数。
- 带权周转时间(比值):作业周转时间 / 实际运行时间。(大于等于一)
- 平均带权周转时间(比值):多个作业带权周转时间之和 / 作业数。
- 等待时间。对于进程来说,是等待被服务的时间之和,不包括等待I/O操作完成时间。对于作业来说,是等待作业调度时间+等待CPU调度时间。
- 响应时间。用户从提出请求到系统首次产生响应所用的时间。
- 响应比。(等待时间+执行时间) / 执行时间。
6.调度算法
6.1先来先服务(FCFS)
根据例题思考
注意公式的理解
6.2短作业优先(SJF)
由于先到先服务对长作业友好,对短作业不友好,故想要对短作业优化,就采取SJF。
SJF分为抢占式和非抢占式。
非抢占式
抢占式
短作业(SJF)调度算法的平均等待时间、平均周转时间是最优的。
6.3高响应比优先算法 (HRRN)
为解决FCFS对于短作业不友好,SJF对长作业不友好,可能造成饥饿问题,想设计一个折中兼顾以上问题的算法。
优先考虑作业调度。
总栏:
下面就是适合交互式的
6.4时间片轮转(RR)
优先使用与分时系统。
时间片为2时
时间片为5时
6.5优先级调用算法
- 既可以用于作业调度,又可以用于进程调度。
- 既有抢占式,又有非抢占式
注:并不一定是优先数越大,优先级越高,具体看题意。
下面是非抢占式
抢占式
6.6多级反馈队列调度算法
针对上面五种,想做一个综合表现优秀平衡的算法。
6.7多级队列调度
队列之间可采取哪一个队列->固定优先级、时间片划分
- 固定优先级:高优先级空时,低优先级进程才能杯调度
- 时间片划分:如三个队列分配时间50%、40%、10%
队列中选择哪些进程->各队列中可采用不同的调度策略
- 系统进程队列采用优先级调度
- 交互式队列采用RR
- 批处理队列采用FCFS
总栏