操作系统 调度与接口 (二)

二、其他调度算法

1、时间片轮转(Round-Robin)(RR)调度算法

它用于进程调度,是分时系统中采用的主要调度算法。进程调度程序总是选择就绪队列中的第一个进程,允许其占有处理机一个时间片的时间。 当执行的时间片用完时,调度程序便停止该程序的执行,并将它送到就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片处理机执行时间。

在RR算法中,时间片的大小对系统性能有很大的影响。

 

 

 2、优先权调度算法

静态优先权在进程创建时确定,且在整个生命期中保持不变。

确定进程优先权的依据有:

进程类型

进程对资源的需求

根据用户要求

动态优先权是指在创建进程时所赋予的优先权,可以随进程的推进而改变,以便获得更好的调度性能。

在UNIX系统中,一类是因等待磁盘I/O、等待缓冲器等不可中断优先权最高,而另一类因等待TTY输入输出等可中断优先权其次。处于用户态的优先权相对较低,用户态优先权又分为n+1级优先权。优先数为0级的优先权最高,优先数为n级的优先权最低。

用户态优先权是可变的,它随着占用CPU时间的增加而降低。核心每隔1秒钟便按下述公式对个进程重新计算其用户优先数(优先数与优先权成反比关系)

优先数=最近使用CPU的时间/2+基本用户优先数

3、多级队列调度算法

多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个子队列,所有的作业(或进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。

对多级就绪队列调度策略有两种:

一种是各就绪队列按进程性质赋予不同的优先权,这样,只有较高优先权的就绪队列都空时才调度最低优先权就绪队列的进程。

另一种调度就绪队列的方式是为每个队列分配一定的占用CPU时间的比例。

4、多级反馈队列调度算法

多级反馈队列调度算法,不必事先知道各种进程所需的执行时间。

WindosNT采用可抢占动态优先级多级就绪队列调度算法。NT执行体支持32级优先级,并将他们分成两类,实时优先级(16-31)和可变优先级(1-15),0级为系统保留。每个优先级一个就绪队列,高序号队列为高优先级,调度程序从高优先级的队列开始往下找,如高优先级队列为空时才再往下找,直至找到一个线程。

各个就绪队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的执行时间片就规定得越小。

当一个线程执行完一个完整的时间段后被中断抢占处理器,而被抢占的线程优先级降低一级而进入下级就绪队列,如此继续,直至降到线程的基本优先级。

而一个线程从阻塞态变为就绪态时要提高优先级,提高的幅度与等待的事件有关。如等待键盘输入所提高的幅度要大于等待磁盘I/O。在NT中,交互式线程处于高优先级,I/O型型线程处于中间优先级,计算型线程处于低优先级,系统还设置了一个空闲线程,其优先级为0,是优先级最低的线程,只要处理空闲,就执行该线程。

 

三、实时调度

1、实现实时调度的基本条件

a.提供必要的调度信息

1)就绪时间

2)开始/完成截止时间

3)处理时间

4)资源要求

5)优先级

b.系统处理能力强

当只有一个cpu时:

 当有多个CPU时:

 Ci为处理时间,Pi为周期时间(基于周期性实时任务)

c.采用抢占调度方式

剥夺方式:一般都采用此种方式

非剥夺方式(如果能预知任务的开始截止时间):一般应使实时任务较小,以及时放弃CPU

d.具有快速切换机制

具有快速响应外部中断能力

快速任务分派

2、实时调度方式

非抢占式调度算法

  时间片轮转             秒级

  非抢占式优先权(协同)    秒~毫秒级

抢占式调度算法

  时钟中断抢占优先权    毫秒级

时钟中断基于抢占点抢占

  立即抢占           毫秒~微妙级

立即抢占只要不在临界区即抢占(中断引发)

 

 3、常用的几种实时调度算法

a.最早截止时间优先EDF(earliest  deadline  first )算法

根据任务的截止时间来确定任务的优先级

截止时间越早,优先级越高

可以是抢占式或非抢占式

 b.最低松弛度优先LLF算法

松弛度:

若A进程需在200ms时完成,其本身运行需要100ms,当前时刻是10ms,则A的松弛度为:200-100-10=90

主要用于可抢占的调度方式中

例:A每20ms做一次,做一次10ms,B每50ms做一次,做一次25ms

 

 五、用户接口

用户接口分类

作业控制级接口:提供对作业的控制功能。最初是命令驱动方式,现在多采用图形及视窗操作环境。

程序级接口:系统专门为用户设置的获得操作系统服务的一种途径,通常由系统调用组成,编程时常用。

 程序级接口(系统功能调用)

系统功能调用是操作系统提供给程设设计人员的一种服务。程序设计人员在编写程序时,可以利用系统调用来请求操作系统的服务。

目的:方便用户使用。

 系统调用原理

系统中的程序类型及状态

 特权指令:一类只能在管态下运行而不能在算态下运行的特殊指令。

不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。

访管指令:本身是一条特殊的指令,但不是特权指令。

基本功能:自愿进管,能引起访管中断。

 系统功能调用:就是用户在程序中使用“访管指令”调用由操作系统提供的子功能集合。其中每一个系统子功能称为一个系统调用命令,也叫广义指令。

系统功能调用与普通过程调用的区别

系统调用本质上是一种过程调用,但它是一种特殊的过程调用,与一般用户程序中的过程调用有明显的区别。

1、运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。

2、调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向响应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。

3、返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析--是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。

 

原文地址:https://www.cnblogs.com/fate-/p/13206557.html