Linux 2.6内核的精彩世界(一)

2003年岁末,Linux社区最鼓舞人心的消息莫过于期盼已久的Linux内核2.6版正式推出。

2003年岁末,Linux社区最鼓舞人心的消息莫过于期盼已久的Linux内核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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

 

 

 
   
它在哪些方面有大的改动?它对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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

2003年岁末,Linux社区最鼓舞人心的消息莫过于期盼已久的Linux内核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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

 

 

 
   
它在哪些方面有大的改动?它对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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

2003年岁末,Linux社区最鼓舞人心的消息莫过于期盼已久的Linux内核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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

 

 

 
   
它在哪些方面有大的改动?它对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内核的精彩世界》)非正式版的第一版,完稿于 2003713日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

                        
到目前为止的故事...
    Linux
内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于19943月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于19953月,它是第一个包含多平台(AlphaSparcMips等)支持的官方版本。Linux 2.0发行于19966月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.219991月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.420011月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USBPC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"

                        
多种平台支持
   
能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到LinuxIntel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

                
小规模 - 嵌入式系统中的Linux
    Linux 2.6
扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
   
不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(IntelCPU386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。
    
在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在MotorolaLineoArcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMUm68k处理器(比如早期苹果机上使用的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
支持 -消费级的64Linux
    
另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是IntelItanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。
    
尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x8632位)的程序的支持得到了改进。

                     
子体系结构(Subarchitecture)支持
     Linux 2.6
除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持AmigaMichintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
    
标准的确立使得i386可以运用于两个新的平台。第一个是NCRVoyager体系。这是一个对称多处理器(SMP)系统(在IntelMP规范标准确定之前就已经开发出来了),它支持多达32486686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。
    Linux
对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。LinuxX-box的支持,就不是子体系结构的问题。

           
大规模 - 非一致存储访问体系结构(NUMA)和大型机
   
除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。
    
在此方面最大的改变就是LinuxNUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。
   
为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
共计8个压缩包 本压缩包是:part01.rar 出版社:人民邮电出版社 ·页码:368 页 ·出版日期:2008年 ·ISBN:7115187118/9787115187116 ·条形码:9787115187116 ·包装版本:1版 ·装帧:平装 ·开本:16 ·中文:中文 ·附带品描述:附光盘一张 ·市场价格:49元 内容简介 Linux内核Linux操作系统中最核心的部分,用于实现对硬件部件的编程控制和接口操作。《Linux2.6内核标准教程》深入、系统地讲解了 Linux内核的工作原理,对Linux内核的核心组件逐一进行深入讲解。 全书共8章,首先讲解Linux系统的引导过程;然后对Linux内核的3大核心模块——内存管理、进程管理、中断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学 习操作系统的参考书。 引用: 目录 第1章 Linux内核学习基础 1 1.1 为什么研究Linux内核 2 1.1.1 Linux的历史来源 2 1.1.2 Linux的发展现状 3 1.1.3 Linux的前景展望 3 1.2 选择什么版本进行研究 3 1.3 内核基本结构 4 1.3.1 内核在操作系统中的地位 4 1.3.2 Linux 2.6内核源代码目录树简介 5 1.3.3 Linux 2.6内核的新特性 8 1.4 如何阅读本书 9 1.4.1 内核探索工具 10 1.4.2 推荐阅读方法 12 第2章 引导过程分析 14 2.1 内核镜像的构建过程 15 2.1.1 编译内核的步骤及分析 15 2.1.2 内核镜像构建过程分析 16 2.2 系统引导过程分析 18 2.2.1 傀儡引导扇区 18 2.2.2 探测系统资源 21 2.2.3 解压内核镜像 35 2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 3.4.1 探测系统物理内存 87 3.4.2 初始化内存分配器 89 3.5 物理内存的分配与回收 101 3.5.1 伙伴分配算法 101 3.5.2 对象缓冲技术 103 3.6 内核地址空间 105 3.6.1 常规映射地址空间 105 3.6.2 固定映射地址空间 107 3.6.3 长久内核映射空间 109 3.6.4 临时内核映射空间 116 3.6.5 非连续映射地址空间 119 第4章 进程管理 128 4.1 进程与线程的概念 129 4.1.1 程序与进程 129 4.1.2 进程与线程 129 4.2 进程描述符 131 4.2.1 进程标识符 132 4.2.2 进程的状态 132 4.2.3 进程上下文 134 4.2.4 当前进程 139 4.3 进程的组织形式 143 4.3.1 进程标识符构成的哈希表 143 4.3.2 所有进程构成的双向链表 148 4.3.3 执行态进程组成的运行队列 149 4.3.4 阻塞态进程组成的等待队列 152 4.4 进程的创建过程 155 4.4.1 进程创建的接口函数 156 4.4.2 进程创建的处理过程 162 4.5 进程调度算法 177 4.5.1 进程的分类 178 4.5.2 进程优先级 178 4.5.3 时间片分配 181 4.5.4 进程调度时机 182 4.6 进程切换过程分析 183 4.6.1 选取合适进程 183 4.6.2 完成上下文切换 184 4.7 空闲进程的初始化 187 4.7.1 空闲进程的内核态栈 187 4.7.2 空闲进程的内存描述符 188 4.7.3 空闲进程的硬件上下文 190 4.7.4 空闲进程的任务状态段 190 第5章 中断和异常 192 5.1 基础知识 193 5.1.1 中断和异常的定义 193 5.1.2 中断和异常的分类 193 5.1.3 中断和异常的对比 194 5.2 处理机制 195 5.2.1 IA32架构下的处理机制 195 5.2.2 Linu

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值