荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: cbi@bbs.pku.edu.cn (土豆|放弃|一样的天不一样的人), 信区: Linux
标  题: Linux 2.6内核的精彩世界 zz
发信站: 北大未名站 (Sat Nov 22 14:27:09 2003)
转信站: SZU!news.ccie.net.cn!news.happynet.org!PKU

Linux 2.6内核的精彩世界
  转载自: 梦想家园
  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的大部并入了主流内核(
mainstr eam 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及更新的产品),它
从技术的角度而言不是u CLinux合并的一部分(因为它包含MMU单元)。实际上对这款处
理器的支持在2.4开发周期就 已经有了,但 它在2.4.0以后才被引入,所以现在应该提到
它。它是主要用于网络设备的嵌入式处理器。 与此相关的ETRAX 100,是得到uClinux支
持的无MMU处理器,但是在主流的Linux内核中相关 支持却没有集成进来。

  Opteron支持 - 消费级的64位Linux

另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于
AMD6 4体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得
到微软 的支持。是它还是Intel的Itanium家族的某一成员成为64位消费级产品的事实标
准现在还很 难下定论。

  尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很
大限制 。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在
512MB以内。另 一方面,新内核对在该平台上运行x86(32位)的程序的支持得到了改进


  子体系结构(Subarchitecture)支持

  Linux 2.6除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(
Subarchitec ture)的新概念。以前,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
)的线性内存区域之间存在空洞(h oles)。新内核已经能够合理的处理这种不连续情况
。内核还有许多其他使得Linux可以支 持高端(high-end)主机的变化,这也是内核发展
的一个明确方向。再过一年,我们可以期 待Linux在高端 机型上效率以及其他方面的进
步。

  深入Linux 除了横向支持越来越多的硬件,Linux 2.6还在已支持的平台上根据硬件
的性能提升进行了 改进。这些针对特定CPU的优化包括:Transmeta的Crusoe系列,
Intel's Pentium 4 Xeon、 Pentium 3-M、Pentium 4-M 和AMD移动处理器。新版本
Linux还解决了某些Athlon处理器自 身的bug导致的问 题。Linux 2.6还解决了在某些多
于16个处理器的系统启动时偶尔会挂起的问题,尽管这个b ug不会影响大多数用户的正常
使用。

超线程

  在Linux 2.6中不算新鲜,内核在2.4.17发布中就已经开始包含对Intel P4处理器的
超线程 (Hyperthreading)的支持(在这里提及它,一是因为它并没有包含在2.4最初的
发布中, 二是自那以后内核又有了很大的改变)。超线程使得单个的处理器可以伪装成
操作系统看来 二个或更多的多 个处理器。最令人激动的是,Linux是第一个把超线程特
性引入市场的操作系统,尽管早在 一年前Intel就发布了兼容的处理器。有传闻说,微软
在对支持超线程的CPU按一个CPU还是 按两个CPU收取授权费(license)的问题上拿不定
主意。Linux的开放模型(以及没有基于c pu的授权)使得L inux操作系统第一个支持这
个新特性。显然,一个处理器就算扮作两个处理器工作,它还是 一个处理器,性能并不
能因此增加很多。2.5中调度器和其他一些部分在有了新的优化,使 得处理器的超线程可
以真正的发挥作用。如果是在2.4下加入超线程支持,结果就不一定了 ,有时性能还会
下降。

  容量 -- 可扩展性的进展

  除了对NUMA的支持,Linux 2.6在处于食物链顶端的Intel服务器方面,也有一些变动
。最重 要的就是对Intel的物理地址扩展(PAE)的完全支持,使得较新的32位的x86系统
可以访问 高达64GB的内存,但仅仅限于页面映射模式。另外,通过加强对高级可编程中
断控制器(AP IC)的支持,多 处理器系统之上的IRQ均衡(balancing)大大提升。

  在许多其他方面,内部限制在可能的地方都有所放松。Linux系统上用户和用户组的
