news 2026/3/1 18:35:27

操作系统,如何牺牲性能为了公平性,或牺牲公平性提高性能。主要体现在哪些案例中

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
操作系统,如何牺牲性能为了公平性,或牺牲公平性提高性能。主要体现在哪些案例中

这是一个操作系统设计中非常经典和深刻的问题。操作系统总是在性能(吞吐量、响应速度、资源利用率)和公平性(各进程/用户平等地获得服务机会)之间进行权衡。绝对的公平往往意味着性能下降,而极致的性能可能导致严重的“饥饿”现象。

以下是几个关键领域的案例分析,清晰地展示了这种权衡:

1. CPU调度

这是最典型的“性能 vs 公平”战场。

  • 牺牲公平性以提高性能的案例:

    • 最短作业优先(SJF)及其变种:SJF选择预计运行时间最短的进程先运行。这能最大化系统吞吐量(单位时间内完成的进程数)并最小化平均等待时间(性能指标)。但代价是,如果不断有短作业到达,长作业将永远无法获得CPU(“饥饿”),公平性极差。
    • 优先级调度(非抢占式或静态优先级):将CPU分配给高优先级进程能快速完成关键任务(如系统进程),提升系统响应关键任务的性能。但低优先级进程可能长期得不到运行,非常不公平。
    • Linux O(1)调度器早期对交互式进程的“偏爱”:为了提升桌面用户的交互体验(性能:响应速度),它会大幅提升交互式进程的优先级(通过奖励睡眠进程),这可能导致后台计算密集型任务(如编译)进展极其缓慢,对后台任务不公平。
  • 牺牲性能以维护公平性的案例:

    • 轮转调度(RR):每个进程获得一个固定大小的时间片,公平地轮流使用CPU。这保证了不会有进程饥饿,公平性很好。但性能代价是:
      1. 上下文切换开销:频繁的时间片到期导致大量的上下文切换,浪费CPU时间。
      2. 对短作业不友好:一个短作业可能仍需等待多个长作业的时间片才能完成,平均周转时间不如SJF。
    • 完全公平调度器(CFS)的“时间片”动态计算:Linux的CFS是公平性的典范。它通过“虚拟运行时间”来保证所有进程获得近乎相等的CPU比例。其性能牺牲在于:
      1. 调度开销:为了精确计算和比较虚拟运行时间,需要维护红黑树,其插入/删除操作是O(log n),虽高效但仍比简单的队列开销大。
      2. 可能不利于吞吐量:CFS严格保证公平,不会像SJF那样“投机”地优先运行短任务,因此理论上最大吞吐量不及SJF。

2. 内存管理

  • 牺牲公平性以提高性能的案例:
    • 全局页面置换算法(如全局CLOCK):当发生缺页异常时,系统可以从任何进程的物理页帧中选取一个页面换出。这能最大化内存利用率,因为总是淘汰“最不常用”的页,减少系统整体的缺页率(性能好)。但代价是,一个行为良好的小进程,可能因其页面被一个行为恶劣的大进程“偷走”而频繁缺页,对这个小进程不公平
  • 牺牲性能以维护公平性的案例:
    • 局部页面置换算法(如工作集模型、局部CLOCK):每个进程只能从自己拥有的页帧集合中置换页面。这保证了进程不会受到其他进程内存行为的侵害(公平性)。但性能代价是:可能造成内存利用率低下。例如,一个进程暂时不活跃却占着大量内存,而另一个活跃进程内存不足频繁缺页,系统也无法重新分配,导致整体性能下降。

3. 磁盘I/O调度

  • 牺牲公平性以提高性能的案例:
    • 电梯算法(SCAN, C-LOOK):按照磁头移动方向,顺序服务请求。这极大地减少了磁头寻道时间,提高了磁盘吞吐量(性能)。但公平性很差:如果磁头刚从里圈移动到外圈,一个位于最里圈的请求将不得不等待磁头走完整个来回,等待时间可能非常长(饥饿)。
  • 牺牲性能以维护公平性的案例:
    • 先来先服务(FCFS):按请求到达顺序服务。绝对公平,没有饥饿。但性能极差,因为磁头可能在全盘来回“跳舞”,寻道时间最大化,吞吐量极低。
    • 期限调度算法(Deadline Scheduler):Linux中的一种算法,它在维护类似电梯算法性能的同时,为每个请求设置一个“最后期限”。如果某个请求等待时间过长,即使会损害磁头移动顺序,也会优先服务它。这牺牲了一点寻道效率(性能),来换取更好的公平性和响应时间确定性。

