从2.x到4.x,Linux内核这十年经历了哪些重要变革

从2.x到4.x,Linux内核这十年经历了哪些重要变革,第1张

Linux内核现在已经进入4.x时代了,但是据说从版本2.6升到3.0,以及3.19升到4.0这之间都没什么太大的变革。事实如此吗?内核版本间的区别有多大?

说实话,这个问题挺大的。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) 时间复杂度调度器,以解决扩展性问题。为每一个动态优先级维护队列,从而能在常数时间内选举下一个进程来执行。

下载内核

下载热点内核标准配置文件

编译内核

make menuconfig

选中Load an Alternate Configuration File ,然后选择刚下载的。config

另外,要特别选中:

1)、通过make menuconfig选中以下对应的选项

General setup –>

[*] enable deprecated sysfs features to support old userspace tools

2)、修改。config文件

修改。config文件中CONFIG_SYSFS_DEPRECATED_V2,将原本被注释掉的

CONFIG_SYSFS_DEPRECATED_V2 改成CONFIG_SYSFS_DEPRECATED_V2=y

注: 修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。

主要是解决"mount:could not find filesystem '/dev/root'"这样的错误

make bzImage

make modules

make modules_install

make install

解压修改内核

cp /boot/initrd-2.6.38.img /tmp

cd /tmp/

mkdir newinitrd

cd newinitrd/

zcat /initrd-2.6.38.img |cpio -i

rm -rf /tmp/initrd-2.6.38.img

vi init

找到这2行一样的,去掉1行

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

这主要是解决:"insmod: error inserting '/lib/dm-region-hash.ko': -1 File exists"这样的错误

从新打包内核

find .|cpio -c -o >/initrd

cd /

gzip -9 <initrd >initrd-2.6.38img

rm -rf /boot/initrd-2.6.38.img

cp initrd-2.6.38.img /boot

rm -rf /cd /usr/src/linux-2.6.38.tar.gz

rm -rf /cd /usr/src/linux-2.6.38

设置从新内核启动,重启系统

vi /boot/grub/grub.conf

把default=1改为default=0

reboot(重启系统)

升级最新linux内核的坏处

根据 Phoronix 的报告,新的 Linux 内核 5.19.12 版存在 bug,能够损害笔记本电脑的显示屏。

据悉,该问题与一个图形驱动 bug 有关,该 bug 导致显示器本身出现不需要的电源排序延迟,这可能对基于英特尔的笔记本电脑上的液晶面板造成物理伤害。根据用户报告,该问题能导致屏幕上显示白色闪光。

IT之家了解到,软件更新对计算机组件造成物理损害还是很少见的,这个问题会影响所有屏幕是直接连接到集显上的基于英特尔的笔记本,意味着所有 Nvidia Optimus 笔记本,以及一些 Intel + Radeon 组合笔记本(虽然这些笔记本非常少见)都有风险,因为即使独立 GPU 处于激活状态,集显也在驱动主显示器。

唯一的例外是,如果笔记本可以完全禁用 Nvidia Optimus,或者显示器根本没有连接到英特尔集显,这样的笔记本电脑很少。值得庆幸的是,这个问题只影响基于英特尔集显的笔记本,意味着所有基于 AMD CPU 或 APU 的笔记本都不受影响。

另外好在是,Linux 社区已经发布了一个新的 5.19.13 内核,将图形驱动中发现的所有问题恢复到以前的内核更新中,不过大多数用户需要等待他们使用的 Linux 发行版推出该内核更新。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8306856.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存