数目从6 5000越升到了超过40亿(实际就是16位到32位的变化)。这使得Linux在之前可
能超越限制 的大型文件和认证服务器上更加实用。类似的,进程标识号(PID)的数目也
从32000升到10 亿。这个改变, 与其他PID子系统优化一起,将提高在十分繁忙或是长期
工作的系统上的应用程序的启动性 能。尽管同时打开的文件最大数目并没有增加,但是
Linux 2.6不会再要求你预先设定限制 值;限制值会随着系统的运行自动调整。最后,
Linux 2.6包含了改进的64位的块设备支持 (当然块设备本身 应当支持64位模式),即
使是在i386这样的32位平台。这样一来,文件系统的存储上限可达

  内核互动性以及响应性

  Linux 2.6中一个受关注的焦点就是使得系统对于桌面用户以及其他一些需要对事件
进行高 度人为控制的应用具有更具响应性(responsitive)。这其中各个不同的目标系
统具有很不 同的挑战,但内核中包含了很多改变,使得它们同时受益。

  2.6中一个必须理解的主要内部改变是现在内核自身是可抢占的。在所有之前的
Linux版本中 ,当系统运行内核的相关事务时,它不能被打断(在多处理器系统中,基于
各cpu的角度这 也是成立的)。Linux 2.6中,内核现在允许自身在执行任务时被打断,
这样用户任务可以 继续运行即使内 核正在做一些复杂的事情。(为了避免明显这可能带
来的竞争情况,内核中含有一些具有锁 的代码段,运行于这样的代码段的时候,内核不
能被打断。)这个改变的主要好处是系统的 可交互性(比如,对于桌面用户)大大提升
,系统对于用户输入这样的事件感觉起来快多了 。

  其他使得Linux成为一个更加具有响应性系统的改变是并入对新的"futexes"(
"Fast User-S pace Mutexes")的支持,这项支持发挥作用需要用户程序的支持(使用
futex实现互斥)。 Futexes是一种序列化(serialize)事件使得它们不会相互冲突的机
制。与传统的多数的线 程库锁支持的m utex操作不同,这是部分基于内核的(
partially kernel 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(Native POSIX Thread Library)可以运行于其上。对于运行负荷繁重的
线程应用 的Pentium Pro以及更先进的处理器而言,这是一个主要的性能提升;它也是企
业级应用中 的很多高端系统 一直以来所期待的。(实际上,RedHat已经将它向后移植到
了Linux 2.4,从RedHat 9.0中 开始包含)线程框架的改变包含LInux线程空间中的许多
新的概念,包括线程组、线程各自 的本地存储区、POSIX风格信号以及其他改变。主要的
缺点之一是依赖于老式的Linux-isms 而没有遵循POSIX 标准的应用程序(比如Sun Java
)将不能运行在支持新式线程的系统之上。鉴于使用新的线 程模型利远大于弊,很明显
,新的内核发布不久,最为重要的那些应用都将会支持这个改变 。

  最后,2.6可以支持编译时关闭内核对存储交换(swap)的支持,尽管对于绝大多数
Linux之 上的应用而言,没有直接的益处。这使得Linux可以在相对小的内存足迹(
footprint)内运 行,对于不大可能使用交换设备的嵌入式系统可能也是有益的。

  统一设备模型

  作为操作系统中的一个相对独立的组件,设备模型对于那些被设计运行于用于多种硬
件之上 的操作系统而言是至关重要的。简单地说,设备模型是内核中的基础设施,用于
检测和决定 系统中所有可选模块的资源使用。所有的操作系统(包括各版本的Linux)都
固有一些设备 的概念。老版本 的Linux(2.2或更早)仅使用一种直接的方法操作设备。
系统为不同种类的硬件总线提供驱 动程序,各式各样的设备驱动程序知道如何探测它们
所支持的设备总线以寻找对应的硬件设 备。这种系统非常分散,各种各样的总线提供许
多互不兼容的API,用于处理各种不同的操 作。Linux 2.4 通过使用一组通用接口将PCI
,PC卡以及ISA PnP 整合到一个单一的设备结构中,完成了构 建统一设备模型的第一步
。Linux 2.6更进一步地推进了这方面的努力,力求在整个系统的 范围内,内核以一种新
的统一的视角看待它所依赖的硬件。

  内核对象抽象

  新设备模型基础的核心是一个所有底层设备类型都需使用的新的面向对象的接口。这
个内核 设备对象结构(称为"kobject")包含用于引用计数和操作子设备的所有接口。底
层设备( 例如系统总线)利用这一公共接口层,向内核以及用户空间提供统一的系统视
图。现在,所 有这些都被放在

  在内核中完整地保存这些新的信息,使得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)总线。一旦新
