📄 00000003.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: yeung (流星雨), 信区: Linux <BR>标 题: 【中文版】LINUX 2.4的美妙世界 <BR>发信站: BBS 水木清华站 (Sat Jul 29 22:06:41 2000) <BR> <BR> <BR> <BR>LINUX 2.4的美妙世界 <BR> <BR> <BR>原文:<A HREF="http://linuxtoday.com/story.php3?sn=10698">http://linuxtoday.com/story.php3?sn=10698</A> <BR>作者:Joe Pranevich <BR>译者:Axis* <BR> <BR> <BR>LINUX2.2相对于2.0是一个巨大的进步。它支持了许多新的文件系统类型,使用了 <BR>全新的文件名缓存机制,而且大幅度提高了在多CPU系统上的伸缩性。LINUX2.4会 <BR>百尺竿头更进一步,成为更加适合桌面应用、服务器应用和嵌入式应用的平台。目 <BR>前,LINUX内核开发者希望能尽快地将2.4送到最终用户手中,因此可以理解,2.4 <BR>与2.2之间的差别不会向2.2与2。0之间那样大。不过,读完了本文之后,我相信你 <BR>会同意,2.4的进步同样引人注目。(否则我还写这文章干什么呢?) <BR> <BR>2.4是指LINUX内核的版本。内核是LINUX(或GNU/LINUX)操作系统的核心,但内核 <BR>本身也可以划分成核心部分和非核心部分。任何操作系统都必须包括一组相关的设 <BR>备驱动程序,但LI NUX远不止于此。调度器、资源分配器、虚拟文件系统层、内存 <BR>管理还有一些其他的无名战士,它们是LINUX世界的真正英雄。是这些东西定义了 <BR>LINUX之所以成为LINUX。在任何LINUX 支持的硬件平台上,从i386(Intel兼容PC <BR>),到ARM(嵌入设备),到Sparc64(高端服务器)这些代码都是一致的。从许多 <BR>方面看,LINUX2.4的“心脏”与LINUX2.2还是有所不同的,而上文列举的一些子系 <BR>统也有或多或少的改变。 <BR> <BR>LINUX2.2与更早的版本使用一种比较粗糙的基本资源管理系统,以分配和跟踪IO端 <BR>口,IRQ以及其他计算机中的稀有资源。不幸,在一些重要的方面--对当今的桌 <BR>面操作系统来说至关重要--这一系统力不从心。LINUX2.4下,新的系统使用了一 <BR>种高度概括,适应性很强的实现方式。它允许将资源分级分组,摆脱了以前对预定 <BR>义资源类型的依赖,同时也使驱动模块开发所需的大多数工作得到了简化。此外, <BR>它也是ISA即插即用支持的基础,下文将会详述。这个Linus 灵机一动的结果,也 <BR>许是2.4内核中影响最深远的一个变化。(译注:也许我是多此一举,但如果你还 <BR>不清楚的话,Linus是Linux的创始人。Linux=Linus的 UNIX。) <BR> <BR>虚拟文件系统层(VFS)也有重大改变。在LINUX2.2时,VFS曾有很大的进步,使缓 <BR>存更佳,整体效率大增。然而,LINUX2.2中的虚拟文件系统层依然遗留着一些重要 <BR>的限制,有待2.4的解决。其中一个限制是,2.2保留了两个用于文件缓存的缓冲区 <BR>,一个读一个写(page cache和buffer cache)。你可以想象,这使内核开发者们 <BR>的工作十分复杂,每次编程都得保证 两个缓存之间的同步时,就象在手术室里带 <BR>无菌消毒手套一样。LINUX2.4完全超越了这一障碍,把两个缓存合而为一。这项改 <BR>变,使LINUX2.4效率更高,使代码更容易理解,而且用于缓存的内存可以大致减半 <BR>。在重写代码的过程中 ,还消除了许多竞争状况(race condition,多个进程/线 <BR>程修改同一个未经保护的变量,形成竞争。),精简了代码,从而能在高端系统上 <BR>获取更好的伸缩性,而且在牵涉多个文件系统时加速了磁盘写操作。 <BR> <BR>LINUX2.2在高端系统上的一个普遍问题是对进程/线程数的限制。(译注,LINUX中 <BR>用户线程与内核线程是一一对应的,和大多数商业UNIX不同。 <BR> <BR>详见: <A HREF="http://pauillac.inria.fr/~xleroy/Linuxthreads)">http://pauillac.inria.fr/~xleroy/Linuxthreads)</A> <BR>LINUX2.2缺省只允许1024个进程/线程同时运行(译注:修改源代码,可达4096个 <BR>)。高端系统同时要服务上千的用户,所以这显然是一个问题--它一度是阻碍 <BR>LINUX进入企业级市场的一大因素。LINUX2.4消除了这个限制,并且允许在系统运 <BR>行中动态调整进程数上限。因此,进程数现在只受制于物理内存的多少。在高端服 <BR>务器上,即使只安装了512M内存,现在也能轻而易举地同时支持1万6千个进程。有 <BR>其他用户报告,说在他们的系统上运行的进程/线程数更加多。 <BR> <BR>在内存消耗方面,LINUX2.4增加了一些新的子系统,精简了一些旧的子系统,删除 <BR>了一些过时的代码,总的结果是和2.2的内存消耗基本相同。在某些情况下甚至比 <BR>2.2消耗更少的内存!值得注意的是,LINUX2.4能够支持更大的内存。在Intel体系 <BR>的系统上,LINUX2.4最多能支持到到4 G。 <BR> <BR>二进制文件类型 <BR> <BR>LINUX内核中一个经常被忽视的部分是程序加载器,它负责定位可执行程序,把程 <BR>序正确地加载到内存,然后运行之。许多人不知道LINUX还支持一种“misc.”二进 <BR>制加载器。它是一个灵活的模块,使你能象在Windows中那样,把二进制文件和“ <BR>HELPER”应用关联起来。例如,它可以让你把所有Windows程序和WINE(Windows模 <BR>拟器)关联起来,然后只要一打“./notepa d.exe”就行。(不过,一般来说,把 <BR>所有的事情都交给内核也太走极端了,未必是个好主意。 比如,一打“ <BR>/etc/passwd”就弹出个编辑器,就不怎么妙。Windows提供的许多关联功能交给文 <BR>件管理器就行。)许多人认为这项功能是一大进步,允许WINE和DOSEMU(DOS模拟 <BR>器)的运行更为透明。 <BR> <BR>通过按需起动JAVA解释器/编译器,LINUX2.2和2.0支持直接运行JAVA程序。Linux <BR>是第一种在内核层提供这种支持的操作系统。运行JAVA应用时,JAVA二进制加载器 <BR>会运行JAVA解释器/ 编译器,并提供恰当的参数。自然,使用新的“misc.”加载 <BR>器实现这个功能会更简单,LINUX 2.2已经提供了有关的说明。2.4中会取消对旧加 <BR>载模块的支持。 <BR> <BR>尽管2.2是要求内核必须编译成ELF格式的第一个LINUX版本,但LINUX2.4会更加依 <BR>赖于ELF执行程序格式。(ELF是一种先进的执行程序格式,支持多个代码段和数据 <BR>段,更方便的动态链接库调用和其他特性。大致上与WIN32格式相当,但设计更完 <BR>善。)利用ELF格式的优势,内核开发者们可以使一些代码更加模块化,更加易于 <BR>维护。许多种的驱动模块会更加“即插即用 ”,因为不需要在核心代码中显式初 <BR>始化它们,内核连接的方式就可以决定初始化的方式。 <BR> <BR>此外,LINUX2.4中还有别的重大改进,有必要在深入到各个子系统之前先作说明。 <BR>LINUX2.4 引入了POSIX的时钟和定时器,允许用非实时时钟的设备同步系统时间, <BR>因此在一定程度上更加遵循标准。网络文件系统(NFS),是大多数UNIX上的标准 <BR>网络文件共享方式。2.4已经支持了NFS版本3的绝大多数特性(下面有关文件系统 <BR>的部分会展开讨论)。此外,线程模式也作了小范围调整,以提高兼容性。 <BR> <BR>千面LINUX <BR> <BR>尽管LINUX操作系统的心脏是上述的基础架构,但最终用户最关心的,还是与具体 <BR>系统相关的那些部分。LINUX的“手足”包括所有与处理器相关或无关的的驱动代 <BR>码,它们控制处理器、磁盘驱动器、端口以提供计算机功能的其他一切硬件。本文 <BR>主要集中讨论i386上的Linux,因为这是作者最熟悉的平台。自LINUX2.2发行以来 <BR>,所有平台上的移植版都取得了长足的进步,可惜我对它们大多没有个人经验。从 <BR>目前来说,2.4比2.2只多一种平台(SuperH),不过2.4发行时可能还有增加。 <BR> <BR>在Intel兼容的硬件上,LINUX2.4会对2.2已经支持的处理器提供同样优秀的支持, <BR>包括针对386 ,486,586(奔腾)和686(奔腾PRO/奔腾II/奔腾III/赛扬)和 <BR>AMD/Cyrix兼容处理器的优化。但2.4会包括对新芯片硬件的额外支持。LINUX2.2支 <BR>持Intel的内存类型范围寄存器(Memory Type Range Register,MTRR)以提升高 <BR>带宽设备的性能(如AGP显示卡);但2.4会进而同时 支持AMD K7和Cyrix的MCR提 <BR>供的同类功能。LINUX2.2支持IO-APIC(高级可编程中断控 制器),允许中断处理 <BR>由多个处理器分担;2.4会更上一层楼,支持内置多个IO-APIC的高端系统,进一 <BR>步提高伸缩性。 <BR> <BR>Linux 2.4与Merced(IA64) <BR> <BR>尽管大家翘首以待的IA64处理器尚未面世,但Intel的准备工作早已紧锣密鼓了。 <BR>因为芯片还没有上市,LINUX2.4现在不直接支持Merced芯片。但有好几个小组在工 <BR>作,以保证芯片面世后, LINUX立刻就可以在上面运行。毫无疑问,目前LINUX本 <BR>身对64位芯片的支持,(Alpha和UltraSparc 支持是源代码的一部分)大大简化了 <BR>移植工作。这意味着,保证64位LINUX能在Merced 上运行的许多工作,如保证内核 <BR>的核心部分和模块不依赖于32位的字长和存储方式,都已经完成了相当一段时间了 <BR>。 <BR> <BR>我不希望暗示大家,LINUX在64位系统上运行已经不存在任何问题,那不是事实。 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -