作者uefangsmith (史密斯)
看板LinuxDev
标题[情报] Linux 2.6内核的精彩世界
时间Thu Mar 19 23:25:09 2009
Take by
http://www.hzlitai.com.cn/article/ARM9-article/system/1572.html
Linux 2.6内核的精彩世界
发 布 时 间 : 2008-11-19 来 源 : 来自网路 作 者 : 匿名
Joseph Praneich
Linux内核2.6版的开发已经接近尾声,2.6测试版发布已经二个月了,正式版预计明
年年初发布。作为一个主要发布版本,2.6相对於2.4有很大的改动;它引入了许多
新的特性,同样也去除很多过时的特性。它在哪些方面有大的改动?它对Linux的
开发人员以及其他层面的Linux用户可能有什麽样的影响?阅读本文,您将得到答案。
--译者
尽管我们第一次启动Linux 2.4似乎只是昨天的事,时间已经流走,内核开发团队
的2.6版内核开发工作已经接近完成了。本文将试图描述2.6内核中的许多新特性
(侧重i386平台的Linux)。和封闭源码的软体的预发布不一样的是,这里所描述的
所有特性当前都是2.5版内核开发树中可用的(其中一些的bug少一些,另一些bug
多一些)。(按照Linux的传统,偶数版本的内核是稳定的,奇数版本的只是开发
用的)。也就是说,这里所描述的一些特性在实际的2.6版本中仍可能被去除或标志为
"experimental"(试验性)。然而内核当前处於特性冻结(feature-freeze)时期,
最终的发行版本应该不大可能过於偏离这里的描述。同时也应该清楚这里描述的一
些"新"特性在第一次出现在2.6系列内核後,可能被向後移植到了官方的或者发行
版供应商的2.4版内核之中。
或许使得这篇文章更为晦涩的是,即将到来的内核的版本号至今仍未确定。最可能使用
的版本号是2.6,但是一些人提议版本号可以使用3.0,因为这个版本中包含了NUMA以及
无MMU系统的支援。为论述方便,本文将一直使用2.6作为即将到来的内核的版本号。
您正在阅读的是本文档(《Linux 2.6内核的精彩世界》)非正式版的第一版,完稿於
2003年7月13日,基於2.5.75开发版内核。随着Linux内核最後工作的完成,这份文档将
发布其他非正式版,但是这份文档的正式版直到2.6的最後发布才宣告完成。由於本文是
非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很
高兴地去修正它们。
到目前为止的故事...
Linux内核始於1991年由Linus Torvalds为他的386开发的一个类Minix的作业系统。
Linus初始曾想命名为这个系统为Freax,但很幸运的是最後他最後没有那样做。
Linux 1.0的官方版发行於1994年3月,包含了386的官方支援,仅支援单cpu系统。
Linux 1.2发行於1995年3月,它是第一个包含多平台(Alpha,Sparc,Mips等)
支持的官方版本。Linux 2.0发行於1996年6月,包含很多新的平台支持,但是最重要
的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.2在1999年1月
到来,它带来了SMP系统上性能的极大提升,同时支援更多的硬体。
最後,Linux 2.4於2001年1月发布,它进一步地提升了SMP系统的扩展性,同时它也集
成了很多用於支援桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,
等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小
的系统(PDA等)的支援都有很大提升的"大跨越"。
多种平台支持
能够支援相当广泛的硬体和平台,是采用Linux作为内核的作业系统(比如 GNU作业系统
, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的作业系统,只是作
业系统的内核。)的优势之一。Linux自1.2版就开始包含对新的处理器类型和特性的支持
,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到Linux在Intel平台下
的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。
小规模 - 嵌入式系统中的Linux Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核
(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,
首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的专案。很多年来,
这个Linux分支为许多嵌入式晶片提供了支援,把它更多的集成到主流内核中是一
件非常有意义的事。
不像通常的Linux移植版本,这里描述的嵌入式移植版由於硬体限制和
通常的Linux相比,不具有所有类似的特性。主要的区别在於:这些移植版是针对
於没有记忆体管理单元(MMU)的处理器的(Intel的CPU从386开始就有MMU了)。缺
少MMU的支援,运行真正的多工系统时,任务之间没有记忆体保护机制(因此任何
程式都可以使得其他程式崩溃),一些有关进程派生的系统调用也无法实现。正是
因为没有记忆体保护机制(或者说,没有任何安全性可言),它们不适用於多用户系统。
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型
嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在
Motorola,Lineo,Arcturus或是其他厂商生产的系统或是评估板上找到。
大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,
他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMU的m68k处理器(比如早期
苹果机上使用的68000系列)还没有支援。最新支持的嵌入式平台还包括日立(Hitachi)
的H8/300系列(不包含H8S,但可能会尽快地集成进来)以及NEC v850处理器。
无论怎麽强调Linux 2.6旨在支援无MMU系统的主要体系结构变化,都不为过分。
所有Linux的前期版本,不论直接或是间接,都起源於Linus最初在Intel 80386上的
工作,局限性是固有的。沿着这个方向(对无MMU系统的支援),将来也许会有更多
的其他早期的硬体被支援(事实上,已经有关於此目的的专案启动)。但是,不像为
现代的以及仍在生产中的嵌入式处理器的提供支援,对早期的硬体的支援被更多地认
为是基於某种爱好,并且对於最终用户而言很可能是无用的(因此在今後的Linux的
官方发布版本也许不会将其包含在内)。
最新的Linux版本包含了对Axis通信公司的ETAX CRIS
("Code Reduced Instruction Set")处理器的支援(更确切地说,支援ETRAX 100LX
及更新的产品),它从技术的角度而言不是uCLinux合并的一部分(因为它包含MMU单元)
。实际上对这款处理器的支援在2.4开发周期就已经有了,但它在2.4.0以後才被引入,
所以现在应该提到它。它是主要用於网路设备的嵌入式处理器。与此相关的ETRAX 100
,是得到uClinux支持的无MMU处理器,但是在主流的Linux内核中相关支持却没有集成
进来。
Opteron支持 -消费级的64位Linux
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron晶片
(基於AMD64体系结构)的支援。Opteron向後与Intel-clone的处理器相容,并且,
甚至可能得到微软的支持。是它还是Intel的Itanium家族的某一成员成为64位元消
费级产品的事实标准现在还很难下定论。尽管2.4系列内核的後期版本已经可以在该
晶片上运行,但作为产品应用仍受到了很大限制。
对高端用户来说,最严重的问题是
,每个应用程式的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上
运行x86(32位元)的程式的支援得到了改进。
子
体系结构(Subarchitecture)支援
Linux 2.6除了对许多新的处理器体系结构外
,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常
假设处理器和其他硬体是配套的。也就是说,i386系列处理器只会在PC/AT伺服器
上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支援使其可
以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386
体系结构上,这个假设早被打破了。比如,m68k很早就支援Amiga,Michintosh等
平台。)Linux 2.6对於此最大的变化就是,让这个特性以及概念成为标准,以便所有
的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模组。
标准的
确立使得i386可以运用於两个新的平台。第一个是NCR的Voyager体系。这是一个对
称多处理器(SMP)系统(在Intel的MP规范标准确定之前就已经开发出来了),它
支援多达32个486-686的处理器配置。实际采取这种体系结构的产品处理器的配置
数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就
不支持)。第二种得到最新支援的体系结构是更为广泛使用的由NEC开发的PC-9800
平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载
的是8086处理器,最终发展到奔腾级处理器和SMP支援。(当然,Linux对它的支持
局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本
曾移植到这个平台上。该平台由於生产商对标准PC的偏爱,生产已经中止。
Linux
对差异细微的硬体类型支援的形式化,使得作业系统能更容易的移植到其他平台上
,比如移植到专为存储设计的硬体或者是使用在工业领域的主流处理器。需要澄清
的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的
系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux
的差别来说,驱动程式等相对小的差别还不足以把它们从传统的i386系统中分开。
Linux对X-box的支援,就不是子体系结构的问题。
大规模 - 非一致存储访问体
系结构(NUMA)和大型机
除了以上所提及的新硬体类型的支援之外,新的Linux内
核发行版也包含了对大型伺服器(一些运行i386处理器,也有些运行其他处理器)
更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完
成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成
为此领域的有力竞争者。
在此方面最大的改变就是Linux对NUMA伺服器的最新支持
。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率
的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中
最大的设计局限之一就是系统中只有唯一的一块记忆体区,所有的处理器对它都平等
地对它进行访问。在多处理器系统里,这样会在同一条记忆体汇流排上的多处理器
之间引起相当高的竞争,导致性能瓶颈。NUMA伺服器,通过引入了以下的理念解决
了这个问题:对於某个特定的处理器,一些记忆体比其他一些的更为接近(close
)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含
了处理器、记忆体以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们
可以相互通讯;显而易见,相对其他卡上的记忆体,每块卡上的处理器能更快的访
问本地记忆体(自己的卡上记忆体)。从许多角度上看,NUMA体系结构就是一个紧
密耦合的集群特例。
为了给NUMA主机提供良好的支援,Linux十分必要在许多方
面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知
道处理器和记忆体以及其他IO设备间的相互关系。有了内部拓扑API的支援,Linux
的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。
此外,许多NUMA主机在各个节点(nodes)的线性记忆体区域之间存在空洞(holes
)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可
以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年
,我们可以期待Linux在高端机型上效率以及其他方面的进步。
深入Linux
除
了横向支援越来越多的硬体,Linux 2.6还在已支援的平台上根据硬体的性能提升
进行了改进。这些针对特定CPU的优化包括:Transmeta的Crusoe系列,Intel’s P
entium 4 Xeon、Pentium 3-M、Pentium 4-M 和AMD移动处理器。新版本Linux还解决
了某些Athlon处理器自身的bug导致的问题。Linux 2.6还解决了在某些多於16个处
理器的系统启动时偶尔会挂起的问题,尽管这个bug不会影响大多数用户的正常使
用。
超线程
在Linux 2.6中不算新鲜,内核在2.4.17发布中就已经开始包含对I
ntel P4处理器的超线程(Hyperthreading)的支持(在这里提及它,一是因为它
并没有包含在2.4最初的发布中,二是自那以後内核又有了很大的改变)。超线程
使得单个的处理器可以伪装成作业系统看来二个或更多的多个处理器。最令人激动的
是,Linux是第一个把超线程特性引入市场的作业系统,尽管早在一年前Intel就发
布了相容的处理器。有传闻说,微软在对支持超线程的CPU按一个CPU还是按两个CP
U收取授权费(license)的问题上拿不定主意。Linux的开放模型(以及没有基於c
pu的授权)使得Linux作业系统第一个支援这个新特性。显然,一个处理器就算扮
作两个处理器工作,它还是一个处理器,性能并不能因此增加很多。2.5中调度器和
其他一些部分在有了新的优化,使得处理器的超线程可以真正的发挥作用。如果是
在2.4下加入超线程支持,结果就不一定了,有时性能还会下降。
容量 -- 可扩
展性的进展
除了对NUMA的支持,Linux 2.6在处於食物链顶端的Intel伺服器方面
,也有一些变动。最重要的就是对Intel的物理位址扩展(PAE)的完全支援,使得
较新的32位元的x86系统可以访问高达64GB的记忆体,但仅仅限於页面映射模式。
另外,通过加强对高级可编程中断控制器(APIC)的支援,多处理器系统之上的IRQ
均衡(balancing)大大提升。
在许多其他方面,内部限制在可能的地方都有所
放松。Linux系统上用户和用户组的数目从65000越升到了超过40亿(实际就是16位
到32位的变化)。这使得Linux在之前可能超越限制的大型档和认证伺服器上更加
实用。类似的,进程标识号(PID)的数目也从32000升到10亿。这个改变,与其他PI
D子系统优化一起,将提高在十分繁忙或是长期工作的系统上的应用程式的启动性
能。尽管同时打开的档最大数目并没有增加,但是Linux 2.6不会再要求你预先设
定限制值;限制值会随着系统的运行自动调整。最後,Linux 2.6包含了改进的64位
元的块设备支援(当然块设备本身应当支援64位元模式),即使是在i386这样的32
位平台。这样一来,档系统的存储上限可达 2TB。
内核互动性以及回应性
Linu
x 2.6中一个受关注的焦点就是使得系统对於桌面用户以及其他一些需要对事件进
行高度人为控制的应用具有更具回应性(responsitive)。这其中各个不同的目标
系统具有很不同的挑战,但内核中包含了很多改变,使得它们同时受益。
2.6中一
个必须理解的主要内部改变是现在内核自身是可抢占的。在所有之前的Linux版本
中,当系统运行内核的相关事务时,它不能被打断(在多处理器系统中,基於各cp
u的角度这也是成立的)。Linux 2.6中,内核现在允许自身在执行任务时被打断,
这样用户任务可以继续运行即使内核正在做一些复杂的事情。(为了避免明显这可
能带来的竞争情况,内核中含有一些具有锁的代码段,运行於这样的代码段的时候
,内核不能被打断。)这个改变的主要好处是系统的可交互性(比如,对於桌面用
户)大大提升,系统对於用户输入这样的事件感觉起来快多了。
其他使得Linux成
为一个更加具有回应性系统的改变是并入对新的"futexes"("Fast User-Space Mu
texes")的支持,这项支援发挥作用需要用户程式的支援(使用futex实现互斥)
。Futexes是一种序列化(serialize)事件使得它们不会相互冲突的机制。与传统
的多数的线程库锁支持的mutex操作不同,这是部分基於内核的(partially kerne
l based),同时它也支援设置优先顺序使得高优先顺序的应用或线程优先获得竞
争的资源。通过使用一个程式去指定一个等待的任务比其他的更重要,它带来了可能
是一个应用的时序--关键区域更佳的响应性。
Linux的I/O子系统也经历的很大的
修改,使得它在各种工作负荷下都更具回应性。这个变化包括I/O 调度子系统--决
定何时、哪一进程去读一个设备的内核代码的完全重写。重写的I/O层现在可以更
好地保证没有进程过长时间地停留在I/O等待上,同时不排斥以前的优化工作使得读
等请求以最有效的次序操作硬体的优化工作。
尽管即时操作系统(RTOS)的开发
者可以从这些改变中受益,Linux 2.6将不会成为一个即时内核。然而,这些以及
其他相关的背景工作使得将Linux转变为RTOS成为可能。为用户或开发者提供这样
的支援的外部patch(尚未合并到官方的内核版本)已经出现了。
模组子系统 -
设备驱动程式
在 Linux 2.6的开发历程中,模组子系统是另一有重大改进的部分
。许多代码被重写,以提高稳定性,并使系统更加透明。除了这些明显的表层的变
化之外,还有更多背後的内核如何看待以及使用模组的改变。
首先,Linux 2.6中
内核驱动程式最显而易见的(虽然并没有太大作用)的变化是档副档名改变了。".
ko"(kernel object,内核目标档)取代了".o"(这是一目标档的常见副档名,通
常在程式编译期间,链结生成可执行应用程式之前创建)。与其说这使得模组并不
是真正的中间档这一点更为清楚,还不如说这仅仅是一个装饰性(cosmetic)的改
动。
完完全全实质性的改进在於消除存在於很多内核版本中的竞态的多方面工作
。问题的关键在於,如果卸载发生在模组检查并确认没有其他的设备正在使用它之
後,使用一个正在被卸载的模组来启动设备是有可能的。新的内核模组代码应使得
这一条件更难被触发。更进一步,现在简单地完全禁止模组卸载也是有可能的。
更加透明是新的模组子系统另一特性。在此之前,几乎所有的 Linux版本中,模组
是足够智慧的,它们可以通过扫描汇流排寻找它识别(recognized)的设备ID号,
检测到它所能够支援的设备(比如PCI,ISA PnP以及PC卡)。Linux 2.6标准化了
这种支持,使之对内核来说外部化,外部程式以及模组载入器判断一个特定的模组
可以支援哪些设备将更为容易。这将允许各种硬体管理程式(比如 Redhat的kudzu
)对硬体作出智慧化的判断,即使他们本身对自己所处理的硬体设备并不熟悉。如
果你的知识超越了当前版本的驱动程式,你可以(通过新的 sys档系统中的一个介
面)强制一个驱动程式工作於某一特定的设备,即使驱动程式并不知道自己可以支
援该设备。
其他改进
除了上述的许多改变之外,还有很多其他可以提升系统性
能的普遍性的改变。这其中包括更多的去除了"Big kernel Lock"(早期Linux用於
支援SMP系统时所采用的非细粒度锁),以及针对档系统预读、回写和小档操作的
优化等。
Linux 2.6还解决了一个更为深刻的稳定性问题:内核将不会分配多於系
统中RAM(加swap)数量的记忆体。此前,Linux在一些即使系统记忆体耗尽的情况
下,仍然允许malloc操作分配记忆体成功。过量分配(overcommitment)逻辑得到
修改,使得这种情况现在不再可能出现。(当然,如果你耗尽了系统的RAM,即使
没有超越最大可用数量--你需要担心更更严重的问题。)
Linux总是一个开放标准
的支持者。内核内部的大改变之一就是Linux的线程框架被重写,以使NPTL(Nativ
e POSIX Thread Library)可以运行於其上。对於运行负荷繁重的线程应用的Pent
ium Pro以及更先进的处理器而言,这是一个主要的性能提升;它也是企业级应用
中的很多高端系统一直以来所期待的。(实际上,RedHat已经将它向後移植到了Li
nux 2.4,从RedHat 9.0中开始包含)线程框架的改变包含LInux线程空间中的许多
新的概念,包括线程组、线程各自的本地存储区、POSIX风格信号以及其他改变。主
要的缺点之一是依赖於老式的Linux-isms而没有遵循POSIX标准的应用程式(比如S
un Java)将不能运行在支援新式线程的系统之上。鉴於使用新的线程模型利远大
於弊,很明显,新的内核发布不久,最为重要的那些应用都将会支持这个改变。
最後,2.6可以支援编译时关闭内核对存储交换(swap)的支援,尽管对於绝大多
数Linux之上的应用而言,没有直接的益处。这使得Linux可以在相对小的记忆体足
迹(footprint)内运行,对於不大可能使用交换设备的嵌入式系统可能也是有益的
。
统一设备模型
作为作业系统中的一个相对独立的元件,设备模型对於那些被
设计运行於用於多种硬体之上的作业系统而言是至关重要的。简单地说,设备模型
是内核中的基础设施,用於检测和决定系统中所有可选模组的资源使用。所有的作
业系统(包括各版本的Linux)都固有一些设备的概念。老版本的Linux(2.2或更
早)仅使用一种直接的方法操作设备。系统为不同种类的硬体汇流排提供驱动程式
,各式各样的设备驱动程式知道如何探测它们所支援的设备汇流排以寻找对应的硬
体设备。这种系统非常分散,各种各样的汇流排提供许多互不相容的API,用於处理
各种不同的操作。Linux 2.4通过使用一组通用介面将PCI,PC卡以及ISA PnP 整合
到一个单一的设备结构中,完成了构建统一设备模型的第一步。Linux 2.6更进一
步地推进了这方面的努力,力求在整个系统的范围内,内核以一种新的统一的视角
看待它所依赖的硬体。
内核对象抽象
新设备模型基础的核心是一个所有底层设
备类型都需使用的新的面向物件的介面。这个内核设备物件结构(称为"kobject"
)包含用於引用计数和操作子设备的所有介面。底层设备(例如系统汇流排)利用
这一公共介面层,向内核以及用户空间提供统一的系统视图。现在,所有这些都被
放在了中心位置,这使得Linux可以使用这些资讯作许多有用的事。
在内核中完整
地保存这些新的资讯,使得Linux可以更好的支援那些需要有深入的硬体知识的系
统。一个明显的例子就是电源管理。近几年新出现的电源管理标准是ACPI。ACPI,
即高级电源配置管理介面,最早是在Linux 2.4中有支援。不同於APM(高级电源管
理),拥有这种介面的系统在改变电源状态时需要分别通知每一个相容的设备。新
的内核系统允许子系统跟踪需要进行电源状态转换的设备。另一个例子是支援热插
拔的汇流排。机器启动後依然可以添加设备的能力在现在看来显得很普通,但Linux
直到2.2版本才提供相关支援。到了Linux 2.4,这种支持得到进一步的加强,范围
也扩大到可热插拔的PCI、PC卡、USB以及Firewire设备。通过从根本上消除热插拔
设备和传统设备的差异,新内核的集中化设备系统扩展了这一支援。当你启动电脑
的时候,设备检测常式将"插入"系统中的设备。无论在系统启动时,或是启动以後
,系统发现系统中的某个设备时,都会相应创建一个相同的内核对象,这就使得处
理可插拔设备的底层结构简单化了。
sys档系统
最明显的用户可见的改变可能是新的sysfs档系统的出现,它集成了下面3种档系统
的资讯:
针对进程资讯的proc档系统、针对设备的devfs档系统以及针对伪终端的
devpts档系统。该档系统(安装在/sys目录)是核心看到的设备树的一个直观反映。
核心通过紧密合作的核心物件(kernel object)子系统来建立这个资讯:当一个核
心物件被创建的时候,对应的档和目录也被创建。(必要的话,也有可能一个核心
物件被创建的时候并不在sysfs档系统中有记录。)
既然每个设备(或者说内核对象)在sysfs中都有唯一对应的目录结构,那麽下一步
可以把设备的属性(设备名,电源模式,中断处理等)资讯输出到这个目录树中以
供系统管理员读写。相应的,很多跟设备相关的/proc/sys的用法已经或者将要移到
/sys目录下。
核心硬体支援
随着Linux的这些年的发展并逐步进入主流行列,从内核所支援的设备类型来看,
每一次的内核发布,都像是一次跳跃:支援新兴的技术(2.4的USB),支援古老
一些的传统技术(2.2的MCA)。发展到Linux2.6,不被Linux支援的设备已经相当
少了。PC机上的主流硬体没被支援的很少。正是由於这个原因,多数(显然不是所有)
关於硬体支援方面的改进(包括上面所说的设备模型)围绕对已有支持的加强。
内部设备汇流排
位於系统底层的汇流排几乎与处理器同样重要;这些汇流排就像胶合剂,将系统的
各个部件连到一起。在PC世界中,这些汇流排一直是不可或缺的,无论是老的ISA
(在最初的IBM PC机中可以找到)汇流排,还是现在的外部串口以及无线(wireless
)汇流排。一旦新的汇流排及设备变成流行的消费产品,Linux总是能以很快的速
度去适应它;而对於不很流行的设备,情况则差很多。
一个能说明这一情况的例
子就是ISA汇流排的PnP(即插即用)特性,Linux直到2.4版本才支援ISA汇流排的
即插即用扩展,比其他流行的商业作业系统要晚很多(在内核支援ISA PnP之前,
你或许可以勉强使用一些用户态的实用程式使它工作)。Linux 2.6对这个子系统做了
一个重要的改进,使它更完善、更好地集成於新的设备模型之中。新特性包括完整
的PnP BIOS支援、设备名称资料库以及一些其他的使系统更加健壮的特性。这些改
进的结果,是使得Linux成为一个真正意义上的即插即用作业系统,并且可以被设
置成就像那些兼容机的BIOS达到的那样。
ISA时代ISA-PnP的两个可选的替代方案
是MCA(微通道体系)和EISA(扩展ISA),尽管它们不那麽流行。在Linux2.6的开
发周期中,这两个子系统都做了一些改进以支援新的设备模型。此外,通过引入设
备名称资料库,EISA与其他子系统一起获得了更进一步的标准化。
除了刚才提到
的几个重要特性,Linux对硬体汇流排的支援也做了许多其他值得关注的改变。PCI
汇流排是所有汇流排中最流行也是最重要的汇流排,Linux 2.6极大地提升了对它
的支援,包括改进的热插拔和电源管理支援。新版本同样也支援包含多个AGP汇流排
(即加速图形埠??基於PCI协定的一种独立高速汇流排)的系统,如高端图形工作
站。就对PC硬体的支援而言,Linux紧紧跟随着硬体市场的潮流。
除了这些实际的
设备汇流排,Linux2.6也增加了一个概念上的Legacy汇流排。这种汇流排对每种体
系结构都是专有的,这些体系结构包含所有你可能想到的设备。例如,在一台PC机
上,可能会有板上(on-board)的串口、并口、以及PS/2埠,这些设备实际存在着
,但不被系统中的任何一个实际汇流排所枚举(enumerated)。在其他的一些平台
上,这种Legacy支持可能包含更复杂的事情(如查询固件)。但一般来说,这只是
一层包装,使得设备驱动程式在新的驱动模型视图下能以标准的方式操作这些设备
。
外部汇流排
虽然早先的设备标准成熟并鲜有新的特性增加,但USB是一个例
外。USB的支持在最近的内核开发周期中有了许多改进,其中最为显着的是新内核
将支援USB 2.0设备。USB2.0是一种新的标准,支援设备带宽高达480M bps(当前
的USB只有12Mbps)。支援此标准的设备通常被称作高速USB设备,它们正逐步占领市
场。另外一个新的相关标准叫做USB On-the-Go(或称作USB OTG),它是USB协议
中一个点到点的变种,用以直连设备;Linux 2.6尚未支援它(2.6的补丁是可以支援
的)。除了设备支援外,多数USB设备的枚举方式都作了修正,使得Linux能访问现
今许多同类型设备的所有实例(instance)。这一点对於大型印表机或存储设备来
说相当有益(虽然後者可能更倾向於使用专用存储汇流排)。很明显,这一领域的
技术最近几年成长显着,Linux对相关设备的支援也是紧跟市场的步伐。
无线设备
过去的几年,无线技术在公众应用中真正起飞了。看起来,在不远的将来,线
缆(非电源)将成为历史。无线设备既包括网路设备(目前最常见的无线设备),
也包括更通用的设备,比如PDA。
在无线网路空间中,设备可以大致分为长距(如基於业余无线设备的AX.25)和短距
(通常是802.11,但一些旧式协议也存在)。从很早的时候(v1.2)起,对这两者的
支持就成为 Linux的一个特徵。在 2.6的开发中,它们又都得到了更新。这里最大的
改动是,用於支援各种板卡、协议的短距子系统的主要元件合并为一个单一的"无线"
子系统以及 API。通过提供一组能工作於所有支援的设备的用户空间工具来实现不同
的设备统一处理。这种方式解决了原先的不同设备不同处理所带来的很多小的相容性
问题。除了这种标准化之外,Linux 2.6版内核还有很多全局性的改进,包括当状态发
生改变(比如一个处於"漫游"状态的设备)时更好的通知能力,以及对旨在更好地处
理无线设备中周期性的延迟波动的一个TCP相关的改动。由於人们对2.4版内核中无线
支持的期望,上述的很多特性已经包含在2.4版内核中了。
在无线设备空间,有着类似的主要改进。IrDA(以 Infrared Data Associates group
命名的红外线协定)部分自上一主要发布以来有一些改进,比如电源管理、集成进了新
的内核驱动模型。真正的改进还在於提供了对蓝牙设备的支援。蓝牙是一种新的无线协
议,它设计为短距,功耗很低,也没有 IrDA 中的"视线"的限制。作为一种协议,蓝牙
被设计为"到处可用"。它已被应用於多种设备,如 PDA,移动电话,印表机,以及更为
怪异(bizarre)的设备如车载设备。协定本身由两种不同的资料连接类型组成:用於有
损音频应用的SCO(Synchronous Connection Oriented,面向同步连接);以及可以支援
重传等更为强壮的连接L2CAP(Logical Link Control and Adaptation Protocal,逻辑
连接控制和适配协定)。L2CAP 还进一步的支援各种子协议,包括用於点对点网路的
RFCOMM 以及用於类乙太网的 BNEP。Linux对采用蓝牙技术的设备的支援在不断提升,
我们可以相信,当足够多的采用蓝牙技术的设备被使用时,这种支援将会非常成熟。
值得一提的是,对蓝牙最初的支援已经集成到了2.4系列内核後几个版本中。
块设备支援存储汇流排
在2.6的开发中,IDE/ATA、SCSI等存储汇流排也都得到
了主要的更新。最主要的改变集中於被重写(再一次被重写)的 IDE 子系统,解
决了许多可扩展性问题以及其他限制。比如,现在 IDE CD/RW 设备可以直接通过I
DE磁片驱动程式进行写操作,这种实现方法比过去的方法要简洁的多。(在以前,
需要再使用一个特别的SCSI类比的驱动程式。这样显得很混乱,而且实现起来有困
难。) 现在,遇到一个不能识别的控制器时,IDE 层可以查询机器的 BIOS 资讯
,从而获取时序操作所需资料或其他资料。SCSI部分有不少散布於系统中的小的改进
,使之能支援更多的设备,同时提升了可扩展性。一个针对旧式系统的特别改进是
,现在的 Linux能够支援 SCSI-2多通道设备(这种设备在单个设备上有多於2个的
LUN)。另一个重要的改进则是现在 Linux 能够默像 MS Windows那样检测介质的
变动,以更好地相容那些并不完全遵照标准规范的设备。既然这些技术历经时间的
考验稳定下来,那麽 Linux 也提供对它们的支援。
Linux现在也包含对新一些的
机器的EDD(Enhanced Disk Device) BIOS进行直接访问的支持,这样便可以获得
伺服器中的磁片设备视图。EDD BIOS包含所有连接到系统的、BIOS识别的存储汇流
排(包括IDE以及SCSI)的资讯。除了获得连接设备的配置以及其他资讯之外,它
还有另外几个优点。比如,这种新的介面使 Linux 能够知道系统是从哪一个磁片
设备上启动的。这在新一些的系统上非常有用,因为这样的系统中到底是从哪一个
设备启动的常常不明显。智慧安装程式也可以考虑使用这些资讯,比如在决定把GRUB
(一种Linux启动装载器)安装在哪里时。
所有这些改动之外,这里需要再次强
调的是,所有的汇流排设备类型(硬体、无线和存储)都集成到了Linux新的设备
模型子系统中。一些改动仅仅是"装饰性"的,另一些则包含了非常显着的改动(比
如,甚至是如何检测设备的逻辑都需要修改)。
档系统
Linux(或其他一些系统
)下块设备的最常见用法是在块设备上面建立一个档系统。相对Linux 2.4而言,L
inux 2.6对於档系统的支援在很多方面都有大的改进。关键的变化包括对扩展属性
(extended attributes)以及POSIX标准的访问控制(access controls)的支援。
EXT2/EXT3档系统作为多数Linux系统缺省安装的档系统,是在2.6中改进最大的
一个。最主要的变化是对扩展属性的支援,也即给指定的档在档系统中嵌入一些元
资料(metadata)。一些扩展属性被系统使用,只能由root用户进行读写。很多其
他作业系统,如Windows和MacOS系统已经大量地使用了这种扩展属性。不幸的是,
UNIX系的作业系统一般都还没有很好地支援扩展属性,很多用户级的程式(比如ta
r)需要进行更新才能保存和转储这些扩展属性资讯。这是Linux成长的又一方面;L
inux对扩展属性的支援正在成熟。
新的扩展属性子系统的第一个用途就是实现PO
SIX访问控制链表。POSIX访问控制是标准UNIX许可权控制的超集合,支援更细粒度
的访问控制。必要的话(比如从NFS输出档的时候),这些访问控制可以被映射到
标准的user/group许可权控制上。除了以上,EXT3还有其他一些小的变化。档系统
日志提交(commit)的时间能够进行调整得更加适合於笔记本电脑(处於省电模式
时,可能会加速驱动器);缺省的载入选项可以保存在档系统自身之中(这样不用
每次载入时都输入载入选项);可以标记一个目录为"indexed"以加速在这个目录中
的档查找。
Linux对档系统层还进行了大量的改进以相容PC机的主流作业系统。
首先,Linux 2.6支援Windows的逻辑卷管理器(即动态磁片Dynamic Disks)。这
个是Windows XP及後续版本中新的分区表机制,能够很方便的支援多分区系统中的分
区大小的调整以及新分区的创建。(当然,Linux系统不一定会马上使用这一机制
)其次,Linux 2.6对NTFS档系统的支援也进行了重写,现在能以读/写模式安装一
个NTFS卷。写支持仍处於试验阶段,在逐步改进;最终的内核发布版中可能含有也
可能不含有写支持这一部分。最後,Linux对FAT12(很老的系统或软碟上使用的DO
S档系统)的支援中消除了使用一些MP3播放器时所遇到的bug。跟踪PC领域的其他
一些技术将一直是Linux核心向前发展的一个重要环节。
档系统部分在与其他作业
系统的相容性方面也有改进。对HPFS档系统(OS/2和其他系统中使用)的扩展属性
的支援有了改进。OS/2风格的扩展属性被分离到另一个的名字空间中。XFS档系统
也得到了更新,以达到与IRIX作业系统的磁片级(on-disk)相容。
此外,Linux档
系统中还有很多分散的变化。配额(quota)管理进行了重写以便系统可以支援更
多的用户;用户可以标记目录为同步,从而所有变化(增加档等)都是原子的(这
一点对於邮件系统和基於目录的资料库系统尤为重要,而且在磁片故障的恢复方面
也更好一些);透明压缩功能(仅Linux支援的扩展)被加到ISO9660档系统(CD-R
OM中使用)中。最後,一个新的基於记忆体的档系统(hugetlbfs)被创建;创建
该档系统旨在更好地支援基於共用记忆体的资料库。
输入输出设备
在任何电脑系
统的更"外部"的一层是输入输出设备,包括像键盘、滑鼠、音效卡、显卡等显而易
见的东西,还包括像游戏操纵杆以及辅助设备等不那麽常见的东西。在2.6的开发
周期里,许多Linux的用户端子系统得到了扩展,但大部分常见设备都已经非常成熟
了。Linux 2.6中对这些设备的改进多半衍生於内核对外部汇流排支援的改进,比
如蓝牙无线键盘以及其他类似设备。尽管如此,Linux 在好几个领域都有更大的改
进。
人机周边设备
Linux 2.6中一个主要的内部改动是人机介面层的大量重写
。人机介面层是一个Linux系统中用户体验的中心,包括视频输出、滑鼠、键盘等
。内核的新版本中,这一层的重写以及模组化工作超出了以前的任何一个版本。使
用新内核构建一个不包含对显示器等的支援的完全"headless"的Linux系统是可能的
。嵌入式系统开发人员或许会是这一模组化工作的主要受益者,可以制造出只能通
过网路或串列线管理的设备;另一方面,对普通用户也是有好处的,因为许多关於
设备及体系结构的内在假设被模组化了。比方说,之前总是假定如果你拥有一台PC
,那麽你一定需要对标准AT(i8042)键盘控制器的支援。在 Linux 的新版本中移
除了这一要求,因而可以在不那麽遵照传统的系统中抛开不必要的代码。
Linux对
显示器输出处理的支援也有不少改进,但大部分只在配置使用内核内部的帧缓冲控
制台子系统时才有用。( 多数基於Intel体系的Linux机器并不采用这种方式配置
,但其他大部分体系结构却采用。)在我看来,最大的亮点在於启动图示(如果你
从来没有见过,那我告诉你那是一只可爱的企鹅)现在支持24 bpp的解析度。这是
一个方面,其他的面向控制台的新特性包括可以重设大小、旋转等(对PDA及其它
类似设备),还有为更多的硬体提供了硬体加速支援。最後,Linux现在对VESA监视
器的显示能力资讯的查询提供了内核支援,虽然XFree86 和大部分发布版本的安装
系统都在用户空间提供了这种支援。
除这些比较大的改进之外,Linux 2.6 在人
机交互方面还有一系列小的改进。比方说,现在支持触摸屏了。另外,滑鼠及键盘
驱动程式也得到了更新和标准化,现在不管底层的硬体或协定是什麽,系统都只导
出一个单一的设备节点(比如 /dev/input/mouse)。一些怪异的滑鼠(比如有多个
滚轮的)现在也得到了支持。PC键盘的键值映射得到了更新,以遵循Windows 的"
标准"来支援扩展键。对游戏控制杆的支援也得到了提升,这不仅仅得益於许多新
的驱动程式(包括 X Box 游戏控制盘的驱动),还归功於引入了一些新的特性,如
力量回馈(force-feedback)。最後(但绝不是最不重要的),新版本内核提供了
对 Tieman Voyager 的盲人用 TTY设备的支援,以使盲人用户更好地使用Linux。
(这个特性是如此的重要,以至於被向後移植到了Linux 2.4。)
顺便提一下,Lin
ux 修改了"系统请求"介面以更好地支援那些没有本地键盘的系统。系统请求介面
("sysrq")是系统管理员在本地控制台做一些高级工作的方法,比如获取调试资
讯、强制系统重启、重新挂载档系统为唯读等等。因为 Linux 2.6 现在支持一个完
全"headless"的系统,所以现在也可以通过/proc 档系统触发这些事件。(当然,
如果你的系统已经挂起而你又要强制它做一些事情,这一特性也帮不上你什麽忙。
)
音频
对於桌面用户而言,Linux 2.6 中最为期望的新特性之一是以ALSA(Ad
vanced Linux Sound Architecture)取代过时的声音系统。旧式的声音系统OSS(
Open Sound System)很早的时候起便为Linux提供音频支援,但是它有许多体系结
构上的缺陷。新系统首要的改进在於它从设计之初开始便是完全线程安全的,且能
很好的工作於 SMP 系统。这修正了过去的许多驱动程式在"桌面即意味着单CPU"这
一教条的例外情况下不能正常工作的问题。更为重要的是,此驱动程式从一开始便
采用模组化设计(Linux旧版本的用户应该还记得,在Linux 2.2时代,模组被解构
以适应声音系统),这使得系统能更好地支援多块音效卡,包括不同类型的音效卡
。无论系统内部是多麽完美,如果没有一些令人惊讶的新特性,系统对於用户来说
仍没有任何改进。事实上,新的声音系统有许多这样的新特性。其中最为重要的是
提供了对许多新硬体(包括USB音频及MIDI设备)的支援,支援全杜比录音及重播
、无缝混音、支援声音合成设备等等。无论你是一个音响发烧友或只是喜欢播放 MP
3 的人,Linux提升的声音支持都将是大受欢迎的一个进步。
多媒体
现今单纯
的音频支援似乎远远不够,用户想要的是对真正新奇的硬体的支援,比如网路摄像
机,广播及电视适配器,数位视频录制器等。Linux在2.6版本中对以上三者的支持
都有所提升。
Linux对广播卡的支持(通常是通过用户空间实现历经了好几个开
发周期,而对电视调谐器和视频摄像机的支援只是在最近的1、2个主要版本中才有
。此系统通常称为V4L(Vedio4Linux 译者注: "4" for "for"),在新版本的内
核开发中得到了重大更新,包括API的清理工作以及对设备更多功能的支援。新的API
与旧版本不相容,支援它的应用程式需要随内核的升级而升级。
作为一个全新的
领域,Linux 2.6首次包含对DVB(Digital Video Broadcasting,数位视频广播)
硬体的支援。这种硬体常见於机顶盒,它可以使得Linux伺服器通过适当的软体变
为一台tivo(类似机顶盒的设备)。
软体方面的改进
Linux的改进并不只关注於
硬体及其它基础设施。没有支撑软体(如档系统及网路协定),硬体支援将毫无意
义(just so much a dead wood)。
网路
先进的网路支援一直是Linux的主要财富之一。Linux作为一种作业系统,已经可以
支援世界上大多数主流网路协定,包括TCP/IP(v4和v6)、AppleTalk、IPX等。
(就"等"而言,唯一较为普遍的是微软老的、复杂的NETBIOS/NetBEUI协议。)
像许多其他子系统一样,网路硬体针对Linux2.6的改变是在幕後进行的,显得并不
那麽直接。这包括旨在利用Linux的设备模型底层的改进和许多设备驱动程式的升级。
例如,Linux 2.6提供一个独立的MII(媒体独立介面,或是IEEE 802.3u)子系统,
它被许多网路设备驱动程式使用。
新的子系统替换了原先系统中各自运行的多个实例,消除了原先系统中多个驱动程
式使用重复代码、采用类似的方法处理设备的MII支援的情况。其他改变还包括对
ISDN的改进等。
在软体方面,Linux的一个重要改进是提供了对IPsec协定的支援。IPsec,或者称之为
安全IP,是在网路协定层为IPv4和IPv6提供加密支援的一组协定。由於安全是在协议
层提供的,对应用层是透明的。它与SSL协定及其他tunneling/security协定很相似,
但是位於一个低地多的层面。当前内核支援的加密演算法包括SHA("安全散列演算法")
、DES("资料加密标准")等。
在协定方面,Linux还加强了对多播网路的支援。网路多播使得由一点发出的资料包可以
被多台电脑接收(传统的点对点网路每次只能有两方通信)。这一功能主要被即时通讯
系统(如Tibco)以及音频/视频会议软体使用。Linux 2.6现在支援若干新的SSM协定
(定源多播),包括MLDv2(multicast listner discovery 多播侦听发现)协议以及
IGMPv3(Internet组管理协定)协定。这些都是标准协定,被多数高端网路硬体提供商
所支援,如思科。
Linux 2.6也提供了一个分离的LLC栈。LLC,即逻辑链路控制协定(IEEE 802.2),
是一个底层协定,在若干个常用的高层网路协定之下使用,如Microsoft的NetBeui,
IPX,以及AppleTalk。作为修改的一部分,IPX,AppleTalk,以及权杖环驱动程式都
已被重写,以利用这个新的公用子系统。此外,一个外部源(an outside source)
整合了可以工作的NetBEUI协议栈,它是否要被加到的标准内核中还有待研究。
除了以上这些,还有其他一些小的改变。IPv6做了一些主要的改进,使其可以运行在
权杖环网路中。Linux的NAT/Masquerading 支援也得到了扩展,从更好地处理需要多
个连接的协定(H.323,PPTP等)。在Linux的路由器前端,对配置VLAN的支援也已经
成熟,不再是"试验性的"的了。
网路档系统
Linux对网路档系统的支援构建在Linux健壮的网路协定支援之上,它也同样健壮。
安装或者输出(export)一个网路档系统,是需要内核直接参与的为数不多的几个
上层网路相关操作之一。
(另外比较明显的还有对於网路块设备的支援,在2.6中没有特别大的改变,并且也
只是在类似档系统操作的特定应用中使用。)所有其他的网路相关操作都可以被放到
用户空间去,而不需要核心开发人员去考虑。
在Linux和类UNIX世界中,最普遍的网路档系统是一个名为Network File System的档系统
,简称NFS。NFS是一个复杂的档共用协议,跟UNIX特别是Sun Solaris有相当深厚的渊源。
可以使用TCP或UDP作为NFS的主要传输协定,但也需要其他一些子协定,这些协定又各自运
行在RPC(远端程序呼叫)协议之上。这其中包括独立的用於认证的mount协议以及用於档
锁的NLM(network lock manager)。(通常的实现版本同时也跟其他一些基於RPC的协议
紧密地结合在一起,比如用於
身份验证的NIS-网路资讯服务--用於认证。NIS在Linux机器
上没有得到广泛应用,主要因为它缺乏安全性。)可能正是因为NFS协议如此的复杂性,
才没有被作为"Internet协议"广泛接受。
Linux 2.6中,NFS档系统得到了很大的更新和改进。最大的改进就是实验性地支持
新的并且还没有被广泛接受的NFSv4协议(以前的linux版本支持NFS2和NFS3两种协定)
在用户端和伺服器端的实现。新的版本有更强、更安全的身份认证(采用加密技术)
,支援更智慧化的锁管理,支援伪档系统等。Linux还没有实现所有NFS4的新特徵,
但是目前的版本已经比较稳定并且能够支援一些产品级的应用。并且,基於Linux
的NFS服务端的实现已得到改进,从而具有了更好的扩展性,更好的完整性
(支援UDP还支援TCP),更健壮(档系统在输出档的时候能够进行调整以
维持它们自有的一些特徵),更简便的管理(通过新的nfsd档系统,而不再是系统
调用)。还有其他方面的一些改进,比如分离lockd和nfsd,支援零拷贝传输等。N
FS用户端也因为底层RPC协定在缓存机制、UDP连接控制以及其他在TCP协议上的改
进而受益。Linux支援NFS共用卷作为根档系统的功能也因为核心对TCP协议上的NFS
的改进而改进。
除了改进对UNIX风格的网路档系统的支援,Linux 2.6对於Windows类型的网路档系
统的支援也进行了改进。
Windows伺服器(也包括OS/2和其他一些作业系统)的标
准共用档系统是遵循SMB(server message block)协定的,Linux核心在SMB协定
的用户端对该协定的很多版本都已经有了非常优秀的支持。然而,Windows2000
将SMB协定的一个超集合的升级版标准化了,即熟知的
CIFS("common internet
filesystem")。CIFS修改的主要目的是简化与精炼SMB协议中一些比较混乱的部分。
(注:协议之前的定义很松散,甚至会出现Win95/98/ME版与WinNT/Win2k版不相容
的情况。)
CIFS达到了修改的目的,并且增加了UNICODE支持,改善了档锁,支援硬
链结,彻底消除了对NetBIOS的依赖,并给Windows用户增加了一些新的特徵。既然
Linux用户不打算始终呆在被遗忘的角落(译者注:CIFS是Windows系统提出的标准,
之前仅在Windows系统之上有实现),Linux 2.6核心对本地安装CIFS档系统的部分
彻底进行了重写。Linux 2.6现在也支援SMB和CIFS的扩展--SMB-UNIX,该扩展使得
Linux可以访问SMB伺服器(比如Samba)上的可能存在的非Windows的档类型
(比如设备节点和符号链结)。
尽管现在已经不常见到,但是Linux还是没有完全忘记Novell NetWare用户。
Linux 2.6最多允许256个Linux用户端安装同一个使用NCP(NetWare Core Protocol)
档系统驱动的NetWare卷。
Linux 2.6也加入了相对新的一些分散式网路档系统(即在一个逻辑卷上的档可以分布
在多个节点中)的支援。除了Linux 2.4中引入的CODA档系统,Linux现在也包含对另
两个分散式档系统:AFS和InterMezzo的支持。AFS,即the Andrew filesystem
(如此命名是因为它最初是CMU开发的),特性非常有限,目前只支持读操作。
另一个新支援的档系统InterMezzo(也是CMU开发的)也在Linux2.6中得到支持;
它具有一些更为先进的特性,如:无连接操作(工作在用户端的缓存中),
适合要求高可用性的应用,在那些应用环境中,需要保证存储区永远可用。
同时它也支援保持资料在多个电脑之间(比如笔记本电脑、PDA和桌面电脑)同步的应用。
很多对这些新的档系统提供支援的专案都是在Linux平台上实现的,这也使得Linux能够走
在对这些新特性支持的最前面。
其他特性
安全性
Linux2.6的另一个没有引起足够注意的
大的变化是跟安全相关的变化。甚至本质上,整个基於核心的安全体系(在类UNIX
作业系统中的超级用户许可权)已经被划分成一些可以被替换的安全模组。(不过
目前提供的安全模式只有缺省的一个,权当一个向我们展示如何自定义安全模组的
例子。)作为这个变化的一部分,核心所有的部分都被更新以具有更细粒度的用户
访问控制,而不是象以前的"超级用户"系统。虽然几乎所有的Linux系统中将仍然
存在一个具有完全访问许可权的root用户,但上述的改变使得类Linux系统可以不再
必须如此。另一个安全相关的变化是一些二进位模组(比如硬体厂商提供的驱动程
式)不能再重载系统调用,也不能看到以及修改系统调用表。这极大地限制了非开
放源码的模组在核心中的访问,同时也修补了GPL版权协议在这方面的一些可能存在
的漏洞。最後一个跟安全相关的变化就是新的核心能够使用硬体乱数生成器(一些
新的处理器中提供),而不是依靠随机的硬体熵值变化。
虚拟Linux
Linux 2.6一个很有趣的特点是自包含了一个"用户态(user-mode)"的体系结构。
它本质上是一种移植--将Linux移植到它自身(正如移植到不同的硬体体系那样),
从而允许一个完全虚拟的Linux-on-Linux运行环境。新的Linux实例像普通应用程
式一样运行。在这个新的Linux内部,你可以配置伪网路、档系统或者其他一些设备
,整个过程通过专用的驱动程式与宿主Linux进行安全交互。这被证明不仅是在开发方面
(进行分析、统计等),而且在安全分析和密罐(honeypots)技术中都是非常有用
的。当然大多数用户还不需要这样的支援,它只是被当作了一个可以运行在你的机
器上的很酷的特性而已。(给你的朋友留下深刻的印象!)
笔记本电脑
除了上
面提到的一些通用的支持(比如APM和ACPI的改进,以及对无线支持的改进等),L
inux还有两个很难分类的与笔记本电脑用户相关的特徵。第一个是新核心支援的软
停机磁片存储(sofware-suspend-to-disk 译者注:保存记忆体镜像到磁片,之後
停机--类似halt,再次开机时内核从磁片获取保存的记忆体镜像并恢复运行;软停
机功能不需要APM、ACPI等硬体支援)。
另一个是对现代移动处理器的可根据用
户是否在使用机器从而作出cpu运行速度(以及相应的电源需求)自动调节的支援
。
向後相容
尽管Linux 2.6是大的内核升级,但是对用户层应用的影响几乎是不
存在的。主要的例外是线程,一些能够在2.4或2.2上运行的多线程程式将不能在2.
6上运行。
当然,一些底层的应用如模组工具将肯定不能工作。另外,/proc目录
和/dev目录下的一些档和格式也发生了变化,如果上层应用对此有依赖,也可能不
能继续工作。(当更多的内容被移动到/sys虚拟档系统中的时候,情况尤其如此。
在/dev目录中,向後相容的设备名很容易就能推出来。)
除了提到的这些明显的
变化,还有很多小的变化可能会对一些应用环境产生影响。首先,非常陈旧的(li
nux 2.0或更早)交换分区需要重新格式化才能在2.6中使用。(由於交换分区并不
包含永久资料,这对用户来说不会是问题。)由於多数抑制Apache,Zeus等http伺
服器接近内核速度的的性能瓶颈已经被解决,之前的允许核心直接提供网页服务的
kHTTPd守护进程也被去除。
对诸如陈旧硬碟的OnTrack和EzDriveDOS磁片管理器以
及相应的DOS相容性的支援也被去除。从软碟上含有核心的启动磁区进行启动的支
援也被去除,取而代之的是SysLinux。最後,soundmodem功能也被去除了,但是用
户空间的版本维护地更好,并且更加实用。
写在最後
这篇文档主要出自BitKeeper changelogs的长时间的阅读,对源代码的"赏玩"
(looking at and playing with),对邮件列表的阅读,以及很多很多为完
成本文所进行的Google和Lycos或这或那的搜索。尽管如此,文中可能有遗漏
或者理解有误的地方。我也尽量地小心地不过分使用那些被合并入内核的项目
网页,因为它们相对官方的内核版本支持要"大大超前"。如果您发现这篇文档
中的任何错误,或者希望email给我询问我的情况,您可以email给
[email protected]。
具有更多技术背景的人可能只需要一
个公告列表,Dave Jones编写了另一份出色的2.6开发进展的总括:
http:/www.codemonkey.org.uk/post-halloween-2.5.txt。他的工作与本文的任何
相似之处纯属巧合,因为我们都始於源代码,并且都侧重於x86体系。
本文的版权:
2003年,Joseph Pranevich。允许本文的未经修改的线上重新发布
(online redistribution),但如果您对於本文的非线上发布(杂志等)感兴趣,
请email告知我。作为礼貌,以上的发布进行版本更新时,希望能email告知我,
我将深为感谢。
参考资料
原文: http:/www.kniggit.net/wwol26.html
关於作者
《Linux 2.6内核
的精彩世界》翻译小组成员:
穆荣均,清华大学电脑系2002级研究生,是一名开源软体世界的爱好者、参与者。
范志华,中科院计算技术所的硕士研究生,从事曙光机群档系统DCFS2的开发以及档系统
性能评测等工作。
王少平,浙江大学电脑学院硕士研究生,研究方向是Linux作业系统,侧重於Linux内核;
目前在从事提升Linux的即时性和网路性能的课题。
龚建军,浙江大学电脑学院硕士研究生,Linux爱好者,目前正在从事图像处理方面的研究。
左琪,浙江大学电脑学院硕士研究生,Linux爱好者,目前从事Linux下的流媒体视频伺服器的开发。
穆荣均完
成了《模组子系统--设备驱动》、《无线设备》、《块设备支援》、《输入输出设
备》等部分的翻译工作。范志华完成了《sys 档系统》、《档系统》、《网路档系
统》、《其他特性》等部分的翻译工作。龚建军完成了《统一设备模型》、《核心
硬体支援》、《软体提升》等部分的翻译工作。左琪完成了《多平台支援》以及《
深入Linux》前两小节的翻译工作。王少平完成了其他部分的翻译,并作了最後的修改。
可以通过电子邮件联系他们:
穆荣均:
[email protected]
范志华:
[email protected]
王少平:
[email protected]
龚建军:
[email protected]
左琪:
[email protected]
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.110.129.89
※ 编辑: uefangsmith 来自: 123.110.129.89 (03/19 23:48)
※ 编辑: uefangsmith 来自: 123.110.129.89 (03/19 23:55)
※ 编辑: uefangsmith 来自: 123.110.129.89 (03/20 00:16)