当前位置: 首页 > news >正文

计算机操作系统(十)调度的概念与层次,进程调度的时机与进程的调度方式

计算机操作系统(十)调度的概念与层次,进程调度的时机与过程的调度方式

  • 前言
  • 一、调度的概念:
  • 二、调度的三个层次:
    • 1. 高级调度(作业调度)
    • 2. 中级调度(内存调度)
    • 3. 低级调度(进程调度)
  • 三、进程的挂起状态与七状态模型
    • 挂起状态:进程的"休眠模式"
    • 七状态模型:进程的7种状态变化
  • 四、三层调度的联系与对比
  • 五、进程调度的时机:什么时候需要"换选手"
    • 需要调度的情况:
      • 1. 主动放弃:进程自己"举手投降"
      • 2. 被动放弃:系统强制"换人"
    • 不能调度的情况:
      • 1. 临界资源访问时:需要"排队使用"
      • 2. 内核临界区:系统的"敏感操作"
    • 特殊情况:有的系统只允许主动放弃
  • 六、进程调度的方式
    • 1. 非剥夺调度(非抢占式)
    • 2. 剥夺调度(抢占式)
  • 七、进程切换
    • 狭义vs广义调度:
    • 进程切换的过程:
    • 频繁切换的代价:


前言

  • 在上一篇博客里,我们聊了线程的概念和特点。
  • 这篇博客里我们来详细讲一下操作系统里另一个重要概念 ——调度,看看系统如何像一位高效的管家,合理安排进程的运行顺序。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482


一、调度的概念:

  • 想象你在食堂打饭,阿姨要决定先给哪个同学打菜,这就是一种"调度"
  • 在计算机里,调度指的是操作系统为进程(程序的运行实例)分配CPU资源的过程。比如你同时打开微信、浏览器和文档,系统需要决定先让哪个程序占用CPU运行,这就是进程调度的核心任务。
    在这里插入图片描述

二、调度的三个层次:

1. 高级调度(作业调度)

  • 作用:从外存(硬盘)中选择一批作业装入内存,相当于学校的"招生办"。比如你双击打开一个游戏,系统先把游戏数据从硬盘加载到内存,这个过程就由高级调度负责。
  • 例子:手机后台有10个待启动的App,系统先加载常用的微信、支付宝到内存,暂时把不常用的游戏留在硬盘。
    在这里插入图片描述

2. 中级调度(内存调度)

  • 作用:把暂时不用的进程从内存移到外存(挂起),需要时再移回来。比如你把视频软件最小化到后台,系统会减少它占用的内存资源,甚至暂时"冻结"它。
  • 例子:电脑同时运行3个大型软件时卡顿,系统会自动把暂时不用的软件数据移到硬盘虚拟内存,释放物理内存给当前使用的软件。

3. 低级调度(进程调度)

  • 作用:在内存中选择一个就绪进程分配CPU,是最频繁、最底层的调度。比如你一边听歌一边打字,系统会让音乐进程和打字进程轮流占用CPU,每次几毫秒。
  • 例子:手机微信收到消息时,系统立即暂停当前的游戏进程,让微信进程占用CPU处理消息,处理完再切回游戏。

三、进程的挂起状态与七状态模型

在这里插入图片描述

挂起状态:进程的"休眠模式"

  • 当进程被中级调度移到外存时,就进入挂起状态,相当于手机App被"后台冻结"。比如你把浏览器最小化很久,系统会挂起它,此时它既不能运行(不在内存),也不能立即恢复(需要重新加载到内存)。

七状态模型:进程的7种状态变化

  1. 运行态:正在占用CPU(比如你正在编辑的文档)。
  2. 就绪态:在内存中准备好运行,等待CPU分配(比如后台等待的微信)。
  3. 阻塞态:因等待资源(如等待网络加载)暂停运行(比如视频缓冲时的播放进程)。
  4. 挂起运行态:运行时被挂起到外存(很少见,比如极端内存不足时)。
  5. 挂起就绪态:就绪态被挂起(比如长期最小化的App)。
  6. 挂起阻塞态:阻塞态被挂起(比如等待文件下载时被冻结的进程)。
  7. 新建态:进程刚创建,还未进入内存(比如刚点击打开但未加载的程序)。

四、三层调度的联系与对比

调度层次核心任务操作对象执行频率例子类比
高级调度决定谁进入内存作业(程序)几分钟一次学校招生办筛选学生
中级调度调整内存中的进程状态进程(内存数据)几秒一次班主任调整学生座位
低级调度决定谁占用CPU进程(CPU时间)每毫秒多次老师点名学生轮流发言