的总线及设备变成 流行的消费产品

  一个能说明这一情况的例子就是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对硬件总线的支持也做了许多其它值得关注的
改变。P CI总线是所有总线中最流行也是最重要的总线,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)起,对这两者的支
持就成为 L inux的一个特征。在 2.6 的开发中,它们又都得到了更新。这里最大的改动
是,用于支持 各种板卡、协议 的短距子系统的主要组件合并为一个单一的"无线"子系统
以及 API。通过提供一组能工作于 所有支持的设备的用户空间工具来实现不同的设备统
一处理。这种方式解决了原先的不同设 备不同处理所带来的很多小的兼容性问题。除了
这种标准化之外,Linux 2.6版内核还有很 多全局性的改进 ,包括当状态发生改变(比
如一个处于"漫游"状态的设备)时更好的通知能力,以及对旨在 更好地处理无线设备中
周期性的延迟波动的一个TCP相关的改动。由于人们对2.4版内核中无 线支持的期望,上
述的很多特性已经包含在2.4版内核中了。

  在无线设备空间,有着类似的主要改进。IrDA(以 Infrared Data Associates
group命名 的红外线协议)部分自上一主要发布以来有一些改进,比如电源管理、集成进
了新的内核驱 动模型。真正的改进还在于提供了对蓝牙设备的支持。蓝牙是一种新的无
线协议,它设计为 短距,功耗很低 ,也没有 IrDA 中的"视线"的限制。作为一种协议,
蓝牙被设计为"到处可用"。它已被应用 于多种设备,如 PDA,移动电话,打印机,以及
更为怪异(bizarre)的设备如车载设备。 协议本身由两种不同的数据连接类型组成:用
于有损音频应用的SCO(Synchronous Connect ion Oriented, 面向同步连接);以及可
以支持重传等更为强壮的连接L2CAP(Logical Link Control and Adaptation Protocal
,逻辑连接控制和适配协议)。L2CAP 还进一步的支持各种子协议, 包括用于点对点网
络的 RFCOMM 以及用于类以太网的 BNEP。Linux对采用蓝牙技术的设备的 支持在不断提
升 ,我们可以相信,当足够多的采用蓝牙技术的设备被使用时,这种支持将会非常成熟
。值得 一提的是,对蓝牙最初的支持已经集成到了2.4系列内核后几个版本中。

  块设备支持

  存储总线

  在2.6的开发中,IDE/ATA、SCSI等存储总线也都得到了主要的更新。最主要的改变集
