先来先服务算法、运行时间最短者优先算法和最高响应比优先调度算法_操作系统的调度...

d59c92a92ac6cc9138a45f87a186bd7c.png

调度的定义

CPU并不只是简单的根据FIFO的规则来实现进程/线程的调度;
如何结合考虑进程/线程的 优先级运行时间等多方面的因素,实现合理、科学、高效得调度是本文要研究的核心内容;

436dc86fff117c7246f9189986ac5aae.png

如上图中,左侧是FIFO+优先级的综合调度,右侧是FIFO+运行时间的综合调度;

而所谓调度,就是从 就绪队列中按照 一定的算法选择一个进程/线程并将CPU等资源分配给它运行,已达到并发的效果;

调度的三个层次

高级调度:磁盘 -> 内存(只会调度一次,创建进程的过程)

磁盘上的程序软件可以有千千万万个(够大),但是内存相对磁盘而言,是相当有限的,一般内存就8G,没法同时存放磁盘上所有的软件,因此一般只会启动磁盘的一部分软件,即创建相应的进程,存储并运行在内存上;

03f6a3fee093faf68ed9980275cd40d5.png
磁盘上的作业提交后,等待被创建成新的进程(即,高级调度)

磁盘上的某个软件程序以作业形式提交后,操作系统并不会立即就将其创建成新进程,作业的提交需要先进入磁盘中的作业等待队列中,CPU对这个等待队列中的作业以某种算法(通常思路是综合FIFO+优先级+***考虑因素)进行调度;所以我们平常使用Windows点击某个.exe软件时,界面上可能不会立马打开的软件窗口,可能需要等待一会软件才“启动响应”,这个过程其实就是新提交的创建进程的作业只是被放入等待队列中,还没有被CPU从队列中调度出来并执行作业;

这样的通过将作业提交至磁盘上的等待队列中,等待CPU调度并创建进程,然后将磁盘上的软件存储在内存的虚拟地址空间上,并由CPU取指执行的过程即是本小节讨论的“高级调度”;

2c57645d7ce9309878d65137f8d886c7.png
高级调度:提交磁盘程序作业,等待创建新进程

中级调度:磁盘->内存(会被调度多次,处于挂起态的进程重新调入内存的过程)

由于内存是稀缺资源,对于当前未处于运行态的某些进程,不能“占着茅坑不拉屎”,当前未处于运行态的进程被临时从内存置换到磁盘中,等待该进程再次具备运行条件或者内存有足够余量时,再重新调回内存;这样做能极大提升内存利用率系统吞吐量

这里的 暂时将进程调到磁盘等待的进程状态,被称为 挂起状态

(注:从这段话,我们可以稍作思考,进程的PCB和进程在内存中的虚拟地址空间,在逻辑上应该是设计成分开存放的,这样即便当进程的代码段、数据段等被置换到磁盘上,该进程的PCB并不会被置换出去,PCB仍旧在常驻内存中,虽然在内存中具体存放位置,我还不太清楚,但PCB应该还在就绪队列或者阻塞队列指向的某个内存地址上,这样的话,操作系统才可以继续对该进程进行管理,仍不会影响该进程在未来的某个时候可能会被分配CPU时间片,并重新获得CPU使用权)

f868aa94069ad37f2ddb4594df182b70.png

注意这张图,虽然有两个进程从内存中被换到了磁盘中,但是与其对应的两个PCB依旧放在常驻内存上,接受操作系统的管理与调度;

上面介绍了什么是挂起态:因内存有限,当前不在运行的进程被暂时调到外存,此时进程的状态就是挂起态,即没在运行、又没有就绪或阻塞,更不是创建或终止;

而根据进程挂起之前的状态进行细分,可分为:就绪挂起阻塞挂起

不管是就绪挂起,还是阻塞挂起,都得是从磁盘重新调度到内存上,才能重新被运行;

f0515e647b5d1ce5cd6a156ac4c27f22.png
五状态模型(未引入挂起态)

df781574eeebb10988e1115c0cd2da60.png

653525101099e43610059fb785d44196.png
七状态模型

在七状态模型中,需要尤为注意的有:

  • 存储在外存的阻塞挂起进程可以因时间的响应,直接在外存中转换成就绪挂起,因为都是挂起,所以进程依然是在外存上;
  • 当进程刚用完时间片,可以直接从运行态,变成就绪挂起态;
  • 当新的进程刚完成创建过程,可能也会直接进入就绪挂起;

而发生这一切的原因,基本都是因为内存不够用了

低级调度:即进程调度,从就绪队列中取出进程,将其转换成运行态(调度频率最高)

低级调度就是我们最常关注的多进程的管理与切换,即选择合适的算法从就绪队列中选取一个进程,并为其分配CPU等资源;

6094ec384a1d7ee980e960e02c11c139.png

三个层次的调度对比:

24f85e828be8901bb7eab37f758ffc31.png

操作系统调度总结

0614752315b47d73ac63e9060f76c6c7.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一 批处理系统的作业调度 1.实验目的 加深对作业概念的理解; 深入了解批处理系统如何组织作业、管理作业和调度作业; 2.实验预备知识 作业的概念; 作业的创建; 作业的调度。 3.实验内容 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。 4.提示与讲解 操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。 作业调度的实现主要有两个问题,一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源,根据需要,实验中只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值