新闻详情

新闻详情

首页 / 资讯中心 / 详情

操作系统进程调度:课堂练习3.3手算与Python模拟

发布时间:2026/10/1 5:01:54来源:尧图网络
操作系统进程调度:课堂练习3.3手算与Python模拟
操作系统这门课进程调度几乎是绕不过去的一道坎而课堂练习3.3往往就是第一次真正让你坐下来算数、画图、比较算法的那道题。它看起来只是几行表格加几个时间数字实际上考的是你对进程调度这件事的整体理解进程什么时候被选中、CPU什么时候被让出去、队列里的顺序怎么变、一组数据算下来谁优谁劣。很多同学卡在这里不是因为不会算减法而是因为脑子里没有一个清晰的时间轴模型导致每道题都要重新猜一遍规则。这篇内容我想按着“先讲清题目在考什么、再把概念和时间量理顺、接着手算一遍经典算法、最后用代码把这套逻辑固化下来”的顺序展开。适合正在做这道练习的同学也适合已经学过但一算就乱的读者。你会看到完整的推演过程、参数选择背后的理由、代码实现里几个容易写挂的细节还有我在做题和写模拟器时踩过的坑。全文以 Python 模拟为主但核心是思路换成 C、Java 甚至 Excel 手工推演都不影响。1. 这道课堂练习到底在考什么1.1 把“进程调度”四个字拆开看看到“课堂练习3.3进程的调度”这个标题第一反应不应该是去找公式而是先问自己调度这件事到底在调什么答案是把有限的 CPU 时间分配给多个都想要 CPU 的进程。一旦接受了这个前提问题就变成三个必须回答的点谁来排就绪队列的组织方式、按什么规则排调度算法、什么时候重新排调度时机。这三件事只要有一件没想清楚整道题的结果就是错的。课堂练习之所以把它单独拎出来是因为它同时踩中了两条主线一条是数据结构的应用队列、优先队列另一条是操作系统的核心机制进程状态迁移。很多教材把它放在进程管理这一章的中后段前面刚讲完 PCB、进程状态图、原语后面紧接着就是调度算法这个位置绝不是随便放的。它要你做的是把这些散点串成一条能跑起来的时间线。所以拿到题目第一件事我建议先把题干里的表格抄一遍列出进程名、到达时间、服务时间有的题叫运行时间或 CPU 突发时间这三列。如果题干还给了优先级那就再加一列。抄的过程本身就是一次信息核对很多错题都源于看错了某一行的到达时间或者漏了一个进程。别嫌这一步土我做过统计同一批人里出错的原因纯粹计算失误的比例其实低于看错数据的比例。1.2 老师为什么偏偏在这里设卡调度是操作系统的分岔路口进程调度之所以成为设卡点是因为它是一个典型的“多条路都能走但结果差很多”的问题。同一个进程集合用 FCFS 算出来的平均周转时间可能是 11.8用 SJF 可能降到 9.6用时间片轮转又可能反弹回 13 以上。这组数字的落差会逼着你思考为什么短作业优先看起来更“聪明”为什么时间片轮转反而变差了它真的差吗这里其实藏着一个很重要的认知评价指标不同最优算法就不同。SJF 在平均等待时间上表现优秀但它对长作业不公平长作业可能一直排在后面。时间片轮转的平均周转时间看起来不占优但它保证每个进程都能在有限时间内拿到 CPU响应更均等。老师出这道题的真正意图是让你体会到“没有免费的午餐”每种调度策略都是在对某类指标做优化同时牺牲另一类指标。理解了这一层你在答题时就不会只盯着一个平均数字下结论。我见过不少同学算出 SJF 平均周转最小就直接写“SJF 是最好的算法”这种结论在考试里很容易被扣分因为它忽略了对长作业的公平性和实现成本。正确的表述应该是“在给定指标下 SJF 更优但它需要预知服务时间且对长作业不利”。这句话是加分的。1.3 动手前的准备一张表把参数对齐真正开始算之前我习惯先做一张“参数对齐表”把每个进程的关键信息固定下来。以一道常见的五进程题目为例进程到达时间服务时间优先级数字越小越高P1053P2131P3284P4322P5445这张表的作用是后续所有推演的唯一数据来源。我会在草稿纸旁边留出一块空白专门画时间轴标出 0、1、2、3……每个整数时刻上发生了什么谁到达了、谁被选中、谁运行完。这个习惯能极大降低“算了后面忘了前面”的概率。对齐数据时有两个细节特别容易忽略。第一是到达时间的边界到达时间等于当前时刻的进程算不算已经就绪绝大多数教材的约定是“到达时间 ≤ 当前时刻”即视为就绪也就是说 t2 到达的 P3在 t2 这一刻就可以被调度。第二是同时到达的处理如果有两个进程在同一时刻到达题干通常会补充“按进程号顺序”或者“按先来先服务”如果没有说明我一般按进程编号小的优先并在答题时注明这个假设——写清假设本身就是一种严谨。2. 概念不清就必错先把三个时间量彻底理顺2.1 PCB、进程状态和调度队列之间的关系调度的对象不是一段代码而是一个 PCB进程控制块。教材里那张状态迁移图三个基本状态是就绪、运行、阻塞调度器真正操作的是就绪队列从里面挑一个让它从就绪态变成运行态当它时间片用完或者被更高优先级抢占又从运行态退回就绪态重新进入队列。这个过程反复发生就构成了整个调度的动态画面。把这个画面记住很多题目里的“坑”就自动失效了。比如有一类题会问“进程在等待 I/O 时会不会被调度”答案是不会因为它在阻塞态根本不在就绪队列里。再比如“时间片用完的进程去了哪里”答案是回到就绪队列尾部在时间片轮转里而不是直接结束。这些判断都依赖于你脑子里那幅状态迁移图是否清晰。我在做题时会在草稿纸角落画一个小三角就绪、运行、阻塞然后用箭头标注每次调度对应的迁移。这个动作看起来多余但当题目有六七个进程、频繁切换时它能帮你避免把“阻塞”和“就绪”混为一谈。尤其是涉及 I/O 的题一个进程可能多次进出就绪队列没有这张小图很容易乱。2.2 周转时间、等待时间、带权周转时间的算法与记忆法这三个时间量是进程调度练习的评分核心公式本身很简单但一混就全错。我把它拆成一句话记忆周转看头尾等待扣掉跑的时间带权就是周转除以服务。周转时间 完成时间 − 到达时间。它衡量的是从进程到达到它彻底做完一共花了多久包含了它排队的全部时间。等待时间 周转时间 − 服务时间。它衡量的是这个进程在就绪队列里干等了多久因为真正占用 CPU 的那部分时间是服务时间不算等待。带权周转时间 周转时间 ÷ 服务时间它是把周转时间按作业大小“归一化”后的结果。带权周转时间为什么要引入因为单纯的周转时间对长作业不公平。一个服务时间为 20 的进程周转 24看起来很久但相对它自身的规模只多等了 20%一个服务时间为 1 的进程周转 5绝对数字不大但它是自身规模的 5 倍用户体验极差。带权周转时间把这种“相对感受”量化了所以平均带权周转时间比平均周转时间更能反映调度对不同规模作业的影响。计算时最容易错的地方有两个。一是CPU 空闲时间段的处理如果某个时刻没有进程就绪CPU 是空闲的下一
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

