系统总线-ISA、PCI、USB、MCA等
处理器只是计算机中一个微小的部分。计算机的总线结构也同样重要,它是管理内部和外部设备的系统部件。一些总线结构,像最初的ISA,对其它硬件是极不可靠的,它们不提供资源管理功能,仅仅提供了一个插卡的地方。而另外一些总线,例如PCI,则支持更高级的配置,并允许设备重新定位和其它功能。
Linux 2.2支持Intel硬件内部的所有主要的总线,包括(E)ISA、VLB、PCI,最新的附件(较老的总线一般用于IBM硬件)以及MCA。Linux 2.4除此以外还包括对ISA即插即用设备(这种方案使ISA设备几乎与PCI一样智能)和I20设备的支持。最重要的是,Linux 2.4是首个提供资源管理的强大系统的Linux内核版本。在开发Linux 2.4的过程中发现,要使Linux完全支持USB、PC卡或其他先进的硬件,必须开发这样一个系统,它是Linux作为一个"现代的"操作系统所必需的。
ISAPnP一直是Linux用户的主要问题。虽然由于更强大的PCI硬件的出现,对ISA硬件的支持已经缩小,但使用ISAPnP的预算设备仍在销售。以前,Linux用户使用ISAPnP硬件都是用pnp实用程序,它通常需要几个小时才能完成,实在让人沮丧。有些版本试图自动完成这个过程,但都没有成功。而Linux 2.4将ISAPnP支持同资源管理器结合在一起,从而解决了这一问题。(但是,还没有完成对所有驱动程序[url=http://www.pccode.net].net" class="wordstyle"源码的更改,实现这一功能。)不过对不太普遍的PnP硬件来说,Linux 2.4对ISAPnP的内核级支持还没有实现。
Linux 2.4 也包括对I2O的支持,I2O (Intelligent Input/Output智能输入/输出)是PIC的超集,PIC提供对内存、寄存器的集中管理。而I2O 设备更深一层,可以在设备级上提供API,从而为设备提供操作系统的独立驱动程序。底层的操作系统需要识别"通配"的I2O API,而不是指定的硬件。由于这项技术还比较新,没有多少设备使用了该项技术,但这种产品一旦投放市场,Linux能马上做好准备。
目前对设备进行的主要工作并不是内部总线,而是外部总线,如PC卡总线和各种串行总线。Linux 2.4也增强了对外部设备的PC卡支持。很多发行版本以及大多数的发行版本默认已经包含它了。不过为了更好的使用这些设备,Linux 2.4仍然需要一个外部的daemon(进程)和其他一些部件。
或许在这之前最令人激动的消息是通用串行总线 (USB),一个使得设备更加显著的外部总线,像键盘、鼠标、声音系统、扫描仪以及打印机。USB是许多新设备很欢迎的选件,包括非Intel的硬件。虽然,Linux对这些设备的支持还处于初期阶段,但是Linux内核已经支持大部分的通用USB硬件(包括键盘、鼠标、话筒等)。
最近,Linux内核增加了对Firewire (IEE1394)的支持,Firewire 一直以来受到很多高带宽设备的青睐。然而,至今很多现有的驱动程序或者设备不支持这些硬件体系结构,但是随着时间的推移,当这些体系结构成熟的时候,这些支持将很可能得到改善。
块设备-LVM,磁盘驱动器等
在它简单的列表中,块设备被描述为一个可以不连续访问的字节数组。这将包括磁盘(你可以读你想要的任何扇区),但不是串口(因为你只能在线的末端读取)。延伸这个概念(例如弹出磁盘等)在Linux中通过ioctls(I/0控制)变得很容易。但是块设备的概念很长时间没有改变并支持从第一次Linux内核修订本中就存在的IDE和SISC磁盘驱动器。
在Linux 2.4中,所有块设备的驱动程序都重写了一些,块设备API从接口中去掉了一些遗留的垃圾,并在内核级将模块API完全同文件API分开,这次变动要求API重写不是主要部份。但是如果模块维护人员如果运用了主子目录之外的模块,则需要对[url=http://www.pccode.net].net" class="wordstyle"源码进行更新(没有人假定API与主要修订版内核完全兼容)。
至少在台式机中,普遍使用的是IDE总线磁盘驱动器。Linux从早期内核就开始支持IDE,但Linux 2.4在许多方法上提高了对这些设备的支持。首先,拥有多个IDE控制器的高端系统如果将IDE控制器数从4增加到10个,则效果会更好。大多数的主板最多只有2个IDE控制器,这并不会对台式机的使用者产生多大的影响。其次,这些IDE驱动程序的改动提高Linux 2.4对PCI和即插即用IDE控制器的支持,IDE软盘和磁带机,DVD和CD-ROM;最后,Linux 2.4包括了可以逐步解决一些IDE芯片中存在的漏洞的驱动程序更新,并且更好的支持其他先进的特性,例如ATA66。
看起来似乎SCSI子系统没有IDE子系统改动的多,SCSI子系统在在外壳中进行了大量的重写,另外,这个版本中支持了许多新的SCSI控制器,我们可以期待在2.5的开发周期中的某个时候得到进一步的SCSI支持。
Linux 2.4内核中一个全新的特性是实现了raw I/O设备,raw设备不通过高速缓存层处理,自动寻找到低级设备。万一一个复杂的程序要求完全的控制超过了怎样使用数据缓存和一般缓存的开支得不到满足,这时可以使用raw设备。raw设备能够用于数据要求严格的情况下,例如:我们确保数据立即写入磁盘、系统失败时不会遗失数据。早先这些支持的形势并不适合,包括他们字面上需要的加倍设备节点数以使每个块设备都有一个raw设备节点(这是一些商业UNIX使用的方法),本版本中是使用一组设备节点来实现,它可以连接任意的块设备。
Linux 2.4一个大范围的改进是在主流内核中加入了LVM(逻辑卷管理)子系统。这在一些企业族的UNIX,如HP-UX和Tru64 UNIX(原来的Digital UNIX)中是一个系统和标准,它完全重新考虑管理文件系统和卷的方法。不需要深入细节,LVM充许文件系统跨越磁盘,调整大小,用更多灵活方式管理。LVM子系统的一些特性能够用md(复合设备)驱动器或用户使用的工具复制。而且,LVM子系统以标准兼容的方式提供这种支持,让商业UNIX使用者至少感到有些熟悉。
Linux 2.4另一个大范围改进的是支持RAID(冗余磁盘阵列)设备,许多磁盘同时工作提供冗余存储或快速读访问。在新内核中,几乎所有的RAID子系统都被重写。性能,也许是完善的RAID实现最重要的一面在SMP(对称多处理器)和单处理器系统中得到提高(在对称多处理器中,如今可以更好支持多线程)。另外,使RAID阵列递归和不用虚拟磁盘映像安装设置根盘的能力的代码已经有了很大的加强。当很多企业级用户接触Linux时,像有强大的RAID子系统的特性成为接收和不接收的选中系数。Linux 2.4再一次加强这一条。
文件系统和分区表
本地文件系统
有多种方法访问块设备,最常见的方法是使用文件系统(内部实现上,文件系统就像是为这个块设备描绘的一张地图,通过这张地图你可以找到想要的任何内容)。另外的方法有使用分区的方法访问块设备(结构非常类似于文件系统,只是处理方法完全不同),或者直接访问它。
Linux 2.4包含Linux 2.2实现的所有文件系统。这些文件系统包括FAT(适用各种版本的DOS),NTFS(适用Windows NT -- Windows 2000的支持不完备),VFAT和FAT32(适用Windows 9x),HFS(适用MacOS),HPFS(适用OS/2),以及其他各种文件系统。新增支持的文件系统中,引人注目的有DVD盘使用的UDF文件系统,和旧版本IRIX使用的EFS文件系统。因为要支持新扩展的页面缓冲系统,全部文件系统的代码都已经重新写过,所以 运行会更有效率。
还有不少改进有助于提高与其他操作系统的兼容性:OS/2用户终于可以在Linux上写入他们的文件系统了;NT用户暂时还不能享受这项特权,因为其驱动程序还在试用阶段;NextStep用户可以在支持NextStep使用的UFS文件系统的同时,在Linux下访问光驱了。但必须注意,Linux目前还不能支持HFS+,这个新的Macintosh文件系统。
Linux 2.4尚不支持日志文件系统,尽管几个提供此项功能的项目正在接近达到稳定的程度。日志文件系统的最大优点就是它的容错能力。一个设计精良的日志文件系统能比传统的日志文件更容易地将损坏恢复,并且fsck时间更短,返回服务功能更快。ReiserFS无疑是现在最成熟的日志文件系统,将很快在发行Linux 2.4之后加入到内核中。(可能会在2.4.1版本中吧。)Ext3文件系统,作为包含了日志支持的Ext2的扩展,也将会在某个Linux 2.4.x版本中出现。(不过也有可能我会在“Linux 2.6的精彩世界”中讲述它?)
对于嵌入式设备,Linux 2.4增加了对JFFS和RamFS的支持。前者为日志闪烁文件系统(Journaling Flash Filesystem),后者是可以在运行过程中调整大小的内存文件系统(in-memory filesystem)。这两种文件系统目前都有了各自的用户。
网络文件系统
并不是所有文件系统都是作为块设备被加载的。像进程、共享内存和devfs文件系统等完全都是虚拟的。还有其他一些文件系统是通过网络被加载的,完成这个任务有各种方法,许多操作系统都提供它们自己的方法来处理。而Linux可以识别当前的大部分网络文件系统。
Windows世界使用服务器消息块(Server Message Block,SMB)协议作为它们的网络文件系统。新的Linux内核放弃了在编译内核阶段手动选择是从Windows 9x还是NT/2000加载的选项,它将能够自动的检测远端操作系统的类型并可以进行必要的除错。
在UNIX世界里,使用Network Filesystem(NFS)协议来共享文件。Linux 2.4在显著提高NFS加载目录的稳定性同时,还将提供对NFS协议最新版本,NFSv3的支持。NFSv3能更好地支持文件系统同步、文件锁定,以及对企业环境非常关键的一些概念。(NFSv4的支持正在开发当中。)
分区表
Linux 2.4增加了对外部分区表的支持。Linux 2.2和Linux其他版本支持PPC或m68k对Macintosh分区的读取。在Intel硬件上,内核可以识别标准IBM格式、BSD磁盘标签,及其他公用扩展区。而Linux 2.4消除了端口直接的障碍,因而可以无缝地使用附加在Intel Linux机子上的外部Macintosh硬盘驱动器。一般来说,如果编译时转载了驱动程序,Linux就可以读取它在任何端口可以识别的分区表格式。