[2.2.1]进程管理——调度的概念、层次
文章目录
- 第二章 进程管理
- 调度的概念、层次
- (一)调度的基本概念
- (二)调度的三个层次
- (1)高级调度
- (2)低级调度
- (3)中级调度
- 补充知识:进程的挂起态与七状态模型
- (4)三层调度的联系、对比
- 小结
第二章 进程管理
调度的概念、层次
处理机调度
- 基本概念
- 三个层次
- 高级调度(作业调度)
- 中级调度(内存调度)
- 低级调度(进程调度)
- 三层调度的联系、对比
- 补充知识
- 进程的“挂起态”
- 七状态模型
(一)调度的基本概念
其实调度的概念离我们的生活并不遥远。
比如在我们去银行的时候,这个银行,它可能有几个窗口为客户服务。那么,这些客户,到底应该先为谁服务呢?银行一般采用的是先到先服务的这种原则。
如果说此时有一个vip客户,这个客户在银行里可能就会优先被服务、优先级更高。

再看另外一个例子。一个宿舍,早上大家都想上卫生间。每个人都想使用,但是有的人想使用3分钟,有的人要10分钟,有的人要1分钟……那么,大家在商量之后,就决定了一种使用这个资源的一个原则:使用时间短的就先使用,使用时间长的就后使用;如果时间长度相同的,先排队的先使用。

其实所谓的调度,它指的就是,当我们有一堆任务要处理的时候,由于当前的资源有限,那么这些事情没办法同时地被处理,那这个时候,我们就需要按照某种规则(比如先到先服务、时间短的优先),来决定我们要用什么样的顺序来处理这些任务。这就是所谓的“调度”。
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
(二)调度的三个层次
(1)高级调度
我们来看一下,在一个程序整个生命周期内,什么时候会发生调度的情况。
第一种,叫做高级调度,又叫作业调度。
此处补充一下作业的概念。
所谓的作业,指的就是某一个具体的任务。
可能有时会看到这种描述:用户向操作系统提交了一个作业。
这句话,其实可以理解为:用户让操作系统帮他启动某一个程序,这个程序是来处理某一个具体的任务的。
我们知道,我们要启动一个程序,那么这个程序相关的数据肯定需要从外存放到内存里面。
但是我们的内存资源又是有限的。
所以,如果内存已经满了,那么我们给操作系统提交的作业(或者我们想让系统帮我们启动的这个程序)就有可能没办法马上把它们放入内存(没办法马上启动)。

在这个时候,操作系统就会做高级调度(作业调度)。

操作系统会按照作业调度的相关规则,从作业后备队列里面选择一个先把它调入内存,并且会为这个作业建立与它相对应的进程,也就是建立一个PCB。这就是高级调度(作业调度)要做的事情。如果当前用户提交了很多作业,操作系统就要决定接下来到底要执行哪一个作业。
高级调度(作业调度):按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。简化理解:好几个程序需要启动,到底先启动哪个。
每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
(2)低级调度
低级调度(进程调度/处理机调度):按照某种策略从就绪队列中选取一个进程,将处理机分配给它。

因为我们内存中同一时刻是存在很多进程的,而我们CPU的资源也是有限的。所以,操作系统也需要按某种策略,从我们的进程就绪队列中挑选出一个进程,把处理机资源分配给它。
多道程序并发,这件事情,肯定要用到进程调度。
所以,进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
并且,进程调度的频率是很高的,一般几十毫秒一次。因为高频率的进程调度,才可以让各个进程很快速地、轮流地上CPU执行。这样才可以让用户在宏观上看,好像是各个进程在同时运行。
(3)中级调度
刚才我们说过,计算机当中有可能出现内存资源不足的情况。内存里面此时存在多个进程的数据。

而如果内存不足的话,其实我们是可以让一些不太紧急、不太重要的进程,先把这些进程的数据从内存调出到外存。

如果一个进程的数据,把它从内存放入到了外存里面,那这个进程此时就处于挂起状态。操作系统会把这些进程的PCB组织起来成为一个队列,叫挂起队列。(类似于之前说过的就绪队列、阻塞队列)
暂时调到外存等待的进程状态为挂起状态。被挂起的进程PCB会被组织成挂起队列。

那此时已经有空闲的内存资源了,操作系统又可以通过某一种调度策略,来决定,到底要把哪个进程的数据先调回内存。这个就是中级调度管的事情,又叫内存调度。

