Linux调度算法演进与分析

本文介绍了Linux调度算法从O(n)到CFS的演进过程,包括O(n)的基本思想,O(1)调度器的优化,SD调度算法的完全公平思想,RSDL调度算法的旋转楼梯机制,以及CFS调度算法的红黑树和虚拟时钟原理,展现了Linux调度器如何实现高效公平的进程调度。
摘要由CSDN通过智能技术生成

一、前言

1.1 叙叙旧

这篇博客是自己在学习高级操作系统时,老师让我们选择一个感兴趣的题目,写一篇技术报告。自己和小组的同学商量了一下,决定选择Linux调度算法的演进。由于整个技术报告有30页,这里选择其中的核心部分进行表述,希望能够让大家了解Linux调度算法有一定的帮助。

1.2 文章摘要

调度算法是操作系统高效公平运行的核心,如何实现高效公平的调度对Linux操作系统至关重要。本文从Linux0.11内核到Linux5.0内核分析调度算法的演进,在演进过程中主要出现了经典的O(n)调度算法、高效复杂的O(1)调度算法、起到重要意义的SD调度算法、高效简单的RSDL调度算法以及沿用至今的CFS调度算法。本文介绍这些调度算法的基本思想,分析其优点与缺点以及在Linux内核中的源码,旨在让读者能够更快的理解Linux调度算法的基本思想和演进过程。

二、Linux调度算法演进史

2.1 调度器的基本介绍

进程是操作系统虚拟出来的概念,用来组织和执行计算机中的任务。但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失。如何在进程间分配有限的计算资源,最终让用户获得最佳的使用体验。内核中安排进程执行顺序的模块称为调度器。

2.2 调度器的复杂度演进

Linux内核最开始的调度算法时间复杂度为O(n),也称O(n)调度算法,系统中运行的的进程越多,花费的时间越大。在最开始的Linux版本中只支持64个进程同时运行,因此时间开销并不高,随着计算机硬件的快速发展,Linux操作系统能够同时运行越来越多的进程,因此时间复杂度成为O(n)调度算法的瓶颈。在2.6.0版本,开源社区提出了时间复杂度为O(1)的调度算法,为了进一步解决调度公平性问题提出了时间复杂度仍然为O(1)的SD调度算法和RSDL调度算法。在SD调度算法和RSDL调度算法的影响下,最终提出了时间复杂度为O(log(n))的CFS调度算法,并不断发展和完善,一直沿用至今。

2.3 调度器的核心开发者

在调度器的不断演进过程中,大量拥有开源精神的程序员参与到Linux调度器的开发中。Linus Torvalds是Linux内核的首要架构师与项目协调者,也是O(n)调度算法的主要开发者,同时也是Git开源项目的主要开发者。Ingo Molnar是匈牙利程序员,在Linux2.6.0引入了O(1)调度器,受雇于Red Hat。Con Kolivas是一名澳洲的职业麻醉师,在闲暇时间自学编程,参与到Linux调度器的开发中,提出了时间复杂度均为O(1)的SD调度算法和RSDL调度算法。Ingo Molnar借鉴SD调度算法和RSDL调度算法的完全公平思想,开发出了沿用至今的CFS调度算法。由于Con Kolivas的调度算法被替换未CFS,让他觉得自己并不被认可,曾一度在Linux开发社区发言说从此不再参与Linux kernel的开发。但是最后被Ingo Molnar邀请加入Linux开源的大家庭,一起完善Linux调度算法。

三、O(n)调度算法

3.1 O(n)调度算法基本思想

全局维护一个runqueue队列,基于runqueue队列中进程的优先级进行调度。在调度的时候,对runqueue队列中所有进程的优先级依次进行比较,选择最高优先级的进程作为下一个被调度的进程。在SMP环境下,没有采用复杂的负载均衡策略,而是依次分配给CPU,O(n)调度算法如下图所示。
在这里插入图片描述
每个进程被创建的时候都赋予了一个时间片。时钟中断递减当前运行进程的时间片,当进程的时间片被用完以后,需要等待CPU重新赋予时间片才有机会继续运行。其分配机制是:当所有的RUNNING进程时间片都被用完以后,才对所有进程重新分配时间片。其分配机制既保证了处于阻塞状态的进程时间片不会显著增加,也保证了高优先级的进程时间片不会显著减少。通过这种设计,在一个epoch后可以保证每个进程都有机会得到执行。

实时进程的优先级是静态设定的,而且始终大于普通进程的优先级。因此只有当runqueue队列中没有实时进程的情况下,普通进程才有机会执行。实时进程的调度采用FIFO和RR调度策略,先进先出的调度确保先进入的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值