今天看了处理机调度,对三级调度以及一些调度算法懂了一些,当然还有很多的疑惑.
讲调度之前先说说操作系统的分类,操作系统分类大致有,批处理操作系统.实时操作系统,分时操作系统,通用操作系统.网络操作系统.分布式操作系统.这里我们只是简单提下前三个...
操作系统最基本的分类:
1. 批处理操作系统,分时操作系统和实时操作系统.(额.英文简称忘记了.好吧.).批处理,看名字就是以批为单位处理作业.实际上就是这个意思.
2. 实时OS中,实时的意思是对响应时间有严格的要求.当外部事件和数据产生时,要以足够快的速度处理完成.实时可以分为硬实时和软实时.
3. 分时操作系统就是将处理机的运行事件分成很多个片,使作业可以轮流执行..
这时还是要罗嗦一个很重要的概念,作业(job).(恩,不是写在本子上全班只有一个模板然后就为了换一个阅字的那种).作业是一个比程序更加广泛的概念,不仅有代码数据,还应该有一个作业说明书.为什么说他很重要呢,因为批处理系统中是以作业为单位从外存往内存中调入数据的.和进程类似,每个作业也有一个作业控制块(JCB).这也是作业存在于系统中的唯一标志.
处理机的三级调度,按频率从高到低依次列出来,分别是低级调度,中级调度和高级调度(它们的名字异常的好记).
1. 低级调度:又称为进程调度,此种调度频率最高.也是最基本的调度.批处理,分时和实时OS中都必须配置这级调度.这级调度是决定就绪队列中等待执行的众多进程中哪一个获得处理机资源,进程调度有两种方式,抢占方式和非抢占方式.抢占方式是指一个任务执行时.不会时钟中断而释放处理机资源.非抢占方式则与之相反.两种方式各有优势..
2. 中级调度:又称为交换调度,中程调度.(总之名字有很多个,当然这个不是重点.)这种调度就是将内存中暂时不用的进程移至外存上.拜其所赐,进程的状态有多了一种.驻外存就绪状态或者是挂起状态.
3. 高级调度:又称为作业调度.这种调度频率最低,差不多几分钟才一次.系统不能无休止的接收作业,也不能没有顺序的接收作业,这样效率会很低.所以高级调度就来控制系统接纳作业的数量和接纳哪些作业.
接下来就说下调度模型..
当系统中只有进程调度,进程在系统中只有三种状态,一个时钟周期执行完了一个进程,完成状态.一个时钟周期没有执行完.接着进入就绪队列等待.申请资源.进入阻塞队列.
当引入了高级进程后,进程还是刚才的状态.高级调度程序从外存上调一批作业进入内存.创建进程,进程调度..进程就绪队列中暂时不用的进程还是会占据资源.由于高级调度程序调了一批作业到内存.就绪队列和阻塞队列可能会变得很长,很影响进程调度的效率.所以需要设置多个阻塞队列和就绪队列..
在引入了中级调度之后,中级调度程序可以将就绪队列中暂时不用的进程移至外存.拜其所赐,进程又多了一种状态,驻外存就绪状态.也就是前面提过的静态就绪状态.等到需要用的时候,再由中级调度程序移至内存..
处理机三级调度和调度模型就说到这里.
说调度算法之前先说下优先权,优先权分为静态优先权和动态优先权.静态优先权就是作业一直到执行完成,优先权都不会改变.这种优先权简单但是不严谨,可能会出现低优先权的作业一直都在等待.动态优先权就是,优先级会随着等待时间的增加或进程的推进渐渐改变..改变不只是增加还有可能是在减少..
处理器调度中有一些经典的调度算法,当然现代处理器使用的不是下面提及的某一中..这些调度算法都是非常具有代表性的.先是最基本的调度算法..调度算法也是看系统类型的,不同类型的系统,调度算法侧重点不同..
调度算法是服务程序,服务程序总是简单的比难得使用性好,用户希望的是处理机处理用户程序资源越多越好..
先来先服务调度算法(First Come First Served.. FCFS):有点像队列一样的.把后备队列中一个或者若干个任务调入内存执行,执行完或者是申请资源而阻塞,才会让出处理机资源.就绪队列是按进入内存先后时间排序的.这种算法很简单..不用多花资源去给就绪队列排序.但是实用性不是很强.适用于 CPU繁忙型作业.不适合I/O繁忙型作业,没有考虑作业的紧迫程度,紧急任务不能及时执行..
短作业优先调度算法.(Shortest Job First,SJF),每次调度程序从后备队列中选一个或者多个运行时间最短的作业,调入内存去执行.这种调度算法也很简单.这种算法的不利于长作业,每次选择最短的作业,有可能长作业一直不能执行,算法没有考虑作业紧迫程度.实用性比较强..稍稍改造就可以是一个很优秀的调度算法.
高优先权优先算法(FPF):调度程序从后备队列中选择优先级最高的一个或者若干个作业调入内存.高优先权优先算法可以分为两种. 抢占式优先权短发和非抢占式优先权算法.抢占式优先权算法是指任务一直抢占着处理机资源.不因为时钟中断而停止.这种算法适用于批处理系统或者要求不严格的实时系统中.非抢占式优先权算法,系统把处理机给优先权最高的任务.若执行期间还有比这个任务优先权更高的任务调入内存,则立即执行优先权更高的任务.这种算法很好的满足了紧迫任务的处理.适用于要求较为严格的实时系统中.
时间片轮转算法:就绪进程按先来先服务的原则排程一个队列,每次调度时候,把CPU分配给队首进程,每个进程只执行一个时间片..此时就要老绿一个很重要的问题,时间片大小的选择,时间片太长的话就和先来先服务算法一样了.时间片太短的话,要不停地进行上下文切换和中断,很浪费资源...
多级反馈队列调度算法:设置多个就绪队列,各个队列优先级不同..不同的优先级有不同的时间片.优先级越高时间片越短..当一个新任务进入内存中,先放在第一队列队尾,按FCFS规则等待执行,若是执行完了则撤出去,若是一个时间片没有执行完,则排在第二队列的队尾.以此类推.只有上一级队列执行完(队列为空)时,才能执行下一队列..
基本的调度算法说完了.接下来说下实时调度算法..实时系统对任务的执行时间要求比较严格些,上面的调度算法并不能满足实时系统的要求..要求严格的实时调度算法一般都是抢占式调度算法.
最早截止时间优先算法(ELF):实时调度会提供开始截止时间和完成截止时间.根据截止时间的早晚来给出任务的优先级,截止时间越早优先级越高.
最低松弛度优先算法(LLF):根据任务的紧急程度给出优先级,任务越紧急,优先级越高.