中于被 重写(再一次被重写)的 IDE 子系统,解决了许多可扩展性问题以及其他限制。
比如,现 在 IDE CD/RW 设备可以直接通过IDE磁盘驱动程序进行写操作,这种实现方法
比过去的方法 要简洁的多。( 在以前,需要再使用一个特别的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(或其他一些系统)下块设备的最常见用法是在块设备上面建立一个文件系统
。相对L inux 2.4而言,Linux 2.6对于文件系统的支持在很多方面都有大的改进。关键
的变化包括 对扩展属性(extended attributes)以及POSIX标准的访问控制(access
controls)的支 持。

  EXT2/EXT3文件系统作为多数Linux系统缺省安装的文件系统,是在2.6中改进最大的
一个。 最主要的变化是对扩展属性的支持,也即给指定的文件在文件系统中嵌入一些元
数据(meta data)。一些扩展属性被系统使用,只能由root用户进行读写。很多其他操
作系统,如Wind ows和MacOS系统 已经大量地使用了这种扩展属性。不幸的是,UNIX系的
操作系统一般都还没有很好地支持扩 展属性,很多用户级的程序(比如tar)需要进行更
新才能保存和转储这些扩展属性信息。 这是Linux成长的又一方面;Linux对扩展属性的
支持正在成熟。

  新的扩展属性子系统的第一个用途就是实现POSIX访问控制链表。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(很老的系统或软盘上使用 的DOS文件系统) 的支持中消除了使用一些
MP3播放器时所遇到的bug。跟踪PC领域的其他一些技术将一直是Li nux核心向前发展的一
个重要环节。

  文件系统部分在与其他操作系统的兼容性方面也有改进。对HPFS文件系统(OS/2和其
他系统 中使用)的扩展属性的支持有了改进。OS/2风格的扩展属性被分离到另一个的名
字空间中。 XFS文件系统也得到了更新,以达到与IRIX操作系统的磁盘级(on-disk)兼
容。

  此外,Linux文件系统中还有很多分散的变化。配额(quota)管理进行了重写以便系
统可以 支持更多的用户;用户可以标记目录为同步,从而所有变化(增加文件等)都是
原子的(这 一点对于邮件系统和基于目录的数据库系统尤为重要,而且在磁盘故障的恢
复方面也更好一 些);透明压 缩功能(仅Linux支持的扩展)被加到ISO9660文件系统(
CD-ROM中使用)中。最后,一个新 的基于内存的文件系统(hugetlbfs)被创建;创建该
文件系统旨在更好地支持基于共享内 存的数据库。

  输入输出设备

  在任何计算机系统的更"外部"的一层是输入输出设备,包括像键盘、鼠标、声卡、显
卡等显 而易见的东西,还包括像游戏操纵杆以及辅助设备等不那么常见的东西。在2.6的
开发周期 里,许多Linux的用户端子系统得到了扩展,但大部分常见设备都已经非常成熟
了。Linux 2 .6中对这些设备 的改进多半衍生于内核对外部总线支持的改进,比如蓝牙
无线键盘以及其它类似设备。尽管 如此,Linux 在好几个领域都有更大的改进。

  人机接口设备 Linux 2.6中一个主要的内部改动是人机接口层的大量重写。人机接口
层是一 个Linux系统中用户体验的中心,包括视频输出、鼠标、键盘等。内核的新版本中
,这一层 的重写以及模块化工作超出了以前的任何一个版本。使用新内核构建一个不包
含对显示器等 的支持的完全"h eadless"的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-feedbac k)。最后(但 绝不是最不重要的),新版本
内核提供了对 Tieman Voyager 的盲人用 TTY设备的支持,以 使盲人用户更好地使用
Linux。(这个特性是如此的重要,以至于被向后移植到了Linux 2.4 。)

  顺便提一下,Linux 修改了"系统请求"接口以更好地支持那些没有本地键盘的系统。
系统请 求接口("sysrq")是系统管理员在本地控制台做一些高级工作的方法,比如获取
调试信息 、强制系统重启、重新挂载文件系统为只读等等。因为 Linux 2.6 现在支持一
个完全"head less"的系统, 所以现在也可以通过/proc 文件系统触发这些事件。(当然
,如果你的系统已经挂起而你又 要强制它做一些事情,这一特性也帮不上你什么忙。)

  音频

  对于桌面用户而言,Linux 2.6 中最为期望的新特性之一是以ALSA(Advanced
Linux Sound Architecture)取代过时的声音系统。旧式的声音系统OSS(Open Sound
System)很早的 时候起便为Linux提供音频支持,但是它有许多体系结构上的缺陷。新系
统首要的改进在于 它从设计之初开 始便是完全线程安全的,且能很好的工作于 SMP 系
统。这修正了过去的许多驱动程序在"桌 面即意味着单CPU"这一教条的例外情况下不能正
常工作的问题。更为重要的是,此驱动程序 从一开始便采用模块化设计(Linux旧版本的
用户应该还记得,在Linux 2.2时代,模块被解 构以适应声音 系统),这使得系统能更
好地支持多块声卡,包括不同类型的声卡。无论系统内部是多么完 美,如果没有一些令
人惊讶的新特性,系统对于用户来说仍没有任何改进。事实上,新的声 音系统有许多这
样的新特性。其中最为重要的是提供了对许多新硬件(包括USB音频及MIDI 设备)的支持
, 支持全杜比录音及回放、无缝混音、支持声音合成设备等等。无论你是一个音响发烧
友或只 是喜欢播放 MP3 的人,Linux提升的声音支持都将是大受欢迎的一个进步。

  多媒体

  现今单纯的音频支持似乎远远不够,用户想要的是对真正新奇的硬件的支持,比如网
