计算机操作系统(三)

处理机调度

一、处理机调度层次

处理机调度分为三个层次,分别是高级调度(作业调度)、中级调度(中程调度)、低级调度(进程调度)。

高级调度(作业调度)

作业调度又称高级调度、宏观调度。是将外存中处于后备队列的那些作业调入内存
作业是一个比程序更为广泛的概念,通常是指计算机完成一次业务需要做的全部操作。
一个作业通常包括程序、数据、说明书三部分。一个作业至少包含一个程序。作业控制块JCB是作业在系统中存在的标志。

中级调度(中程调度)

引入中级调度的目的是为了提高系统资源的利用率以及提高系统的吞吐量。中级调度会把那些暂时不能运行的进程调到外存,把此时进程的状态称为挂起。中级调度实际就是存储器管理中的对换功能

进程调度

进程调度又称为低级调度,它决定了哪个就绪的进程能够获得cpu执行权。进程调度的方式有两种:①非抢占式、②抢占式
抢占式基于的原则有三个:优先权原则、短程优先原则、时间片原则

二、调度算法的准则

面向用户的准则

1.周转时间
周转时间是指作业提交直到作业完成的这段时间。
在这里插入图片描述

2.响应时间
响应时间是指用户按下键盘直到计算机第一次响应的时间。响应时间越快,用户体验越好。
3.截止时间
截止时间是指任务必须开始执行或者必须执行完毕的时间,在实时系统中截止时间常见。
4.优先权原则
由于是面向用户,所以用户越紧急的任务优先权越高,应当被先处理。

面向系统的准则

吞吐量
吞吐量是指在单位时间内系统所完成的作业数,这是用于评价批处理系统性能的另一个重要指标,因而是选择批处理作业调度的重要准则。

利用率
对于大、中型多用户系统,由于CPU价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标,因此在大、中型系统中,在选择调度方式和算法时,应考虑到这一准则。而对于单用户微机或某些实时系统,此准则就不那么重要。

三、调度算法

调度算法是指根据系统规定的资源分配策略分配资源。

先来先服务算法FCFS

顾名思义,先来的作业先被服务,这个算法有利于长作业,不利于短作业。因为长作业cpu繁忙,短作业IO繁忙。

下图是使用FCFS算法的进程各阶段时间耗费情况
(带权周转时间=周转时间/服务时间)
在这里插入图片描述

短作业/短进程优先调度算法SJF/SPF

该算法是从后备队列中选取预估运行时间最短的进程调入内存运行。
在这里插入图片描述
短程优先算法有一个明显的缺点:对长作业不利,尤其是在长作业非常重要且紧急的情况下,会导致用户体验降低。

高优先权调度算法

优先权调度算法可分为:非抢占式优先权算法、抢占式优先权调度算法。
对于最高优先权调度算法,其关键在于它使用静态优先权还是动态优先权,以及如何确定进程优先权。

1.静态优先权
静态优先权是在创建作业或进程时确定的,且在整个运行期间保持不变。确定作业或进程优先权的依据:进程类型、进程对资源的需求和用户需求。

2.动态优先权
动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
在这里插入图片描述
这种算法即为高响应比优先调度算法( Highest Response-ratio Next,HRN)它既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折中。但每次要进行调度之前,都须先做响应比的计算,这会增加系统开销。

基于时间片的轮转调度算法

时间片轮转法
其基本思想是为每一个进程分配一个时间段,该时间段被称为时间片,即允许该进程运行的时间。每个进程只能依次循环轮流运行
如果时间片结束时进程还在运行,CPU将剥夺该进程的使用权转而将CPU分配给另一个进程。
如果进程在时间片结束之前阻塞或结束,CPU当即进行切换。
为了实现进程的循环执行,将每次被中止运行的进程存人就绪队列的末尾,同时将CCPU分配给就绪队列中的队首进程。
该算法是一种简单而又公平的算法,使用非常广泛。

多级反馈队列调度算法
前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过
程是:
在这里插入图片描述
应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。

当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列, 如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。

仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~ (i-1) 队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进人优先权较高的队列(第1~ (i-1) 中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

练习题:
在这里插入图片描述

四、死锁

死锁是指多个进程为了争夺资源而造成的一种僵局,当进程处于这种情况时,除非外力干扰,否则无法再向前推进。

死锁产生的原因

竞争资源
当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。

进程间推进顺序非法
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。

死锁产生的必要条件

死锁产生必须同时满足下面这四个条件:
互斥条件
互斥是指一个进程正在使用某个资源,另外一个进程也要使用这个资源,但是必须等待上一个进程执行完成并释放资源之后才能拿到该资源。

请求和保持条件
指进程A已经获得了一个资源a,但是还需要另外一个资源b,而另外的资源b又被进程B占有,此时进程A阻塞,但是A又不释放自己手中的资源a

不剥夺条件
指进程在执行完成之前不会释放自己手中的资源,别人也无法剥夺。

环路等待条件
在这里插入图片描述

死锁的处理

预防死锁
这是一种较简单和直观的事先预防的方法。该方法是通过设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁。

避免死锁
该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进人不安全状态,从而避免发生死锁。
最有代表性的避免死锁的算法是银行家算法。

检测死锁
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进人不安全区,而是允许系统在运行过程中发生死锁。但可通过系统所设置的检测机制,及时地检测出.死锁的发生,并精确地确定与死锁有关的进程和资源;然后,采取适当措施,从系统中将已发生的死锁清除掉。

解除死锁
当发现有进程死锁时,便应立即把它们从死锁状态中解脱出来。死锁的常用解除方法有两种:剥夺资源撤销进程

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值