2024-07-04:操作系统处理机调度学习笔记
第8节 处理机调度
之前学习了进程还有线程的概念,这些东西都是当你的用户程序想要在机器上运行的时运行的基本单元,。
操作系统里面我们经常把CPU称为处理机
本节课就是在学习应该按照什么样的规则区挑选这些进程或者线程上处理机,在进程切换或者线程切换,我们要清楚在这期间我们要完成什么事情
8.1 处理机调度层次
8.1.1 高级调度(长程调度、作业调度)
高级调度又称长程调度和作业调度,调度对象是作业。根据一定的算法决定将外存上处于后备队列中的几个作业调入内存中,为它们创建进程、分配必要的资源,并且把它们放到就绪队列。
作业和进程的区别:作业相当于是一个任务,在执行的时候就会被操作系统去创建成进程,那么真正调入到内存中去执行的实体还是进程或者线程。总而言之,作业会更偏向于一个任务的逻辑概念,而进程才是这个任务去实际执行的一个实体
高级调度主要用于多道批处理系统中,分时系统和实时系统中不设置高级调度。
- 对于多道批处理来说,我们可以把多个作业装入到内存,趁某一个作业去执行IO的时候,这个处理机就可以去处理其他的作业
- 分时系统是可以让用户能够共享计算机资源的系统,它会有很多个终端,每个用户都可以通过这个终端去使用计算机,并且对用户来说,他会以为这个计算机的资源是他自己独享的,靠的就是一个短期调度通过时间片的轮转,确保多任务的并发
- 高级调度更多强调的是我们让这个任务在内存和外存之间切换,那它主要是用于批处理的,对于这个实时和分时系统来说,它的需求是不一样的,实时和分时更加注重这个相应时间和实时性

8.1.2 低级调度(进程调度)
低级调度又称短程调度或进程调度,调度的对象是进程。根据某种算法决定就绪队列中的哪个进程获得处理机,并由分派程序将处理机分配给选中的进程。
低级调度是最基本的一种调度,在多道批处理、分时、实时系统中都必须配置这种调度。因为不管在哪种操作系统中,进程都是一个程序或者作为他执行的实体

重点研究CPU是如何去选择一个进程去调度
(1)进程调度的任务
调度的时候需要做一些什么事:
1.保存CPU现场信息(上下文,处理机的状态)
现场信息指的就是和当前执行的这个进程相关的一些寄存器里面的信息。那么进程在调度的时候,可能会发生切换,那你切换到下一个进程之前,要保留当前进程的CPU现场信息,比如程序计数器PC,通用寄存器,PSW等中的内容
2.按照某种算法选取进程
调度程序会按照算法从就绪队列中选取一个进程,将其状态改为运行状态,并准备把CPU分配给他
3.将CPU分配给进程
由(分派程序)把CPU分配给该进程,此时需要选中进程(即将上处理机的进程)的PCB内有关CPU的现场信息装入CPU相应的各个寄存器中,并把CPU控制权交给该进程,以使其能从上次的断点处恢复运行
(2)进程调度机制
调度机制也就是这个进程调度的过程是如何去发生的,也就是我们在调度新进程上处理机执行,然后两个进程进行切换的这个过程中一共发生了什么

以linux为例,如果我们想从一个进程A调度到另一个进程。
- 首先,进程A必须是达到了一个它想要放弃CPU的一个状态,这个过程可能是主动的,就比如我想要去申请一个IO请求,也可能是被动的,比如我的时间片到了。所以此时他会通过发出一个系统调用或者是IO请求,让这个CPU去陷入到内核态。
- CPU陷入到内核之后就可以修改这个进程A的状态为阻塞,然后CPU就会执行内核代码里面的这个系统调用有关的处理程序。或者说A是通过发起一个终端让这个CPU陷入到内核,它就会去执行一个终端处理程序
- 不管它去执行什么程序,这个程序都会去调用schedule这个函数,而schedule函数就是调度程序的入口函数
- 也就是A等于是不管它是被动还是主动放弃了CPU,我现在要做的就是同构调度程序去给它找一个新的进程来执行,那么调度程序又会去调用一个context_switch(),这个context就是我们之前说的上下文或者CPU的现场信息。现在它会调用这个分派程序,分派程序会负责具体上下文的切换。
- 因为调度程序已经可以根据某一种调度策略去决定下一个可以上处理机的进程是谁
- 告诉分派程序之后,分派程序就负责做这个上下文的切换
- 因此假如说我们现在是在挑就绪队列里面的进程B去上处理机,那么现在这个分派程序就会负责去保存进程A它的上下文到进程A的PCB中,接下来再把进程B它的上下文给他放到CPU里面,当前呢CPU就可以开始执行进程B了