络摄像 机,广播及电视适配器,数字视频录制器等。Linux在2.6版本中对以上三者的支
持都有所提 升。

  Linux对广播卡的支持(通常是通过用户空间实现历经了好几个开发周期,而对电视
调谐器 和视频摄像机的支持只是在最近的1、2个主要版本中才有。此系统通常称为V4L(
Vedio4Lin ux 译者注: "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等。(就"等"
而言,唯一

  像许多其它子系统一样,网络硬件针对Linux2.6的改变是在幕后进行的,显得并不那
么直接 。这包括旨在利用Linux的设备模型底层的改进和许多设备驱动程序的升级。例如
,Linux 2 .6提供一个独立的MII(媒体独立接口,或是IEEE 802.3u)子系统,它被许多
网络设备驱动 程序使用。新 的子系统替换了原先系统中各自运行的多个实例,消除了原
先系统中多个驱动程序使用重复 代码、采用类似的方法处理设备的MII支持的情况。其他
改变还包括对ISDN的改进等。

  在软件方面,Linux的一个重要改进是提供了对IPsec协议的支持。IPsec,或者称之
为安全I P,是在网络协议层为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,以及App leTalk。作为修改的一部分,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是一个复杂的文件共享协议,跟UNIX特别是Sun Solaris有相当深厚的渊源。可以
使用TC P或UDP作为NFS的主要传输协议,但也需要其他一些子协议,这些协议又各自运行
在RPC(远 程过程调用)协议之上。这其中包括独立的用于认证的mount协议以及用于文
件锁的NLM(ne twork 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,支持零拷贝传输等。NFS客户端也因为底 层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/W in2k版不兼容的 情况。)CIFS达到了修改的目的
,并且增加了UNICODE支持,改善了文件锁,支持硬链接, 彻底消除了对NetBIOS的依赖
,并给Windows用户增加了一些新的特征。既然Linux用户不打 算始终呆在被遗忘的角落
(译者注:CIFS是Windows系统提出的标准,之前仅在Windows系统 之上有实现),L
inux 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)文件系统
驱动的NetW are卷。

  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实例像普通应用程序一样运行。
在这个新的L inux内部,你可 以配置伪网络、文件系统或者其他一些设备,整个过程通
过专用的驱动程序与宿主Linux进 行安全交互。这被证明不仅是在开发方面(进行分析、
统计等),而且在安全分析和密罐( honeypots)技术中都是非常有用的。当然大多数用
户还不需要这样的支持,它只是被当作 了一个可以运行 在你的机器上的很酷的特性而已
。(给你的朋友留下深刻的印象!)

  笔记本电脑

  除了上面提到的一些通用的支持(比如APM和ACPI的改进,以及对无线支持的改进等
),Lin ux还有两个很难分类的与笔记本电脑用户相关的特征。第一个是新核心支持的软
停机磁盘存 储(sofware-suspend-to-disk 译者注:保存内存镜像到磁盘,之后停机--
类似halt,再次 开机时内核从 磁盘获取保存的内存镜像并恢复运行;软停机功能不需要
APM、ACPI等硬件支持)。

  另一个是对现代移动处理器的可根据用户是否在使用机器从而作出cpu运行速度(以
及相应 的电源需求)自动调节的支持。

  向后兼容

  尽管Linux 2.6是大的内核升级,但是对用户层应用的影响几乎是不存在的。主要的
例外是 线程,一些能够在2.4或2.2上运行的多线程程序将不能在2.6上运行。

  当然,一些底层的应用如模块工具将肯定不能工作。另外,/proc目录和/dev目录下
的一些 文件和格式也发生了变化,如果上层应用对此有依赖,也可能不能继续工作。(
当更多的内 容被移动到/sys虚拟文件系统中的时候,情况尤其如此。在/dev目录中,向
后兼容的设备名 很容易就能推出 来。)

  除了提到的这些明显的变化,还有很多小的变化可能会对一些应用环境产生影响。首
先,非 常陈旧的(linux 2.0或更早)交换分区需要重新格式化才能在2.6中使用。(由
于交换分区 并不包含永久数据,这对用户来说不会是问题。)由于多数抑制Apache,
Zeus等http服务器 接近内核速度 的的性能瓶颈已经被解决,之前的允许核心直接提供网
页服务的kHTTPd守护进程也被去除。

  对诸如陈旧硬盘的OnTrack和EzDriveDOS磁盘管理器以及相应的DOS兼容性的支持也被
去除。 从软盘上含有核心的启动扇区进行启动的支持也被去除,取而代之的是SysLinux
。最后,so undmodem功能也被去除了,但是用户空间的版本维护地更好,并且更加实用


  写在最后

  这篇文档主要出自BitKeeper changelogs的长时间的阅读,对源代码的"赏玩"(
looking at and playing with),对邮件列表的阅读,以及很多很多为完成本文所进行
的Google和Lyc os或这或那的搜索。尽管如此,文中可能有遗漏或者理解有误的地方。我
也尽量地小心地不 过分使用那些 被合并入内核的项目网页,因为它们相对官方的内核版
本支持要"大大超前"。如果您发现这 篇文档中的任何错误,或者希望email给我询问我的
情况,您可以email给jpranevich@knigg it.net。

  具有更多技术背景的人可能只需要一个公告列表,Dave Jones编写了另一份出色的
2.6开发 进展的总括:http://www.codemonkey.org.uk/post-h...K墓ぷ饔氡疚?/a>
的任何相似之处纯属巧合,因为我们都始于源代码,并且都侧重于x86体系。

  本文的版权: 2003年,Joseph Pranevich。允许本文的未经修改的在线重新发布(
online redistributio n),但如果您对于本文的非在线发布(杂志等)感兴趣,请
email告知我。作为礼貌,以上 的发布进行版本更新时,希望能email告知我,我将深为
感谢。

  参考资源 * 原文: http://www.kniggit.net/wwol26.html

  关于译者

  《Linux 2.6内核的精彩世界》翻译小组成员: 穆荣均,清华大学计算机系2002级研
究生,是一名开源软件世界的爱好者、参与者。 范志华,中科院计算技术所的硕士研究
生,从事曙光机群文件系统DCFS2的开发以及文件系 统性能评测等工作。 王少平,浙江
大学计算机学院硕士研究生,研究方向是Linux操作系统,侧重于Linux内核; 目前在从
事提升Linux的实时性和网络性能的课题。 龚建军,浙江大学计算机学院硕士研究生,
Linux爱好者,目前正在从事图像处理方面的研 究。 左琪,浙江大学计算机学院硕士研
究生,Linux爱好者,目前从事Linux下的流媒体视频服务 器的开发。

  穆荣均完成了《模块子系统--设备驱动》、《无线设备》、《块设备支持》、《输入
输出设 备》等部分的翻译工作。范志华完成了《sys 文件系统》、《文件系统》、《网
络文件系统 》、《其他特性》等部分的翻译工作。龚建军完成了《统一设备模型》、《
核心硬件支持》 、《软件提升 》等部分的翻译工作。左琪完成了《多平台支持》以及《
深入Linux》前两小节的翻译工作 。王少平完成了其他部分的翻译,并作了最后的修改。


  可以通过电子邮件联系他们: 穆荣均: murj98@mails.tsinghua.edu.cn 范志华:
 fanzh@ncic.ac.cn 王少平: peter_wang@163.com 龚建军: ggjjjj@sina.com 左琪:
 lazymike@163.com

-- 鱼说:你看不见我的泪水;因为我在水中... 水说:我能感觉到你的泪;只因你在我
心中...
(Joseph Praneich jpranevich@kniggit.net)
翻译: 《Linux 2.6内核的精彩世界》翻译小组 )


--


  ╭─╮                                                          ╭-e
  ├─┼-                                                         (╲ ╲
  § _∕ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ╰﹨\ ╲
  ∕ ﹨       抱歉!我是个艺术家,所以凝视美女是我的工作!          ∕

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.40.16]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店