8300张YOLO头盔检测数据集实战:从训练到部署全流程 2026/10/1 5:01:53

8300张YOLO头盔检测数据集实战:从训练到部署全流程

1. 为什么我盯上了这个8300张的头盔检测数据集智慧交通这个方向,说句实在话,做的人多,但真正能落地跑起来的项目少。大部分团队卡在第一步——数据。算法可以调,模型可以换,但数据不行就是不行。我前后经手过六七个交通…

阅读更多 →
毕业论文AI率过高怎么办?从检测原理到实操工作流全解析 2026/10/1 5:01:53

毕业论文AI率过高怎么办?从检测原理到实操工作流全解析

毕业论文提交系统显示AI率72%,导师在群里一句话没多说,只回了“重写后先自查再交”。在职读研的这几年,最怕的就是这种时刻:白天在公司对着KPI,晚上熬夜改论文,到最后反而被一套“AI检测”判定成机器写的东…

阅读更多 →
Spring Boot 原生 HTTP 客户端直连 OpenAI 接口实战:流式响应与工程化落地 2026/10/1 5:01:53

Spring Boot 原生 HTTP 客户端直连 OpenAI 接口实战:流式响应与工程化落地

1. 为什么要在 Spring Boot 里自己接 OpenAI,而不是直接调现成 SDK很多 Java 后端同学第一次接触大模型集成,第一反应是去找一个封装好的 starter,加个依赖、配个 key 就完事。我一开始也这么干,结果踩了两个坑:一是某…

阅读更多 →
XSLT排序核心解析:xsl:sort属性、多级排序与避坑实践 2026/10/1 5:01:53

XSLT排序核心解析:xsl:sort属性、多级排序与避坑实践

1. 先说清楚:xsl:sort 到底是什么接触XSLT的头一个月,我一直在跟“输出顺序不合预期”搏斗。明明XML里的数据是按录入顺序放的,页面展示却非要反着来,要么数字10排在2前面,要么大小写混作一团。后来才意识到&#xff0…

阅读更多 →
Spring Boot 集成 OpenAI API 实战:构建 AI 对话服务 2026/10/1 5:01:53

Spring Boot 集成 OpenAI API 实战:构建 AI 对话服务

1. 为什么要在 Spring Boot 里集成 AI 对话能力1.1 从业务需求到技术选型的思考过程做过企业级开发的人都有一个共识:需求从来不会等你准备好才来。前阵子我手上有个内部知识库项目,产品那边突然提了个需求,说希望能在系统里直接跟文档对话&a…

阅读更多 →
DMA与磁盘计算:2022年408组成原理44题深度解析 2026/10/1 5:01:46

DMA与磁盘计算:2022年408组成原理44题深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