中级调度(内存调度):按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
我们平时用手机的时候会有这样的体验:有时在切换程序(切换进程)的时候,有的时候会发现切换的很快,而有的时候切换的又很慢。有种可能的原因就是,当切换很快的时候,这个进程的数据有可能是位于内存里面的;而切换进程很慢的时候,有可能是因为那个进程的数据已经不在手机内存里,而是被系统调到了外存当中,所以当你切换到这个进程的时候,系统会发现,这个进程此时非运行不可了,它再把相关的数据从外存再读回内存。
那么显然,在进程运行的生命周期内,有可能会多次调出、调入内存,所以中级调度发生的频率肯定要比高级调度的频率更高。
补充知识:进程的挂起态与七状态模型
刚刚提到了挂起状态。此处再补充一个与挂起状态相关的,七状态模型。
暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)。
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
之前已经学习了进程的五状态模型。这是考研408里要求掌握的一种模型。

但对于一些自主命题的学校,也有可能要掌握七状态模型。总之了解一下。
那么,在引入了就绪挂起、阻塞挂起两种状态之后,一个处于就绪态的进程,如果此时这个系统的负载比较高、内存空间已经不够用了,那么它有可能会把一个处于就绪态的进程,把它暂时调到外存当中,这个进程就进入了一个就绪挂起的状态。一直到内存空闲,或者这个进程急需进行,那么这个进程又会被激活,并把它相应数据挪回内存中。
同样地,一个阻塞态的进程也可以被挂起,相应的也可以被激活、重新调入内存。
而有的操作系统,对于处于阻塞挂起的进程,当它等待的阻塞事件发生的时候,这个进程会从阻塞挂起变为就绪挂起。之后,当它再被重新调回内存的时候,直接就是就绪态,而不是回到阻塞态。

还有的时候,一个进程处于运行态,当运行结束之后,可能这个进程下处理机的时候就会被直接放到外存当中,让它进入就绪挂起的状态。
而有的时候,一个处于创建态的进程,当它创建结束之后、创建完PCB之后,有可能出现内存空间不够的情况,那这种情况下有可能,处于创建态的进程,创建之后处于就绪挂起的状态。

需要注意的是,“挂起”和“阻塞”的区别。
这两种状态都是暂时不能获得CPU的服务,但区别在于,处于挂起态的进程,进程映像是放在外存里的;而处于阻塞态的进程,它的进程映像其实还在内存当中。
有的操作系统,会把就绪挂起、阻塞挂起分为两个不同的挂起队列。还有的操作系统会把阻塞挂起的进程,根据阻塞原因不同,再把阻塞挂起队列细分为多个队列。
以上就是七状态模型。
(4)三层调度的联系、对比

小结

