打印本文 打印本文 关闭窗口 关闭窗口
Linux 2.6内核的精彩世界
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2303  更新时间:2009/4/22 20:45:56  文章录入:mintao  责任编辑:mintao
个新的公用子系统。此外,一个外部源(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功能也被去除了,但是用户空间的版本维护地更好,并且更加实用。

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

具有更多技术背景的人可能只需要一个公告列表,Dave Jones编写了另一份出色的2.6开发进展的总括:http://www.codemonkey.org.uk/post-halloween-2.5.txt。他的工作与本文的任何相似之处纯属巧合,因为我们都始于源代码,并且都侧重于x86体系。

本文的版权:
2003年,Joseph Pranevich。允许本文的未经修改的在线重新发布(online redistribution),但如果您对于本文的非在线发布(杂志等)感兴趣,请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


上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口