计算机操作系统处理机调度(1)

系列文章目录

第三章:处理机调度与死锁


文章目录


前言

在多道程序的环境下,内存中存在着多个进程,其数目往往多于处理机数目。(我们就以单核的CPU为例子,所以运行中的进程最多只能有一个,最少为0个) 这就要求那个系统能够按照某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如系统吞吐量,资源利用率,作业周转时间或响应的及时性等,在很大程度上都取决于处理机调度性能的好坏。因而,处理机调度便成为OS中至关重要的部分。所以下面我们将讲讲处理机调度是如何进行调度的,我将用通俗易懂的话带领大家走进CPU的世界。


在多道程序系统中,调度的实质是一种资源的分配,处理机调度是对处理机资源进行分配。处理机调度算法是根据处理及分配策略所规定的处理机分配算法。在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度,下面我们先来了解处理机调度的层次。

在此之前我想给大家补充点知识点:

一、作业和资源:

作业 :是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一份作业说明书,系统根据该说明书来对程序运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存的。

通俗易懂点来讲就是:

是用户在一次计算过程中,要求计算机系统所做工作的集合,包括程序、数据以及作业说明书等。例如,用户提交一个编译程序的任务,从源程序输入到编译出目标程序,这整个过程就是一个作业。

资源 :是操作系统管理的各种硬件和软件要素,如 CPU、内存、外存、设备(打印机、磁盘等)、文件系统、网络连接等,是作业运行的物质基础。

管理方式

  • 作业:操作系统通过作业调度来管理作业,根据一定的调度算法,将作业从后备状态调入内存执行,在作业运行结束后进行善后处理。
  • 资源:对于不同类型的资源,操作系统有不同的管理策略。如对于 CPU,采用进程调度算法分配时间片;对于内存,通过内存分配算法为进程分配空间;对于设备,采用设备分配算法来决定哪个进程可以使用设备。

作用与生命周期

  • 作业 :是用户为完成特定任务而提交给系统的工作单元,其目的是让计算机完成用户指定的任务,作业从提交到完成是一个完整的生命周期。
  • 资源:是为作业的运行提供支持和保障的,资源可以被多个作业共享和复用,其生命周期通常与操作系统的运行周期相关,只要操作系统在运行,资源就处于可被分配和使用的状态。

二、处理机调度的层次:

1.高级调度:

高级调度又称长程调度或作业调度,它的调度对象是作业(程序+数据+作业说明书)。其主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程,分配必要的资源,并将它们放入就绪队列。高级调度主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度。

2.低级调度:

低级调度又称为进程调度或短程调度,其所调度的对象是进程(或内核级线程)。其主要功能是,根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序的将处理机分配给被选中的进程。进程调度是最基本的一种调度,在多道批处理,分时和实时三种类型的OS中,都必须配置这级调度。

3. 中级调度:

中级调度又称为内存调度。引入中级调度的主要目的是,提高内存利用率和系统吞吐量。为此,应把那些暂时不能运行的进程,调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当他们已具备运行条件且内存又稍有空闲的时候,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改状态为就绪状态,挂在就绪队列上等待。中级调度实际上就是存储器管理中的对换功能,这个我们以后再说。

三、作业调度算法举例:

今天先给大家开个头,给大家讲讲我认为最应该注意细节的一个调度算法,因为我当时也是想了很长时间才明白

高相应比优先调度算法:

这种算法比较合理,既考虑了作业的等待时间,又考虑作业运行时间的调度算法,因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。

这里面其实有的点我认为是很重要的

高相应比优先算法是如何实现的呢?如果我们能为每个作业引入一个动态的优先级,即优先级是可以改变的,令它随等待时间延长而增加,这将使得长作业的优先级在等待期间不断增加,等到足够的时间后,必然有机会获得处理机,该优先级的变化规律可描述为:

优先级 = (等待时间+要求服务时间)/要求服务时间

由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先级又相当于响应比Rp,据此,优先又可表示为:

Rp = (等待时间+要求服务时间)/要求服务时间 = 响应时间/要求服务时间

这里还有一点可以符合的是 先来的等待时间长,谁先运行(FCFS);

我们举个简单的例子:

作业 提交时间 运行时间 开始时间 完成时间
A 0 3 0 3
B 2 6 3 9
C 4 4 9 13

在调度过程中,​完成时间 ≠ 提交时间 + 运行时间 ,因为作业需要等待调度。完成时间实际上是开始时间 + 运行时间,而开始时间可能远晚于提交时间(由于等待)。