4. 多处理器/多核负载均衡

  • 牺牲公平性以提高性能的案例:
    • 非对称多处理(AMP)或CPU亲和性过强:将特定任务(如中断处理)固定绑定到某个核心,或让进程尽可能留在原CPU上运行。这利用了缓存局部性,减少了缓存失效和跨核通信的开销(性能好)。但可能导致各核心负载严重不均衡,一些核心忙碌而另一些空闲,对等待队列中的进程不公平。
  • 牺牲性能以维护公平性的案例:
    • 激进的负载均衡:周期性地检查所有CPU的负载,并频繁地在核心间迁移进程和线程,以追求绝对的负载均衡(公平)。性能代价是:破坏了进程的缓存局部性,迁移后在新核心上需要重新缓存数据,并且引入了额外的迁移开销

总结与设计哲学

领域偏向性能的策略(牺牲公平)偏向公平的策略(牺牲性能)现代折中方案举例
CPU调度SJF, 静态高优先级轮转调度(RR)CFS:用虚拟时间保证公平,但通过最小粒度、睡眠奖励等优化交互性能
内存管理全局页面置换局部页面置换按比例分配:根据进程大小或优先级分配页帧,在公平与效率间平衡
磁盘调度纯电梯算法(SCAN)先来先服务(FCFS)期限调度:以电梯为主,但为超时请求开“公平绿灯”
多核调度强CPU亲和性激进负载均衡层次化调度:先在同核超线程间均衡,再在同CPU核心间,最后跨NUMA节点

现代操作系统的设计趋势是“聪明的折中”

  1. 并非绝对公平,而是“比例公平”:如CFS保证进程按权重获得CPU时间,而非绝对相等。
  2. 引入“优先级”作为调节阀:允许管理员或用户通过调整优先级,在特定场景下倾斜资源分配(如让编译任务跑在低优先级,保证桌面响应)。
  3. 识别工作负载类型:区分交互式进程和后台批处理进程,并采取不同策略。
  4. 避免“饥饿”是底线:性能优化可以导致某些任务进展缓慢,但绝不能让其完全得不到服务。这也是为什么纯粹的SJF或高优先级调度不可用于通用系统的原因。

结论:操作系统的艺术,正是在性能与公平这个动态频谱上,根据不同的应用场景(实时系统、服务器、桌面、嵌入式),寻找最佳平衡点。理解这种权衡,是深入理解操作系统内核设计的关键。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 16:05:04

【dz-1121】基于单片机的智能洗衣机设计

基于单片机的智能洗衣机设计 摘要 随着生活品质的提升和智能家居理念的普及,洗衣机的智能化、个性化需求日益凸显。传统洗衣机存在功能单一、水位与时长控制粗放、缺乏精准感知与自适应调节能力等问题,难以满足不同衣物类型、污渍程度的清洗需求。因此&a…

作者头像 李华
网站建设 2026/2/28 7:37:31

【芯片验证的“数学证明”:形式验证(Formal)为何不可或缺?】

在芯片设计领域,一个微小错误可能导致数亿美元的损失——某个处理器漏洞曾让公司付出几亿美元的代价,阿丽亚娜5号火箭因软件错误发射后爆炸。这些惨痛教训让行业意识到:传统验证方法已不足以应对日益复杂的芯片设计。形式验证(For…

作者头像 李华
网站建设 2026/2/24 16:56:00

【风电光伏功率预测】从高精度气象到日前交易:用“15分钟预测+概率区间+风险预算”把收益抬高 2–4% 的超详细实战路径(可落地)

关键词:风电功率预测、光伏功率预测、新能源功率预测、日前交易、现货交易、报量策略、偏差考核、概率预测P10/P50/P90、15分钟气象预报、3km高精度气象、多源气象融合、NWP偏差订正、自然可发功率、可用容量AvailCap、限电识别、削顶clipping、ramp预警、储能协同、…

作者头像 李华
网站建设 2026/2/28 23:08:32

Z-Image-Turbo透视矫正:一点/两点/三点透视应用

Z-Image-Turbo透视矫正:一点/两点/三点透视应用 引言:AI图像生成中的空间感知挑战 在AI图像生成领域,真实感与空间结构的合理性是决定输出质量的关键因素。尽管现代扩散模型如阿里通义Z-Image-Turbo已具备强大的语义理解能力,但…

作者头像 李华
网站建设 2026/2/27 11:05:00

API接口怎么写?M2FP Flask服务返回JSON+Base64双格式

API接口怎么写?M2FP Flask服务返回JSONBase64双格式 🧩 M2FP 多人人体解析服务 (WebUI API) 项目背景与技术价值 在计算机视觉领域,人体解析(Human Parsing) 是一项比通用语义分割更精细的任务,目标是对…

作者头像 李华
网站建设 2026/2/26 22:07:04

2026知网降AI工具深度测评

在2026年各高校明确将AIGC检测作为毕业门槛、知网算法全面升级的严峻背景下,选择一款真正有效的降AI工具,已直接关系到能否顺利毕业。本文将基于对主流工具的实测,深入剖析当前局面,并给出清晰的决策指南。 面对“比话降AI”宣称的…

作者头像 李华