> 文章列表 > 进程调度算法(操作系统)

进程调度算法(操作系统)

进程调度算法(操作系统)

1、 前置知识

1.1 非抢占式与抢占式

1.1.1 非抢占式

非抢占式指的是一个线程的在执行期间,另一个线程的到达,尽管各项标准都优于执行线程(例如优先级高于当前执行线程),也不会抢占CPU资源,会耐心的等待该线程执行完毕,再尝试获取CPU资源(有点公平锁的味道)。

1.1.2 抢占式

抢占式指的是一个线程再执行期间,另一个线程的到达会影响该线程的执行,例如到达线程优先级高于执行线程,那它会抢占CPU资源(有点非公平锁的味道)。

1.2 饥饿现象

是否存在进程不被分配资源。

1.3 文中例子:

进程 到达时间 运行时间 优先级
P1 0 7 1
P2 2 4 2
P3 4 1 3
P4 5 4 2

1.4 涉及的公式:

1. 周转时间=完成时间-到达时间

2. 带权周转时间=周转时间/运转时间

3. 等待时间=周转时间-运行时间

 

2. 进程调度算法

2.1 先来先服务

算法规则:按照进程到达的先后顺序进行服务

是否可抢占:非抢占式算法

调度顺序:P1->P2->P3->P4

优点:公平、算法实现简单

缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即:对长作业有利,对短作业不利

是否会导致饥饿:不会

2.2 短作业优先

算法规则:按照执行时间的长度进行服务

是否可抢占:非抢占式算法、抢占式算法  (两个版本都有)

2.2.1 非抢占式

调度顺序:P1->P3->P2->P4

2.2.2 抢占式

调度顺序:P1->P2->P3->P2->P4->P1

调度顺序分析:()里面表示还需要多少执行时间

0时刻(P1到达):P1(7)

2时刻(P2到达):P1(5)、P2(4)

4时刻(P3到达):P1(5)、P2(2)、P3(1)

5时刻(P3完成、P4到达):P1(5)、P2(2)、P4(4)

7时刻(P2完成):P1(5)、P4(4)

11时刻(P4完成):P1(5)

2.2.3 总结

优点:执行时间短的进程收益

缺点:对执行时间长的进程不利,如果有陆续的执行时间比较短的进程进来,执行时间长的进程可能永远得不到服务;

是否会导致饥饿:会,如果有陆续的执行时间比较短的进程进来,执行时间长的进程可能永远得不到服务,这种现象为"饥饿"现象。

2.3 高响应比优先

调度顺序:P1->P3->P2->P4

调度顺序分析:()里面表示进程的响应比

0时刻:只有P1到达就绪队列,P1上处理机

7时刻(P1完成):就绪队列有P2((5+4)/4=2.25)、P3((3+1)/1=4)、P4((2+4)/4=1.5)

8时刻(P3完成):P2((6+4)/4=2.5)、P4((3+4)/4=1.75)

12时刻(P2完成):P4((7+4)/4=2.75)

响应比公式:(等待时间+要求服务的时间)/ 要求服务的时间

是否可抢占:非抢占式算法

优点:综合考虑了等待时间和要求服务的时间,等待时间相同时,要求服务时间端的优先(短作业优先的优点),要求服务时间相同时,等待时间长的优先(先到先服务的优点)。对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题。

是否会导致饥饿:不会

2.4 时间片轮转

算法规则:按照个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如:100ms),若进程未在一个时间片内执行完成,则剥夺处理机,将进程重新放到就绪队列的队尾。

是否可抢占:抢占式算法

优点:公平,响应快,适用于分时操作系统

缺点:由于高频率的进程切换,因此有一定的开销;没有区分任务的紧急程度

是否会导致饥饿:不会

2.5 优先级调度

2.5.1 非抢占式

调度顺序:P1->P3->P2->P4

2.5.2 抢占式

调度顺序:P1->P2->P3->P2->P4->P1

调度顺序分析:与响应比优先一样逻辑,只不过那里比较的是响应比,这里比较的是优先级

静态优先级策略:

【1】系统进程优先级高于用于进程

【2】前台进程优先级高于后台进程

【3】重点关注I/O操作频繁的进程--提升其优先级

动态优先级策略(从追求公平、提升资源利用率等角度考虑):

【1】如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级

【2】如果某进程占用处理机运行了很长时间,则可以适当降低其优先级

【3】如果发现一个进程需要频繁的进行I/O操作,则可以适当提升其优先级

是否可抢占:非抢占式算法、抢占式算法  (两个版本都有)

优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各个进程的偏好程度。

缺点:如果源源不断的有高优先级的进程进来,则可能会导致饥饿线程

是否会导致饥饿:

2.6 多级反馈队列调度

算法规则:

【1】设置多级就绪队列,各级队列优先级从高到低,时间片从小到大;

【2】新进程到达时想进入第1级队列,按先到先服务原则排队等待被分配时间片,若用完时间片进程还没结束,则进程进入下一级队列队尾;

【3】只有第k级队列为空时,才会为k+1级队头的进程分配时间片

是否可抢占:抢占式算法 (在k级运行的进程,如果此时有新的进程进入{1至k-1级},则会先运行该进程,因为该进程的优先级较高)

优点:

【1】对各类型进程相对公平(先到先服务的优点)

【2】每个新到达的进程都可以很快的就得到响应(时间片轮转的优点);

【3】短进程只用较少的时间就可以完成(短作业优先的优点);

【4】不必实现估计进程的运行时间,可以灵活地调整各类进程的偏好程度(优先级调度的优点)

是否会导致饥饿:会,如果有源源不断的新进程进来会导致饥饿