闲逛进程idle process:如果说你的处理器空闲了,但是系统中没有就绪进程,那么就会让这个进程一直在处理器上运行
(3)进程调度方式
进程有两种大的调度方式,一个叫非抢占,一个叫抢占
- 非抢占调度方式:一旦把处理机分配给某进程,就会让它运行下去,而决不会因为时钟中断或者其他原因去抢占该进程的处理机,直到该进程完成或发生某事件而被阻塞,才会把分配给该进程的处理机分配给其他进程
非抢占方式下可能引起进程调度的因素:
- 正在执行进程执行完毕或无法继续执行;
- 正在执行的进程因提出IO请求而暂停执行;
- 进程通信或同步过程中执行了某种原语操作(如block原语)
- 抢占调度方式:允许调度程度根据某种原则去暂停正在执行的进程,并将已分配给该进程的处理机重新分配给另一进程。
-
- 在现代操作系统中广泛采用抢占调度方式,因为对于批处理机操作系统,抢占调度方式可以防止一个长进程长时间占用处理机。
-
- 分时系统中,只有抢占调度方式才可能实现人机交互。
-
- 实时系统中,抢占调度方式能满足实时任务的需求
抢占不是随意的抢占,必须遵循一些原则,主要有:
- 优先级高可抢占处理机
- 短进程优先原则
- 时间片原则,各进程按时间片运行,正在运行的进程的一个时间片用完后,停止该进程执行并重新调度
(4)进程调度的时机
进程调度的时机==进程放弃处理机

8.1.2 中级调度(内存调度)
中级调度实际上就是存储器管理中的对换功能
中级调度又称内存调度,作用是把那些(暂时不能运行的进程调到外存中等待),此时进程的状态称为挂起态(也叫就绪驻外存状态)。
当它们已具备运行条件且内存稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再次调入内存,并修改它们的状态为就绪状态,挂在就绪队列上等待。
8.2 处理机调度目标
为了比较调度算法的性能,设计了以下几种评价标准

8.3 处理机调度算法
调度目标是为了衡量这里的处理及调度算法
调度算法的含义就是处理机怎么样按照什么样的方式去决定哪一个进程上处理机
8.3.1 先来先服务
最简单的调度算法,可以用在(作业调度),也可以用在(进程调度),每次都选择最先进入队列的作业/进程,将他们(调入内存)或者(分配CPU)

- 按照作业/进程到达的先后次序进行调度
- 只能是非抢占式
- 对长作业有利,对短作业不利
- 有利于CPU繁忙型作业/进程:指的就是这个进程或作业需要长时间的占用CPU
- 不利于IO繁忙型作业/进程:这个进程或作业在执行的过程中会要反复的去进行IO请求
8.3.2 短作业优先
短作业优先算法,可以用来调度作业或者进程,它的含义就是谁短谁先上处理机,不说明的情况下,短作业优先它指的都是非抢占式的

- 作业/进程越短,优先级越高,越先被调度
- 如果是抢占式SJF,作业/进程的剩余时间越短,优先级越高,越先被调度
- 平均等待时间和平均周转时间最优
- 对短作业有利,对长作业不利,甚至导致长作业饥饿
8.3.3 高响应比优先
主要用于(作业调度),同时考虑了(等待时间)和估计(运行时间),每次调度时选择相应比最高的作业投入运行

高响应比优先算法综合了(先来先服务)和(短作业优先)这两种算法。
- 当两个作业的等待时间是相同的,那根据这个相应比公式,如果它的作业更短的话,我就先让它上处理机
- 如果他们的服务时间,要求服务的时间是相同的,那就是谁先来,就是让谁先去上处理机。
- 高响应比算法均考虑到了这两种算法的思想,并且克服了短作业优先算法会造成长作业饥饿这种现象,因为我们设置了响应比,不会让一个长作业等太久的时间
8.3.4 优先级调度
优先级调度可以用于作业或者进程,其实就是定一个优先级去描述作业的紧迫程度。每一次我们都去选优先级最高的作业或者进程去运行

8.3.5 时间片轮转
时间片轮转主要用于分时系统对进程的调度,所有的就绪进程会排成一个队列。操作系统每隔一段时间就会产生一个时钟中断,借着这个中断就可以进行进程的调度,会把CPU分配给这个就绪队列的队首进程(队头进程),给它一个时间片

8.3.6 多级队列调度
我们会设置多个队列,将不同类型的进程分配到不同的就绪队列。每个队列实行不同的调度算法

多级队列的调度就相当于是我们根据不同作业或者进程的类型,把它们划分到不同的队列,也可以给这个队列去指定不同的调度算法。
具体分类怎么分其实是无所谓的,队列之间是有优先级的,整体是从最高优先级往最低优先级去调度的,只有你这个队列里面的所有的进程都被调度完了,他才会去考虑比他优先级低的这个队列里面的进程
多级队列调度就是考虑到了我们可以根据不同性质或者类型的进程或者作业,把它分配到不同的就绪队列。然后对每一个就绪队列,都按照他的性质去给他匹配适合他的算法
8.3.7 多级反馈队列调度
多级反馈队列调度是一个结合了(时间片调度)和(优先级调度)的算法,同时也是设置了多个就绪队列,为每个队列赋予不同的优先级;赋予各个队列的进程运行时间片不同,每个队列采用FCFS算法

- 优先级越高的队列,它的时间片会越短
- 优先级越低的队列,它的时间片会越长
- 每个队列内部都会使用先来先服务的算法
- 只有当1级队列空的时候,才调度2级队列中的进程去运行,以此类推
1747

被折叠的 条评论
为什么被折叠?



