什么是Linux内核?
内核是我们通常所说的“Linux技术奇迹”的最重要特征。
在IT术语中,内核既是操作系统的心脏,也是它的大脑,因为内核控制着基本的硬件。内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、共享的写时拷贝(copy-on-write)可执行程序和TCP/IP网络功能。
Linux内核的起源可追溯到1991年芬兰大学生Linus Torvalds编写和第一次公布Linux的日子。尽管到目前为止Linux生态系统早已远远发展到了Torvalds本人之外的范围,但Torvalds仍保持着对Linux内核的控制权,并且是Linux名称的唯一版权所有人。自发布Linux 0.12版起,Linux就一直依照GPL(通用公共许可协议)自由软件许可协议进行授权。
Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分。Red Hat、Novell、Debian和Gentoo等Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。
Linux发行商一般会根据自己的需要对基本内核进行定制,在一些情况下,不同的Linux版本会在自己的内核中加入主内核中没有的特性和支持,如Red Hat将部分2.6内核的特性向前移植到它自己的2.4.x内核中;再如Ubuntu Linux版本最近在Ubuntu的2.6.15 Linux内核中增加了对Sun T1处理器的支持,而这种支持目前还没有出现在主内核中。
内核的发展
Linux操作系统随每一个版本升级而变得更加稳定。
以2003年12月进入开源世界的第一个2.6内核版本为例,与其前任2.4内核相比,它在很多方面进行了改进,如支持多处理器配置和64位计算;它还支持实现高效率线程处理的本机POSIX线程库(NPTL)。实际上,性能、安全性和驱动程序的改进是整个2.6.x内核的关键。
到2004年12月,即第一个2.6.x内核发布一年后,随着“Woozy Numbat” 2.6.10 Linux内核的推出,表明一年中已经发布了10个版本,听起来数量很多,但仍少于2.4.x内核发布头一年的数量。
在2.4.0内核发布的2001年1月到这一年的12月间,共发布了这一内核的17个版本。不过,2.4.x系列中没有带有次小数点的版本号,即没有四个数字组成的版本号,而在2.6.x系列中,从2.6.8.1内核开始,一直持续到2.6.11,较小的内核隐患和安全补丁被赋予了次小数点版本号(例如2.6.11.1)。
2005年2月发布的2.6.11内核开始支持InfiniBand。
到2005年6月,Torvalds 用来帮助管理Linux内核开发的BitKeeper工具引发了一次影响很广的争论,并引发了一场开发工具的变化。2.6.12内核是第一个利用Torvald的Git程序取代BitKeeper的内核。
2005年8月,2.6.x Linux内核中代码质量得到极大的改进。代码分析机构Coverity公司当时所做的一次调查发现,2004年12月到2005年7月间,Linux内核中的“缺陷密度”下降了。虽然在此期间,Linux内核代码本身由2004年12月的576万行增加到了2005年7月的603万行,但缺陷密度却下降了2.2%。2.6.13内核在2005年8月底亮相,包含“Kexec”。Kexec提供无需经过引导加载程序(bootloader)的快速重新引导。它还包含Inotify文件系统事件监测机制,这种机制采用一种比其前任dnotify效率更高的API。
2.6.15内核是在2006年头几天发布的。对IPv6的支持在这个内核中有了很大的改进。PowerPC用户现在有了一个用于64位和32位PowerPC的泛型树(generic tree),它使这两种架构上的内核编辑成为可能。
2.6.16版本引进了对Cell处理器和Oracle的 OCFS2集群文件系统的支持。2.6.16版还包含大量修补利用Coverity代码分析工具发现隐患的补丁。
两个挑战
2.6.x Linux内核目前面临着安全和法律上的挑战。
在法律方面,Unix厂商SCO在一场复杂的诉讼中宣称Linux在一些方面侵犯了SCO的知识产权。
Torvalds 率领的Linux社区在2004年5月采取了一系列行动,以更好地记录Linux内核的提交过程,其目标是帮助减少SCO或其他公司未来提出知识产权要求的可能。
无论如何,这起宣称Linux内核中包含剽窃自SCO Unix代码的案例,清楚地表明企业对使用开源代码所怀有的一些担心。
在安全方面,Linux开发人员继续在安全问题出现时迅速修补内核。不过,我们经常看到的现象是:在每一个三位数的版本正式发布不久后很快就推出一个修补隐患或潜在安全问题的带有次小数点的四位数字的版本。例如,2.6.16.1版在2.6.16版发布一周后发布,它修补了一个潜在的安全漏洞。而2.6.15内核仅仅在发布后两周就进行了修补,修补了3个潜在的安全漏洞。
下一个内核
2.6.17 Linux内核将引进对Sun 最新的T1处理器系列的支持。它包括驱动程序升级、性能改进以及漏洞修补补丁。
Sun的UltraSPARC T1 处理器是在去年年底上市的。它包含多达8个处理内核,每个处理器内核支持4个线程,总共支持32个线程。
来自kernel.org的正式2.6.17内核并不是第一个支持Sun的Niagara架构的Linux内核。5月底推出的Ubuntu “Dapper Drake”是第一种支持Niagara的主流Linux版本。
新2.6.17内核使Linux可以更容易地处理断开/重新连接事件。Linux内核开发员Stefan Rompf解释说,2.6.17内核将使用户空间(userspace)可以影响连接事件信号,这样DHCP客户程序可以得到连接终止的通知,因此客户程序可以尝试获得一个新IP地址。
新内核还包含很多其他的新特性和支持,包括Linux VoIP H.323协议的iptable特性中对防火墙的支持。
新内核中还增加了名为splice 的新I/O机制。Linus Torvalds解释说,splice背后的真正概念是暴露给用户空间的“随机内核缓冲区”的概念。“也就是说,splice和tee运行在用户控制的内核缓冲区上,在这个缓冲区中,splice将来自任意文件描述符的数据传送到缓冲区中(或从缓冲区传送到文件描述符),而tee将一个缓冲区中的数据复制到另一个缓冲区中。因此,从一个很真实(而抽象)的意义上讲,splice相当于内核缓冲区的read/write,而tee相当于从内核缓冲区到另一个内核缓冲区的memcpy。”
2.6.17内核能够满足业界的最新需求,而它也改进了对老技术的支持,例如对老DECnet协议的支持。