相关文章:
[2.2.1]进程管理——调度的概念、层次
文章目录第二章 进程管理调度的概念、层次(一)调度的基本概念(二)调度的三个层次(1)高级调度(2)低级调度(3)中级调度补充知识:进程的挂起态与七状…...
【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框架及UI小部件
Webix是Javascript库 一种软件产品 用于加速Web开发的 JavaScript UI库和框架 Webix用于跨平台Web应用程序开发的JS框架,为您提供102个UI小部件和功能丰富的CSS/HTML5 JavaScript控件 开发商介绍 Webix团队由由热衷于创建高质量网络产品的专业人士组成ÿ…...
【微信小程序】-- WXS 脚本(二十九)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
案例19-遇见问题的临时解决方案和最终解决方案
目录1、背景介绍2、两种解决方案的概念1、临时解决方案:2、最终解决方案:3、排查问题过程4、总结站在用户的角度思考作为软件开发者5、升华1、背景介绍 首先说明这是系统很早之前的时候的一个功能,当时和学习通还有很强的耦合关系。在学习通…...
自指(Self-reference)
文章目录1. 在逻辑、数学和计算方面2. 在生物学中3. 在艺术4. 在语言中5. 在流行文化中6. 在法律中自我参照(Self-reference)是一个涉及指代自己或自己的属性、特征或行为的概念。它可以发生在语言、逻辑、数学、哲学和其他领域。 在自然语言或形式语言…...
关于Hanoi塔的实现
关于Hanoi塔的实现 首先,在此之前,我们需要了解一下递归这个东西; 在我看来,递归这个东西就是栈的进出; 向下:进栈回溯:出栈 在进栈之前标记状态,输入到栈中; #incl…...
原始套接字(Raw Socket)
原始套接字允许对较低层次的协议进行访问,如: IP协议,ICMP协议等一般用于自定义协议的实现,处理IP协议没有处理过的数据运输层下IP数据不关注内核是否已有注册的句柄来处理这些数据,都会将这些IP数据复制一份传递给与协议类型匹配的原始套接字,没有的话,直接丢弃该数据,并返回主…...
SparkSQL与Hive交互
SparkSQL与Hive交互一、内嵌Hive应用二、外部Hive应用三、运行Spark SQL CLI四、IDEA操作外部HiveSparkSQL可以采用内嵌Hive,也可以采用外部Hive。企业开发中,通常采用外部Hive。 一、内嵌Hive应用 内嵌Hive,元数据存储在Derby数据库。 &am…...
「题解」日常遇到指针面试题
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章 🔥座右铭:“不要等到什么都没有了,才下定决心去做” …...
实习生JAVA知识总结目录
一.JAVA基础学习 JAVA知识点全面总结1:零散知识 JAVA知识点全面总结2:面向对象 JAVA知识点全面总结3:String类的学习 JAVA知识点全面总结4:异常类学习 JAVA知识点全面总结5:IO流的学习 JAVA知识点全面总结6&…...
GMPC认证有哪些内容?
【GMPC认证有哪些内容?】GMP(GMP Good Manufacturing Practice)即良好生产规范,最早是美国国会为了规范药品生产而于1963年颁布的。这也是世界上第一部GMP。由于GMP在规范药品的生产,提高药品的质量,保证药品的安全方面效果非常明显…...
D2-Net: A Trainable CNN for Joint Description and Detection of Local Features精读
开源代码:D2-Net 1 摘要 在这项工作中,我们解决了在困难的成像条件下寻找可靠的像素级对应的问题。我们提出了一种由单一卷积神经网络发挥双重作用的方法:它同时是一个密集的特征描述符和一个特征检测器。通过将检测推迟到后期阶段…...
Java基础面试题
目录 一,Java基础 1.1.JDK和JRE有什么区别? 1.2.JAVA中的几种基本类型,各占用多少字节? 1.3.和equals的区别是什么? 1.4.final,finally,finalied有什么区别? 1.15.Java 中操作字符串都有哪些类?它们…...
SQL和MongoDB对比
关系型数据库如MySQL和非关系型数据库MongoDB的对应关系:SQLMongoDBdatabasedatabasetablecollectionrowdocument or Bson documentcolumnfieldindexindextable joins$lookupprimary keyprimary key指定任何唯一的列或列组合作为主键主键会自动设置为_id字段aggrega…...
研究链表空间销毁问题
💯💯💯 1.研究链表空间销毁问题 当链表使用完后,需要将链表销毁,那么该如何销毁呢? void SLTDestroy(SLTNode* phead)//销毁单链表 {SLTNode* cur phead;while(cur){free(cur);cur cur->next;} }你…...
Linux面试总结
一.常用命令1.目录切换cd / 切换到根目录cd ../ 切换到上级目录cd ~ 切换到home目录2.查看目录ls 列出当前目录下所有的文件ls [路径]ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容3.查看当前目录pwd-4.创建一组空文件touch5.显示文件内容cat6…...
anaconda的linux版本以及jupyter的安装和DataSpell连接linux的jupyter服务器
anaconda安装:官网:https://www.anaconda.com/拷贝下载网址后,在Linux里进行下载:wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh执行sh:./Anaconda3-2022.10-Linux-x86_64.sh 安装完后&a…...
Zookeeper集群和Hadoop集群安装(保姆级教程)
1. HA HA(Heigh Available)高可用 解决单点故障,保证企业服务 7*24 小时不宕机单点故障:某个节点宕机导致整个集群的宕机 Hadoop 的 HA NameNode 存在单点故障的可能,需要配置 HA 解决引入第二个 NameNode 作为备份同…...
利用matlab的newff构建BP神经网络来实现数据的逼近和拟合
假设P是原始数据向量; T是对应的目标向量; 现在需要通过神经网络来实现P->T的非线性映射。 net newff(minmax(P),[16,1],{tansig,purelin},trainlm); net.trainParam.epochs 2000; net.trainParam.goal 1e-5; net init(net); net train(n…...
【经验分享】电路板上电就挂?新手工程师该怎么检查PCB?
小伙伴们有没有经历过辛辛苦苦,加班加点设计的PCB,终于搞定下单制板。接下来焦急并且忐忑地等待PCB板到货,焊接,验证,一上电,结果直接挂了... 连忙赶紧排查,找问题。最终发现,是打过…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
