重生之我是操作系统(五)----CPU调度
简介
当CPU有大量任务要处理,但由于资源有限,无法同时处理。所有就需要某种规则来决定任务处理的顺序,这就是调度。
调度层次
根据调度频率与层次,共分为三种
- 高级调度
也称为作业调度(Long-Trem Scheduling),频次很低,它决定哪些进程从外存(硬盘)加载到内存 - 中级调度
也称为内存调度(Medium-Term Scheduing),频次中等,将暂时无法运行的进程(阻塞进程)交换到外存,也就是所谓的挂起。释放内存资源,后续再重新加载到内存中。 - 低级调度
也称为进程调度(Short-Term Scheduing),频次极高,每秒可达数千次。它直接决定当前哪个就绪进程获得CPU。
| ---- | 做什么? | 发生在哪? | 频率 | 对进程的影响 |
|---|---|---|---|---|
| 高级调度 | 选择合适的作业调入内存,并创建进程 | 外存=>内存 | 最低 | NULL=>初始态=>就绪态 |
| 中级调度 | 从阻塞队列中选择合适的进程调回内存 | 外存=>内存 | 中等 | 阻塞态=>就绪态 |
| 低级调度 | 从就绪队列中选择合适的进程配合CPU | 内存=>CPU | 极高 | 就绪态=>运行态 |
进程调度的模型

相对进程的状态模型,这里出现了两种新状态,就绪挂起和阻塞挂起。
这本质上是一种优化,比如进程进入了就绪态/阻塞态。但该进程优先级很低,CPU根本调度不到该进程,该进程还白白占用内存,那不如将它挂起,从内存移入外存。释放内存为更高优先级的进程服务。
比如你的屏保程序,是CPU完全没事干的时候,才会运行。如果一直占用内存,只会白白浪费。
眼见为实

常见调度算法
调度算法的选择直接影响系统性能,常见算法为抢占式(直接中断)和非抢占式(进程自愿释放)
先来先服务(First-Come First-Served,FCFS)
按照进程进入就绪队列的顺序分配CPU,先到先得。
优点:实现简单,公平性基于到达顺序
缺点:可能导致"护航消息",短CPU时间的进程要等待长CPU进程执行完成,周转性较差短作业优先(Shortest Job First,SJF)
选择预计执行最短的进程优先运行。
优点:平均周转时间最小化
缺点:需要预知运行时间,实现很难。谁家好人算这个啊!轮转法(Round Robin,RR)
为每个进程分配固定的时间片(比如15ms),进程时间片用完后,返回就绪队列。
优点:保证程序快速响应,适合交互式系统
缺点:上下文切换频繁,降低系统性能优先级调度(Priority Scheduling)
为每个进程分配优先级,高优先级先执行。
分为静态优先级:进程创建时即确定好优先级,动态优先级:根据运行情况动态调整优先级
优点:按需运行,高优先级进程能占用大量CPU。
缺点:低优先级进程可能一直得不到调用。动态设置优先级时,优先级难以界定。多级反馈队列(Multilevel Feedback Queues)
设置多个优先级队列,比如按照时间片的长短分组。新进程首先进入高优先级队列,如果未在时间片内完成,则降级到下一级队列
进程调度时机与方式
什么时候需要进程调度?
- 主动放弃
- 进程正常终止
- 运行过程中发生异常而终止
- 主动阻塞,比如等待I/O,Sleep
- 被动放弃
- 分配的时间片用完
- 更高优先级进程的插入,比如I/O中断
什么时候不能进程调度?
- 处理中断的过程
- 进程处于操作系统内核临界区
- 系统原语操作过程
说人话就时,当系统执行原子操作时,就不能调度。
你都是原子操作了,要是能被调度,那还叫原子操作吗?
进程调度方式
- 抢占式
由操作系统剥夺当前进程的CPU使用权 - 非抢占式
进程主动放弃CPU,全凭良心。
进程调度程序
- 支持内核级线程的操作系统,调度的对象是线程
- 不支持内核级线程的操作系统,调度的对象是进程
Idle进程
CPU通电后,就需要一直运行。就算没有工作,也要给CPU几条指令,组成一个循环,在那里空转。
因此系统会创建这么一个特殊的Idle进程。
从它的工作性质不难猜出它的特性:
- 优先级最低
- 能耗低
- 啥也不干
眼见为实