完成时间的真正含义

  • 公式

    完成时间=开始执行时间+运行时间

    • 开始执行时间:作业真正获得CPU开始运行的时间(可能因等待而延迟)。
    • 运行时间:作业需要的CPU时间(固定不变)。
  • 与提交时间的关系

    • 如果作业无需等待(立即执行),则:完成时间=提交时间+运行时间
    • 如果作业需要等待,则:完成时间=提交时间+等待时间+运行时间
  • 作业 A

    • 提交后立即执行(无等待),完成时间 = 0 + 3 = 3。
    • 提交时间 + 运行时间 = 0 + 3 = 3,等于完成时间(无需等待的特殊情况)。
  • 作业 B

    • 提交时间 2,但直到时间 3 才开始执行(等待了 1 单位时间)。
    • 完成时间 = 开始时间 3 + 运行时间 6 = 9。
    • 提交时间 + 运行时间 = 2 + 6 = 8,但实际完成时间是 9(因等待了 1 单位时间)。
  • 作业 C

    • 提交时间 4,直到时间 9 才开始执行(等待了 5 单位时间)。
    • 完成时间 = 开始时间 9 + 运行时间 4 = 13。
    • 提交时间 + 运行时间 = 4 + 4 = 8,但实际完成时间是 13(等待了 5 单位时间)。

响应比的分子与周转时间的关系

  • 响应比的分子

    响应比=1+运行时间当前等待时间

    • 当前等待时间:调度时刻的等待时间(从提交到调度时刻的时间)。
    • 注意 :这是作业在调度决策时的等待时间,而非总等待时间。
  • 周转时间的分子

    周转时间=完成时间−提交时间=运行时间+总等待时间

    • 总等待时间:从提交到开始执行的时间(即最终确定的等待时间)。
例子中的具体数值
  • 作业 B 的响应比​(时间 3 时调度):

    • 当前等待时间 = 3(调度时间) - 2(提交时间) = 1。
    • 响应比 = 1 + 1/6 ≈ 1.17。
  • 作业 B 的周转时间

    • 完成时间 9 - 提交时间 2 = 7。
    • 总等待时间 = 7(周转时间) - 6(运行时间) = 1。
    • 与响应比的分子一致:这里的总等待时间(1)等于调度时的当前等待时间(1)。
  • 作业 C 的响应比​(时间 9 时调度):

    • 当前等待时间 = 9(调度时间) - 4(提交时间) = 5。
    • 响应比 = 1 + 5/4 = 2.25。
  • 作业 C 的周转时间

    • 完成时间 13 - 提交时间 4 = 9。
    • 总等待时间 = 9(周转时间) - 4(运行时间) = 5。
    • 与响应比的分子一致:总等待时间(5)等于调度时的当前等待时间(5)。

为什么看起来"提交时间+运行时间=完成时间"?

  • 特殊情况 :当作业无需等待时(如作业 A),完成时间确实等于提交时间 + 运行时间。
  • 一般情况:作业需要等待调度,因此完成时间 = 提交时间 + 运行时间 + 等待时间。

关键结论

  • 完成时间 ≠ 提交时间 + 运行时间(除非作业无需等待)。
  • 响应比的分子是调度时刻的等待时间(部分等待时间)。
  • 周转时间的分子是总等待时间(最终确定的全部等待时间)。
  • 在调度完成的瞬间,响应比中的等待时间会等于总等待时间(如作业 B 和 C),因此两者数值最终一致。

总结

以上就是今天要讲的内容,本文我补充了作业和资源的定义和作用,又给大家讲了一下处理机的调度层次,然后又给大家补充了一个我最感觉有点容易犯错的调度算法,接下来我会继续更新处理机调度的,从3月25号后我要开始给大家讲蓝桥杯的枚举和模拟的题了,谢谢大家,我会持续更新的。

相关推荐
郝YH是人间理想11 分钟前
Python面向对象
开发语言·python·面向对象
Hum8le1 小时前
小科普《DNS服务器》
运维·服务器
大土豆的bug记录2 小时前
鸿蒙进行视频上传,使用 request.uploadFile方法
开发语言·前端·华为·arkts·鸿蒙·arkui
阿俊仔(摸鱼版)3 小时前
Ubuntu上安装Docker
linux·ubuntu·docker
故事与他6453 小时前
Thinkphp(TP)框架漏洞攻略
android·服务器·网络·中间件·tomcat
yunqi12153 小时前
【负载均衡系列】nginx负载高怎么排查
运维·nginx·负载均衡
IYU_3 小时前
VulnHub-Web-Machine-N7通关攻略
服务器·安全·web安全·网络安全
hhw1991124 小时前
c#知识点补充3
开发语言·c#
Antonio9154 小时前
【Q&A】观察者模式在QT有哪些应用?
开发语言·qt·观察者模式
Pandaconda4 小时前
【后端开发面试题】每日 3 题(二十)
开发语言·分布式·后端·面试·消息队列·熔断·服务限流