调度
处理三级调度
-
高级调度(作业调度)
决定把外存处于作业后备队列上的作业调入内存,并为它创建进程,分配必要的资源,然后将新创建的进程排在就绪队列上准备执行
批处理系统作业是先存在外存的输入井上,因此需要有作业调度
在分时系统中,通过键盘输入的命令和数据直接进入内存,无需作业调度 -
低级调度(进程调度)
决定就绪队列中哪个进程获得处理机
进程调度是最基本的调度,任何操作系统都有进程调度
-
中级调度(对换)
引入中级调度为了提高主存利用率和系统吞吐率,将暂时不能运行的进程从内存调到外存盘交换区,将在盘交换区的等待事件已经发生急需调度运行的进程从盘交换区调入内存
处理机调度模型
-
仅有进程调度的调度队列模型
-
有进程调度和中级调度队列模型
-
具有高级调度和低级调度的调度队列模型
-
同时具有三级调度的调度队列模型
高级调度(作业调度)
作业及作业分类
作业是由一组统一管理和操作的进程集合构成,是用户要求计算机系统完成的一项相对独立的工作,作业可以是完成了编译链接之后的一个用户程序,也可以是用各种命令构成的一个脚本
根据需要处理工作的类型,作业可以分为计算型作业和I/O型作业
- 计算型作业:需要CPU处理为主的作业称为计算型作业
- I/O型作业:将以I/O过程为主的作业称为I/O型作业
操作系统管理会对这两种作业进行区别对待:由于等待I/O过程需要更多的时间,所以以I/O过程为主的作业执行更慢,计算型为主的作业等待I/O过程需要的时间更短,执行更快
根据提交方式不同,作业可以分为批处理作业和终端型作业
-
批处理作业:用户的批处理作业被提交到系统的磁盘上,以批处理后备队列的形式进行组织,这样的作业为批处理作业。批处理作业需要作业调度,将后备队列上的作业调度到内存才能执行
-
终端型作业:终端型作业用户通过终端登录到系统,直接将作业置于内存中,所以终端型作业不需要作业调度便能执行
根据控制方式不同,作业可以分为联机作业和脱机作业
- 联机作业:联机作业是用户通过外围设备直接与计算机系统进行交互,从而控制作业的运行,这种作业也叫交互型作业
- 脱机作业:脱机作业是指用户不能和计算机直接交互,需要通过操作员从中干预的作业
联机作业多出现在分时系统中,而脱机作业经常出现在批处理系统中
作业调度和终止作业
作业调度的定义:作业调度程序按照一定算法从后备作业队列中选一个满足资源要求的作业,分配它所要求的资源,建立一组相应的进程,设置该进程状态为就绪态,并将该进程插入内存就绪队列,参加CPU争夺
当进程正常运行结束或因发生错误终止时,调用终止作业程序,它负责将输出文件缓冲输出到输入井,并调用spooling系统输出进程并将作业输出文件在打印机输出,同时回收作业所使用内、外存、I/O设备等各种资源,最后调用记账程序结清作业费用
作业和进程的关系:一个作业可能由一个进程组成,运行在多个进程下,作业是计算机处理任务的实体,进程是计算机处理任务的执行体
一个系统能够接纳的作业的个数由系统的资源决定,特别是处理器和内存资源
一个系统能够接纳作业的个数称为系统的多道度,也称为系统的多道程序度
作业控制块(JCB)
作业控制块中包含的信息有:作业名称、作业对资源的需求信息、作业的资源使用信息、作业的控制方式、作业优先级和作业状态
作业控制块是作业存在的标志,存在于作业的整个过程之中,只有作业完成或退出系统时,作业控制块才被撤销
作业的状态
- 提交状态
用户将作业提交给操作系统,等待输入程序和数据到磁盘
- 后备状态
系统接收输入的用户作业,并将其放入计算磁盘,创建作业控制块(JCB)
- 执行状态
作业被调度到内存,为作业分配资源并为其创建与之对应的进程,进程获得CPU,开始运行
- 完成状态
释放作业所占用的资源,退出系统的整个过程
初级调度(进程调度)
引起进程调度的主要原因
- 处理器执行的进程完成任务,处理器空闲
- 处理器执行的进程进入阻塞状态,此时处理器空闲
- 处理器执行的进程被其他进程抢占
- 处理器执行的进程被挂起
进程调度中的基本机制
- 排队器
为使进程调度时能够快速有效的找到就绪队列中的每个进程,首先应该按照一定的方式将进程的就绪队列排成一个或者多个队列
- 分派程序
分派程序将根据进程调度策略将所选中的进程从就绪队列中移出,然后进行上下文的切换,并将处理器分配给进程
- 上下文切换机制
上下文切换机制是指在操作系统分派程序的执行下完成处理器的切换过程,实现进程上下文切换
进程调度的形式
- 非抢占式调度方式
- 抢占调度方式
抢占原则(抢占条件)
- 时间片
刚好获得时间片的进程抢占刚好执行完时间片的进程
- 优先级
优先级高的进程抢占优先级低的进程
- 短进程
处理器处理时间短的进程抢占处理器处理时间长的进程
抢占的弊端
- 增加系统开销
抢占时需要进行一次上下文切换(切换处理器),给系统带来额外开销
- 进程间共享数据不一致问题
抢占的过程中如果被抢占的进程的数据尚未更新结束而被抢占,得到处理器的进程恰好也要读取这一部分的共享数据,那么就可能会造成读取数据不一致的问题
- 影响操作系统内核程序设计问题
如果抢占发生在操作系统内核程序执行期间,如系统调用期间,核心程序可能在正在改变核心的重要数据时被抢占,从而造成系统核心出现问题,从而影响系统稳定性
评价调度算法的准则
1.面向用户的准则
-
周转时间段
周转时间是指从作业提交给系统开始,到作业完成为止这段时间间隔
-
平均周转时间
Ti为作业 i 的周转时间
-
平均带权周转时间
Ti 为周转时间,Tsi为实际服务时间
-
响应时间快
响应时间是从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间
-
截止时间的保证
截止时间是指某任务执行的最迟时间或完成的最迟时间
-
优先权准则
采用优先权准则,让紧急的事情得到及时处理,在严格的场合,往往采用抢占调度方式保证紧急事件得到及时处理
- 面向系统的准则
- 达到系统设计目标
- 系统吞吐量大
系统吞吐量是指单位时间内完成的作业数
- 处理器利用率
CPU利用率=CPU有效时间 / CPU总的运行时间
CPU总的运行时间=CPU的有效工作时间 + CPU的空闲时间 - 各类资源的平衡利用
比如CPU、内存等
线程调度
用户级线程
用户级线程存在于用户地址空间,内核不能看见用户级线程,内核按照进程调度分配处理器,再由线程调度算法决定线程共享时间片,通常线程调度算法会采用先来先服务(FCFS)的方式
-
无论线程有没有完成,进程的时间片都不会分配到其他进程
-
进程中某个线程阻塞则该进程的所有线程都阻塞
内核级线程
内核可见,线程调度起决定作用,内核对于所有线程都是公平对待,如果一个线程受到阻塞,则内核将会选择下一个就绪内核线程运行
实时调度
实时调度满足的条件:
-
系统向实时调度提供与实施任务相关的信息:
- 就绪起始时间
- 截止时间
- 处理时间
- 实时任务的资源需求
- 实时任务的优先级
-
对系统处理能力的衡量:
N为处理器数目,Ci为需要处理器处理的时间,Pi为周期事件i发生的周期,满足这个条件才能进行周期实时任务的调度
-
抢占调度和快速切换机制:允许优先权高的实时任务抢占优先权低的实时任务,从而满足实时任务对于截止时间的要求
实时调度算法
-
抢占式调度算法:
- 基于时钟中断的优先权抢占调度算法:优先权高的任务在时钟中断的时候抢占正在运行的优先权低的任务
- 立即抢占调度算法:出现外部抢断,只要系统不处于临界区。系统立即剥夺当前执行的任务,把处理器分配给当前紧急的任务
- 单比率调度算法:实现为每个实施任务分配一个与任务发生频率呈正比的优先级,运行频率比较高的任务,其优先权越高
-
非抢占式调度算法
- 非抢占式轮转调度算法
等到前一个任务运行结束之后才轮到下一个任务运行
- 非抢占式优先级调度算法
先给每个任务赋予优先级,再按照任务的优先级决定任务的运行顺序
- 期限调度算法
根据实时任务的截止期限进行就绪队列的排队,截止期限短的实时任务排在队首,首先进行调度
- 非抢占式轮转调度算法
总之,实时调度系统中的调度是在一般的进程调度基础上,考虑实时系统对时间的需要再进行改进
调度算法
详情见于我的另一篇博文:作业调度算法和进程调度算法