说实话,这个问题挺大的。Linux内核的2.6 时代跨度非常大,从2.6.1 (2003年12月发布) 到 2.6.39(2011年5月发布),跨越了39 个大版本。3.0(原计划的2.6.40,2011年7月发布) 到 3.19(2015年2月发布),经历了20个版本。4.0(2015年4月发布)到4.2(2015年8月底发布),又有3个版本。
总的来说,从进入2.6之后,每个大版本跨度开发时间大概是 2 - 3 个月。2.6.x , 3.x, 4.x,数字的递进并没有非常根本性,引人注目的大变化,但每个大版本中都有一些或大或小的功能改变。主版本号只是一个数字而已。不过要直接从 2.6.x 升级 到 3.x, 乃至 4.x,随着时间间隔增大,出问题的机率当然大很多。
个人觉得 Linux 真正走入严肃级别的高稳定性,高可用性,高可伸缩性的工业级别内核大概是在 2003 年之后吧!一是随着互联网的迅速普及,更多的人使用、参与开发。二是社区经过11年发展,已经慢慢摸索出一套很稳定的协同开发模式,一个重要的特点是社区 开始使用版本管理工具进行管理,脱离了之前纯粹手工(或一些辅助的简陋工具)处理代码邮件的方式,大大加快了开发的速度和力度。
因此,本文汇总分析一下从 2.6.12 (2005年6月发布,也就是社区开始使用 git 进行管理后的第一个大版本),到 4.2 (2015年8月发布)这中间共 51个大版本 ,时间跨度 10年 的主要大模块的一些重要的变革。
1.抢占支持(preemption): 2.6 时代开始支持(具体时间难考,是在 2.5 这个奇数版本中引入,可看此文章[1],关于 Linux 版本规则,可看我文章[2])。
可抢占性,对一个系统的调度延时具有重要意义。2.6 之前,一个进程进入内核态后,别的进程无法抢占,只能等其完成或退出内核态时才能抢占,这带来严重的延时问题,2.6 开始支持内核态抢占。
2.普通进程调度器(SCHED_OTHER)之纠结进化史
Linux一开始,普通进程和实时进程都是基于优先级的一个调度器,实时进程支持 100 个优先级,普通进程是优先级小于实时进程的一个静态优先级,所有普通进程创建时都是默认此优先级,但可通过 nice() 接口调整动态优先级(共40个)。实时进程的调度器比较简单,而普通进程的调度器,则历经变迁[3]:
(1) O(1) 调度器:2.6 时代开始支持(2002年引入)。顾名思义,此调度器为O(1)时间复杂度。该调度器以修正之间的O(n) 时间复杂度调度器,以解决扩展性问题。为每一个动态优先级维护队列,从而能在常数时间内选举下一个进程来执行。
Linux内核版本号的格式为x.yy。zz,yy是主版本号,yy是二次版本号和zz是修订版本号。升级的主要版本号是缓慢的,和修订版本号只会让微小的变化,内部和外部的版本。
因此主版本号是次版本号。如果小版本号是奇数,这意味着开发版本尚未正式发布,甚至和版本号代表着稳定版本。
版本号是版本的标识号。每个 *** 作系统(或者更广泛地说,每个软件)都有一个版本号。版本号允许用户知道 *** 作系统是否是最新的版本,以及它提供了什么功能和设施。每个版本号可以分为两部分:主要版本号和次要版本号。
扩展资料:
注意事项:
Linux内核的第二种模式只有在内核发生很大变化时才会改变(历史上只有两次,分别是1994年的1.0和1996年的2.0)。数字B可以用来判断Linux是否稳定,偶数B表示稳定版本,奇数B表示开发版本。C表示错误修复、安全更新、新特性和驱动程序的数量。
以2.4.0版本为例。2表示主版本号,4表示次版本号,0表示最终版本号,只做了少量更改。在版本号中,第二个偶数版本表示它是一个可以使用的稳定版本,例如2.2.5,而第二个奇数版本添加了一些新内容,一个不一定稳定的测试版本,例如2.3.1。
因此,稳定版本来自于最后的beta升级,而稳定版本不再是在完全成熟时开发的。
在3.0版本之后出现了“A.B.”C”格式,随着新版本的发布,B也在增加,C表示修复错误、安全更新、新功能和驱动程序的数量。第三种方法是不再将偶数用于稳定版本,而将奇数用于开发版本。例如:3.7.0并不代表开发版本,而是代表稳定版本。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)