90年代早期Linux开始出现的时侯,仅仅是以源代码方式出现,用户须要在其他操作系统下进行编译就能使用。后来出现了一些即将版本。目前最流行的几个即将版本有:SUSE、RedHat、Fedora、Ubuntu
知名、流行的Linux发行版本
Mandrivalinux
Mandriva原名Mandrake,最早由GaëlDuval创建并在1998年7月发布。记得前三年国外刚开始普及Linux时,Mandrake十分流行。说起Mandrake的历史,也许最早Mandrake的开发者是基于Redhat进行开发的。Redhat默认采用GNOME桌面系统,而Mandrake将之改为KDE。而因为当时的Linux普遍比较难安装,不适宜第一次接触Linux的菜鸟,所以Mandrake还简化了安装系统。我想这也是当时Mandrake在国外这么红火的诱因之一。Mandrake在易用性方面的确是下了不少工夫,包括默认情况下的硬件监测等。
Mandrake的开发完全透明化,包括“cooker”。当系统有了新的测试版本后,便可以在cooker上找到。之前Mandrake的新版本的发布速率很快,但从9.0以后便开始减弱。恐怕是希望就能延长版本的生命力以确保稳定和安全性。
优点:友好的操作界面,图形配置工具,庞大的社区技术支持,NTFS分区大小变更
缺点:部份版本bug较多,最新版本只先发布给Mandrake俱乐部的成员
RedHatlinux
国外,乃至是全世界的Linux用户所最熟悉、最耳闻能详的发行版想必就是RedHat了。RedHat最早由BobYoung和MarcEwing在1995年创建。而公司在近来才开始真正进入赢利时代,归功于收费的RedHatEnterpriseLinux(RHEL,RedHat的企业版)。而正统的RedHat版本已经停止技术支持,最后一版是RedHat9.0。于是,目前RedHat分为两个系列:由RedHat公司提供收费技术支持和更新的RedHatEnterpriseLinux,以及由社区开发的免费的FedoraCore。FedoraCore1发布于2003年年底,而FC的定位便是桌面用户。FC提供了最新的软件包,同时,它的版本更新周期也十分短,仅六个月。目前最新版本为FC3,而FC4也预定将于去年6月发布。这也是为何服务器上通常不推荐采用FedoraCore。
适用于服务器的版本是RedHatEnterpriseLinux,而因为这是个收费的操作系统。于是,国外外许多企业或空间商选择CentOS。CentOS可以算是RHEL的克隆版,但它最大的用处是免费!新手油目前的服务器便采用的CentOS3.4。
优点:拥有数目庞大的用户,优秀的社区技术支持,许多创新
缺点:免费版(FedoraCore)版本生命周期太紧,多媒体支持不佳
SUSElinux
SUSE是美国最知名的Linux发行版,在全世界范围中也享有较高的名声。SUSE自主开发的软件包管理系统YaST也大受好评。SUSE于2003年年底被Novell竞购。
SUSE以后的发布变得比较混乱,例如9.0版本是收费的,而10.0版本(或许因为各类压力)又免费发布。这促使一部份用户倍感疑惑,也转而使用其它发行版本。并且,瑕不掩瑜,SUSE依然是一个极其专业、优秀的发行版。
优点:专业,易用的YaST软件包管理系统
缺点:FTP发布一般要比零售版晚1~3个月
DebianGNU/Linux
Debian是新手油服务器之前所采用的操作系统。Debian最早由IanMurdock于1993年创建。可以算是迄今为止,最遵守GNU规范的Linux系统。Debian系统分为三个版本分支(branch):stable,testing和unstable。截止2005年5月,这三个版本分支分别对应的具体版本为:Woody,Sarge和Sid。其中,unstable为最新的测试版本,其中包括最新的软件包,而且也有相对较多的bug,适宜桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(例如SMP等)。而Woody通常只用于服务器,里面的软件包大部份都比较过时,而且稳定和安全性都十分的高。新手油之前所采用的是DebianSarge。
为什么有这么多的用户沉迷于Debian呢(包括笔者在内)?apt-get/dpkg是诱因之一。dpkg是Debian系列特有的软件包管理工具,它被誉为所有Linux软件包管理工具(例如RPM)最强悍的!配合apt-get,在Debian上安装、升级、删除和管理软件显得异常容易。许多Debian的用户都开玩笑的说,Debian将她们养懒了,由于只要简单得敲一下”apt-getupgrade&&apt-getupdate”,机器上所有的软件都会手动更新了……
优点:遵守GNU规范,100%免费,优秀的网路和社区资源,强悍的apt-get
缺点:安装相对不易,stable分支的软件极渡过时。
Ubuntulinux
笔者的桌面笔记本便使用的Ubuntu。根据笔者的理解,简单而言,Ubuntu就是一个拥有Debian所有的优点,以及自己所强化的优点的近乎完美的Linux操作系统。:)Ubuntu是一个相对较新的发行版,并且,它的出现可能改变了许多潜在用户对Linux的想法。其实,从前人们会觉得Linux无法安装、难以使用,但是,Ubuntu出现后,那些都成为了历史。Ubuntu基于DebianSid,所以这也就是笔者所说的,Ubuntu拥有Debian的所有优点,包括apt-get。但是,除了这么而已,Ubuntu默认采用的GNOME桌面系统也将Ubuntu的界面装潢的简易而不失华丽。其实,假如你是一个KDE的拥护者的话,Kubuntu同样适宜你!
Ubuntu的安装特别的人性化,只要依照提示一步一步进行,安装和Windows同样简便!而且,Ubuntu被誉为对硬件支持最好最全面的Linux发行版之一,许多在其他发行版上难以使用,或则默认配置时难以使用的硬件,在Ubuntu上轻松搞定。而且,Ubuntu采用自行强化的内核(kernel),安全性方面更上一层楼。而且,Ubuntu默认不能直接root登录,必须从第一个创建的用户通过su或sudo来获取root权限(这或许不太便捷,但无疑增加了安全性,防止用户因为马大哈而损毁系统)。Ubuntu的版本周期为六个月,填补了Debian更新平缓的不足。
优点:人气颇高的峰会提供优秀的资源和技术支持,固定的版本更新周期和技术支持linux 内核社区,可从DebianWoody直接升级
缺点:还未完善成熟的商业模式
Gentoolinux
Gentoo最初由DanielRobbins(前StampedeLinux和FreeBSD的开发者之一)创建。因为开发者对FreeBSD的熟稔,所以Gentoo拥有匹敌FreeBSD的广受盛誉的ports系统——portage。(Ports和Portage都是用于在线更新软件的系统,类似apt-get,但还是有很大不同)Gentoo的首个稳定版本发布于2002年。
Gentoo的出名是由于其高度的自订制性:由于它是一个基于源代码的(source-based)发行版。虽然安装时可以选择预先编译好的软件包,而且大部份使用Gentoo的用户都选择自己自动编译。这也是为何Gentoo适宜比较有Linux使用经验的老鸟使用的诱因。并且要注意的是,因为编译软件须要消耗大量的时间,所以假如你所有的软件都自己编译,并安装KDE桌面系统等比较大的软件包,可能须要几天时间就能编译完……
优点:高度的可订制性,完整的使用指南,堪比Ports的Portage系统,适宜“臭美”的前辈使用^^
缺点:编译历时多,安装平缓
Slackwarelinux
Slackware由PatrickVolkerding创建于1992年。算上去应该是历史最悠久的Linux发行版。以前Slackware特别的流行,并且当Linux越来越普及,用户的技术层面越来越广(更多的菜鸟)后,Slackware逐渐的被新来的人们所遗忘。在其他主流发行版指出易用性的时侯,Slackware仍然执拗的追求最原始的效率——所有的配置均还是要通过配置文件来进行。
虽然这么,Slackware一直深入人心(大部份都是比较有经验的Linux老鸟)。Slackware稳定、安全,所以一直有大批的忠实用户。因为Slackware尽量采用原版的软件包而不进行任何更改,所以制造新bug的概率便低了好多。Slackware的版本更新周期较长(大概1年),而且新版本的软件一直不间断的提供给用户下载。
优点:特别稳定、安全,高度坚持UNIX的规范
缺点:所有的配置均通过编辑文件来进行,手动硬件监测能力较差
Knoppixlinux
由英国的KlausKnopper开发的Knoppix,是一个基于Debian的发行版。Knoppix严格算上去是一款LiveCDLinux,所谓的LiveCD就是整个操作系统都在一张光碟上,只要开机从光碟启动,才能拥有一个完整的Linux系统!无需安装!其实,Knoppix也才能十分轻松的安装到硬碟上。其强悍的硬件监测能力、系统修补能力、即时压缩传输技术,都令人大加赞扬。可以说,在LiveCD界,Knoppix是无人能及的!
优点:无需安装可直接运行于CD上,优秀的硬件监测能力,可作为系统急救盘使用
缺点:LiveCD因为光碟的数据读取速率限制造成性能急剧增长
MEPISlinux
MEPIS由WarrenWoodford在2003年完善。MEPIS其实刚构建不久,并且迅速的传播在Linux用户间。简单来说,MEPIS是一个集合了DebianSid和Knoppix的产物。用户即能将之当成LiveCD使用,也能使用常规的图形界面进行安装。
MEPIS默认集成安装了JavaRuntimeEnvironment、Flash插件、nVidia加速驱动等许多常用的程序。用户可以十分轻松的安装完系统后就直接开始使用,而不用四处找寻资料如何下载、如何安装、如何配置这种软件。这除了给Linux菜鸟带来了方便,也给老鸟们节省了相当多的时间。
优点:LiveCD与常规安装两用,优秀的硬件监测能力,预装了许多实用的软件
缺点:构建时间不长,默认的界面有些简陋
Xandroslinux
Xandros构建在早已成为历史的CorelLinux之上。曾经CorelLinux的公司因为财政上的困难,被迫中止了CorelLinux的开发,而Xandros适时的将CorelLinux部门买下,于2002年10月推出全新的XandrosDesktop。
Xandros的卖点在于非常简单的安装和使用,所以它的市场定位是这些没有任何Linux使用经验的菜鸟,或是习惯使用Windows的用户。Xandros的标准版和提高版都是商业软件,分别售价$40和$99欧元。不过你依然可以在这儿下载到免费的公开发行版。
优点:适宜完全没有经验的菜鸟,安装完之后能够立刻投入使用,自带十分不错的工具
缺点:商业软件
FreeBSDlinux
首先要指出的是:FreeBSD不是一个Linux系统!而且,为何笔者要介绍FreeBSD呢?由于FreeBSD的用户也相当多,其许多特点都与Linux相类似。事实上,Linux和BSD(BerkeleySoftwareDistribution)均是UNIX的演进分支。但是,Linux中相当多的特点和功能(例如用于配置DNS的Bind软件)都是取自于BSD的。而FreeBSD便是BSD家族中最出名,用户数目最多的一个发行版。MEZOC之前所采用的便是FreeBSD系统。
FreeBSD构建于1993年,拥有相当长的历史。FreeBSD拥有两个分支:stable和current。顾名思义如何安装LINUX,stable是稳定版,而current则是添加了新技术的测试版。另外,FreeBSD会不定期的发布新的版本,称为RELEASE,stable和current均有自己的RELEASE版本。例如4.11-RELEASE和5.3-RELEASE,请注意,这并不代表前者比后者的版本新。这仅仅代表后者(数字小的版本)是stable版本,前者(数字大的版本)是current版本。
FreeBSD不仅作为服务器系统外,也适宜桌面用户。不过,考虑到软件方面的兼容性,通常用户选择FreeBSD作为桌面系统不是很明智。作为服务器而言,FreeBSD是相当优秀的。以前有人说过,同样的服务器硬件配置,运行同样的一个vBulletin峰会,FreeBSD所用的资源要比Linux少。这也是为何许多空间商竭力推崇FreeBSD的诱因。:)
优点:速率快,十分稳定,优秀的使用指南,Ports系统
缺点:比起Linux而言对硬件的支持较差,对于桌面系统而言软件的兼容性是个问题
Linux内核简介
如今让我们从一个比较高的高度来考量一下GNU/Linux操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图2所示。
图2.GNU/Linux操作系统的基本体系结构
系统调用插口(SCI)的方式
实际上,体系结构可能并不像图2所示的一样清晰。诸如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。提供了对虚拟化指令支持的新型x86中央处理单元(CPU)在这方面要比使用传统int80h方式的旧式x86处理器愈发高效。
最前面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux内核正是坐落这儿。
GNUCLibrary(glibc)也在这儿。它提供了联接内核的系统调用插口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点十分重要,由于内核和用户空间的应用程序使用的是不同的保护地址空间。每位用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。更多信息,请参看一节中的链接。
Linux内核可以进一步界定成3层。最前面是系统调用插口,它实现了一些基本的功能,比如read和write。系统调用插口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这种代码是Linux所支持的所有处理器体系结构所通用的。在这种代码之下是依赖于体系结构的代码,构成了一般称为BSP(BoardSupportPackage)的部份。这种代码用作给定体系结构的处理器和特定于平台的代码。
Linux内核的属性
在讨论小型而复杂的系统的体系结构时,可以从好多角度来考量系统。体系结构剖析的一个目标是提供一种方式更好地理解源代码,这正是本文的目的。
Linux内核实现了好多重要的体系结构属性。在或高或低的层次上,内核被界定为多个子系统。Linux也可以看作是一个整体,由于它会将所有那些基本服务都集成到内核中。这与微内核的体系结构不同,前者会提供一些基本的服务,比如通讯、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这儿并不对此进行讨论。
随着时间的流逝,Linux内核在显存和CPU使用方面具有较高的效率,而且十分稳定。并且对于Linux来说,最为有趣的是在这些大小和复杂性的前提下,仍然具有良好的可移植性。Linux编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个反例是Linux可以在一个具有显存管理单元(MMU)的处理器上运行,也可以在这些不提供MMU的处理器上运行。Linux内核的uClinux移植提供了对非MMU的支持。
Linux内核的主要子系统
现今使用图3中的分类说明Linux内核的主要组件。
图3.Linux内核的一个体系结构透视图
系统调用插口
SCI层提供了个别机制执行从用户空间到内核的函数调用。正如上面讨论的一样,这个插口依赖于体系结构,甚至在相同的处理器家族内也是这么。SCI实际上是一个十分有用的函数调用多路复用和多路分解服务。在./linux/kernel中您可以找到SCI的实现,并在./linux/arch中找到依赖于体系结构的部份。有关这个组件的更详尽信息可以在一节中找到。
进程管理
内核是哪些?
如所示,内核实际上仅仅是一个资源管理器。不管被管理的资源是进程、内存还是硬件设备,内核负责管理并判决多个竞争用户对资源的访问(既包括内核空间也包括用户空间)。
进程管理的重点是进程的执行。在内核中,这种进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间,一般使用进程这个术语,不过Linux实现并没有分辨这两个概念(进程和线程)。内核通过SCI提供了一个应用程序编程插口(API)来创建一个新进程(fork、exec或PortableOperatingSystemInterface[POSIX]函数),停止进程(kill、exit),并在它们之间进行通讯和同步(signal或则POSIX机制)。
进程管理还包括处理活动进程之间共享CPU的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争CPU,这些算法都可以在固定时间内进行操作。这些算法就称为O(1)调度程序linux 内核社区,这个名子就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O(1)调度程序也可以支持多处理器(称为对称多处理器或SMP)。您可以在./linux/kernel中找到进程管理的源代码,在./linux/arch中可以找到依赖于体系结构的源代码。在一节中可以了解有关这个算法的更多内容。
显存管理
内核所管理的另外一个重要资源是显存。为了提升效率,若果由硬件管理虚拟显存,显存是根据所谓的显存页形式进行管理的(对于大部份体系结构来说都是4KB)。Linux包括了管理可用显存的方法,以及数学和虚拟映射所使用的硬件机制。
不过显存管理要管理的可不止4KB缓冲区。Linux提供了对4KB缓冲区的具象,比如slab分配器。这些显存管理模式使用4KB缓冲区为基数,之后从中分配结构,并跟踪显存页使用情况,例如什么显存页是满的,什么页面没有完全使用,什么页面为空。这样就容许该模式依据系统须要来动态调整显存使用。
为了支持多个用户使用显存,有时会出现可用显存被消耗光的情况。因为这个缘由,页面可以移出显存并装入c盘中。这个过程称为交换,由于页面会被从显存交换到硬碟上。显存管理的源代码可以在./linux/mm中找到。
虚拟文件系统
虚拟文件系统(VFS)是Linux内核中十分有用的一个方面,由于它为文件系统提供了一个通用的插口具象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层(请参看图4)。
图4.VFS在用户和文件系统之间提供了一个交换层
在VFS里面,是对例如open、close、read和write之类的函数的一个通用API具象。在VFS下边是文件系统具象,它定义了下层函数的实现方法。它们是给定文件系统(超过50个)的插件。文件系统的源代码可以在./linux/fs中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或则随后预先读取数据便于在须要是就可用)优化了对化学设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定化学设备的插口。
网路堆栈
网路堆栈在设计上依循模拟合同本身的分层体系结构。回想一下,InternetProtocol(IP)是传输合同(一般称为传输控制合同或TCP)下边的核心网路层合同。TCP里面是socket层,它是通过SCI进行调用的。
socket层是网路子系统的标准API,它为各类网路合同提供了一个用户插口。从原始帧访问到IP合同数据单元(PDU),再到TCP和UserDatagramProtocol(UDP),socket层提供了一种标准化的方式来管理联接,并在各个终点之间联通数据。内核中网路源代码可以在./linux/net中找到。
设备驱动程序
Linux内核中有大量代码都在设备驱动程序中,它们就能运转特定的硬件设备。Linux源码树提供了一个驱动程序子目录,这个目录又进一步界定为各类支持设备,比如Bluetooth、I2C、serial等。设备驱动程序的代码可以在./linux/drivers中找到。
依赖体系结构的代码
虽然Linux很大程度上独立于所运行的体系结构linux操作系统,并且有些元素则必须考虑体系结构能够正常操作并实现更高效率。./linux/arch子目录定义了内核源代码中依赖于体系结构的部份,其中包含了各类特定于体系结构的子目录(共同组成了BSP)。对于一个典型的桌面系统来说,使用的是i386目录。每位体系结构子目录都包含了好多其他子目录,每位子目录都关注内核中的一个特定方面,比如引导、内核、内存管理等。这种依赖体系结构的代码可以在./linux/arch中找到。
Linux内核的一些有用特点
假如Linux内核的可移植性和效率还不够好,Linux还提供了其他一些特点,它们难以界定到里面的分类中。
作为一个生产操作系统和开源软件,Linux是测试新合同及其提高的良好平台。Linux支持大量网路合同,包括典型的TCP/IP,以及高速网路的扩充(小于1GigabitEthernet[GbE]和10GbE)。Linux也可以支持例如流控制传输合同(SCTP)之类的合同,它提供了好多比TCP更中级的特点(是传输层合同的接替者)。
Linux还是一个动态内核,支持动态添加或删掉软件组件。被称为动态可加载内核模块,它们可以在引导时按照须要(当前特定设备须要这个模块)或在任何时侯由用户插入。
Linux最新的一个提高是可以用作其他操作系统的操作系统(称为系统管理程序)。近来,对内核进行了更改,称为基于内核的虚拟机(KVM)。这个更改为用户空间启用了一个新的插口,它可以容许其他操作系统在启用了KVM的内核之上运行。不仅运行Linux的其他实例之外,MicrosoftWindows也可以进行虚拟化。唯一的限制是底层处理器必须支持新的虚拟化指令。