重生之我是操作系统(五)----CPU调度的更多相关文章
- 操作系统:cpu调度 6-25
1. 进程选择 1小时和1分钟? 进程优先1分钟,再执行1小时. 时间短的进程先执行,执行顺序也有关. 2. 遇到io操作,执行的进程先让出cpu,切换其他进程. 3.进程先来先服务,进程调度策略: ...
- 操作系统学习笔记(五)--CPU调度
由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...
- 操作系统(五)CPU调度
CPU调度是多道程序操作系统的基础.
- 操作系统概念学习笔记 10 CPU调度
操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...
- 操作系统学习笔记:CPU调度
CPU调度的目的在于提高CPU利用率,不让CPU闲着.CPU是宝贵的资源,如果有一个进程,本来在CPU中运行,忽然因为要使用IO资源,于是转而请求IO,这边CPU挂起,造成就绪队列中的其他进程等待,这 ...
- 操作系统 | 结合 CPU 理解一行 Java 代码是怎么执行的
根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...
- 【转】CPU调度
转自:http://blog.csdn.net/xiazdong/article/details/6280345 CPU调度 用于多道程序 以下先讨论对于单CPU的调度问题. 回顾多道程序,同时把 ...
- Thread.Sleep(0)的意义 操作系统中CPU的竞争策略
在线程的学习中遇到的 不太明白就搜了一下 有一篇觉得写得很好的分享一下 转载:http://www.360doc.com/content/12/1220/07/1054746_255212714.s ...
- spring boot / cloud (十五) 分布式调度中心进阶
spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...
- 操作系统切换CPU的方式
操作系统切换CPU的方式 1 IO等待切换. 2 时间轮询切换,也就是如果没有IO等待的情况下,就会有时间轮询切换,不让CPU一直处理一个任务 CPU的处理速度是纳秒级别的,所有我们可以同时听歌, ...
随机推荐
- HTTPS 证书自动化运维:基础知识与重要性
简介: 随着互联网的飞速发展和网络安全威胁的日益增多,HTTPS(HyperText Transfer Protocol Secure)已经成为保护网站和用户数据安全的标准协议.HTTPS 证书的管理 ...
- 【忍者算法】从股市走势到动态规划:探索最大子数组和问题|LeetCode 53 最大子数组和
从股市走势到动态规划:探索最大子数组和问题 生活中的算法 想象你是一位股票交易员,手上有一支股票的每日涨跌数据.你想找出哪段连续的交易日能获得最大的收益.如果某天股票上涨5元,我们记为+5,下跌3元记 ...
- 火了整个春节的DeepSeek,他对AI产品的意义到底是什么?
相信春节期间各位的朋友圈一定被DeepSeek"轰炸"了,就算是普通人也获得了一些信息:国内AI取得了巨大突破. 但DeepSeek这次突破到底对一般的互联网从业者有什么帮助,绝大 ...
- 2025苹果春季发布会前瞻:新品迭出,Apple Intelligence国行版即将上线!
随着2025年的到来,苹果公司的春季发布会也渐行渐近.作为科技行业的领军企业,苹果每一次的新品发布都备受瞩目.本次春季发布会,苹果预计会带来一系列令人期待的新品,同时,国行Mac用户也将迎来一个重大更 ...
- 5.main.js配置
1.根目录新建api文件夹 api文件夹分mock(存放虚拟json)和urls(api请求链接) urls 中新建index.js来汇总按分类拆分的url请求文件 2.添加api配置 imp ...
- P1081 [NOIP 2012 提高组] 开车旅行 题解
传送门 前言 爆肝到半夜,中间假了一次,最终调过了两个样例,交上去过了. 题解 思路 首先进行预处理. 用一种你喜欢的数据结构维护每个城市的海拔,容易求出从每个城市出发,小 \(A\) 和小 \(B\ ...
- WPF 调试工具使用
参考链接: https://supportcenter.devexpress.com/ticket/details/t720001/how-to-use-the-snoop-utility-to-in ...
- kubesphere应用系列(四)--创建自动流水线
第一步创建多分支流水线 复制生成的url,也可以在编辑设置时复制 第二步新增Jenkinsfile文件 新增Jenkinsfile文件放在根目录 方式一:官方示例:https://github.c ...
- [HEOI2014]大工程 题解
发现可以直接建立虚树. 设 \(dp_{u,0/1/2}\) 表示第 \(u\) 个节点的子树内,所有选中节点到它的距离之和/选中节点中到它的最短距离/选中节点中到它的最长距离,\(as_{u,0/1 ...
- 关于 False、True、0、1、tinyint(1) 的说明
MySQL 保存 Boolean 值时,用 1 代表 TRUE,0 代表 FALSE:类似一个 bit 位,默认没有数据,即为 0,也即 Faslse MySQL 存储 Boolean 值的类型为 t ...