2.4 调度
1.许多适用进程调度的方法同样适用于线程调度。内核管理线程的时候,调度经常是按线程级别的,与线程所属的进程基本或者根本没有关联。
2.进程切换(上下文切换)代价较高。先从用户态切到内核态,然后保存当前进程状态,接着运行调度算法选定一个新进程,再把新进程内存映像重新装入MMU,最后运行新进程。
进程切换还要使整个内存高速缓存失效,强迫缓存从内存中动态重新装入两次(进入内核一次,离开内核一次)。
3.计算密集型:进程大多数时间在CPU计算上
I/O密集型:大多数时间在等待I/O
4.何时调度?
(1)创建一个新进程后,运行父进程还是子进程,因为两者都在就绪状态。
(2)一个进程退出时。
(3)一个进程被阻塞时。
(4)一个I/O中断发生时。
5.非抢占式调度算法:进程运行至被阻塞或自动释放CPU,时钟中断发生时不会进行调度
抢占式调度算法:进程运行某个固定时段最大值,超出则挂起
6.三种环境:(1)批处理 (2)交互式 (3)实时
7. 批处理系统的调度算法
(1)先来先服务(FCFS)=======》非抢占式
有一个就绪进程单一队列,顺序运行。
优点:方便
缺点:效率低,对长作业比较有利但对短作业不利。
有利于CPU密集型,不利于I/O密集型。
(2)最短作业优先(SJF)=======》非抢占式
适用于运行时间可以预知的,时间越短越快执行。
在到达时间一样时,最短作业优先平均等待时间是最优的。
SJF缺点:对长作业非常不利
(3)最短剩余时间优先(SRTF)=====》抢占式
总是选择剩余运行时间最短的运行。当一个新作业到达,与当前进程剩余时间比较,如果更多则等待,如果更少则当前进程被挂起。
优点:可以使新的短作业获得良好的服务
(4)高响应比优先调度算法(HRRF) (FCFS与SJF的一种综合平衡)
每次选响应比最高的作业投入运行
优点:
- 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
- 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
- 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。
8.交互式系统中的调度(PC等)
(1)轮换调度(时间片轮转调度)(RR)
每个进程被分配时间片,时间片结束还在运行则被挂起,如果提前结束则CPU立即切换。
时间片太短会导致过多的进程切换,降低CPU效率。
时间片太长可能引起短的交互请求响应时间太长。
(2)优先级调度
每个进程有一个优先级,优先级最高的可运行进程先运行。
为了防止高优先级进程一直运行,可以在每个时间滴答后降低当前进程优先级,如果导致它次于次高优先级进程就进行上下文切换。
或者每个进程同样有一个允许运行的最大时间片。
- 非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。
- 剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。
优先级可以静态赋予(提前设置好),也可以动态赋予。
如I/O密集型进程的优先级可以设为1/f,f为该进程在上一时间片所占的比例。上次比例越少,则优先级越高。
(1)+(2)可以实现在各类间优先级调度,而各类进程内部采用轮转调度。
(3)多级队列 (1)+(2) 的再进化版
为CPU密集型进程设置较长时间片比频繁分给他们很短的时间片更高效。
属于最高优先级类的进程运行一个时间片,次高优先级类进程运行两个时间片,再次一级四个,以此类推。随着进程优先级不断降低,运行频度逐渐放慢,从而为短的交互进程让出CPU。
伯克利制造的XDS 940系统有四个优先级类:终端,I/O,短时间片,长时间片。
终端:一个一直因等待终端输入而阻塞的进程被唤醒进入就绪状态时
I/O:一个在等待磁盘块数据的进程就绪时
短时间片:进程在时间片用完时仍为就绪时
长时间片:多次用完时间片而从未因终端或其他I/O原因阻塞时
优点:
· 终端型作业用户:短作业优先。
· 短批处理作业用户:周转时间较短。
· 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
(4)最短进程优先
首先运行最短作业来使响应时间最短
推测运行时间方法:当前测量值与先前估计值加权平均得到下一个估计值
(5)保证调度
保证每个进程同样CPU时间。计算每个进程真正获得的CPU时间与应得CPU时间比值,优先调用比值低的进程。
(6)**调度
拥有**f份额的进程大约得到系统资源f份额,概率论。
(7)公平分享调度
不是基于进程,而是先看每个用户分配到的CPU时间,再在用户内部分配。
9.实时系统中的调度
分为硬实时(必须满足绝对的截止时间)和软实时(可以偶尔容忍)
实时系统事件可以分为周期性与非周期性
如果一个系统要相应m个周期性事件流,第i个事件周期Pi,需要CPU Ci秒处理,则可以处理负载的条件是
此时称实时系统为可调度的。
10. 将调度机制与调度策略分离。
例如内核适用优先级调度算法,但提供一条可供进程设置优先级的系统调用。这样父进程本身不参与调度但可以控制调度子进程的细节。调度机制位于内核,但调度策略由用户进程决定。
11.线程调度
用户级线程与内核级线程差别在于性能。
用户级的线程切换需要少量机器指令,而内核级需要完整上下文切换,且用户级线程可以使用专为应用程序定制的线程调度程序。但另一方面用户级又可能因阻塞而将整个进程挂起。
线程切换如果切到属于同一个进程的代价要低于切到不同进程的。内核对此了解,并可以运用这些信息来进行决定。
2018/03/12 13:06