轮转调度推演与练习
前置:能区分进程、线程、就绪与阻塞,理解队列和时间片;Python 3.10+ 仅用于轮转调度模型。教学范围为OSTEP虚拟化/并发/持久化模型;Python 3.10+。核对日期2026-10-17。示例未执行,本轮没有安装依赖、生成协议代码、启动服务或浏览器预览。完整源码和输入文件见下方「同源完整文件」;推演结论只适用于写明的模型。
完整轮转调度推演
完整轮转调度推演用队列记录任务和剩余时间,每次运行min(时间片,剩余时间)。不变量是已消耗时间加所有剩余时间等于总需求,完成任务不再入队。脚本只计算事件列表,不启动进程、不测量真实操作系统。
轮转完成时间预期
所有任务到达时间为0且忽略切换成本。第一次运行A后剩1,把它排到B后;B运行2个单位完成并退出队列,再运行A的最后1个单位。总服务量3+2=5与终点一致。
查看图表代码
轮转完成时间预期在A需3、B需2、时间片2时为A运行0到2,B运行2到4,A运行4到5。完成时间分别5与4,等待分别2与2;等待是完成减到达减运行需求,本例到达都为0。
调度公平性练习
调度公平性练习把时间片从2改成1,列出A、B的交替片段并计算首次响应。B会更早得到响应,但若每次切换有正开销,吞吐可能下降;不能只凭公平性宣称所有指标都改善。
同源完整文件
以下README含前置、输入、读者自跑步骤、预期结果、失败、恢复与清理;只做静态核对,没有执行。
model.py
python
import json
import sys
from collections import deque
def round_robin(tasks, quantum):
if type(quantum) is not int or quantum <= 0:
raise ValueError('positive integer quantum required')
if not isinstance(tasks, dict) or not tasks:
raise ValueError('nonempty task mapping required')
if any(not isinstance(k, str) or type(v) is not int or v <= 0 for k, v in tasks.items()):
raise ValueError('task names and positive integer bursts required')
queue = deque(tasks.items())
now, trace, complete = 0, [], {}
while queue:
name, remaining = queue.popleft()
used = min(quantum, remaining)
trace.append([name, now, now + used])
now += used
remaining -= used
if remaining:
queue.append((name, remaining))
else:
complete[name] = now
return {'trace': trace, 'completion': complete}
if __name__ == '__main__':
try:
data = json.load(sys.stdin)
print(json.dumps(round_robin(data['tasks'], data['quantum'])))
except (ValueError, TypeError, KeyError) as error:
print(str(error), file=sys.stderr)
sys.exit(2)requirements.txt
text
# Python 3.10+ standard library only; no third-party dependency.README.md
md
# 操作系统原理:完整示例
示例未执行。核对日期2026-10-17。教学版本族:OSTEP虚拟化/并发/持久化模型;Python 3.10+。
## 文件与依赖
文件:model.py, requirements.txt。requirements.txt为同源依赖声明;所有代码和配置都随本文展示。本例使用 Python 3.10+ 标准库,无额外运行依赖。
## 输入与前置
前置:理解就绪队列、时间片和任务剩余时间。使用 Python 3.10+,本例只依赖标准库;任务同时就绪,模型不计切换开销。输入为任务名到所需时间的映射 tasks 及正整数 quantum,具体输入和轨迹见下节。
读者将来自跑(本轮未执行):在本目录以Python 3.10+读取input.json,PowerShell示意`Get-Content -Raw input.json | python model.py`;Bash示意`python3 model.py < input.json`。把下面输入手工保存为UTF-8文件,输出按预期逐项比较。无需安装依赖,没有服务或网络调用;程序只读标准输入并写标准输出,不改原文件。失败信息写标准错误且退出2。恢复是修正输入后重读,清理只删除自己创建的input.json与输出文件,勿递归删除工作目录。
## 预期结果、失败与恢复
输入 {"tasks":{"A":3,"B":2},"quantum":2};预期trace=[["A",0,2],["B",2,4],["A",4,5]],completion={"B":4,"A":5}。quantum=0拒绝,任务空集合拒绝。
失败要保留输入和错误,先与正文的不变量及边界核对。没有真实服务或性能验证,不以这些模型输出证明生产可用性。
## 独立练习
对相同A、B需求设时间片1,列出完成与首次响应时间。
参考答案:片段A0-1、B1-2、A2-3、B3-4、A4-5。完成仍A5/B4,首次响应A0/B1,相比时间片2时B首次响应2更早;本模型忽略切换开销,不能推出真实吞吐相同。先作答,再核对
对相同A、B需求设时间片1,列出完成与首次响应时间。
逐步参考解答
片段A0-1、B1-2、A2-3、B3-4、A4-5。完成仍A5/B4,首次响应A0/B1,相比时间片2时B首次响应2更早;本模型忽略切换开销,不能推出真实吞吐相同。
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
继续阅读
- 持久性与参考
- 持久性与参考
- 持久性与参考