news 2026/4/18 9:42:44

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

作者头像

张小明

前端开发工程师

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/4/18 8:51:02

【dz-1119】基于单片机的二氧化碳生物培养箱控制系统设计

摘 要 随着生物科技的不断发展,二氧化碳生物培养箱在科研、医疗及工业生产等领域的应用日益广泛。为确保培养箱内的环境条件满足生物培养需求,设计一套基于单片机的智能控制系统显得尤为重要。 本设计采用STM32F103C8T6单片机为核心,通过SGP…

作者头像 李华
网站建设 2026/4/18 8:51:51

实战案例:基于M2FP搭建在线试衣系统,3天完成API对接

实战案例:基于M2FP搭建在线试衣系统,3天完成API对接 📌 项目背景与业务需求 在虚拟试衣、AR穿搭推荐等智能零售场景中,精准的人体语义分割是实现“换装合成”的核心技术前提。传统方案依赖单人检测姿态估计的组合流程,…

作者头像 李华
网站建设 2026/4/17 7:44:18

Redis字符串最多能存多少?

文章目录一个字符串类型的值能存储最大容量是多少?一、问题的提出二、普通字符串的最大容量1. Redis的内存分配机制2. Redis的默认配置3. 如何设置字符串的最大长度三、大键(Big Key)问题1. 大键的危害2. 如何检测大键3. 大键的解决方案四、字…

作者头像 李华
网站建设 2026/4/18 8:54:31

M2FP模型缓存机制优化

M2FP模型缓存机制优化:提升多人人体解析服务的响应效率 📖 项目背景与技术挑战 在当前计算机视觉应用中,多人人体解析(Multi-person Human Parsing)正成为智能安防、虚拟试衣、人机交互等场景的核心能力。M2FP&#xf…

作者头像 李华
网站建设 2026/4/18 8:54:49

AbMole丨Berberine(小檗碱)在肿瘤、炎症和纤维化研究上的应用

Berberine(BBR, 小檗碱,AbMole,M9168)是一种异喹啉类生物碱,广泛存在于黄连等植物中,具有多靶点作用机制和广泛的科研应用价值,近年来备受关注。在细胞模型中,研究显示Berberine可通…

作者头像 李华
网站建设 2026/4/18 8:52:19

模型更新怎么办?M2FP提供长期维护与版本升级路径

模型更新怎么办?M2FP提供长期维护与版本升级路径 📖 项目简介:M2FP 多人人体解析服务 在计算机视觉领域,人体解析(Human Parsing) 是一项关键的细粒度语义分割任务,目标是将人体分解为多个语义明…

作者头像 李华