输入输出设备
在任何计算机系统的更"外部"的一层是输入输出设备,包括像键盘、鼠标、声卡、显卡等显而易见的东西,还包括像游戏操纵杆以及辅助设备等不那么常见的东西。在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。)
顺便提一下,Linux 修改了"系统请求"接口以更好地支持那些没有本地键盘的系统。系统请求接口("sysrq")是系统管理员在本地控制台做一些高级工作的方法,比如获取调试信息、强制系统重启、重新挂载文件系统为只读等等。因为 Linux 2.6 现在支持一个完全"headless"的系统,所以现在也可以通过/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个主要版本中才有。此系统通常称为V
4L(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,支持零拷贝传输等。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/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的改进,以及对无线支持的改进等),Linux还有两个很难分类的与笔记本电脑用户相关的特征。第一个是新核心支持的软停机磁盘存储(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。最后,soundmodem功能也被去除了,但是用户空间的版本维护地更好,并且更加实用。
原文: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