操作系统复习(四)

几种调度

低级调度

进程调度(又称低级调度 / 短程调度):负责从就绪队列中选取一个进程/线程,分配给CPU运行。

无论是批处理、分时还是多处理机,只要CPU需要执行程序,就离不开进程调度。它是操作系统中最基本、频率最高的调度,是所有系统的“刚需”。

中级调度

中级调度(又称中程调度 / 交换调度):负责将暂时不能运行的进程(如内存紧张时)换出到外存(挂起),待条件合适再换入内存。

分时系统追求“短响应时间”,但内存中驻留的交互进程过多时会内存不足。引入中级调度可以动态调节内存负载,把暂时空闲的进程挂起,优先保证活跃进程的内存空间,从而提升整体响应速度。批处理系统则因作业一旦运行就常驻内存直到结束,一般不需要中级调度。

高级调度

作业调度(又称高级调度 / 长程调度):负责从外存(磁盘)的后备队列中,选取若干作业调入内存,为其创建进程。

批处理系统的特点是“成批处理”。作业必须先通过作业调度选入内存,才能被后续的进程调度执行。而分时系统为了快速响应用户,通常直接将作业装入内存(不设作业调度或只设简单接纳控制);多处理机系统也主要用于交互和实时场景,通常不依赖传统意义上的长程作业调度。

多处理机调度

多处理机调度:专门处理系统中存在多个物理CPU(多核/多处理器) 时的任务分配问题,包括负载均衡(让各CPU负载相近)和进程亲和性(尽量让进程在同一个CPU上运行,以利用缓存)。

单核系统只需进程调度,但多核系统必须在进程调度的基础上,增加一层分配策略来决定进程具体去哪个核心上跑。

几种队列

在这里插入图片描述

作业与进程的六种状态/队列

作业流程:提交 → 后备 → 运行 → 完成

选项 状态/队列名称 所属层次 存放位置 核心含义 由谁处理
B. 提交 提交状态 作业(外存) 输入井(磁盘) 用户刚把作业交给系统,正在录入,尚未获得调度资格。 输入管理程序
C. 后备 后备状态 作业(外存) 输入井(磁盘) 作业已录入完成,在磁盘排队等待调入内存。作业调度正是从这个队列挑选作业 作业调度(高级调度)
D. 完成 完成状态 作业(外存) 输入井(磁盘) 作业运行结束(或异常终止),等待系统回收资源和输出结果。 输出管理程序 / 回收程序
F. 就绪 就绪状态 进程(内存) 内存中的就绪队列 进程已获得除CPU外的所有资源,等待分配CPU。进程调度(低级调度)正是从这个队列挑选进程 进程调度(低级调度)
A. 运行 运行状态 进程(CPU) CPU寄存器 进程正在CPU上执行指令。这里只有一个进程(单核),但多核可有多个。 CPU硬件 + 调度程序
E. 阻塞 阻塞状态(等待状态) 进程(内存) 内存中的等待队列 进程因等待I/O、信号量或事件而暂停执行。条件满足后会被唤醒转入就绪 中断处理程序 / 事件完成唤醒

关键调度对应关系(一句话记牢)

  • 作业调度(宏观,只在批处理系统中有)从 C(后备) 队列中取作业放入内存。
  • 进程调度(微观,所有系统都有)从 F(就绪) 队列中取进程占用CPU。

补充理解

  • 为什么“提交”不是调度队列? 提交是作业进入系统的“门口”,系统需要对它进行格式转换、建立作业控制块(JCB),这个过程极其短暂,通常不作为调度的目标队列。
  • “阻塞”与“就绪”的转换:阻塞队列不直接接受调度。当等待的事件发生(如磁盘I/O完成),进程会通过中断处理程序被移出阻塞队列,放入就绪队列,等待下一次进程调度。
  • “完成”后的处理:作业完成时,系统会输出结果并回收内存、PCB/JCB等资源,随后将该作业从系统中彻底删除。

几种时间

  • 到达时间(Arrival Time):作业/进程提交给系统的时间。
  • 开始运行时间(Start Time):作业/进程第一次获得CPU开始执行的时间。
  • 完成时间(Completion Time):作业/进程彻底执行完毕的时间。
  • 服务时间/运行时间(Burst Time):进程实际占用CPU进行计算的总时长(纯干活时间)。

周转时间

这是衡量批处理系统性能最核心的指标。

  • 定义:从作业提交到作业彻底完成所经过的总时间。
    - 公式:周转时间 = 完成时间 - 到达时间
  • 包含内容:它包含了作业在外存排队、内存等待CPU、CPU运行、I/O等待等所有时间。用户最直观的感受就是“我把任务交给你,你多久把结果给我”。

带权周转时间

只看绝对数值会“失真”。比如:运行1秒的作业等了10秒(周转11秒),和运行10小时的作业等了1秒(周转约10小时)。虽然前者绝对时间短,但后者体验更好。

  • 定义:周转时间与实际服务时间的比值。
  • 公式:带权周转时间 = 周转时间 / 服务时间
  • 评判标准:这个比值永远 ≥ 1。值越接近1,说明等待时间越短,系统调度越公平高效;值越大,说明进程在排队上浪费的时间远超干活的时间。

等待时间

这是衡量进程调度算法是否公平(会不会导致饥饿)的关键指标。

  • 定义:进程在就绪队列中等待被调度(分配CPU)所花费的时间之和。
  • 注意细节:它是累计值。进程可能会多次被调度、多次被剥夺(时间片到或I/O阻塞后唤醒重新排队),所有在就绪队列中排队等待的时间总和,才叫等待时间。
  • 公式:等待时间 = 周转时间 - 服务时间(运行时间) - I/O阻塞时间(在纯CPU计算场景下,等待时间 ≈ 周转时间 - 服务时间)。

响应时间

这是衡量分时系统(如桌面PC、手机)是否流畅的生命线。

  • 定义:从用户提交请求(如敲击键盘)到系统产生第一次响应(如屏幕上出现第一个回显字符)所经历的时间。
  • 关键点:它不关心任务什么时候完成,只关心什么时候开始给你反馈。时间片轮转算法(RR)之所以伟大,就是因为它极大地缩短了响应时间,让用户感觉机器在“陪着自己”操作。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