处理机的调度
调度的概念:
有一堆任务要处理,由于资源有限,这些事情没法同时处理。这就需要某种规则来决定处理这些任务的顺序。
1.调度的三个层次
由于内存空间有限,有时无法将用户提交的作业全部放入内存————所以要用调度
作业:一个具体的任务(用户向系统提交了一个作业==用户让系统启动一个程序[处理一个具体任务])
1.高级调度(作业调度)外存————》内存
按一定的原则从外存(硬盘)存放的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只能调入一次,调出一次。作业调入时会建立PCB,调出撤销PCB
2.低级调度(进程调度/处理机调度)内存————》CPU
按照某种策略从就绪队列中选取一个进程,将处理机(CPU)分配给他。————进程调度是操作系统的最基本的一种调度(频率很高)。
3.中级调度(内存调度)外存————》内存
原因:
当内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要的时候在重新调入内存中,暂时调到外存等待的进程状态被称为挂起状态。被挂起的进程PCB会被组织在挂起队列。
概念:
按照某种策略决定将从那个处于挂起状态的进程重新调入内存(当我们在桌面切换进程时有些会很快————就在内存里面,而有些却很慢————被内存调度调到外盘中了)
调度频率:
低级调度————》中级调度————》高级调度
补充:
进程的挂起态与七状态模型
暂时调到外存等待的进程状态被称为挂起状态(挂起态)
挂起状态又可以进一步细分为:就绪挂起、阻塞挂起两种状态。
其中阻塞挂起又可以根据原因划分为更多的队列。
2.进程调度(低级调度)详细
需要进程调度的情况:
1.主动:
进程正常终止
运行时发生异常终止
进程主动请求阻塞(I/O)
2.被动:
处理机分配给该进程的时间片用完
有更紧急的事需要处理(I/O中断)
有更高优先级的进程到达就绪队列
不能进行进程调度的情况:
1.在处理中断过程——————中断处理过程复杂、与硬件密切相关,很难做到中断处理过程中进行进程切换。
2.进程在操作系统内核程序临界区。
进程处于临界区是可以进行处理机的调度。
临界资源:一个时间段内只允许一个进程使用的资源。各进程互斥地访问临界资源。
临界区:访问临界资源的那段代码————虽然需要把调用的特定的普通设备上锁,但是并不影响处理机去处理其他进程。
内核程序临界区:访问某种内核数据结构,会把处于内核的数据结构上锁。
3.在原语操作中。
进程调度的方式:
1.非剥夺调度方式,又称为非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态类似主动
2.剥夺调度方式,又称抢占式。当一个进程正在处理机上执行时,如果有一个更重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要更紧迫的任务。类似被动
广义的进程调度包括:狭义的进程调度、进程切换。
侠义的进程调度:
从就绪队列中选一个要运行的进程
进程切换(所以进程切换是有代价):
A进程让出处理机,B进程占用处理机。————对原来运行进程的数据保存和对新进程的数据的恢复。
3.调度器/调度程序
由调度算法(谁执行)和时间片大小(运行时间)组成
调度时机————什么事件会触发调度程序
1.创建新进程(是否将这个进程放入运行态中)
2.进程退出(从就绪队列选择新的进程让CPU处理)
3.运行进程阻塞
4.I/O中断发送(唤起某些阻塞进程)
非抢占式调度策略:只有运行进程阻塞或者退出才触发调度程序策略。
抢占式调度测率:每个时钟中断或k个时钟中断会触发调度程序策略。
注意:如果是内核级线程,那么就是直接调用线程。
闲逛进程:
当调度程序没有其他就绪进程时,运行闲逛进程。(确保CPU永远在运转)
特点:
优先级最低
可以是0地址指令(不需要缓存,不需要访问CPU寄存器),占一个完整的指令周期。
能耗低
4.调度算法的评估
1.CPU利用率
概念:指的是CPU忙碌的时间占总时间的比列————忙率时间/总时间。
2.系统吞吐量
单位时间内完成作业的数量————总共完成了多少道作业/总共花多少时间
3.周转时间
作业被提交给系统开始,到作业完成为止的这段时间间隔。包括四个部分a.高级调度时间 b.低级调度时间 c.CPU处理进程的时间 d.进程等待I/O操作完成时间。后三项可能多次执行。————周转时间=作业完成时间-作业提交时间
平均周转时间=各作业周转时间之和/作业数
带权周转时间=作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行的时间>=1 所以带权周转时间越小越好
平均带权周转时间=各作业带权周转时间之和/作业数量
4.等待时间
指进程/作业处于等待处理机状态时间之和,等待时间越短越好。除了被CPU执行和等待I/O完成的期间都是不算入等待时间。
5.响应时间
用户从提交请求到首次产生响应所用的时间。
调度算法学习:
1.先来先服务(FCFS)
思想:从公平的角度考虑————先到先服务
规则:按照作业/进程到达的顺序(等待时间越久的进程就会优先得到服务)
是否可抢占:非抢占式调度
优点:公平、简单实现。
缺点:排在长作业(进程)后面的短作业需要等待很长的时间,短作业带权周转时间会很长。长作业友好,短作业不友好。
不会导致饥饿(某进程/作业长期得不到服务)
2.短作业优先(SJF)
思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间。
规则:最短的作业/进程优先得到服务。
是否可抢占: SJF和SPF(短进程优先)是非抢占式的。但也有抢占式的版本————最短剩余时间优先算法。
非抢占式:执行完完整的进程再执行当前已到达且运行时间最短的作业/进程。
抢占式:当一个进程进入队列是就会判断运行时间最短的作业/进程去执行。
优点:最短的平均等待时间、平均周转时间
缺点:不公平。运行时间是由用户提供的不一定真实,不一定能做到正真的短作业优先。
饥饿:会导致长作业饥饿————更可能导致长作业饿死。
3.高响应比优先(HRRN)
思想:综合考虑作业/进程的等待时间和要求服务时间。
规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务。————响应比:(等待时间+要求服务时间)/要求服务时间
是否可抢占:非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机,才需要调度,才需要计算响应比。
优点:综合考虑不了等待时间和运行时间————在同样等待时间的时候短进程优先;在服务时间相同时,等待时间长的先服务;对于长时间作业来说,随着等待时间越来越久,其响应比也会越来越大,不会导致饥饿。
这些算法对于用户的交互表现很差。因此适用于早期的批处理系统。
4.时间片轮转调度算法(RR)
思想:公平的、轮转的为各个进程服务,让每一个进程在一定时间间隔内都可以得到响应。
规则:按照各个进程到达就绪队列(时间片结束后进程放在队列的队尾,下一个为队列的队头进程)的顺序,轮流让各个进程执行一个时间片。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
进程调度使用
作业:通常是指用户提交给操作系统的任务或工作单元,可以包含一个或多个程序以及这些程序运行所需的数据和指令。它是从用户视角来看的一个抽象概念。
只有进程能调用RR
是否可抢占式:若进程在时间片内未运行完,将会被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到。
因此这个调度算法需要考虑时间片的大小:太大会导致退化为短进程优先算法,太小(进程切换时间不超过1%)会导致进程切换过于频繁。
优点:公平、响应快适用于分时操作系统;
缺点:由于高平率的切换进程,有一定的开销;不区分任务的紧急程度。
不会引起饥饿
5.优先级调度算法
思想:根据人物的紧急程度决定处理的顺序。
规则:作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。
非抢占式的优先级调度算法:每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。(拥有相同优先级的时候看进入就绪队列的顺序)
抢占式优先级调度算法:每次调度时选择当前已到达且优先级最高的进程,当就绪队列发生改变时也需要检查是否会发生抢占。
补充:优先级可以分为静态优先级和动态优先级。
系统进程优先级高于用户进程——————前台进程高于后台进程————————操作系统更偏好I/O型进程(与他对应的是计算型进程————CPU繁忙型进程)。因为I/O型设备可以和CPU并存工作可以提高性能、吞吐率。
优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。
缺点:若源源不断的有高级优先级进程到来,可能导致饥饿。
6.多级反馈队列调度算法
思想:对所有的调度算法进行折中权衡
规则:1.设置多级就绪队列,各级别的队列优先级从高到低,时间片从小到大。
2.新进程到达时先进入第1级队列,按FCFS(先进先出)原则排队等待被分配时间片,若时间片使用完了进程未结束,则进程放到下一级队列队尾
,如果在最后下一级的队列时,重新放回这一及的队尾。
3.只有K级队列为空才会执行k+1级的队列。
适用于进程调度,并且是抢占式调度算法(因为规则3)
优点:结合了上面1~5调度算法的特征。
缺点:可能导致饥饿(因为在低优先级队列时可能一直得不到时间片)
4~6适用于交互式系统————Linux使用多级反馈调度算法。
图片和内容来源:王道考研