五、进程调度的时机:什么时候需要"换选手"

在这里插入图片描述

需要调度的情况:

1. 主动放弃:进程自己"举手投降"

  • 进程完成任务(比如视频下载完毕)。
  • 进程进入阻塞态(比如等待用户输入时)。
  • 例子:你在文档中按下"保存"后,保存进程会主动暂停,等待硬盘写入完成,此时系统调度其他进程。

2. 被动放弃:系统强制"换人"

  • 时间片用完(比如每个进程只能用10毫秒CPU,时间到就强制切换)。
  • 更高优先级进程到来(比如手机来电时,系统强制暂停当前游戏)。
  • 例子:电脑运行多个程序时,系统每隔几毫秒就切换一次,让每个程序"轮流执政",避免某个程序独占CPU。

不能调度的情况:

1. 临界资源访问时:需要"排队使用"

  • 比如多个进程同时操作打印机,必须等一个进程打印完,另一个才能开始,否则会导致打印乱码。就像两个人同时用一支笔写字,必须轮流使用。

2. 内核临界区:系统的"敏感操作"

  • 当进程在内核态执行关键操作(如修改内存分配表)时,不能被中断,否则可能导致系统崩溃。好比医生做手术时不能被打断,否则会有危险。

特殊情况:有的系统只允许主动放弃

  • 比如早期的Windows系统,进程必须自己释放CPU,否则会导致卡顿(类似老师让学生自由发言,不强制打断)。

六、进程调度的方式

在这里插入图片描述

1. 非剥夺调度(非抢占式)

  • 特点:一旦进程占用CPU,除非主动放弃,否则不会被打断,实现简单但实时性差。
  • 例子:传统课堂上,老师让一个学生发言,必须等他说完才能叫下一个,即使另一个学生有更紧急的问题。

2. 剥夺调度(抢占式)

  • 特点:系统可以强制中断当前进程,分配给更高优先级的进程,实时性强但实现复杂。
  • 例子:医院急诊,无论当前病人是谁,只要有更危重的患者到来,医生会立即暂停当前处理,优先抢救急诊病人。

七、进程切换

狭义vs广义调度:

  • 狭义调度:单纯选择哪个进程运行(相当于老师决定叫哪个学生发言)。
  • 广义调度:包括进程切换的全过程(不仅决定叫谁,还要让前一个学生坐下,下一个学生站起来)。

进程切换的过程:

  1. 保存旧进程数据:把当前进程的CPU寄存器值、内存地址等保存到"进程控制块"(类似学生的课堂笔记)。
  2. 恢复新进程数据:把新进程的"笔记"加载到CPU,让它从上次中断的地方继续运行(类似学生接着上次的内容继续发言)。

频繁切换的代价:

  • 每次切换需要几十到几百纳秒的时间,如果频繁切换(比如每秒上万次),会浪费大量CPU时间在"保存/恢复"上,导致系统卡顿。就像频繁换电视频道,每次换台都需要加载新频道,换得太频繁就会觉得电视卡壳。

以上就是对本次关于操作系统博客内容的总结,后续我们将深入探讨操作系统更多知识。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

  • 基于STM32的骑行语音播报系统
  • 3.2.3
  • 从加密到信任|密码重塑车路云一体化安全生态
  • 【VSCode】安装与 ssh 免密登录
  • 企业网站架构部署与优化-Nginx核心功能
  • Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南
  • 两个重要的alpha表达式
  • 影刀Fun叉鸟-打刀刀
  • vscode打开vue + element项目
  • 鸿蒙版Flutter库torch_light手电筒功能深度适配
  • 《从虚拟 DOM 到 Diff 算法:深度解析前端高效更新的核心原理》-简版
  • 学习 Android(十)Fragment的生命周期
  • C语言中的内存函数
  • 9-码蹄集600题基础python篇
  • 第二次中医知识问答微调
  • Java 代码生成工具:如何快速构建项目骨架?
  • 游戏盾功能与技术解析
  • 数据库表关系详解
  • Python实例题:Python实现简单画板
  • 建筑资料员考试主要考什么
  • wordpress建站连接数据库/合肥关键词排名优化
  • 网站备案号查询/重庆疫情最新数据
  • 广州市民政局网站建设/最新seo操作
  • wordpress上传附件类型/seo网络贸易网站推广
  • 自动做网页的网站/移动优化课主讲:夫唯老师
  • 武汉市江汉区疫情最新消息/电脑系统优化软件十大排名