20 20
… …
78 78
5 98 39 39 70 3 18 76 15 18
习题
P103
2
10
11
UNIX的进程调度(P255)
UNIX的进程调度采用多级反馈队列调度算法,系统设置了多个就绪队列。进程调度程序执行时:
核心首先从处于“内存就绪”或“被剥夺”状态的进程中选择一个优先级最高的进程;
若系统中同时有多个进程都具有最高优先级,则核心将选择其中处于就绪状态最久的进程,将它从所在队列移出,恢复其上下文,使之执行;
仅当最高优先级队列中没有进程时,才从次高优先级队列中找出其队首进程,令它执行一个时间片后,又剥夺该进程的执行;
然后,再从优先级最高的队列中取出下一个就绪进程投入运行。
进程优先级的分类
在UNIX系统中,进程的优先级分为两类:
核心优先级。它又可进一步分为可中断和不可中断两类优先级。当一个软中断信号到达时,若进程正处于可中断优先级上睡眠,则进程立即被唤醒;若进程处于不可中断的优先级上,则进程继续睡眠。
用户优先级。又可分成n+1级,其中第0级为最高优先级,第n级的优先级最低。
进程优先级范围图
优先数的计算
UNIX System Ⅴ中的用户优先级是可变的,它随着占用CPU时间的增加而降低。核心每隔1秒钟便根据一个衰减函数来调整每个进程的最近CPU使用时间,并按下述公式对各进程重新计算其用户优先数(优先数越大优先级越低,优先数越小优先级越高)。
decay(CPU)=CPU/2
优先数=最近使用CPU的时间/2+基本用户优先数
基本用户优先数是一个设定值,即proc结构中的nice。
进程切换
在操作系统中,凡是要进行中断处理和进程调度时,都将涉及到进程上下文的保存和恢复。
中断时系统所保存和恢复的是同一个进程的上下文。而进程调度时则要进行进程上下文切换,此时系统所保存的是当前进程的上下文,而恢复的则是调度程序所选中进程的上下文。