操作系统是如何调度进程的呢

(一) 进程调度的任务:

(1)保存处理机的现场信息,如程序计数器、多个通用寄存器中的内容

(2)按照某种算法选取进程,将其状态改为运行状态

(3)把处理器分配给进程,由分派程序把处理器分配给该进程,将进程控制块内有关处理器现场的信息装入处理器相应的各个寄存器中,把处理器的控制权交给该进程,让他从上次断点处恢复运行

(二) 进程调度机制:

a)       排队器

将所有就绪的进程按照一定的策略排成一个或多个队列,以便调度进程能最快找到他们。

b)       分派器

取出进程调度程序选中的进程,进程间上下文切换,分配处理器

c)       上下文切换器

保存当前进程的上下文信息,保存到相应单元,装入分派程序的上下文;移出分派程序的上下文装入新选进程的现场信息。

(三) 进程调度方式:

a)       非抢占式

一旦处理机分配给某个进程后,就一直让其运行直到完成或者发生某事件而阻塞(如I/O请求)

b)       抢占式

允许调度程序根据某种规则,暂停某个正在执行的进程,由以下规则:优先权原则:优先级高的抢占当前进程;短进程优先原则;时间片原则:各进程按时间片轮转运行时,当正在执行的进程的时间片用完后,便停止该进程的执行而重新进行调度

(四) 进程调度算法:

a)       轮转调度算法

基于时间片轮转,系统将所有的就绪进程按照FCFS(先入先出)策略排成一个就绪队列,系统每隔一段时间产生一次中断,去激活进程调度进行调度,把cpu分给队首进程,执行一个时间片后再进行调度,保证队列中的所有进程在确定时间内都能获得一个时间片的处理机时间。

切换时机:(1)时间片未用完,进程便完成;(2)时间片用完,终端处理程序被激活,进程若未完成,送完队列尾部。

b)       优先级调度算法

(1)    非抢占式

(2)    抢占式

更高优先级的进程可抢断当前进程

c)       多队列调度算法

将就绪队列拆分为若干个,不同类型的进程固定分配在不同的就绪队列,不同的队列采用不同的调度算法,同一队列的进程可设置不同的优先级。

d)       多级反馈队列调度算法

若未指明进程长度,短进程优先和基于长度的抢占式调度算法都无法使用。而多级反馈队列调度算法事先不需知道各个进程所需的执行时间。

(1)    调度机制

设置多个就绪队列,每个队列赋予不同的优先级(递减);每个队列采用FCFS算法,新进程进入时首先放入第一队列末尾,若第一个时间结束未完成,将其转入第二队列末尾…….;按队列优先级调度,仅当前一队列空闲时才调用下一队列。

e)       基于公平原则的调度算法

1)     保证调度算法

有n个相同类型的进程,保证每个进程都获得相同的处理机时间1/n

过程:跟踪每个进程自创建以来已经执行的处理时间;计算每个进程应获得的时间,计算进程获得处理机的比率,进程实际执行的处理时间比上应获得处理机时间;比较各进程获得的处理机时间比率;调度程序选择比率小的进程分配处理机。

2)     公平分享调度算法

所有用户获得相同的处理机时间,或所要求的时间比例,比如用户1:ABCD,用户2:E,执行以下调度序列:AEBECEDE…….;或希望用户1获得处理机的时间是用户2的2倍,则:ABECDE……

你可能感兴趣的:(调度,操作系统)