版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章Linux概述1.1操作系統(tǒng)內(nèi)核 1.2Linus與Linux 1.3Linux內(nèi)核結(jié)構(gòu) 1.4Linux發(fā)布 1.5Unix與Linux哲學(xué)操作系統(tǒng)掌控計(jì)算機(jī)的運(yùn)行,是一個(gè)有生命、會(huì)呼吸的實(shí)體。操作系統(tǒng)為計(jì)算機(jī)帶來了生命,賦予了計(jì)算機(jī)以人格特征,是計(jì)算機(jī)系統(tǒng)的靈魂。操作系統(tǒng)是人類工程的產(chǎn)物,是計(jì)算機(jī)系統(tǒng)中最基礎(chǔ)、最核心、最復(fù)雜的軟件。在幾十年的發(fā)展過程中,人們?cè)O(shè)計(jì)了數(shù)以百計(jì)的操作系統(tǒng),其中不乏優(yōu)秀之作,如Multics、MVS、VMS、Unix、Linux、DOS、WindowsNT等。這些操作系統(tǒng)的設(shè)計(jì)理念不同,設(shè)計(jì)方法各異,其內(nèi)部結(jié)構(gòu)和外部表現(xiàn)千差萬別,但每種操作系統(tǒng)都有自己的特色,都能管理特定的硬件平臺(tái)并為特定的用戶提供服務(wù),也就是說,每種操作系統(tǒng)都能滿足一些特定用戶的需求。隨著計(jì)算機(jī)硬件平臺(tái)的不斷演化,人們對(duì)操作系統(tǒng)的需求在不斷變化,賦予操作系統(tǒng)的任務(wù)在不斷增加,而且新的操作系統(tǒng)設(shè)計(jì)理念與實(shí)現(xiàn)技術(shù)也在不斷出現(xiàn),因而可以預(yù)期新的操作系統(tǒng)還會(huì)不斷涌現(xiàn)。
毫無疑問,操作系統(tǒng)是十分復(fù)雜的軟件,操作系統(tǒng)設(shè)計(jì)是十分龐大的工程。面對(duì)艱巨的操作系統(tǒng)設(shè)計(jì)任務(wù),人們最常問的問題可能就是“別的操作系統(tǒng)是如何設(shè)計(jì)的?”“我能從中獲得哪些啟示?”等等。事實(shí)上,設(shè)計(jì)操作系統(tǒng)的第一步通常是考察、分析已有的操作系統(tǒng)。作為一個(gè)開源的、生機(jī)勃勃的操作系統(tǒng),Linux正是這第一步的首選。
操作系統(tǒng)是用戶和計(jì)算機(jī)硬件之間的接口,是一組軟件工具,也是用戶的操作界面。用戶通過操作系統(tǒng)提供的這些軟件工具來操作和使用計(jì)算機(jī),如開發(fā)程序、運(yùn)行程序、使用設(shè)備、管理文件等,而不用理會(huì)計(jì)算機(jī)硬件的結(jié)構(gòu)和外部設(shè)備的細(xì)節(jié)。因而,操作系統(tǒng)是服務(wù)的提供者。1.1操作系統(tǒng)內(nèi)核操作系統(tǒng)是計(jì)算機(jī)資源的管理者。計(jì)算機(jī)系統(tǒng)中的資源包括硬件資源(如CPU、內(nèi)存、外存及各種外部設(shè)備)和軟件資源(如暫存在內(nèi)存中的程序和數(shù)據(jù),存放在磁盤中的文件、程序、數(shù)據(jù)等)。操作系統(tǒng)負(fù)責(zé)這些資源的登記、分配、使用、回收,并通過對(duì)資源的管理協(xié)調(diào)各程序的運(yùn)行,保證對(duì)資源的安全、有序、合理使用。
操作系統(tǒng)是虛擬機(jī),它建立在計(jì)算機(jī)硬件平臺(tái)之上,屏蔽了硬件平臺(tái)的差異,統(tǒng)一了硬件平臺(tái)的特征,增強(qiáng)了硬件平臺(tái)的功能。廣義上說,操作系統(tǒng)包括內(nèi)核(Kernel)和運(yùn)行在內(nèi)核之上的所有工具軟件,如瀏覽器、資源管理器、編輯器等。狹義上說,操作系統(tǒng)就是內(nèi)核,其余軟件都是應(yīng)用程序。對(duì)操作系統(tǒng)內(nèi)核來說,應(yīng)用程序是它的用戶,內(nèi)核支持應(yīng)用程序的運(yùn)行。一個(gè)操作系統(tǒng)可以擁有許許多多的應(yīng)用程序,但卻只有一個(gè)內(nèi)核。操作系統(tǒng)的核心管理工作是在內(nèi)核中實(shí)現(xiàn)的,核心服務(wù)也是由內(nèi)核提供的,內(nèi)核是操作系統(tǒng)的靈魂。因此,要考察一個(gè)操作系統(tǒng),其核心工作是分析它的內(nèi)核。為了管理資源、提供服務(wù),在內(nèi)核中需要實(shí)現(xiàn)許多程序,如各種中斷的處理程序、各種服務(wù)請(qǐng)求的處理程序、各種資源的管理程序、各種設(shè)備的驅(qū)動(dòng)程序等。為了實(shí)現(xiàn)這些程序,在內(nèi)核中還需要定義多種數(shù)據(jù)結(jié)構(gòu),如段描述符表(GDT、LDT、IDT)、頁目錄、頁表、中斷管理結(jié)構(gòu)、進(jìn)程控制塊(PCB)、內(nèi)存管理結(jié)構(gòu)、文件管理結(jié)構(gòu)、設(shè)備管理結(jié)構(gòu)、網(wǎng)絡(luò)協(xié)議等。為了討論方便,人們通常按功能將操作系統(tǒng)內(nèi)核分解成幾個(gè)子系統(tǒng),如:
(1)進(jìn)程管理,包括進(jìn)程的創(chuàng)建、加載、調(diào)度、終止、通信和同步等。
(2)內(nèi)存管理,包括物理內(nèi)存管理、虛擬內(nèi)存管理等。
(3)文件系統(tǒng),即外存管理,包括虛擬文件系統(tǒng)和物理文件系統(tǒng)等。
(4)設(shè)備管理,包括設(shè)備管理模型和設(shè)備驅(qū)動(dòng)程序等。
(5)網(wǎng)絡(luò)協(xié)議,包括網(wǎng)絡(luò)設(shè)備管理和各種網(wǎng)絡(luò)協(xié)議。
(6)系統(tǒng)安全,包括安全服務(wù)器、安全監(jiān)控器等。
顯然,其中的每個(gè)子系統(tǒng)都十分復(fù)雜,還可以將其進(jìn)一步分解,如可以將內(nèi)存管理進(jìn)一步分解成伙伴內(nèi)存管理、對(duì)象內(nèi)存管理、邏輯內(nèi)存管理、虛擬內(nèi)存管理、用戶內(nèi)存管理等。操作系統(tǒng)內(nèi)核的每一子系統(tǒng)都負(fù)責(zé)一塊相對(duì)獨(dú)立的管理工作,都有自己獨(dú)特的組織結(jié)構(gòu)和實(shí)現(xiàn)方法。進(jìn)一步的,每一個(gè)操作系統(tǒng)內(nèi)核都有自己獨(dú)特的結(jié)構(gòu)框架和實(shí)現(xiàn)方法,用于將它的各個(gè)子系統(tǒng)組織成一個(gè)有機(jī)的整體。
由于操作系統(tǒng)內(nèi)核完成的都是核心管理工作,因而內(nèi)核本身必須被嚴(yán)格地保護(hù)起來,以免被破壞。另外,操作系統(tǒng)內(nèi)核和應(yīng)用程序的能力也應(yīng)該有所區(qū)別,有些工作只能在內(nèi)核中做,不應(yīng)由應(yīng)用程序來實(shí)現(xiàn)。為此,處理器通常定義幾種不同的運(yùn)行狀態(tài),如核心態(tài)和用戶態(tài)。操作系統(tǒng)內(nèi)核自己運(yùn)行在核心態(tài),而強(qiáng)制應(yīng)用程序運(yùn)行在用戶態(tài)。當(dāng)處理器運(yùn)行在核心態(tài)時(shí),它可以執(zhí)行所有的指令、使用所有的資源,也就是說,內(nèi)核擁有所有的特權(quán);但當(dāng)處理器運(yùn)行在用戶態(tài)時(shí),它只能執(zhí)行有限的指令、使用有限的資源,或者說只能在內(nèi)核的監(jiān)督和幫助下使用資源。
在劃分出用戶態(tài)和核心態(tài)之后,整個(gè)計(jì)算機(jī)系統(tǒng)就呈現(xiàn)出了一種層次結(jié)構(gòu)。操作系統(tǒng)內(nèi)核直接運(yùn)行在計(jì)算機(jī)硬件平臺(tái)之上,而應(yīng)用程序又運(yùn)行在操作系統(tǒng)內(nèi)核之上。操作系統(tǒng)內(nèi)核介于應(yīng)用程序和計(jì)算機(jī)硬件之間,它將應(yīng)用程序和硬件完全隔開。內(nèi)核管理硬件資源并為應(yīng)用程序提供服務(wù),應(yīng)用程序只有通過內(nèi)核才能使用計(jì)算機(jī)硬件資源。內(nèi)核本身是封閉的,受保護(hù)的,應(yīng)用程序只能通過內(nèi)核提供的系統(tǒng)調(diào)用接口請(qǐng)求內(nèi)核服務(wù)。
由此可見,操作系統(tǒng)內(nèi)核雖然管理著計(jì)算機(jī)系統(tǒng)的所有資源,掌控著計(jì)算機(jī)系統(tǒng)的運(yùn)行,但卻是極為神秘的,它躲在幕后,難得一見。LinusTorvalds說:“關(guān)于解釋操作系統(tǒng)內(nèi)核的麻煩是,你永遠(yuǎn)不可能看到它,因?yàn)闆]有人真正使用一個(gè)操作系統(tǒng)內(nèi)核。人們?cè)谟?jì)算機(jī)上使用程序,操作系統(tǒng)內(nèi)核的唯一任務(wù)就是幫助這些程序運(yùn)行。所以操作系統(tǒng)內(nèi)核本身從來沒有主動(dòng)做任何事,它僅僅是等待應(yīng)用程序請(qǐng)求某些資源或者請(qǐng)求硬盤上的某些文件或者請(qǐng)求程序把它們連接到外部世界等等,然后操作系統(tǒng)內(nèi)核來了,它干預(yù)并且試圖讓人們更容易地運(yùn)行程序?!?/p>
Linux操作系統(tǒng)內(nèi)核是由LinusTorvalds開發(fā)并維護(hù)的。
LinusTorvalds于1969年12月28日出生于芬蘭的赫爾辛基,長(zhǎng)相普通。據(jù)Linus本人描述,自己“長(zhǎng)得像海貍,小矮個(gè)、棕色頭發(fā)、藍(lán)眼睛、大齙牙、大鼻子,稍有點(diǎn)近視,于是戴副無傷大雅的眼鏡”,如圖1.1所示。1.2Linus與Linux
LinusTorvaldsRichardStallman
圖1.1LinusTorvalds與RichardStallman
Linus說自己具有“書呆子的所有特點(diǎn):比如數(shù)學(xué)極好,物理也非常棒,但社交能力卻差得一塌糊涂”。他十一歲左右開始在外公的一臺(tái)CommodoreVIC-20計(jì)算機(jī)上編寫程序,從此對(duì)計(jì)算機(jī)非常著迷。“當(dāng)赫爾辛基的孩子們都和他們的父母在樹林子里玩曲棍球和滑雪時(shí),我卻在琢磨一臺(tái)電腦在怎樣工作?!盠inus的中學(xué)時(shí)代“基本上是坐在電腦面前度過的”。16歲那年,Linus購(gòu)買了自己的第一臺(tái)計(jì)算機(jī)SinclairQL(M68008CPU、Q-DOS操作系統(tǒng)),并在其上開發(fā)了軟盤驅(qū)動(dòng)程序、匯編程序、編輯器和若干游戲程序。
1988年,Linus帶著他的SinclairQL計(jì)算機(jī)進(jìn)入了赫爾辛基大學(xué)。他選擇計(jì)算機(jī)作為主修課,物理和數(shù)學(xué)為輔修課。
1989年,Linus在芬蘭軍中服兵役,職位是陸軍預(yù)備役的一名少尉。
1990年5月7日,Linus服完兵役,返回赫爾辛基大學(xué)。他利用整個(gè)夏天自學(xué)完了A.Tanenbaum的名著《操作系統(tǒng):設(shè)計(jì)與實(shí)現(xiàn)》(Linus認(rèn)為這是改變他一生的書籍,是他的圣經(jīng))。在新學(xué)期中,Linus選修了“C語言和Unix”課程,第一次接觸了Unix操作系統(tǒng),并被它的設(shè)計(jì)理念深深吸引。
1991年1月5日,Linus以分期付款方式購(gòu)買了自己的第二臺(tái)電腦,一臺(tái)雜牌的PC機(jī)(Intel386CPU、4MB內(nèi)存、DOS操作系統(tǒng))。Linus不喜歡DOS,所以定購(gòu)了Minix操作系統(tǒng)。Minix是由A.Tanenbaum開發(fā)的教學(xué)操作系統(tǒng),采用微內(nèi)核思想設(shè)計(jì),是Unix的一種變體。Linus使用Minix的最初目的是將自己的PC機(jī)仿真成遠(yuǎn)程終端,以便與學(xué)校的Unix工作站(運(yùn)行ULTRIX操作系統(tǒng)的DECMicroVAX)連接。但他很快發(fā)現(xiàn)Minix的終端仿真程序性能很差,于是自己開發(fā)了一個(gè)可以直接在BIOS上運(yùn)行的終端仿真程序。Linus的仿真程序由兩個(gè)進(jìn)程組成:一個(gè)接收鍵盤命令并將其通過調(diào)制解調(diào)器發(fā)送出去,另一個(gè)接收來自調(diào)制解調(diào)器的應(yīng)答并將其顯示在屏幕上。仿真程序的開發(fā)使Linus擁有了自己的進(jìn)程調(diào)度程序和終端驅(qū)動(dòng)程序。為了用終端仿真程序下載和上傳文檔,Linus又設(shè)計(jì)了磁盤驅(qū)動(dòng)程序和與Minix兼容的文件系統(tǒng)。隨著工作的進(jìn)行,Linus逐漸轉(zhuǎn)變了觀點(diǎn),不再把自己的程序看成一個(gè)終端仿真器,而開始將其看做是一個(gè)操作系統(tǒng)。隨后,他根據(jù)Sun服務(wù)器的Unix手冊(cè)和Minix教科書實(shí)現(xiàn)了一組類POSIX的系統(tǒng)調(diào)用,使自己的操作系統(tǒng)內(nèi)核可以支持Bash(一個(gè)Shell程序)和其它一些GNU工具軟件(如GCC)的運(yùn)行,并新設(shè)計(jì)了若干程序。于是,Linus設(shè)計(jì)出了一個(gè)新的操作系統(tǒng)。值得注意的是,在此之前,由RichardStallman領(lǐng)導(dǎo)的GNU計(jì)劃已開發(fā)出了許多軟件工具,但卻一直沒有完成操作系統(tǒng)內(nèi)核(即HURD)的開發(fā)。Linus開發(fā)出了操作系統(tǒng)內(nèi)核,卻沒有軟件工具。Linus選擇POSIX作為自己操作系統(tǒng)內(nèi)核的接口標(biāo)準(zhǔn),神奇地使兩者結(jié)合了起來。
1991年8月25日,Linus在comp.os.minix新聞組中宣布自己開發(fā)了一個(gè)新的操作系統(tǒng)。
1991年9月17日,Linus將操作系統(tǒng)的最初版本(0.01版)放在了網(wǎng)上。FTP管理員將其改名為L(zhǎng)inux,即Linux0.01?!安僮飨到y(tǒng)狂熱者看到了火花”,他們向Linus提出了許多建議和補(bǔ)丁程序。10月份,Linux0.02發(fā)布。11月份,Linux0.03發(fā)布。至此,Linus認(rèn)為自己的工作已圓滿完成,準(zhǔn)備“洗手不干”。但隨后出現(xiàn)了一個(gè)偶然的失誤,Linus無意中毀掉了自己機(jī)器上的Minix,失去了用于開發(fā)Linux的環(huán)境。這次失誤給Linus帶來了新的挑戰(zhàn),重新鼓起了他的勇氣,他遂決定直接在Linux環(huán)境上開發(fā)Linux。這一決定的意義十分重大,它使Linux徹底擺脫了Minix,成為了一個(gè)能夠自我包容的操作系統(tǒng)。11月底,新發(fā)布的Linux被命名為L(zhǎng)inux0.10。從此,“開始有人使用這個(gè)系統(tǒng)并可以用它來做一些事了”。
1992年1月16日,Linux0.12發(fā)布。新版本中增加了虛擬內(nèi)存管理。這一新功能使Linux脫穎而出,吸引了成百上千的用戶,也吸引了眾多黑客的參與。在Linux0.12中,Linus第一次采用了GPL許可,允許用戶出售程序拷貝,包括Linux內(nèi)核,從中贏利,但必須公開源代碼。這一轉(zhuǎn)變促進(jìn)了Linux的發(fā)展。Linus本人也認(rèn)為“使Linux轉(zhuǎn)向GPL是我一生中所做過的最漂亮的一件事”。
Linux的迅速崛起引起了A.Tanenbaum的不滿,他與Linus發(fā)生了論戰(zhàn)。一個(gè)名叫OrestZborowski的黑客將XWindow移植到了Linux上,Linux有了自己的圖形系統(tǒng)。Linus感覺Linux操作系統(tǒng)已接近完成,因而在1992年3月8日發(fā)布新版本時(shí),直接將其命名為L(zhǎng)inux0.95。
但很快Linus就發(fā)現(xiàn)自己過于樂觀了。在Linux0.95發(fā)布以后,Linus等人用了約2年的時(shí)間,經(jīng)歷了136次修訂,才為L(zhǎng)inux添加了網(wǎng)絡(luò)功能(TCP/IP協(xié)議等),并修正了其中的諸多瑕疵,使Linux逐步走向成熟。其間,Linux團(tuán)隊(duì)不斷壯大,有了自己的名為comp.os.linux的新聞組,而且人氣激增。
Linus成了Linux團(tuán)隊(duì)的領(lǐng)袖。在Transmeta公司工作的PeterAnvin組織了一次在線募捐活動(dòng),籌得了3000美元善款,幫助Linus還清了購(gòu)買第二臺(tái)計(jì)算機(jī)的欠款。
1992年秋天,Linus成了赫爾辛基大學(xué)一名用瑞典語講授計(jì)算機(jī)基礎(chǔ)課的助教。
1993年秋天,
Linus認(rèn)識(shí)了他班上的女學(xué)生Tove。經(jīng)過幾個(gè)月的約會(huì)后,Tove成了Linus的妻子。
1993年圣誕節(jié),Linus將自己的計(jì)算機(jī)升級(jí)成了PC486DX266。
1994年3月13日,在赫爾辛基大學(xué)計(jì)算機(jī)科學(xué)系的禮堂里,Linux1.0公開發(fā)布,受到了多家媒體的報(bào)道和廣大公眾的關(guān)注。赫爾辛基大學(xué)給Linus提供了很多支持,但并沒有試圖獲得Linux的所有權(quán),這也是Linux得以自由發(fā)展的原因之一。
1994年4月6日,啟動(dòng)了Linux1.1的開發(fā)工作。在隨后的1年多時(shí)間里,Linus對(duì)Linux1.1進(jìn)行了95次修訂。
此后,Linux的開發(fā)進(jìn)入正軌,版本的編號(hào)也約定俗成,即A.B.C。其中A是主版本號(hào),B是次版本號(hào),C是修訂次數(shù)。偶數(shù)B表示穩(wěn)定版本,奇數(shù)B表示開發(fā)中的版本。通常情況下,在發(fā)布穩(wěn)定版本后不久即會(huì)啟動(dòng)新版本的開發(fā),當(dāng)然開發(fā)工作由Linus主持。在開發(fā)新版本的同時(shí),穩(wěn)定版也被很好地維護(hù),穩(wěn)定版本的修訂版也在不斷發(fā)布。
1994年8月,受Novell公司之邀,Linus第一次踏上了美國(guó)的領(lǐng)土。一年之后,Linus重訪美國(guó),參加數(shù)字用戶集團(tuán)(Digital’sUserGroup)的DECUS(DigitalEquipmentCorporationUserSociety)會(huì)議,獲得了一臺(tái)Alpha工作站。為了在其上運(yùn)行Linux,Linus對(duì)自己的操作系統(tǒng)內(nèi)核進(jìn)行了修改,使之更便于移植。此后,Linux被移植到了幾乎所有的硬件平臺(tái)上。
1995年3月7日,Linux1.2發(fā)布。
1995年6月12日,啟動(dòng)Linux1.3的開發(fā)工作。在隨后的1年內(nèi),Linus團(tuán)隊(duì)對(duì)Linux1.3進(jìn)行了100次修訂。在這一年里,Linus由助教升為了助理研究員;Linux的各種發(fā)布版本不斷涌現(xiàn),商業(yè)性的Linux軟件公司吸引了更多的追隨者;LinuxJournal雜志發(fā)行了10萬冊(cè);Linus也成了Linux注冊(cè)商標(biāo)的所有人,并選定了企鵝作為L(zhǎng)inux的形象標(biāo)識(shí),如圖1.2所示。
圖1.2Linux標(biāo)識(shí)和GNU標(biāo)識(shí)
1996年6月9日,Linux1.3的開發(fā)工作完成,新發(fā)布的版本被定為L(zhǎng)inux2.0。
1996年9月30日,啟動(dòng)了Linux2.1的開發(fā)工作。
1996年,Linus獲得了碩士學(xué)位(他的碩士論文題目是“Linux:APortableOperatingSystem”),并有了自己的第一個(gè)女兒。
1997年初,Linus離開赫爾辛基,來到了美國(guó)硅谷,加盟一家不知名的計(jì)算機(jī)公司Transmeta,一邊工作(編寫與維護(hù)x86解釋程序),一邊繼續(xù)領(lǐng)導(dǎo)Linux的開發(fā)。
1998年,Linus有了自己的第二個(gè)女兒并獲得了EFF先驅(qū)獎(jiǎng)。同年,IBM、Sun、Intel、Oracle、Sybase、Informix等大公司宣布支持Linux,一個(gè)開發(fā)小組開始開發(fā)KDE,“Linux征服了整個(gè)世界”。
1999年1月25日,經(jīng)過132次修訂之后,發(fā)布了Linux2.2。
1999年5月11日,啟動(dòng)Linux2.3的開發(fā)工作,一個(gè)小組開始開發(fā)另一個(gè)圖形環(huán)境GNOME。1999年8月11日,第一只Linux股票RedHat上市,Linus一夜之間成了百萬富翁。1999年12月6日(芬蘭獨(dú)立日),Linus受邀回芬蘭參加了總統(tǒng)舞會(huì)。
2001年1月4日,Linux2.4發(fā)布。2001年11月23日,啟動(dòng)了Linux2.5的開發(fā)工作。
2002年,Linus開始使用BitMover公司的非自由軟件BitKeeper來管理Linux的源代碼,此舉受到廣泛指責(zé)。
2003年12月17日,Linux2.6發(fā)布。在這一年中,Linus離開了Transmeta公司,進(jìn)入
OpenSourceDevelopmentLabs(OSDL),專職從事Linux內(nèi)核的開發(fā)。
2004年,Linus全家移居美國(guó)俄勒岡州的波特蘭,鄰近微軟總部西雅圖。
2005年3月2日,Linux2.6.11發(fā)布。此后,Linux改變了其開發(fā)與發(fā)布模式,開始實(shí)行基于時(shí)間的發(fā)布方式,即每2到3個(gè)月發(fā)布一個(gè)穩(wěn)定版。這樣做的好處是,Linux發(fā)布版的生產(chǎn)廠商(如RedHat)可以盡快使用Linux內(nèi)核的新特征。與此同時(shí),Linux內(nèi)核的版本編號(hào)也發(fā)生了改變。開發(fā)版的標(biāo)識(shí)變成了A.B.C-rcx,其中C是次版本號(hào),rc的意思是releasecandidate,x是發(fā)布前的修訂次數(shù)。穩(wěn)定版的標(biāo)識(shí)變成了A.B.C.D,其中D變成了修訂號(hào)。在開發(fā)新版本的同時(shí),最新的穩(wěn)定版本也有專人負(fù)責(zé)維護(hù),維護(hù)者對(duì)穩(wěn)定版的修訂由D標(biāo)識(shí)。因此,Linux2.7的開發(fā)工作從未啟動(dòng)。
同年,BitMover公司宣布不再支持Linux開發(fā)團(tuán)隊(duì)。Linus等人在兩個(gè)月內(nèi)新開發(fā)了一個(gè)源碼控制系統(tǒng),用于管理Linux的源代碼,該系統(tǒng)稱為Git。
2007年1月22日,OSDL與
FreeStandardsGroup合并為L(zhǎng)inuxFoundation,工作焦點(diǎn)為改進(jìn)Linux操作系統(tǒng)以便與Windows競(jìng)爭(zhēng)。Linus目前在該基金會(huì)工作。
2009年7月,Microsoft為L(zhǎng)inux貢獻(xiàn)了20000行的Hyper-V驅(qū)動(dòng)程序代碼,用于改善運(yùn)行在Windows環(huán)境中的虛擬Linux客戶機(jī)的性能。
2011年5月19日,Linux2.6.39發(fā)布。
2011年7月22日,為慶祝Linux二十歲生日,發(fā)布了Linux3.0。
……
目前,Linux已成為當(dāng)今世界上最大的開源項(xiàng)目,為L(zhǎng)inux內(nèi)核貢獻(xiàn)代碼的個(gè)人和公司逐日增多。最近的統(tǒng)計(jì)表明,平均每小時(shí)約有3個(gè)補(bǔ)丁被接受并被打在Linux內(nèi)核源代碼樹上,平均每天約有3621行代碼被加入Linux內(nèi)核、1550行代碼被從Linux內(nèi)核中刪除、1425行代碼被修改,Linux內(nèi)核正以無與倫比的速度在迅速演化著、成長(zhǎng)著。確實(shí),Linux內(nèi)核的成長(zhǎng)速度是驚人的。Linux0.01的大小不到62KB,約1萬行代碼。Linux1.0的大小是992KB,約3萬行代碼。Linux1.2的大小是1.7MB,約31萬行代碼。Linux2.2的大小是10MB,約180萬行代碼。Linux2.4的大小是19MB,約337萬行代碼。Linux2.6.0的大小是167MB,約593萬行代碼。Linux2.6.30的大小已經(jīng)突破了1000萬行,達(dá)到了1163萬行代碼。
最初的Linux內(nèi)核僅僅是LinusTorvalds在自己臥室內(nèi)開發(fā)的習(xí)作。經(jīng)過近20余年的發(fā)展,Linux已變成了當(dāng)今世界最具競(jìng)爭(zhēng)力的操作系統(tǒng)。在不斷演化的過程中,Linux內(nèi)核的結(jié)構(gòu)也在不斷發(fā)生著變化。
概括起來,可將操作系統(tǒng)內(nèi)核的結(jié)構(gòu)大致分成四種,即單塊式結(jié)構(gòu)、層次式結(jié)構(gòu)、微內(nèi)核結(jié)構(gòu)和虛擬機(jī)結(jié)構(gòu)。1.3Linux內(nèi)核結(jié)構(gòu)單塊式結(jié)構(gòu)(Monolithic)是最簡(jiǎn)單的一種結(jié)構(gòu),實(shí)際上等于無結(jié)構(gòu)。在單塊式結(jié)構(gòu)中,整個(gè)操作系統(tǒng)內(nèi)核就是一堆模塊的集合。模塊間的調(diào)用關(guān)系不受任何約束,內(nèi)核中的一個(gè)模塊可以在需要時(shí)調(diào)用其它任意一個(gè)模塊。單塊結(jié)構(gòu)的優(yōu)點(diǎn)是簡(jiǎn)單、高效。設(shè)計(jì)者可以根據(jù)自己的需要任意安排模塊之間的調(diào)用關(guān)系,從而簡(jiǎn)化設(shè)計(jì),縮短調(diào)用路徑。單塊結(jié)構(gòu)的問題是維護(hù)困難,往往會(huì)出現(xiàn)牽一發(fā)而動(dòng)全局的情況。層次式結(jié)構(gòu)(Layered)適當(dāng)?shù)亟M織了操作系統(tǒng)內(nèi)核中的模塊,將它們按調(diào)用關(guān)系分成了若干個(gè)層次,并規(guī)定了各層之間的調(diào)用關(guān)系,即只允許上層模塊調(diào)用下層模塊,不允許下層模塊調(diào)用上層模塊。層次結(jié)構(gòu)增加了對(duì)設(shè)計(jì)者的限制,其優(yōu)點(diǎn)是結(jié)構(gòu)清晰,實(shí)現(xiàn)與維護(hù)簡(jiǎn)單(對(duì)一個(gè)層次的修改不會(huì)影響其它層次),問題是層次劃分比較困難,而且系統(tǒng)的性能不高(調(diào)用路徑長(zhǎng),數(shù)據(jù)傳遞路徑也長(zhǎng))。微內(nèi)核結(jié)構(gòu)(Microkernel)采用客戶/服務(wù)器思想,盡可能地把應(yīng)由內(nèi)核提供的服務(wù)(如文件系統(tǒng)、虛擬內(nèi)存管理等)轉(zhuǎn)移到用戶空間,以服務(wù)器進(jìn)程的形式向其它用戶進(jìn)程提供服務(wù),從而極大地縮小了內(nèi)核的規(guī)模,使其變成了微內(nèi)核。微內(nèi)核結(jié)構(gòu)的優(yōu)點(diǎn)是容易擴(kuò)展、容易移植、安全與可靠性高。微內(nèi)核結(jié)構(gòu)的主要問題是性能低下。虛擬機(jī)結(jié)構(gòu)(VirtualMachine)建立在虛擬機(jī)監(jiān)控器(VirtualMachineMonitor,VMM)之上。VMM是直接運(yùn)行在硬件平臺(tái)之上的一個(gè)軟件抽象層,用于將一臺(tái)物理的計(jì)算機(jī)轉(zhuǎn)化成多臺(tái)虛擬的計(jì)算機(jī),使每臺(tái)虛擬機(jī)中都可以運(yùn)行一個(gè)獨(dú)立的操作系統(tǒng)而互不影響。虛擬機(jī)結(jié)構(gòu)的優(yōu)點(diǎn)是資源利用率高,缺點(diǎn)是實(shí)現(xiàn)困難、性能不高。目前,在處理器和芯片組中已提供了對(duì)虛擬化的支持,虛擬機(jī)的實(shí)現(xiàn)已經(jīng)比較容易,性能也有所提高。在Linux內(nèi)核中可以看到層次和微內(nèi)核的影子。借助于KVM和QEMU的幫助,最新的Linux內(nèi)核可將自己轉(zhuǎn)化成一個(gè)VMM,從而支持虛擬機(jī)結(jié)構(gòu)??偟膩碚f,Linux內(nèi)核是單塊式的,如圖1.3所示。
圖1.3Linux內(nèi)核的結(jié)構(gòu)
Linux之所以會(huì)采用單塊式的內(nèi)核結(jié)構(gòu),自然有它的原因。其一是歷史原因。Linux內(nèi)核由Linus的習(xí)作演變而成,而Linus最初的目標(biāo)并不是設(shè)計(jì)操作系統(tǒng)內(nèi)核,因而沒有對(duì)其進(jìn)行周密的規(guī)劃,單塊式結(jié)構(gòu)是最簡(jiǎn)單、最直接的選擇。其二是主觀原因。Linus說“微內(nèi)核的理論是,如果把內(nèi)核分為50份,那么每一份都只有1/50的復(fù)雜性。但是每個(gè)人都忽視了一個(gè)事實(shí),即各部分之間的聯(lián)系事實(shí)上比原系統(tǒng)更加復(fù)雜,而且那些個(gè)別部分也不是那么簡(jiǎn)單。”因此,微內(nèi)核的做法是很愚蠢的。雖然Linux內(nèi)核比較復(fù)雜,而且是單塊式的結(jié)構(gòu),但仍然可以將其大致分成進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、設(shè)備管理、網(wǎng)絡(luò)協(xié)議、時(shí)鐘管理、中斷處理等子系統(tǒng)。其中進(jìn)程管理子系統(tǒng)負(fù)責(zé)進(jìn)程的創(chuàng)建、終止、加載、調(diào)度、同步、互斥、通信等,所管理的資源是計(jì)算機(jī)中的處理器。內(nèi)存管理子系統(tǒng)負(fù)責(zé)內(nèi)存空間的分配、回收等,并試圖用有限的物理內(nèi)存為每個(gè)進(jìn)程模擬出幾乎無限的虛擬內(nèi)存,所管理的資源是計(jì)算機(jī)中的內(nèi)存。文件系統(tǒng)負(fù)責(zé)外存空間的分配、回收等,并負(fù)責(zé)用戶文件的創(chuàng)建、刪除、讀寫、查找等,所管理的資源是計(jì)算機(jī)中的外存。網(wǎng)絡(luò)協(xié)議子系統(tǒng)負(fù)責(zé)數(shù)據(jù)包的發(fā)送、接收等,所管理的資源是計(jì)算機(jī)中的網(wǎng)絡(luò)設(shè)備。設(shè)備管理子系統(tǒng)負(fù)責(zé)設(shè)備及其拓?fù)浣Y(jié)構(gòu)的描述、設(shè)備驅(qū)動(dòng)程序與內(nèi)核其余部分的接口等,所管理的資源是計(jì)算機(jī)中的外部設(shè)備。時(shí)鐘管理子系統(tǒng)負(fù)責(zé)管理計(jì)算機(jī)中的時(shí)鐘設(shè)備、計(jì)時(shí)器設(shè)備等,為系統(tǒng)提供時(shí)間和定時(shí)服務(wù)。中斷處理子系統(tǒng)負(fù)責(zé)內(nèi)核與外界的交互。運(yùn)行在用戶空間的進(jìn)程通過陷入指令請(qǐng)求內(nèi)核服務(wù),各種外部設(shè)備通過硬中斷請(qǐng)求內(nèi)核服務(wù)。
Linux的子系統(tǒng)可以再進(jìn)一步地劃分成模塊。如內(nèi)存管理子系統(tǒng)可被劃分為伙伴內(nèi)存管理器、對(duì)象內(nèi)存管理器、邏輯內(nèi)存管理器、虛擬內(nèi)存管理器等模塊,進(jìn)程管理子系統(tǒng)又可被劃分為進(jìn)程創(chuàng)建、執(zhí)行映像加載、進(jìn)程調(diào)度、互斥與同步、進(jìn)程間通信等模塊。當(dāng)然,模塊還可以被進(jìn)一步劃分,如可以將伙伴內(nèi)存管理器進(jìn)一步劃分成物理頁的分配、釋放、回收等子模塊。
在Linux中,虛擬文件系統(tǒng)是所有輸入/輸出的最上層接口,也可以說是所有輸入/輸出的總接口。物理文件系統(tǒng)和網(wǎng)絡(luò)協(xié)議等都是對(duì)虛擬文件系統(tǒng)的實(shí)現(xiàn),位于虛擬文件系統(tǒng)之下,為虛擬文件系統(tǒng)提供服務(wù)。設(shè)備驅(qū)動(dòng)程序又位于物理文件系統(tǒng)和網(wǎng)絡(luò)協(xié)議之下,負(fù)責(zé)驅(qū)動(dòng)物理設(shè)備,為物理文件系統(tǒng)和網(wǎng)絡(luò)協(xié)議提供服務(wù)。
不管Linux的子系統(tǒng)或模塊如何劃分、如何組織,它們都不是完全獨(dú)立的,各子系統(tǒng)之間存在著千絲萬縷的聯(lián)系和制約。一般情況下,一個(gè)子系統(tǒng)的運(yùn)行離不開其它子系統(tǒng)的支持,如進(jìn)程管理子系統(tǒng)離不開內(nèi)存管理和文件系統(tǒng)的支持(虛擬內(nèi)存管理為進(jìn)程提供虛擬地址空間、進(jìn)程所運(yùn)行的程序來源于可執(zhí)行文件),內(nèi)存管理子系統(tǒng)也需要進(jìn)程管理和文件系統(tǒng)的支持(內(nèi)存管理子系統(tǒng)利用文件系統(tǒng)實(shí)現(xiàn)按需調(diào)頁、利用專門的守護(hù)進(jìn)程回收物理頁),文件系統(tǒng)的運(yùn)行離不開設(shè)備管理子系統(tǒng)和內(nèi)存管理子系統(tǒng)的支持,分布式文件系統(tǒng)甚至還需要網(wǎng)絡(luò)協(xié)議的支持。子模塊、模塊、子系統(tǒng)相互關(guān)聯(lián)、相互制約,構(gòu)成了一個(gè)有機(jī)的整體。在Linux中,模塊之間的關(guān)聯(lián)方式大致可分為以下幾種:
(1)請(qǐng)求。Linux中的每個(gè)子系統(tǒng)都定義了較為清晰的服務(wù)接口。當(dāng)一個(gè)子系統(tǒng)需要其它子系統(tǒng)提供服務(wù)時(shí),可以直接調(diào)用那些子系統(tǒng)的接口函數(shù)。如對(duì)象內(nèi)存管理器提供了內(nèi)存分配函數(shù)kmem_cache_alloc()和內(nèi)存釋放函數(shù)kmem_cache_free(),內(nèi)核中的每個(gè)模塊都可以直接調(diào)用這兩個(gè)函數(shù)申請(qǐng)和釋放物理內(nèi)存對(duì)象。
(2)通告。Linux中的每個(gè)子系統(tǒng)都可以定義一些全局變量或查詢函數(shù),以便其它子系統(tǒng)查詢自己的狀態(tài)。對(duì)一個(gè)子系統(tǒng)感興趣的模塊或子系統(tǒng)可以通過這些全局變量或查詢函數(shù)來了解子系統(tǒng)的狀態(tài)變化。如伙伴內(nèi)存管理器在全局變量totalram_pages中記錄著系統(tǒng)中的物理內(nèi)存總量,其它模塊可以通過該變量直接了解物理內(nèi)存的變化。
(3)通知。Linux的每個(gè)子系統(tǒng)都可以定義一到多個(gè)回調(diào)函數(shù)隊(duì)列,以便讓對(duì)自己感興趣的其它子系統(tǒng)注冊(cè)回調(diào)函數(shù)。當(dāng)子系統(tǒng)的狀態(tài)發(fā)生改變時(shí),它會(huì)逐個(gè)調(diào)用回調(diào)函數(shù)隊(duì)列中的函數(shù),及時(shí)地將自己的變化通知給預(yù)定的子系統(tǒng)。Linux的這種通知機(jī)制稱為notification,已被集成在它的各子系統(tǒng)中。
Linux的這些請(qǐng)求、通告、通知機(jī)制就像人體的神經(jīng)系統(tǒng)一樣,將各個(gè)子系統(tǒng)組合成了一個(gè)有機(jī)的整體,如圖1.4所示。圖1.4模塊之間的關(guān)聯(lián)方式
Linux的模塊劃分與組織方式就是Linux內(nèi)核的結(jié)構(gòu)。圖1.3大致概括了Linux內(nèi)核中子系統(tǒng)級(jí)的組織關(guān)系,也就是子系統(tǒng)級(jí)的組織結(jié)構(gòu)。就每個(gè)子系統(tǒng)而言,由于功能不同,其內(nèi)部組織結(jié)構(gòu)也會(huì)有所差別。事實(shí)上,每個(gè)子系統(tǒng),甚至每個(gè)模塊都有自己獨(dú)特的組織結(jié)構(gòu)。Linux內(nèi)核在設(shè)計(jì)模塊組織結(jié)構(gòu)時(shí),采用的是最實(shí)用的設(shè)計(jì)方法。也就是說,針對(duì)具體問題,采用最直接、最有效的設(shè)計(jì)方法,并不把自己限制在某種特定方法之上。Linux采用的設(shè)計(jì)方法包括以下幾種:
(1)模塊(Module)方法。將接口和實(shí)現(xiàn)分離開來,在不改變接口的情況下可改變模塊的實(shí)現(xiàn)細(xì)節(jié)。模塊之間可以自由調(diào)用。Linux內(nèi)核的大部分子系統(tǒng)采用的都是模塊設(shè)計(jì)方法。
(2)層次(Layer)方法。如果內(nèi)核中的某些模塊本身就具有層次結(jié)構(gòu),如TCP/IP協(xié)議棧等,那么就直接采用層次設(shè)計(jì)方法。
(3)對(duì)象(Object)方法。Linux內(nèi)核大量采用了對(duì)象設(shè)計(jì)思想,如在結(jié)構(gòu)中封裝屬性和操作集等,但未使用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,如C++等。
Linux內(nèi)核的結(jié)構(gòu)是在長(zhǎng)期發(fā)展過程中逐步演化而成的,它具有許多特點(diǎn),此處僅概括幾個(gè):
(1)符合POSIX標(biāo)準(zhǔn)。POSIX是基于Unix的第一個(gè)操作系統(tǒng)國(guó)際標(biāo)準(zhǔn),它規(guī)定了操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口規(guī)范。Linux從設(shè)計(jì)之初就遵循POSIX標(biāo)準(zhǔn),這使得Unix上的許多應(yīng)用程序,尤其是GNU應(yīng)用程序,可以很容易地移植到Linux之上,從而為L(zhǎng)inux帶來了豐富的應(yīng)用軟件。
(2)擴(kuò)展性好。雖然Linux內(nèi)核是單塊式結(jié)構(gòu),但它提供了極為靈活的內(nèi)核模塊機(jī)制(LKM),從而大大提升了其擴(kuò)展性。新的文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議、驅(qū)動(dòng)程序、可執(zhí)行文件格式等都可以被設(shè)計(jì)成內(nèi)核模塊,并在需要時(shí)動(dòng)態(tài)插入內(nèi)核。從這一角度來看,Linux內(nèi)核實(shí)際是一個(gè)大的框架,它提供了多種內(nèi)部插槽,如文件系統(tǒng)插槽、網(wǎng)絡(luò)協(xié)議插槽、驅(qū)動(dòng)程序插槽等,允許在其中插入符合規(guī)范的內(nèi)核組件(內(nèi)核模塊),并可以通過插入、拔出、更換、重組內(nèi)核模塊的方式對(duì)其進(jìn)行動(dòng)態(tài)配置,柔性重構(gòu)。
(3)兼容性好。Linux內(nèi)核的結(jié)構(gòu)具有良好的兼容性。Linux內(nèi)核通過虛擬文件系統(tǒng)(VFS)接口屏蔽了各種物理文件系統(tǒng)的差別,使得Linux用戶可以用統(tǒng)一的方式訪問幾乎所有的文件系統(tǒng),包括EXT2/3/4、NTFS、FAT、Minix、UFS等;Linux內(nèi)核通過VFS和Socket接口屏蔽了各種網(wǎng)絡(luò)協(xié)議的差別,使得Linux可以兼容多種網(wǎng)絡(luò)協(xié)議,如TCP/IP、IPX/SPX、AppleTalk、X.25、ISDN、PPP、SLIP和PLIP等;Linux內(nèi)核通過驅(qū)動(dòng)程序接口和各種設(shè)備的驅(qū)動(dòng)程序屏蔽了硬件設(shè)備之間的差別,使其可以兼容多種物理硬件設(shè)備;Linux兼容多種可執(zhí)行文件格式,如ELF、A.out、Java及各種格式的腳本等。
(4)伸縮性好。Linux內(nèi)核具有較好的伸縮性,可以讓其僅提供一些最必須的功能以限制其規(guī)模,也可以讓其提供極為豐富的功能以支持廣泛的應(yīng)用。Linux內(nèi)核中包含一個(gè)嵌入式的內(nèi)核,使其可以方便地支持各種嵌入式設(shè)備;Linux內(nèi)核源代碼開放,可以對(duì)其進(jìn)行裁剪、重構(gòu),以滿足不同系統(tǒng)的需求;Linux是高性能計(jì)算機(jī)(HPC)中使用最多的操作系統(tǒng)內(nèi)核??傊琇inux內(nèi)核可以支持從嵌入式設(shè)備、個(gè)人計(jì)算機(jī)、服務(wù)器到巨型機(jī)等各個(gè)層次的應(yīng)用,是目前世界上伸縮性最好的操作系統(tǒng)。
(5)可靠性和安全性高。Linux內(nèi)核結(jié)構(gòu)本身具有較高的可靠性和安全性。在新的Linux內(nèi)核源代碼中,包含了一個(gè)經(jīng)過安全增強(qiáng)的SELinux內(nèi)核,利用它可以構(gòu)建具有較高安全級(jí)別的操作系統(tǒng)。除此之外,由于Linux內(nèi)核源代碼開放,用戶可以方便地改造或重建其安全保障體系,以滿足自己的可靠性和安全性需求,而且不必?fù)?dān)心內(nèi)核中會(huì)預(yù)留什么“后門”和“陷阱”。另外,由于每天都有成千上萬的愛好者對(duì)Linux內(nèi)核進(jìn)行測(cè)試和改良,其故障可以很快被排除,“如果有百萬雙眼睛來共同參與的話,則所有軟件的缺陷都將消失”。
(6)可移植性好。Linux內(nèi)核的結(jié)構(gòu)對(duì)移植性的支持非常好,與硬件相關(guān)的部分被很好地隔離了開來。Linux內(nèi)核中的絕大部分代碼都采用C語言編寫,只有很小一部分使用匯編代碼,這使得Linux內(nèi)核的移植變得十分簡(jiǎn)單。經(jīng)過多年的努力,目前的Linux已可以支持幾乎所有的CPU,包括X86、IA64、MIPS、M68K、PPC、ARM、ALPHA、SPARC等。
(7)性能高。Linux內(nèi)核設(shè)計(jì)思路清晰,實(shí)現(xiàn)算法直觀、簡(jiǎn)潔,充分利用了底層硬件的特征,而且經(jīng)過了適當(dāng)?shù)膬?yōu)化,具有較高的性能。
不管Linux內(nèi)核的功能有多么強(qiáng)大,它畢竟只是一個(gè)操作系統(tǒng)內(nèi)核,無法直接為用戶提供服務(wù)。事實(shí)上,用戶都是通過應(yīng)用程序或軟件工具使用操作系統(tǒng)內(nèi)核并進(jìn)而使用計(jì)算機(jī)的。用戶當(dāng)然可以開發(fā)自己的應(yīng)用程序,但開發(fā)工作本身也需要工具軟件(如命令解釋器、編輯器、編譯器、調(diào)試器等)的支持。因而,在一個(gè)實(shí)用操作系統(tǒng)中,除了內(nèi)核之外還必須包含一些工具軟件。以Linux內(nèi)核為基礎(chǔ)構(gòu)建的操作系統(tǒng)統(tǒng)稱為L(zhǎng)inux發(fā)布,所以,它實(shí)際上等于Linux內(nèi)核+函數(shù)庫+工具軟件。1.4Linux發(fā)布在Linux內(nèi)核上可以使用的工具軟件非常多,而且新的軟件還在不斷涌現(xiàn),其中最常用的是GNU的工具軟件。事實(shí)上,在Linus發(fā)布的最初版本中,就包含了GNU的BASH、GCC等工具軟件。由于這一原因,有些Linux發(fā)布又被稱為GNU/Linux,RichardStallman甚至稱Linux發(fā)布為L(zhǎng)ignux。但由于Linux內(nèi)核是整個(gè)發(fā)布的核心,具有代表性,因而大部分的發(fā)布仍簡(jiǎn)單地稱為L(zhǎng)inux操作系統(tǒng)。為了避免混淆,在本書中,“Linux”將特指Linux內(nèi)核。最早的Linux用戶都是Unix操作系統(tǒng)的專家,他們知道需要哪些庫和可執(zhí)行程序才能將該操作系統(tǒng)引導(dǎo)和運(yùn)行起來,而且知道這些庫和可執(zhí)行程序的存放位置及配置方法。這些用戶的主要興趣是開發(fā)操作系統(tǒng)本身而不是應(yīng)用程序、用戶接口或方便的工具軟件包。隨著Linux的發(fā)展,其用戶群逐漸超越了這一專家群體,擴(kuò)展到了普通用戶。普通用戶的興趣主要是在Linux上開發(fā)應(yīng)用程序,需要專家們?yōu)槠涮峁┮粋€(gè)配置好的開發(fā)環(huán)境,于是產(chǎn)生了Linux發(fā)布。最初的Linux發(fā)布有如下幾個(gè):
(1)
Boot-root,僅包含Linux內(nèi)核和最少的啟動(dòng)工具。
(2)
MCCInterimLinux,由Manchester大學(xué)開發(fā),1992年初即通過FTP公開下載。
(3)
YggdrasilLinux/GNU/X,第一個(gè)基于CD-ROM的Linux分布。
(4)SLS,即SoftlandingLinuxSystem。SLS未被很好維護(hù)。1993年,PatrickVolkerding在SLS的基礎(chǔ)上開發(fā)了Slackware。Slackware是至今仍在使用的最古老的Linux發(fā)布。此后,Linux發(fā)布層出不窮,各具特色。據(jù)統(tǒng)計(jì),目前已產(chǎn)生了600多個(gè)Linux發(fā)布,處于活躍狀態(tài),被不斷維護(hù)的發(fā)布仍有300多個(gè)。下面是最受歡迎的幾個(gè)Linux發(fā)布:
(1)
Ubuntu,自2004年12月第一次發(fā)布以來,受到廣泛歡迎,已成為目前用戶最多、最易使用的桌面Linux發(fā)布。Ubuntu發(fā)布的基礎(chǔ)是Debian,它的許多軟件包直接來源于Debian。
(2)
Fedora,前身是RedHatLinux,于1995年發(fā)布。2003年,RedHat將其產(chǎn)品分為企業(yè)版和業(yè)余版,并將業(yè)余版更名為Fedora。雖然Fedora受RedHat控制,但它仍是當(dāng)今最具創(chuàng)新精神的Linux發(fā)布。
(3)
LinuxMint,2006年首次發(fā)布,是對(duì)Ubuntu的改進(jìn)。開發(fā)者早期從事Linux網(wǎng)站的維護(hù),旨在為L(zhǎng)inux的初學(xué)者提供幫助,因而比較了解用戶的需求,其發(fā)布的可用性較好。
(4)
openSUSE,由德國(guó)的Linux愛好者開發(fā),發(fā)布的基礎(chǔ)是Slackware,早期的名稱為SUSE,是比較早的Linux的發(fā)布。2003年,SUSE被Novell收購(gòu),并被更名為openSUSE。
(5)
PCLinuxOS,2003年首次發(fā)布,是對(duì)MandrakeLinux的改進(jìn)。該發(fā)布的創(chuàng)始人曾開發(fā)Texstar,一款用于創(chuàng)建最新RPM包的軟件工具。PCLinuxOS主要面向初學(xué)者。
(6)
DebianGNU/Linux,1993年首次發(fā)布,是完全由志愿者開發(fā)的非商業(yè)項(xiàng)目,也是最大的Linux發(fā)布(超過20000個(gè)包),是其它許多發(fā)布(如Ubuntu)的基礎(chǔ)。
典型的Linux發(fā)布包括Linux內(nèi)核、GNU工具和函數(shù)庫、文檔、圖形系統(tǒng)、安裝工具和其它應(yīng)用軟件等。集成到一個(gè)發(fā)布中的軟件可以是自由軟件、開放源碼軟件,也可以是私有軟件。Linux發(fā)布的開發(fā)者需要收集、修改、編譯、測(cè)試這些軟件,而后將其集成在一起,并提供安裝界面,以方便用戶安裝和配置。發(fā)布中的軟件可以是編譯好的二進(jìn)制代碼,也可以是未編譯的源代碼。Linux發(fā)布中的軟件包括開發(fā)工具(如gcc)、數(shù)據(jù)庫管理系統(tǒng)(如PostgreSQL、MySQL)、Web服務(wù)器(如Apache)、XWindow(現(xiàn)在稱為)、桌面環(huán)境(如GNOME和KDE)、辦公軟件(如OpenO)、腳本語言(如Perl、PHP和Python)、瀏覽器(如FireFox)等等。
一個(gè)Linux發(fā)布中肯定會(huì)包含許多軟件,為了便于管理,通常將它們按功能組織成軟件包(package)。在一個(gè)軟件包中,除包含程序代碼之外,通常還帶有一些管理信息,如包的說明、版本、依賴關(guān)系等。在Linux發(fā)布中通常都帶有軟件包管理工具,用于包的安裝、刪除、升級(jí)、查詢等,好的包管理工具能夠自動(dòng)解決包的依賴性問題。軟件包管理工具為發(fā)布的制作提供了極大的靈活性,用戶可以在安裝完系統(tǒng)之后再安裝或更新應(yīng)用軟件,甚至可以下載并安裝未包含在發(fā)布中的軟件。常用的軟件包格式有DEB、RPM、TGZ、SRC等,軟件包管理工具有APT、YaST、YUM、URPMI、pkgtools、Portage等。
傳統(tǒng)的Linux用戶一般都自己安裝并設(shè)置操作系統(tǒng),他們往往比其他操作系統(tǒng)的用戶更有經(jīng)驗(yàn)。這些用戶有時(shí)被稱作“黑客”或是“極客”(geek)。然而隨著Linux的流行,越來越多的原始設(shè)備制造商(OEM)開始在其銷售的計(jì)算機(jī)上預(yù)裝Linux,Linux正在慢慢搶占個(gè)人計(jì)算機(jī)操作系統(tǒng)的市場(chǎng)。Linux在嵌入式消費(fèi)電子市場(chǎng)上擁有較大優(yōu)勢(shì),低成本的特性使Linux深受用戶歡迎。許多上網(wǎng)本預(yù)裝了Linux操作系統(tǒng),許多款手機(jī)產(chǎn)品也采用了Linux系統(tǒng)。Linux也是最受歡迎的服務(wù)器操作系統(tǒng)之一。在超級(jí)計(jì)算機(jī)排行榜Top500中,1998年只有1臺(tái)采用Linux操作系統(tǒng),2009年已有447臺(tái)采用Linux操作系統(tǒng),所占比例達(dá)到了89.4%??梢灶A(yù)計(jì),隨著開放式系統(tǒng)的接受程度越來越高和虛擬化技術(shù)的進(jìn)一步發(fā)展,上述趨勢(shì)還將繼續(xù)。
開放源代碼運(yùn)動(dòng)和黑客文化的第一理論家EricS.Raymond在其名著《TheArtofUnixProgramming》一書中說:“工程和設(shè)計(jì)的每個(gè)分支都有自己的技術(shù)文化。在大多數(shù)工程領(lǐng)域中,就一個(gè)專業(yè)人員的素養(yǎng)組成來說,有些不成文的行業(yè)素養(yǎng)具有與標(biāo)準(zhǔn)手冊(cè)及教科書同等重要的地位,甚至比書本更重要?!痹谲浖こ填I(lǐng)域中,“確有極少數(shù)軟件技術(shù)被證明經(jīng)久耐用,足以演進(jìn)為強(qiáng)勢(shì)的技術(shù)文化、有鮮明特色的藝術(shù)和世代相傳的設(shè)計(jì)哲學(xué)”。1.5Unix與Linux哲學(xué)毫無疑問,操作系統(tǒng)是人造的軟件,是人類軟件工程的產(chǎn)物。與其它人類工程作品相同,在一個(gè)操作系統(tǒng)中也隱含了設(shè)計(jì)者的理念,體現(xiàn)了設(shè)計(jì)者的哲學(xué)。
作為操作系統(tǒng)的杰出代表,在Unix和Linux設(shè)計(jì)、成長(zhǎng)與發(fā)展的漫長(zhǎng)過程中,也形成了自己的文化、藝術(shù)和設(shè)計(jì)哲學(xué)。大致可以將其概括為如下幾條:
1.開放
開放的意思有幾個(gè),包括開發(fā)團(tuán)隊(duì)是開放的,開發(fā)方法是開放的,開發(fā)成果(源代碼)也是開放的。
早期的Unix是源碼開放的,很多公司、高校、政府機(jī)構(gòu)獲得了Unix的源代碼并對(duì)其進(jìn)行了研究、修改和完善。源碼開放導(dǎo)致了Unix的迅速成熟和普及,也培養(yǎng)了一大批黑客,形成了著名的“黑客文化”。EricS.Raymond說:“在Unix的歷史中,最大的規(guī)律是距離開源越近就越繁榮,任何將Unix專有化的企圖都只能使其陷入停滯和衰敗。”在Linux的成長(zhǎng)過程中,一直遵循著開放的原則。任何對(duì)Linux感興趣的人都可以免費(fèi)從網(wǎng)上獲得Linux內(nèi)核的源代碼,可以按照需要自由地對(duì)其進(jìn)行修改、復(fù)制和發(fā)布,唯一的要求是必須開放自己改動(dòng)和改進(jìn)的成果。
Linux是源碼開放的最大受益者。遠(yuǎn)在Linus開發(fā)Linux內(nèi)核之前的1983年,自由軟件基金會(huì)的RichardM.Stallman就啟動(dòng)了GNU(GNU'sNotUnix)計(jì)劃,目的是創(chuàng)建一個(gè)類Unix的操作系統(tǒng)。GNU的開發(fā)策略是先工具軟件再內(nèi)核。經(jīng)過數(shù)年的努力,GNU開發(fā)出了編輯器(Emacs)、編譯器(GCC)、調(diào)試器(GDB)、圖形系統(tǒng)和幾乎所有的工具軟件,唯獨(dú)沒有開發(fā)出它的內(nèi)核(Hurd)。Linux的適時(shí)出現(xiàn)恰好填補(bǔ)了GNU的這一空白。GNU找到了一個(gè)穩(wěn)定的內(nèi)核,而Linux得到了全套的工具軟件。
開放為L(zhǎng)inux帶來了大批的志愿開發(fā)者,包括GNU的開發(fā)團(tuán)隊(duì),帶來了眾多的好主意和好代碼,使Linux得以迅速成長(zhǎng)、成熟。開放給Linux帶來了高水平的用戶,包括大批黑客。這些用戶的參與極大地提高了Linux的改進(jìn)速度,縮短了Linux的調(diào)試時(shí)間。“如果有足夠多的眼睛,所有的錯(cuò)誤都是淺顯的(群眾的眼睛是雪亮的)”。Raymond將這一現(xiàn)象稱為L(zhǎng)inus定律。
開放是Linux最好的宣傳廣告。Linux社區(qū)的人們堅(jiān)信:即使是世界上最好的軟件,如果人們未認(rèn)識(shí)到它的真正價(jià)值的話,也不會(huì)被采用。開放給人們提供了充分認(rèn)識(shí)Linux的機(jī)會(huì),使得Linux迅速被移植到多種平臺(tái)上,應(yīng)用于多種環(huán)境中,促進(jìn)了Linux的流動(dòng)和普及。Linux帶給人們的一個(gè)觀念是:開放的軟件總是比私有的軟件好。開放給Linux帶來了持久的活力。Linux源代碼激發(fā)了很多人的想象,產(chǎn)生了一系列的技術(shù)革新,帶來了一系列的新應(yīng)用,推動(dòng)了信息技術(shù)的發(fā)展。這些新技術(shù)和新應(yīng)用反過來又成了Linux演變的動(dòng)力。
開放為L(zhǎng)inux提供了更多的技術(shù)支持,大量的文檔、書籍、論壇,大量的技術(shù)人員,可以迅速解決用戶遇到的技術(shù)難題。
開放使Linux避免了版權(quán)之爭(zhēng),也避免了Linux的分裂。即使態(tài)度不友好的代理者也能得到同樣的源代碼,也能互相利用彼此的成果?!坝辛薒inux以及其它一些公開源代碼項(xiàng)目,人們就可以做出它們自己的版本,按它們自己的意愿來加以改變”,沒有必要竊取Linux的版權(quán)或另搞一套。
開放有利于縮減項(xiàng)目開發(fā)的成本?!肮_源代碼是利用外部資源的最佳方式,項(xiàng)目的開放使公司有可能縮減自己的資源,外部資源使得公司成為一個(gè)更加便宜、更加完善和更加平衡的系統(tǒng)。當(dāng)然,這一系統(tǒng)不再僅僅將公司需求考慮進(jìn)去,它實(shí)際上還考慮了顧客的需求?!遍_放還是激勵(lì)開發(fā)者的一種手段。源代碼提供者的大名與事跡被列在Linux貢獻(xiàn)者列表中,使他們更容易獲得同行們的認(rèn)可與尊重,給開發(fā)者帶來了榮譽(yù)、滿足感、工作機(jī)會(huì)甚至財(cái)富,也帶來了問題與建議,這些都是激勵(lì)開發(fā)者繼續(xù)工作下去的動(dòng)力。
Linus認(rèn)為L(zhǎng)inux操作系統(tǒng)是由無數(shù)程序員們共同創(chuàng)造的成果,它與這些創(chuàng)造者(程序員)之間有著無法切斷的密切聯(lián)系,是創(chuàng)造者不可剝奪的一部分,它是如此珍貴,以至于不可能將其出售。但與此同時(shí),它又是世界上每一個(gè)人都應(yīng)當(dāng)分享的成果,因?yàn)樗皇悄硞€(gè)人的私有財(cái)產(chǎn),它屬于全人類。
Linus說:“我總是將開放源代碼視作一種使世界更趨美好的途徑。但僅有這一點(diǎn)還遠(yuǎn)遠(yuǎn)不夠,除此之外我還將它視作帶來快樂的途徑?!?/p>
2.協(xié)作
Linux是目前世界上最大、最成功的一個(gè)協(xié)作開發(fā)項(xiàng)目,它創(chuàng)造了一種新型的軟件開發(fā)模式。EricS.Raymond說:“實(shí)際上,我認(rèn)為L(zhǎng)inus最聰明最了不起的工作不是創(chuàng)建了Linux內(nèi)核本身,而是發(fā)明了Linux開發(fā)模式?!盧aymond認(rèn)為L(zhǎng)inux是第一個(gè)有意識(shí)地成功利用整個(gè)世界作為它的頭腦庫的項(xiàng)目,Linus是第一個(gè)學(xué)會(huì)怎樣利用Internet新規(guī)則的人。Raymond將Linus的開發(fā)風(fēng)格概括為:盡早盡多的發(fā)布、委托所有可以委托的事、對(duì)所有的改動(dòng)和融合開放。自最初的Linux發(fā)布之后,圍繞Linux內(nèi)核迅速形成了一個(gè)極為活躍的、虛擬的社團(tuán),社團(tuán)成員獨(dú)立而又協(xié)調(diào)地工作,共同推動(dòng)了Linux內(nèi)核的發(fā)展。經(jīng)過多年的磨合,在Linux社團(tuán)中形成了一種自然而靈活的組織結(jié)構(gòu)。Linus本人是這一團(tuán)隊(duì)中當(dāng)之無愧的最高領(lǐng)導(dǎo),掌控著Linux的發(fā)展方向。在Linus下還有多個(gè)項(xiàng)目主管,每個(gè)主管負(fù)責(zé)管理一到多個(gè)在內(nèi)核發(fā)展進(jìn)程中自然形成的熱點(diǎn)項(xiàng)目(Project),如IngoMolnar負(fù)責(zé)進(jìn)程調(diào)度算法,ChristophLameter負(fù)責(zé)虛擬內(nèi)存,MiklosSzeredit負(fù)責(zé)VFS,TheodoreY.Ts’o負(fù)責(zé)EXT4文件系統(tǒng),JiriKosina負(fù)責(zé)內(nèi)核模塊,JamesBottomley負(fù)責(zé)SCSI,AviKivity、MarceloTosatti、AmitShah等負(fù)責(zé)虛擬化(KVM),JeffGarzik負(fù)責(zé)網(wǎng)絡(luò)驅(qū)動(dòng)等。社團(tuán)中的其余成員可以隨意參與到某個(gè)項(xiàng)目中,通過電子郵件提交補(bǔ)丁。當(dāng)然,Linux內(nèi)核的開發(fā)者都是志愿者,各項(xiàng)目的主管也是志愿者。隨著時(shí)間的推移,Linux社團(tuán)的成員在變,項(xiàng)目在變,主管也在變。
Linux內(nèi)核社團(tuán)已形成了一整套的開發(fā)風(fēng)格、準(zhǔn)則、標(biāo)準(zhǔn)和流程。如在Linux2.6的開發(fā)中,Linus負(fù)責(zé)維護(hù)2.6.x內(nèi)核樹,即最新版本的Linux內(nèi)核,他接受比較大型的、相對(duì)成熟的補(bǔ)丁,并定期發(fā)布rc版本,直到內(nèi)核被認(rèn)為穩(wěn)定后將其正式發(fā)布,而后再啟動(dòng)2.6.(x+1)內(nèi)核樹的開發(fā);GregKroah-Hartman、ChrisWright等負(fù)責(zé)維護(hù)2.6.x.y-stable內(nèi)核樹,即Linux內(nèi)核的穩(wěn)定版;AndrewMorton負(fù)責(zé)維護(hù)2.6.x–mm內(nèi)核樹,在其中試驗(yàn)、集成各種最新的功能與特征,并將被證明有價(jià)值的補(bǔ)丁提交給Linus;其他項(xiàng)目主管們分別維護(hù)各自負(fù)責(zé)的項(xiàng)目子樹。Linus維護(hù)的內(nèi)核樹是系統(tǒng)的主流(mainline),是其它所有工作的基礎(chǔ)。
Linus管理開發(fā)團(tuán)隊(duì)的方法有其獨(dú)到之處。事實(shí)上,Linus從不強(qiáng)迫開發(fā)人員做任何工作,“我更愿意讓人們自愿自覺地承擔(dān)工作,而不是預(yù)先委派任務(wù)給他們?!睘榇耍琇inus經(jīng)常做的一件事是“在項(xiàng)目中培養(yǎng)興趣直到它可以自己發(fā)展下去”,另一件事是將已發(fā)展起來的工作“授權(quán)給其他人”管理。同時(shí),Linus還非常樂意接受其他人的好主意,采納他人的好建議。因而,在Linux社團(tuán)中,每個(gè)成員都可以根據(jù)自己的需求和興趣分析代碼、討論問題、提出建議、報(bào)告故障、提交補(bǔ)丁、測(cè)試系統(tǒng)、編寫文檔等,并可以建立新項(xiàng)目、開發(fā)新系統(tǒng)。Linus的管理策略使社團(tuán)成員總是在做自己最需要和最有興趣的工作,從而保證了社團(tuán)的活躍、開發(fā)的高效、選題的準(zhǔn)確和代碼的質(zhì)量,也保證了Linux總是以最自然、最合理的方式演化。在談到社團(tuán)管理時(shí)Linus說:“我有時(shí)贊成、有時(shí)反對(duì)他們的作法,但大多數(shù)時(shí)候我都無為而治。當(dāng)兩個(gè)人對(duì)同一件事有不同看法時(shí),我對(duì)兩個(gè)人的意見都接受,看哪一個(gè)可行。有時(shí)兩者都加以采用,融合為一種新的方法。如果兩個(gè)人之間存在著尖銳分歧,各行其道,互不相讓時(shí),我便不接受任何一方的意見。如果某個(gè)開發(fā)者失去了興趣,想退出開發(fā),我會(huì)像所羅門王所做的那樣悉聽尊便。”
另外,Linux社團(tuán)與GNU和許多大的公司也有著密切的協(xié)作關(guān)系。統(tǒng)計(jì)表明,在對(duì)Linux內(nèi)核貢獻(xiàn)最多的公司中,RedHat、Novell、IBM、Intel、LinuxFoundation、SGI、MIPS、Oracle、Google、HP、Cisco等大公司名列前茅,其貢獻(xiàn)量超過了50%。個(gè)中原因是這些公司發(fā)現(xiàn),幫助改進(jìn)Linux內(nèi)核可以增加它們?cè)谑袌?chǎng)上的競(jìng)爭(zhēng)力。
3.興趣
Unix起源于KenThompson的“星際旅行”游戲。此后,Unix在一個(gè)個(gè)玩家手中逐漸成長(zhǎng)、壯大。趣味性在Unix早期的歷史中開啟了一個(gè)良性循環(huán)。正因?yàn)槿藗兿矏踀nix,所以編制了更多的程序讓它用起來更好。EricS.Raymond說:“同Unix打交道,搞開發(fā)就是好玩:現(xiàn)在是,且一向如是?!?/p>
有人曾問Linus“生命的意義何在?”,他的回答是“第一是生存,第二是社會(huì)秩序,第三是娛樂。生活中所有的事情都是按這個(gè)順序發(fā)展的。娛樂之后便一無所有。因此從某種意義上說,這意味著生活的意義就是要達(dá)到第三個(gè)階段。你一旦達(dá)到了第三個(gè)階段,就算成功了。但首先要越過前兩個(gè)階段?!笔聦?shí)上,Linux的起源是Linus開發(fā)的終端仿真器。Linus開發(fā)仿真器的目的一方面是出于探索新機(jī)器的興趣,另一方面也是為了生存(為了在自己家中使用大學(xué)的Unix工作站)。隨著Linux的不斷發(fā)布,Linux社團(tuán)逐漸形成,成員之間一封封的電子郵件構(gòu)成了友誼和社會(huì)的紐帶,也給Linux社團(tuán)帶來了秩序,“Linux的社會(huì)層面是非常非常重要的”。至此Linux達(dá)到了它的第二個(gè)階段。Linux社團(tuán)的壯大不斷地給Linux帶來新的問題、方案與挑戰(zhàn),而新的挑戰(zhàn)又帶來了新的樂趣,促使Linux不斷發(fā)展,“Linux的開發(fā)是一個(gè)全球性團(tuán)隊(duì)的體育項(xiàng)目”。最后,Linux走上了娛樂,“這種娛樂是金錢很難買到的”。
Linus說:“眾所周知,當(dāng)人們是為愛好和熱情所驅(qū)使著的時(shí)候,往往能夠?qū)⒐ぷ髯龅米詈?。?duì)于劇作家、雕塑家和企業(yè)家是如此,對(duì)于軟件工程師也是如此。公開源代碼模式給人們提供了依靠興趣與熱情生活的機(jī)會(huì)。享有樂趣以及與世界上最好的程序員一起工作,而不是與那些恰巧為他們的公司所雇傭的少數(shù)幾個(gè)程序員一起工作,是一種無與倫比的享受。公開源代碼開發(fā)者努力工作著以贏得他們同行的尊敬,那當(dāng)然是一種高度有效的激勵(lì)?!?/p>
Linus認(rèn)為:“編程是世界上最有趣的事。它比下棋之類的游戲有樂趣得多,因?yàn)樗梢杂赡阕约簛碇朴営螒蛞?guī)則?!薄皠?chuàng)造操作系統(tǒng),就是去創(chuàng)造一個(gè)所有應(yīng)用程序賴以運(yùn)行的基礎(chǔ)環(huán)境,從根本上來說,就是在制定規(guī)則:什么可以接受,什么可以做,什么不可以做?!痹谟?jì)算機(jī)世界中,程序員就是上帝,能從中獲得創(chuàng)造一個(gè)新世界的體驗(yàn),而這種體驗(yàn)是無與倫比的,“感覺就像上帝創(chuàng)世紀(jì)那樣,執(zhí)掌一切地說:‘讓那里有光’,那里就真的有了光。在此之前,的確是一無所有。”正是這種巨大的樂趣,驅(qū)動(dòng)著Linus和他的團(tuán)隊(duì)夜以繼日地工作,催生了Linux內(nèi)核和眾多的Linux應(yīng)用程序,才有了今天的Linux操作系統(tǒng)。Linus說“我喜歡有這么多的人給我從事這個(gè)事業(yè)的動(dòng)力,我曾認(rèn)為自己已接近于完成它了,但我一直沒有真正做到這一點(diǎn)。人們始終給我更多繼續(xù)的理由,以及更多困擾的、棘手的難題,這使得繼續(xù)完善Linux變得更為有趣。否則,我可能早就干其它事情去了。但我沒有,因?yàn)檫@是我喜歡的工作,做這件事充滿樂趣?!?/p>
4.實(shí)用
眾所周知,每個(gè)新項(xiàng)目如果都從刀耕火種開始干起肯定是極端的浪費(fèi)。和其它耗費(fèi)在軟件開發(fā)上的花費(fèi)比起來,時(shí)間無疑是最寶貴和最有價(jià)值的,所以應(yīng)該將時(shí)間用在解決新問題上。一旦發(fā)現(xiàn)某個(gè)問題已被解決,就直接拿來利用,不要因?yàn)轵湴粱蚱姸ブ匦伦鲆槐?。因而,Unix傳統(tǒng)上強(qiáng)調(diào)“不要重新發(fā)明輪子”。HenrySpencer說:“重新發(fā)明輪子之所以糟糕不僅因?yàn)槔速M(fèi)時(shí)間,還因?yàn)樗速M(fèi)的時(shí)間往往是平方級(jí)的?!盓ricS.Raymond說:“避免重新發(fā)明輪子的最有效方法是借用別人的設(shè)計(jì)和實(shí)現(xiàn)。換句話說,重用代碼?!苯栌枚皇侵匦掳l(fā)明正是實(shí)用主義的精髓。Unix的一個(gè)設(shè)計(jì)理念是:好的程序員寫好的軟件,偉大的程序員借用偉大的軟件。這一理念被Linux發(fā)揚(yáng)光大。在Linux中,幾乎沒有任何設(shè)計(jì)是從頭做出來的,幾乎所有的程序都建立在已有的代碼和概念之上,因而,Linux始終站在前人的肩膀上。
Raymond認(rèn)為,“Linus并不是驚人的原始設(shè)計(jì)者,但他顯示了發(fā)現(xiàn)好的設(shè)計(jì)并把它集成到Linux內(nèi)核中的強(qiáng)大決竅。”“Linus不是(至少還不曾是)像RichardStallman或JamesGosling一樣的創(chuàng)新天才,在我看來,Linus更像一個(gè)工程天才,具有避免錯(cuò)誤和失敗的第六感覺,掌握了發(fā)現(xiàn)從A點(diǎn)到B點(diǎn)代價(jià)最小的路徑的訣竅?!贝_實(shí),在Linux操作系統(tǒng)中處處體現(xiàn)著實(shí)用主義的思想。Linux不強(qiáng)調(diào)創(chuàng)新,不追求最新,也極少標(biāo)新立異,不把自己限制在某種特定的技術(shù)或方法上。哪個(gè)概念最清晰,哪種算法最有效、最可靠,哪種方法最自然,哪種結(jié)構(gòu)最簡(jiǎn)潔、最優(yōu)雅,Linux就會(huì)選用哪一種。Linux借用已經(jīng)成熟的概念、結(jié)構(gòu)、算法,借用一切可以借用的東西,而后用最直觀、簡(jiǎn)潔的方法實(shí)現(xiàn)它們,用最自然、靈活的方式將它們組織在一起。
Linux社團(tuán)贊賞好的主意,但要求人們以代碼而不是需求或規(guī)格說明的形式提交好主意。Linux社團(tuán)采用自底向上的、非形式化的設(shè)計(jì)與開發(fā)方法,不要求詳細(xì)的項(xiàng)目計(jì)劃和設(shè)計(jì)文檔。Linux是在理想和實(shí)用主義的驅(qū)動(dòng)下自然成長(zhǎng)的。
Linux在總體上采用的是單塊式的結(jié)構(gòu),它不先進(jìn),但簡(jiǎn)潔、高效、實(shí)用。Linux采用的概念,如進(jìn)程、調(diào)度、鎖、信號(hào)、信號(hào)量、文件、目錄等,都直接來源于操作系統(tǒng)教科書,這使得Linux更容易被理解,也更便于討論和交流。Linux的用戶接口采用的是POSIX標(biāo)準(zhǔn),這使得廣大的Unix程序員可以直接在Linux上編程,也使Linux在創(chuàng)建之初就擁有了眾多的軟件工具和應(yīng)用程序。Linux的使用方法、目錄結(jié)構(gòu)、配置文件格式、命令行開關(guān)等都符合Unix的傳統(tǒng)慣例,這使得Linux更容易被接受和使用。Linux采用的算法大多是經(jīng)過實(shí)踐驗(yàn)證的成熟算法,如物理內(nèi)存管理中的伙伴算法和Slab算法、虛擬內(nèi)存管理中的二次機(jī)會(huì)頁面淘汰算法和按需調(diào)頁算法等,這使得Linux的內(nèi)核更加穩(wěn)定、可靠、高效。
Linux實(shí)用性的另一個(gè)表現(xiàn)是源碼開放,允許任何人對(duì)其進(jìn)行修改和重構(gòu),以便更好地滿足用戶的需求。Linux借用了別人的成果,也允許甚至鼓勵(lì)別人借用它的成果。在一次次的修改和重構(gòu)中,Linux也在被一次次地清洗,剩下的都是最實(shí)用的精華。
《LinuxandtheUnixPhilosophy》一書的作者M(jìn)ikeGancarz說:“好的軟件不是建造出來的,而是不斷長(zhǎng)出來的?!?/p>
由于Linux采用了實(shí)用主義哲學(xué),所以,雖然“Linux并不是一個(gè)令人敬畏的概念上的飛躍”,但它極為成功。
5.優(yōu)雅
在Linux操作系統(tǒng)的設(shè)計(jì)過程中,設(shè)計(jì)者們追求的不光是實(shí)用,實(shí)際上還有美妙與優(yōu)雅。
自然,優(yōu)雅是設(shè)計(jì)者的一種感覺,是一種難以用語言描述的美感,但這種感覺會(huì)給設(shè)計(jì)者以享受,因而是設(shè)計(jì)者追求的一個(gè)主要目標(biāo),是對(duì)系統(tǒng)進(jìn)行不斷改良、優(yōu)化的標(biāo)準(zhǔn)與動(dòng)力。與其它工程項(xiàng)目一樣,好的軟件設(shè)計(jì)應(yīng)該不但實(shí)用而且優(yōu)雅、美妙。
DavidGelernter在《機(jī)器美學(xué):優(yōu)雅和技術(shù)本質(zhì)》一書中說“美在計(jì)算科學(xué)中的地位要比在其它任何技術(shù)中的地位都重要,因?yàn)檐浖珡?fù)雜了。美是抵御復(fù)雜的終極武器?!睂?duì)優(yōu)雅的評(píng)價(jià)標(biāo)準(zhǔn)有很多,但對(duì)軟件設(shè)計(jì)來說,簡(jiǎn)潔應(yīng)該是一個(gè)公認(rèn)的標(biāo)準(zhǔn)。Unix的設(shè)計(jì)者認(rèn)為,優(yōu)雅的設(shè)計(jì)是小巧、精干、簡(jiǎn)潔的設(shè)計(jì),“小的就是美的”。Unix管道的發(fā)明人DougMcIlroy說:“‘錯(cuò)綜復(fù)雜的美妙事物’聽起來就自相矛盾。Unix程序員相互比的是誰能夠做到‘簡(jiǎn)潔而漂亮’,并以此為榮?!盠inus說:“Unix的理念是越小越漂亮。一小堆簡(jiǎn)單基本的建筑材料,結(jié)合起來就能創(chuàng)造出無限的復(fù)雜表述。”EricS.Raymond說:“優(yōu)雅是力量與簡(jiǎn)潔的結(jié)合。優(yōu)雅的代碼事半功倍;優(yōu)雅的代碼不僅正確,而且顯然正確;優(yōu)雅的代碼不僅將算法傳達(dá)給計(jì)算機(jī),同時(shí)也將見解和信心傳遞給閱讀代碼的人。優(yōu)雅的代碼既透明又可顯。通過追求代碼的優(yōu)雅,我們能夠編寫更好的代碼?!?/p>
易經(jīng)上說:“乾以易知,坤以簡(jiǎn)能。易則易知,簡(jiǎn)則易從。易知?jiǎng)t有親,易從則有功。有親則可久,有功則可大?!背浞终f明了簡(jiǎn)與易的可貴。
AlbertEinstein說:“Everythingshouldbemadeassimpleaspossible,butnosimpler.”
但簡(jiǎn)潔并不意味著容易。簡(jiǎn)潔需要特別的設(shè)計(jì)和很高的品味。圖靈獎(jiǎng)獲得者C.A.R.Hoare說:“軟件設(shè)計(jì)有兩種方法:一種是設(shè)計(jì)得極為簡(jiǎn)潔,沒有看得到的缺陷;另一種是設(shè)計(jì)得極為復(fù)雜,有缺陷也看不出來。第一種方式的難度要大得多?!?/p>
Linux的設(shè)計(jì)者遵守Unix的小巧、簡(jiǎn)潔原則,努力使Linux優(yōu)雅而美妙。Linus說:“在編程中,實(shí)用的考慮往往被置于有意思、美妙或有震撼力的考慮之后。”
在Unix和Linux中,存在著數(shù)以百計(jì)的小巧而靈活的工具軟件,如ls、ps、more、find、grep、wc等,每一個(gè)都僅做一件事,然而一旦通過管道和腳本語言將它們組合在一起,就可以做幾乎所有的事情。
在Linux內(nèi)核中,通常將復(fù)雜的大模塊劃分成若干接口清晰、功能單一的簡(jiǎn)單子模塊,如將物理內(nèi)存管理模塊劃分成物理頁分配、釋放、回收等子模塊。由于每個(gè)子模塊都很小,因而其數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)算法就可以做得簡(jiǎn)潔、優(yōu)雅。另外,模塊劃分也使得代碼重用成為可能,如Linux的三種不同系統(tǒng)調(diào)用fork、vfork和clone實(shí)際上是用一個(gè)do_fork模塊實(shí)現(xiàn)的。代碼重用使系統(tǒng)更加簡(jiǎn)潔、優(yōu)雅。
Linux內(nèi)核的數(shù)據(jù)結(jié)構(gòu)也設(shè)計(jì)得非常簡(jiǎn)潔、清晰,其設(shè)計(jì)原則是“無垃圾、無混淆”。無垃圾使數(shù)據(jù)結(jié)構(gòu)最小化,無混淆使數(shù)據(jù)結(jié)構(gòu)清晰、明了。簡(jiǎn)潔、清晰的數(shù)據(jù)結(jié)構(gòu)又導(dǎo)致了簡(jiǎn)潔、清晰的算法,增加了系統(tǒng)的透明性,降低了系統(tǒng)的復(fù)雜性,提高了系統(tǒng)的可靠性。
相對(duì)于操作系統(tǒng)內(nèi)核的復(fù)雜性而言,Linux內(nèi)核源代碼是相當(dāng)優(yōu)雅、透明的,其中沒有陰暗的角落和隱藏的陷阱。正因?yàn)槿绱?,Linux才能被全世界無數(shù)的程序員理解和掌握,才能在它的周圍聚集起活躍的開發(fā)團(tuán)隊(duì),才能在這些程序員手中快速演化、完善。很難想象晦澀的代碼能夠被如此多的人理解。
6.虛擬
在計(jì)算機(jī)技術(shù)的語匯中,虛擬意味著“雖然是無形或非正式的,但在功能上相當(dāng)于……。”簡(jiǎn)明牛津英語辭典為虛擬下的定義是:“計(jì)算機(jī)用語,并非實(shí)體存在的,但由軟件產(chǎn)生,在程序或用戶看來確實(shí)能起作用的?!备爬ㄆ饋碚f,虛擬的意思不是“虛假”或“虛構(gòu)”,而是“事實(shí)上存在的”或“名義上是虛的,實(shí)質(zhì)上是實(shí)的。”
虛擬是Linux操作系統(tǒng)設(shè)計(jì)哲學(xué)中的基礎(chǔ)與核心。如果沒有虛擬技術(shù),Linux操作系統(tǒng)將無法以現(xiàn)在的形式完成其管理使命,至少Linux操作系統(tǒng)不會(huì)是現(xiàn)在這個(gè)樣子。換句話說,沒有虛擬技術(shù),就沒有現(xiàn)在的Linux。
Linux是在虛擬社團(tuán)中成長(zhǎng)、壯大起來的操作系統(tǒng)。當(dāng)Linus開發(fā)出Linux的最初版本并將其發(fā)布到互聯(lián)網(wǎng)上之后,圍繞Linux內(nèi)核迅速形成了一個(gè)虛擬社團(tuán)。雖然社團(tuán)成員很少有機(jī)會(huì)見面,但他們卻不斷地為L(zhǎng)inux內(nèi)核開發(fā)代碼、測(cè)試功能、發(fā)現(xiàn)并修補(bǔ)漏洞、開發(fā)各類應(yīng)用程序和軟件工具、生成不同版本的發(fā)布、編寫文檔、提供技術(shù)服務(wù)、發(fā)起各類活動(dòng)等等,可以說,正是Linux虛擬社團(tuán)在推動(dòng)著Linux的發(fā)展。
Linux操作系統(tǒng)將其管理的每臺(tái)計(jì)算機(jī)都轉(zhuǎn)變成了一個(gè)人造的虛擬社會(huì),其中進(jìn)程是這個(gè)虛擬社會(huì)的主體,處理器、內(nèi)存、外存、外部設(shè)備等是這個(gè)虛擬社會(huì)的客體。主體發(fā)起操作,在Linux內(nèi)核的協(xié)調(diào)與管理下,利用客體完成操作。Linux是虛擬社會(huì)的構(gòu)造者。它發(fā)現(xiàn)各客體的存在情況,檢測(cè)各客體的特性和工作模式,抽象出各客體的描述結(jié)構(gòu)和它們之間的相互關(guān)系,從而構(gòu)造出虛擬社會(huì)的客觀環(huán)境。它根據(jù)需要?jiǎng)討B(tài)地創(chuàng)建或撤銷主體,為主體指派具體工作并賦予主體必要的特性,建立主體與主體之間、主體與客體之間的相互關(guān)系,從而構(gòu)造出虛擬社會(huì)的主觀環(huán)境。Linux同時(shí)還是虛擬社會(huì)的管理者。它為虛擬社會(huì)制訂憲法和各種相應(yīng)的法律、法規(guī),并以此為準(zhǔn)繩管理各客體的使用,監(jiān)督各主體的行為,協(xié)調(diào)各主體的動(dòng)作。當(dāng)然,Linux所構(gòu)造和管理的虛擬社會(huì)是一個(gè)理想化的現(xiàn)實(shí)社會(huì),它從現(xiàn)實(shí)社會(huì)中借鑒了許多管理思路與管理手段,如基本概念、組織結(jié)構(gòu)、行為模式、管理手段等都可以在現(xiàn)實(shí)社會(huì)中找到原型。在Linux內(nèi)核的設(shè)計(jì)中,大量采用了虛擬技術(shù)。虛擬的本質(zhì)是改變事物的原始屬性,包括將少的變多、多的變少,小的變大、大的變小,遠(yuǎn)的變近、近的變遠(yuǎn),慢的變快、快的變慢,離散的變連續(xù)、連續(xù)的變離散,壞的變好等,虛擬還能改變事物的形態(tài),甚至無中生有。處理器管理能用一個(gè)物理處理器模擬出多個(gè)邏輯處理器,使每個(gè)進(jìn)程都認(rèn)為自己獨(dú)占一個(gè)CPU(少變多);虛擬文件系統(tǒng)(VFS)能將多種不同的物理文件系統(tǒng)組織在一棵目錄樹中,從而屏蔽它們之間的差別,統(tǒng)一它們的使用(多變少);虛擬內(nèi)存管理能利用有限的物理內(nèi)存為每個(gè)進(jìn)程構(gòu)造出幾乎無限的虛擬內(nèi)存(小變大);虛擬設(shè)備技術(shù)可以將遠(yuǎn)程的設(shè)備(如打印機(jī))轉(zhuǎn)化成本地的設(shè)備(遠(yuǎn)變近);通過緩存、延遲寫、預(yù)讀等技術(shù)可以有效減少讀寫磁盤的次數(shù),提高磁盤訪問的速度(慢變快);虛擬內(nèi)存管理可以將物理上離散的內(nèi)存頁轉(zhuǎn)化成邏輯上連續(xù)的虛擬內(nèi)存空間,文件系統(tǒng)可以將一組物理上離散的存儲(chǔ)塊轉(zhuǎn)化成一個(gè)邏輯上連續(xù)的文件(離散變連續(xù));網(wǎng)絡(luò)協(xié)議可提高網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量,文件系統(tǒng)可提高磁盤服務(wù)的質(zhì)量,操作系統(tǒng)可提高整個(gè)計(jì)算機(jī)系統(tǒng)服務(wù)的質(zhì)量(壞變好);處理器仿真技術(shù)(如Qemu)可以將一種類型的處理器轉(zhuǎn)變成另外一種類型的處理器(改變形態(tài));虛擬磁盤技術(shù)可以利用遠(yuǎn)程的文件為本機(jī)虛擬出標(biāo)準(zhǔn)的磁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 弛豫鐵電單晶水聲發(fā)射換能器的帶寬拓展研究
- 二零二五年度建筑項(xiàng)目消防安全責(zé)任協(xié)議書3篇
- 二零二五版管道工程鋼管供應(yīng)及安裝合同
- 水泥建材行業(yè)營(yíng)業(yè)員工作總結(jié)
- 二零二五年度家庭矛盾離婚協(xié)議書2篇
- 二零二五年度商業(yè)項(xiàng)目地下車庫停車位租賃管理協(xié)議3篇
- 設(shè)定明確的工作崗位職責(zé)計(jì)劃
- 二零二五年度電梯智能化升級(jí)與物業(yè)管理服務(wù)合同3篇
- 二零二五年度教師編制外人員勞動(dòng)合同范本2篇
- 2025版項(xiàng)目管理法律法規(guī)與國(guó)際慣例應(yīng)用指導(dǎo)與執(zhí)行合同3篇
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 深圳小學(xué)英語單詞表(中英文)
- 護(hù)理質(zhì)量反饋內(nèi)容
- 山東省濟(jì)寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 抖音搜索用戶分析報(bào)告
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學(xué)年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學(xué)設(shè)計(jì)
- 供貨進(jìn)度計(jì)劃
- 國(guó)際尿失禁咨詢委員會(huì)尿失禁問卷表
- 彌漫大B細(xì)胞淋巴瘤護(hù)理查房
評(píng)論
0/150
提交評(píng)論