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

头歌实验5:从FCFS到HRRN,三大调度算法实战解析

1. 处理机调度算法入门指南第一次接触处理机调度算法时我也被各种专业术语搞得晕头转向。直到在实验室里用实际代码跑了一遍FCFS、SJF和HRRN三种算法才真正理解它们的区别。这就像在食堂打饭FCFS就是老老实实排队SJF是让饭量小的同学先打HRRN则是既考虑排队时间又考虑饭量的综合方案。进程调度的本质是决定哪个进程能获得CPU资源。想象你是一个操作系统内核面前有五个同学进程等着你批改作业CPU时间你会按照什么顺序处理这就是调度算法要解决的问题。实验用的数据结构很简单每个进程包含进程名如A、B、C到达时间同学来到办公室的时间服务时间需要批改的作业量完成时间实际结束时刻周转时间从来到走的总耗时带权周转时间周转时间与服务时间的比值通过这个实验你会直观看到不同算法如何影响进程的等待体验周转时间系统资源利用率CPU是否总在干活公平性与效率的权衡是否让短作业占便宜2. FCFS算法先到先得的朴素哲学2.1 算法原理与生活实例FCFS(First Come First Serve)就像老式理发店不管你要剪光头还是做造型都得按进门顺序排队。我们实验用的进程数据如下进程到达时间服务时间A03B26C44D65E82用C语言实现时关键点在于维护一个完成时间变量记录当前时刻新进程的完成时间 max(到达时间, 前一个进程的完成时间) 服务时间周转时间 完成时间 - 到达时间void FCFS(PCB pcb[N]) { pcb[0].finishTime pcb[0].arriveTime pcb[0].serveTime; for(int i1; iN; i) { if(pcb[i].arriveTime pcb[i-1].finishTime) { pcb[i].finishTime pcb[i-1].finishTime pcb[i].serveTime; } else { pcb[i].finishTime pcb[i].arriveTime pcb[i].serveTime; } pcb[i].aroundTime pcb[i].finishTime - pcb[i].arriveTime; pcb[i].waroundTime (float)pcb[i].aroundTime / pcb[i].serveTime; } }2.2 性能分析与缺陷跑完程序你会发现进程B的带权周转时间高达1.83——因为它虽然只需求6个时间单位却因为前面有个A挡着实际等了7个单位周转时间13。这就暴露了FCFS的致命伤** convoy效应**。就像高速公路上慢车挡道一个长进程会拖累后面所有进程。实测数据对比平均周转时间(3119116)/5 8.0平均带权周转时间(11.832.252.23)/5 2.06这个算法实现简单但性能波动大。我在实际项目中遇到过类似情况当系统突然来个耗时任务整个交互体验就会明显卡顿。3. SJF算法短作业优先的效率革命3.1 算法思想与实现技巧SJF(Shortest Job First)像智能取号机银行柜员会优先处理存款业务耗时短而非开户业务耗时长。实现时需要维护一个状态数组记录已调度进程每次选择已到达且服务时间最短的进程int findShortestJob(PCB pcb[N], int currentTime, int status[N]) { int minIndex -1; int minTime INT_MAX; for(int i0; iN; i) { if(!status[i] pcb[i].arriveTime currentTime pcb[i].serveTime minTime) { minTime pcb[i].serveTime; minIndex i; } } return minIndex; // 返回最短作业索引 } void SJF(PCB pcb[N]) { int status[N] {0}; int currentTime 0; for(int count0; countN; count) { int next findShortestJob(pcb, currentTime, status); if(next -1) { // 没有进程到达时时间推进 currentTime; continue; } pcb[next].finishTime currentTime pcb[next].serveTime; pcb[next].aroundTime pcb[next].finishTime - pcb[next].arriveTime; pcb[next].waroundTime (float)pcb[next].aroundTime / pcb[next].serveTime; currentTime pcb[next].finishTime; status[next] 1; } }3.2 优势与潜在问题同样的进程组SJF的调度顺序变为A(0)→E(8)→C(4)→D(6)→B(2)。性能指标显著提升平均周转时间降为7.2平均带权周转时间降为1.57但我在实验室踩过坑如果不断有短作业到达长作业可能饿死。就像快餐店总是优先做外卖订单堂食顾客可能永远等不到餐。这引出了我们需要更智能的算法——HRRN。4. HRRN算法响应比衡量的平衡之道4.1 动态优先级的艺术HRRN(Highest Response Ratio Next)的响应比公式响应比 (等待时间 服务时间) / 服务时间这相当于在SJF基础上给等待久的进程加分。实现时需要实时计算每个就绪进程的响应比选择响应比最高者调度float calculateResponseRatio(PCB p, int currentTime) { return (float)(currentTime - p.arriveTime p.serveTime) / p.serveTime; } void HRRN(PCB pcb[N]) { int status[N] {0}; int currentTime 0; for(int count0; countN; count) { int selected -1; float maxRatio -1; for(int i0; iN; i) { if(!status[i] pcb[i].arriveTime currentTime) { float ratio calculateResponseRatio(pcb[i], currentTime); if(ratio maxRatio) { maxRatio ratio; selected i; } } } if(selected -1) { currentTime; continue; } pcb[selected].finishTime currentTime pcb[selected].serveTime; pcb[selected].aroundTime pcb[selected].finishTime - pcb[selected].arriveTime; pcb[selected].waroundTime (float)pcb[selected].aroundTime / pcb[selected].serveTime; currentTime pcb[selected].finishTime; status[selected] 1; } }4.2 平衡性的体现运行结果显示出良好的折中特性进程B不再像SJF那样最后处理平均周转时间7.6介于FCFS和SJF之间平均带权周转时间1.68避免了极端情况这让我想起实际项目中的经验纯粹的公平FCFS或效率SJF都可能引发问题而动态权重往往是更优解。HRRN虽然计算开销略大但在交互式系统中表现优异。

相关文章:

头歌实验5:从FCFS到HRRN,三大调度算法实战解析

1. 处理机调度算法入门指南 第一次接触处理机调度算法时,我也被各种专业术语搞得晕头转向。直到在实验室里用实际代码跑了一遍FCFS、SJF和HRRN三种算法,才真正理解它们的区别。这就像在食堂打饭,FCFS就是老老实实排队,SJF是让饭量…...

Realistic Vision V5.1 Streamlit界面响应速度优化:异步加载与缓存机制实践

Realistic Vision V5.1 Streamlit界面响应速度优化:异步加载与缓存机制实践 1. 项目背景与技术挑战 Realistic Vision V5.1作为SD 1.5生态中的顶级写实模型,其生成效果堪比专业单反相机拍摄的人像照片。然而在实际应用中,我们发现Streamlit…...

95%的人还在手动提取数据,用这个工具秒变结构化

向AI转型的程序员都关注公众号 机器学习AI算法工程你每天都要处理各种"乱七八糟"的文本:保险公司发来的邮件东一句西一句、房产中介的listing格式五花八门、医生手写的处方扫描件歪歪扭扭……想从中抠出关键信息,比如保单号、房价、用药剂量&a…...

Gemma-3 Pixel Studio保姆级教学:错误日志排查(CUDA/OOM/Processor)

Gemma-3 Pixel Studio保姆级教学:错误日志排查(CUDA/OOM/Processor) 1. 前言:为什么需要错误排查指南 在使用Gemma-3 Pixel Studio这类高性能多模态大模型时,即使是经验丰富的开发者也可能遇到各种运行错误。本教程将…...

Kimi-VL-A3B-Thinking效果展示:Gemma-3-12B-IT对比下OCR精度优势分析

Kimi-VL-A3B-Thinking效果展示:Gemma-3-12B-IT对比下OCR精度优势分析 最近在测试各种多模态模型时,我发现了一个很有意思的现象:有些模型虽然参数规模不大,但在特定任务上的表现却能超越那些“大块头”。今天要聊的Kimi-VL-A3B-T…...

CMU开源无人车导航框架实测:TARE Planner在车库环境中的自主探索效果

CMU开源无人车导航框架实测:TARE Planner在车库环境中的自主探索效果 当无人车需要在未知环境中自主探索时,传统的基于预设地图的导航方法往往束手无策。卡内基梅隆大学(CMU)机器人研究所开源的TARE Planner算法框架,为解决这一挑战提供了全新…...

Phi-3 Forest Lab完整指南:Sage Green UI定制+128K上下文调优全流程

Phi-3 Forest Lab完整指南:Sage Green UI定制128K上下文调优全流程 1. 项目概述 "在森林的深处,听见智慧的呼吸。"Phi-3 Forest Lab是一个基于微软Phi-3 Mini 128K Instruct模型构建的极简主义AI对话终端,将前沿AI技术与自然美学…...

UniApp离线打包实战:彻底移除启动页加载图标与雪花效果的终极方案

1. 为什么需要移除UniApp启动页的加载元素? 每次打开UniApp应用时,那个转圈的小雪花和中间的加载图标是不是让你觉得特别碍眼?作为开发者,我们经常需要根据产品需求定制启动页样式,但官方默认的加载动画往往与整体设计…...

Lychee-Rerank-MM部署教程:Docker镜像构建与容器化部署可行性分析

Lychee-Rerank-MM部署教程:Docker镜像构建与容器化部署可行性分析 1. 项目概述 Lychee-Rerank-MM是一个基于Qwen2.5-VL的多模态重排序模型,专门为图文检索场景的精排任务设计。这个模型能够同时处理文本和图像输入,为搜索和推荐系统提供更精…...

Hopfield 网络:从能量最小化到现代深度学习的联想记忆革命

1. Hopfield网络的前世今生:记忆如何被编码在神经网络中 第一次听说Hopfield网络时,我正对着满是噪点的老照片发愁。这种诞生于1982年的神经网络,最初就是为解决这类问题而设计的——它能够像人类大脑一样,从残缺的信息中还原完整…...

AI数据岗薪资翻倍,AI数据专家年薪90万!懂大模型的数据人真赢麻了!

昨天一个数据朋友在群里说:刚接到领导的通知,数据部门重组,传统数据岗一个不留! 看到这个消息,群里的数据人顿时炸窝了! 太不可思议了!数据人说裁就裁了?! 但冷静一想&am…...

SiameseAOE中文-base生产环境验证:日均处理10万+条评论的稳定性报告

SiameseAOE中文-base生产环境验证:日均处理10万条评论的稳定性报告 1. 引言:当评论如潮水般涌来时 想象一下,你是一家大型电商平台的数据分析师。每天,你的系统会收到超过十万条用户评论。这些评论里,有对“手机屏幕…...

Intel Haswell黑苹果升级Sonoma避坑手册:Metal加速修复全流程

Intel Haswell黑苹果升级Sonoma避坑指南:Metal加速修复实战解析 当苹果发布新一代macOS Sonoma系统时,许多使用Intel Haswell处理器的黑苹果用户发现,原本流畅运行的Metal加速功能突然失效。这不仅影响图形性能,更导致部分专业软…...

LibreOffice 7.5.5 Linux安装全攻略:解决字体乱码与PDF转换问题

LibreOffice 7.5.5 Linux深度安装指南:从字体优化到高效PDF转换 在Linux环境下处理办公文档时,LibreOffice无疑是开源生态中最强大的生产力工具之一。但许多用户在初次部署时常常遇到两大痛点:中文显示乱码和PDF转换效果不佳。本文将手把手带…...

避坑指南:Spring WebFlux中SSE连接意外中断的5种修复方案

Spring WebFlux中SSE连接稳定性深度优化指南 1. 理解SSE连接中断的核心痛点 在实时数据推送场景中,Server-Sent Events(SSE)因其简单性和与HTTP协议的天然兼容性而广受欢迎。但当我们将其与Spring WebFlux的响应式编程模型结合时,…...

告别玄学调试:用GenericApp例程实战解析ZStack OSAL事件驱动模型

从GenericApp例程透视ZStack事件驱动模型:实战调试指南 当你在ZStack开发中遇到"事件为什么没触发?"或"数据发出去没反应?"这类问题时,是否感觉协议栈内部像个神秘的黑匣子?本文将带你深入Generic…...

卡证检测矫正模型API封装教程:Python调用HTTP接口实现批量处理

卡证检测矫正模型API封装教程:Python调用HTTP接口实现批量处理 你是不是经常需要处理一堆身份证、护照、驾照的照片?这些照片往往拍得歪歪扭扭,角度千奇百怪,直接拿去OCR识别,准确率低得让人抓狂。 手动一张张调整&a…...

从零开始搭建迁移学习实验环境:PyTorch+Jupyter完整配置指南(避坑版)

从零开始搭建迁移学习实验环境:PyTorchJupyter完整配置指南(避坑版) 迁移学习作为深度学习领域的重要技术,正在计算机视觉、自然语言处理等场景中展现出强大的应用价值。但对于初学者而言,从环境配置到第一个实验跑通…...

gte-base-zh镜像部署教程:基于CSDN镜像源的极速拉取与离线安装方案

gte-base-zh镜像部署教程:基于CSDN镜像源的极速拉取与离线安装方案 你是不是正在为部署一个中文文本嵌入模型而烦恼?从GitHub拉取模型慢如蜗牛,各种依赖冲突让人头大,好不容易装好了又不知道怎么用起来。 今天,我来分…...

CentOS 7下Fail2Ban与Firewalld联动防御SSH暴力破解实战

1. 为什么需要Fail2Ban与Firewalld联动防御SSH暴力破解 最近几年服务器安全问题越来越受到重视,尤其是SSH暴力破解攻击已经成为最常见的服务器入侵手段之一。我管理的几台云服务器就经常在/var/log/secure日志里看到大量来自不同IP的登录尝试,有些攻击者…...

Qwen3.5-9B开发者必看:Gradio API接口文档与curl/python调用示例

Qwen3.5-9B开发者必看:Gradio API接口文档与curl/python调用示例 1. 模型概述与核心特性 Qwen3.5-9B是阿里云推出的新一代多模态大语言模型,基于创新的混合架构设计,为开发者提供了强大的视觉-语言理解与生成能力。该模型在unslooth平台上以…...

Windows 10下Oracle 12c安装报错INS-30131?三步搞定临时位置权限问题

Windows 10下Oracle 12c安装报错INS-30131的深度解决方案 1. 问题背景与核心原因 当你满怀期待地在Windows 10上安装Oracle 12c数据库时,突然遭遇INS-30131错误,这感觉就像在马拉松终点线前被绊倒。这个看似简单的权限问题背后,实际上是Windo…...

mPLUG VQA本地部署教程:root/.cache自定义缓存路径详解

mPLUG VQA本地部署教程:root/.cache自定义缓存路径详解 1. 引言:让图片“开口说话”的本地神器 你有没有遇到过这种情况?看到一张复杂的图表、一张产品细节图,或者一张充满信息的风景照,你特别想知道里面具体有什么、…...

皇冠CAD(CrownCAD2026R2);投影曲线(组合曲线)

将绘制的曲线投影到模型面上生成一条空间曲线;或者两个相交基准面上的草图,分别在各自垂直方向投影曲面相交生成一条空间曲线。 投影到模型面 :将一个平面上绘制的曲线(如草图)沿着特定方向(通常是草图平面…...

【环境搭建实战】Windows + PyCharm + venv:一站式配置Python与PyTorch GPU开发环境

1. 为什么需要完整的GPU开发环境 刚接触深度学习的同学经常会遇到一个尴尬场景:跟着教程安装PyTorch后,发现代码运行速度奇慢无比,后来才发现默认安装的是CPU版本。我当年第一次跑MNIST分类时,一个epoch要等20分钟,而同…...

Llama-3.2V-11B-cot开源大模型价值:支持私有化+审计日志+敏感内容过滤

Llama-3.2V-11B-cot开源大模型价值:支持私有化审计日志敏感内容过滤 1. 项目概述 Llama-3.2V-11B-cot是一个基于LLaVA-CoT论文实现的开源视觉语言模型,专为系统性推理任务设计。这个11B参数规模的模型融合了图像理解和逻辑推理能力,采用独特…...

企业级双出口网络架构实战:VRRP+MSTP主备防火墙与NAT Server的高可用设计

1. 企业双出口网络架构设计背景 现代企业网络对稳定性的要求越来越高,单点故障可能导致整个业务系统瘫痪。我在实际项目中发现,金融、医疗等行业对网络可用性的要求尤为苛刻,通常需要达到99.99%以上的可用性标准。传统单出口网络架构存在两个…...

2026年春招黑马!考研党搞定简历,AI简历工具助你直通面试

2026年的春招大幕已然拉开,对于数百万考研党而言,这无疑是时间与效率的双重考验。刚刚从高压的考研战场走下,面对瞬息万变的求职市场,如何在极短的时间内,制作出一份份专业且具有竞争力的简历,成为了他们能…...

PasteMD保姆级部署教程:5分钟用Ollama跑通Llama3:8b Markdown格式化

PasteMD保姆级部署教程:5分钟用Ollama跑通Llama3:8b Markdown格式化 1. 项目简介:剪贴板智能美化神器 PasteMD是一个完全私有化的AI文本格式化工具,它基于Ollama本地大模型运行框架,搭载了强大的llama3:8b模型。这个工具的核心价…...

IMX6ULL PWM驱动开发全攻略,【2025最新】ArcGIS for JS 实现地图卷帘效果,动态修改参数(进阶版)。

IMX6ULL PWM驱动开发指南 PWM驱动基础概念 PWM(脉冲宽度调制)是一种通过调节脉冲宽度来控制模拟信号的技术。在IMX6ULL处理器中,PWM模块通常集成在芯片内部,可用于控制电机速度、LED亮度调节等场景。 IMX6ULL的PWM控制器支持以下特…...