Linux操作系統(tǒng)詳解_第1頁
Linux操作系統(tǒng)詳解_第2頁
Linux操作系統(tǒng)詳解_第3頁
Linux操作系統(tǒng)詳解_第4頁
Linux操作系統(tǒng)詳解_第5頁
已閱讀5頁,還剩400頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux操作系統(tǒng)詳解

(第一部分)(共三個(gè)部分)總目錄第1部分Linux操作系統(tǒng)

第1章操作系統(tǒng)概述

第2章處理機(jī)管理

第3章存儲(chǔ)管理

第4章調(diào)度

第5章設(shè)備

第6章文件系統(tǒng)第2部分操作系統(tǒng)命令及shell編程 第7章Linux基本命令 第8章使用vi編輯文件 第9章shell編程第3部分系統(tǒng)管理 第10章Linux系統(tǒng)軟件的獲取和安裝 第11章賬號(hào)管理 第12章文件系統(tǒng)管理 第13章TCP/IP網(wǎng)絡(luò)管理 第14章備份與恢復(fù) 第15章XWindow及Genie應(yīng)用程序第1部分Linux操作系統(tǒng)

第1章操作系統(tǒng)概述1.1操作系統(tǒng)簡(jiǎn)介1.2操作系統(tǒng)接口1.3操作系統(tǒng)功能1.4操作系統(tǒng)結(jié)構(gòu)1.5Linux操作系統(tǒng)介紹1.6Linux的內(nèi)核特征1.7Linux的發(fā)展及展望1.8小結(jié)習(xí)題操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的基本系統(tǒng)軟件。軟件系統(tǒng)中操作系統(tǒng)是所有軟件的核心。操作系統(tǒng)負(fù)責(zé)控制、管理計(jì)算機(jī)的所有軟件、硬件資源,是惟一直接和硬件系統(tǒng)打交道的軟件,是整個(gè)軟件系統(tǒng)的基礎(chǔ)部分,同時(shí)還為計(jì)算機(jī)用戶提供良好的界面。因此,操作系統(tǒng)直接面對(duì)所有硬件、軟件和用戶,它是協(xié)調(diào)計(jì)算機(jī)各組成部分之間、人機(jī)之間關(guān)系的重要軟件系統(tǒng)。Linux是在日益普及的Internet上迅速形成和不斷完善的操作系統(tǒng)。Linux操作系統(tǒng)高效、穩(wěn)定,適應(yīng)多種硬件平臺(tái),而最具有魅力的是它遵循GPL(GNUGeneralPublicLicense,GNU通用公共許可證,見附錄),整個(gè)系統(tǒng)的源代碼可以自由獲取,并且在GPL許可的范圍內(nèi)自由修改、傳播,這就為學(xué)習(xí)、應(yīng)用、開發(fā)操作系統(tǒng)及其他軟件提供了良好的基礎(chǔ)和較高的起點(diǎn)。本章首先介紹操作系統(tǒng)的概念、功能及其結(jié)構(gòu),接著介紹Linux系統(tǒng)的基本特征、發(fā)展現(xiàn)狀,并以此為基礎(chǔ),討論現(xiàn)代操作系統(tǒng)的一般特點(diǎn)和發(fā)展趨勢(shì)。1.1操作系統(tǒng)簡(jiǎn)介1.1.1操作系統(tǒng)概念一種非形式的定義如下:操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中的一個(gè)系統(tǒng)軟件,它是這樣一些程序模塊的集合——它們管理和控制計(jì)算機(jī)系統(tǒng)中的硬件和軟件資源,合理地組織計(jì)算機(jī)工作流程,以便有效地利用這些資源為用戶提供一個(gè)功能強(qiáng)大、使用方便和可擴(kuò)展的工作環(huán)境,從而在計(jì)算機(jī)與用戶之間起到接口作用。普通用戶使用操作系統(tǒng),是把操作系統(tǒng)當(dāng)作一個(gè)資源管理者,通過系統(tǒng)提供的系統(tǒng)命令和界面操作等工具,以某種易于理解的方式完成系統(tǒng)管理功能,有效地控制各種硬件資源,組織自己的數(shù)據(jù),完成自己的工作并和其他人共享資源。對(duì)于程序員來講,操作系統(tǒng)提供了一個(gè)與計(jì)算機(jī)硬件等價(jià)的擴(kuò)展或虛擬的計(jì)算平臺(tái)。操作系統(tǒng)提供給程序員的工具除了系統(tǒng)命令、界面操作之外,還有系統(tǒng)調(diào)用,系統(tǒng)調(diào)用抽象了許多硬件細(xì)節(jié),程序可以以某種統(tǒng)一的方式進(jìn)行數(shù)據(jù)處理,程序員可以避開許多具體的硬件細(xì)節(jié),提高程序開發(fā)效率,改善程序移植特性。整個(gè)計(jì)算機(jī)系統(tǒng)可以認(rèn)為是按照一定規(guī)則分層構(gòu)建的,我們可以使用圖1.1來示意性地描述這種層次結(jié)構(gòu)。圖1.1計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)示意圖1.1.2操作系統(tǒng)發(fā)展簡(jiǎn)介操作系統(tǒng)是隨著計(jì)算機(jī)硬件的發(fā)展,圍繞著如何提高計(jì)算機(jī)系統(tǒng)資源的利用率和改善用戶界面的友好性而形成,發(fā)展和不斷成熟完善的。隨著計(jì)算機(jī)硬件的發(fā)展,計(jì)算機(jī)的計(jì)算速度越來越快,其高速的數(shù)據(jù)處理與低速的手工操作之間的矛盾日益突出,傳統(tǒng)的手工操作是系統(tǒng)的最大制約因素,昂貴的計(jì)算機(jī)硬件資源得不到有效的利用。一個(gè)重要的技術(shù)是批處理,專門的操作人員把用戶提交的任務(wù)按照一定的類別、順序組織起來,形成作業(yè)序列,這些作業(yè)成批地在專門的監(jiān)督程序控制之下自動(dòng)執(zhí)行。這里的監(jiān)督程序就是操作系統(tǒng)的雛形。最初的批處理系統(tǒng)中,計(jì)算機(jī)內(nèi)存中仍然只有一個(gè)程序在運(yùn)行,總體系統(tǒng)的效率仍然沒有發(fā)揮出來。解決這個(gè)問題的措施稱為多道技術(shù)。多道程序設(shè)計(jì)技術(shù)使得在內(nèi)存中有多個(gè)程序,保證系統(tǒng)的處理器總是處于工作狀態(tài),極大地提高了系統(tǒng)的利用率。多道技術(shù)開始使用在批處理系統(tǒng)中,稱為多道批處理系統(tǒng),這樣的系統(tǒng)效率高,但是,在脫機(jī)批處理情況下,高效帶來的問題是用戶對(duì)自己作業(yè)的控制程度降低。針對(duì)這個(gè)問題的方案是分時(shí)技術(shù)。分時(shí)系統(tǒng)把處理機(jī)的運(yùn)行時(shí)間分成時(shí)間片,按照時(shí)間片輪流把處理機(jī)分配給每一個(gè)聯(lián)機(jī)用戶。由于每一個(gè)時(shí)間片很短,宏觀上來看,所有用戶同時(shí)操作計(jì)算機(jī),各自獨(dú)立控制自己的作業(yè)。與分時(shí)系統(tǒng)相對(duì)應(yīng),還有一種實(shí)時(shí)(realtime)操作系統(tǒng),控制計(jì)算機(jī)對(duì)外來信息進(jìn)行快速處理,要求系統(tǒng)在允許的時(shí)間范圍之內(nèi)做出響應(yīng)。同時(shí)具有多道批處理、分時(shí)、實(shí)時(shí)處理功能,或者其中兩種以上功能的系統(tǒng),稱為通用操作系統(tǒng)。Linux操作系統(tǒng)就是具有內(nèi)嵌網(wǎng)絡(luò)功能的多用戶分時(shí)系統(tǒng)。它兼有多道批處理和分時(shí)處理功能,是一個(gè)典型的通用處理系統(tǒng)。一方面強(qiáng)調(diào)分布式計(jì)算和處理,另一方面強(qiáng)調(diào)物理上跨越不同的主機(jī)系統(tǒng)、邏輯上緊密耦合構(gòu)成統(tǒng)一完整的操作系統(tǒng)平臺(tái),這樣的系統(tǒng)就是分布式操作系統(tǒng)(distributedoperatingsystem)。這是當(dāng)前操作系統(tǒng)發(fā)展的一個(gè)方向。當(dāng)前,計(jì)算機(jī)微型化和專業(yè)化趨勢(shì)已成事實(shí)。這兩種發(fā)展趨勢(shì)都產(chǎn)生了一個(gè)共同的需求,即嵌入式軟件。嵌入式軟件也需要操作系統(tǒng)平臺(tái)的支持,這樣的操作系統(tǒng)就是嵌入式操作系統(tǒng)。嵌入式軟件系統(tǒng)的規(guī)模小,相應(yīng)地,其操作系統(tǒng)的規(guī)模也小。嵌入式軟件的應(yīng)用平臺(tái)之一是各種電器,這樣的系統(tǒng)面向普通家庭和個(gè)人用戶,由于快速發(fā)展的網(wǎng)絡(luò)市場(chǎng),使得家用電器的市場(chǎng)比傳統(tǒng)的計(jì)算機(jī)市場(chǎng)大很多。因此,嵌入式軟件可能成為21世紀(jì)信息產(chǎn)業(yè)的支柱之一,嵌入式操作系統(tǒng)也必將成為軟件廠商爭(zhēng)奪的焦點(diǎn),成為操作系統(tǒng)發(fā)展的另一個(gè)熱門方向。1.2操作系統(tǒng)接口操作系統(tǒng)在整個(gè)軟件系統(tǒng)中處于中心地位,負(fù)責(zé)控制、管理計(jì)算機(jī)的所有軟件、硬件資源,它屏蔽了很多具體的硬件細(xì)節(jié),對(duì)計(jì)算機(jī)用戶提供統(tǒng)一、良好的界面(或稱為接口,interface)。本節(jié)介紹操作系統(tǒng)的接口界面,下一節(jié)主要介紹操作系統(tǒng)的管理功能。在計(jì)算機(jī)層次結(jié)構(gòu)中,操作系統(tǒng)通過接口向上層用戶提供各種服務(wù),而上層用戶通過操作系統(tǒng)接口來訪問硬件。操作系統(tǒng)提供的接口可以根據(jù)服務(wù)對(duì)象的不同而劃分為兩類:一是程序級(jí)的接口,提供給程序員使用,即系統(tǒng)調(diào)用;二是作業(yè)級(jí)的接口,提供給用戶使用,即操作命令。1.2.1程序員級(jí)接口系統(tǒng)調(diào)用是一組由操作系統(tǒng)提供的廣義指令。應(yīng)用程序通過系統(tǒng)調(diào)用來操縱系統(tǒng)內(nèi)核中特定的函數(shù),當(dāng)應(yīng)用程序需要進(jìn)行文件訪問、網(wǎng)絡(luò)傳輸?shù)炔僮鲿r(shí),必須通過系統(tǒng)調(diào)用來完成。程序員在設(shè)計(jì)應(yīng)用程序時(shí),涉及到系統(tǒng)資源,都必須使用系統(tǒng)調(diào)用來實(shí)現(xiàn),可以說,系統(tǒng)調(diào)用是操作系統(tǒng)提供給程序員的惟一接口。系統(tǒng)調(diào)用可以根據(jù)功能劃分為不同的類型。熟悉系統(tǒng)調(diào)用是一個(gè)優(yōu)秀程序員必備的條件。1.2.2用戶級(jí)接口操作系統(tǒng)提供給用戶使用的接口是操作命令,用戶可以使用這些操作命令來組織和控制作業(yè)的執(zhí)行或者管理整個(gè)計(jì)算機(jī)系統(tǒng)。實(shí)際上,計(jì)算機(jī)的操作命令界面是在系統(tǒng)調(diào)用的基礎(chǔ)上開發(fā)而成的。操作系統(tǒng)發(fā)展的主要方向除了提高系統(tǒng)資源利用率之外,就是改善用戶界面友好性。圖形用戶界面是操縱命令界面發(fā)展的一個(gè)里程碑。圖形用戶界面,降低了計(jì)算機(jī)操作的門檻,千萬個(gè)家庭成為計(jì)算機(jī)普及的對(duì)象?,F(xiàn)在流行的操作系統(tǒng)一般都同時(shí)提供圖形和文本用戶界面。Linux系統(tǒng)就是如此,文本界面是shell接口,圖形界面是XWindow系統(tǒng)。1.3操作系統(tǒng)功能多用戶分時(shí)系統(tǒng),按照其功能劃分為處理機(jī)管理、存儲(chǔ)管理、設(shè)備管理、信息管理(文件系統(tǒng)管理),對(duì)于現(xiàn)代流行的操作系統(tǒng),還具有完整的網(wǎng)絡(luò)管理功能。這些管理功能都是由操作系統(tǒng)內(nèi)核實(shí)現(xiàn)的。1.3.1處理機(jī)管理作業(yè)、進(jìn)程需要適當(dāng)?shù)姆峙?、調(diào)度,以便協(xié)調(diào)相互關(guān)系,共享有限的處理機(jī)資源,這是處理機(jī)管理的主要內(nèi)容。處理機(jī)管理是操作系統(tǒng)管理功能的關(guān)鍵,操作系統(tǒng)功能的一個(gè)主要指標(biāo)即是提高處理機(jī)的使用率,讓處理機(jī)盡可能處于工作狀態(tài)。1.3.2存儲(chǔ)管理存儲(chǔ)管理的目標(biāo)是讓有限的物理內(nèi)存盡可能滿足應(yīng)用程序?qū)?nèi)存的需求。存儲(chǔ)管理的內(nèi)容包括內(nèi)存的擴(kuò)充、分配、保護(hù)等。操作系統(tǒng)多采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式。內(nèi)存一般采用部分分配的辦法。通常,內(nèi)存中總是同時(shí)存放了多個(gè)正在運(yùn)行的程序?qū)嶓w,即進(jìn)程,在運(yùn)行的過程中,他們之間可能會(huì)使用到相同內(nèi)存位置的內(nèi)容,這種技術(shù)稱為內(nèi)存共享,這樣,可以提高內(nèi)存的利用率。但是,必須要確保各進(jìn)程所占據(jù)的內(nèi)存的獨(dú)立和完整性。1.3.3設(shè)備管理除了CPU和內(nèi)存之外,計(jì)算機(jī)的其他部件都統(tǒng)稱為外部設(shè)備。這些設(shè)備在操作系統(tǒng)的控制下協(xié)調(diào)工作,共同完成信息的輸入、存儲(chǔ)和輸出任務(wù)。操作系統(tǒng)要對(duì)所有的設(shè)備進(jìn)行管理。一方面,讓每一個(gè)設(shè)備盡可能發(fā)揮自己的特長(zhǎng),實(shí)現(xiàn)與CPU和內(nèi)存的數(shù)據(jù)交換,提高外部設(shè)備的利用率。另一方面,隱蔽設(shè)備操作的具體細(xì)節(jié),對(duì)用戶提供一個(gè)統(tǒng)一、友好的設(shè)備使用界面。和處理機(jī)及內(nèi)存相比,外部設(shè)備的速度要慢得多,而且性能差別大,類型品種多,因此,設(shè)備管理是一項(xiàng)復(fù)雜而又重要的工作。1.3.4文件系統(tǒng)操作系統(tǒng)在控制、管理硬件的同時(shí),也必須管理好軟件資源。操作系統(tǒng)的文件系統(tǒng)就是針對(duì)計(jì)算機(jī)的軟件資源而進(jìn)行的。文件系統(tǒng)主要提供以下服務(wù):文件存取,使每個(gè)用戶能夠?qū)ψ约旱奈募M(jìn)行快速的訪問、修改和存儲(chǔ)。文件共享,指提供某種手段,使存儲(chǔ)空間只保存一個(gè)副本,而所有授權(quán)用戶能夠共同訪問這些文件。文件保護(hù),指提供保護(hù)系統(tǒng)資源防止非法使用的手段。1.3.5網(wǎng)絡(luò)管理計(jì)算機(jī)的發(fā)展已經(jīng)進(jìn)入了互聯(lián)網(wǎng)時(shí)代,現(xiàn)在流行的操作系統(tǒng)一般都具有內(nèi)嵌的網(wǎng)絡(luò)功能,能夠在內(nèi)核級(jí)別控制、管理網(wǎng)絡(luò)。操作系統(tǒng)一般都提供網(wǎng)絡(luò)通信和網(wǎng)絡(luò)服務(wù)等基本功能。內(nèi)核中網(wǎng)絡(luò)部分,主要實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備控制和網(wǎng)絡(luò)協(xié)議,因此,網(wǎng)絡(luò)管理也就集中在通信這部分。1.4操作系統(tǒng)結(jié)構(gòu)本節(jié)簡(jiǎn)單介紹操作系統(tǒng)的邏輯結(jié)構(gòu),然后介紹操作系統(tǒng)發(fā)展過程中使用過的幾種主要的體系結(jié)構(gòu)。1.4.1操作系統(tǒng)的邏輯結(jié)構(gòu)計(jì)算機(jī)系統(tǒng)可以理解為是分層構(gòu)造的。從邏輯關(guān)系來理解,操作系統(tǒng)本身也可以用層次結(jié)構(gòu)來描述??梢哉J(rèn)為至少有4層,從上到下依次為:面對(duì)用戶的外部接口,硬件無關(guān)的內(nèi)核部分,與硬件相關(guān)的內(nèi)核部分,面對(duì)硬件的外部接口??梢院?jiǎn)單地用圖1.2來描述。這種層次結(jié)構(gòu)可以看作是操作系統(tǒng)縱向的結(jié)構(gòu)。圖1.2操作系統(tǒng)邏輯層次示意圖操作系統(tǒng)也可根據(jù)不同的管理功能劃分為功能模塊。一種簡(jiǎn)單的理解是,操作系統(tǒng)本身劃分為功能模塊,而每個(gè)模塊分層構(gòu)造,形成一個(gè)縱橫交錯(cuò)的結(jié)構(gòu)。1.4.2操作系統(tǒng)的體系結(jié)構(gòu)軟件的體系結(jié)構(gòu)描述系統(tǒng)各部分軟件以及它們相互之間的關(guān)系,是軟件內(nèi)部結(jié)構(gòu)配置的一種抽象描述。軟件體系結(jié)構(gòu)定義各部分軟件系統(tǒng)的應(yīng)用界面規(guī)范及相互操作和數(shù)據(jù)通信的協(xié)議和限制。體系結(jié)構(gòu)相對(duì)穩(wěn)定、滿足應(yīng)用需求,同時(shí)具有適當(dāng)?shù)目蛇m應(yīng)性和可擴(kuò)充性。1.模塊結(jié)構(gòu)模塊結(jié)構(gòu)是將操作系統(tǒng)內(nèi)核按照功能劃分為一個(gè)個(gè)單獨(dú)的模塊,模塊之間相對(duì)獨(dú)立,只能通過預(yù)先規(guī)定好的接口方式來調(diào)用,它們共享數(shù)據(jù),模塊是系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)的基本單位。每一個(gè)模塊實(shí)現(xiàn)一個(gè)完整單獨(dú)的功能,所有模塊之間相互調(diào)用,共同構(gòu)成一個(gè)完整的系統(tǒng)內(nèi)核。模塊結(jié)構(gòu)最大的優(yōu)點(diǎn)是效率高。模塊式結(jié)構(gòu)中,操作系統(tǒng)的邏輯層次關(guān)系具體由調(diào)用層次關(guān)系來體現(xiàn)。這種結(jié)構(gòu)的主要問題一是全局函數(shù)使用多,造成訪問控制困難;二是結(jié)構(gòu)不夠清晰,系統(tǒng)的可理解性、可維護(hù)性和可移植性都比較差。2.層次結(jié)構(gòu)層次結(jié)構(gòu)的方法把操作系統(tǒng)內(nèi)核按照一定的規(guī)則劃分為一系列相互依賴的層次,每個(gè)層次也可以分解為一系列更小的模塊,模塊負(fù)責(zé)完成一部分特定的功能,只能與相鄰的層次發(fā)生直接的聯(lián)系,所有這些層次的組合,就實(shí)現(xiàn)了整個(gè)系統(tǒng)。實(shí)際上,層次結(jié)構(gòu)可以理解為一種特殊的模塊式結(jié)構(gòu)。層次結(jié)構(gòu)可以大大方便系統(tǒng)的移植和擴(kuò)充。把系統(tǒng)內(nèi)核劃分為嚴(yán)格的層次結(jié)構(gòu),為了滿足有序的層次調(diào)用關(guān)系,必然要犧牲部分靈活性和系統(tǒng)效率。3.對(duì)象結(jié)構(gòu)對(duì)象也可以理解為一種特殊的模塊,它是由一組數(shù)據(jù)集以及定義在其上的操作集封裝而成。對(duì)象結(jié)構(gòu)方法中,操作系統(tǒng)內(nèi)核按照內(nèi)核對(duì)象實(shí)體組織,每個(gè)內(nèi)核對(duì)象實(shí)體都有自己的數(shù)據(jù)和操作,對(duì)象之間通過消息傳遞來協(xié)調(diào)工作。對(duì)象模塊具有很強(qiáng)的獨(dú)立性,因此也具有很好的復(fù)用性能。對(duì)象模塊可以方便有效地控制內(nèi)部數(shù)據(jù)的訪問屬性,充分地隱藏信息,達(dá)到資源保護(hù)的目的。采用對(duì)象結(jié)構(gòu),系統(tǒng)的開發(fā)難度降低,具有良好的擴(kuò)展性和移植性,同時(shí)有較好的安全功能。對(duì)象結(jié)構(gòu)操作系統(tǒng)內(nèi)核的一個(gè)嚴(yán)重問題是效率低。,Linux內(nèi)核基本屬于模塊結(jié)構(gòu),而MS-DOS系統(tǒng)內(nèi)核采用的是層次結(jié)構(gòu),WindowsNT/2000及Solaris則是典型的對(duì)象結(jié)構(gòu)。操作系統(tǒng)內(nèi)核按照其運(yùn)行的情況可以分為:宏內(nèi)核與微內(nèi)核。前者也稱為單內(nèi)核,Linux系統(tǒng)屬于單內(nèi)核類型。對(duì)象結(jié)構(gòu)的系統(tǒng)內(nèi)核通常是微內(nèi)核,例如,WindowsNT/2000系統(tǒng)就是微內(nèi)核。1.5Linux操作系統(tǒng)介紹Linux系統(tǒng)有兩種不同的含義。從技術(shù)角度,Linux指的是由LinusTorvalds維護(hù)的開放源代碼UNIX類操作系統(tǒng)的內(nèi)核。然而,目前大多數(shù)人用它來表示以Linux內(nèi)核為基礎(chǔ)的整個(gè)操作系統(tǒng)。從這種意義講,Linux指的是開放源代碼的,包含內(nèi)核、系統(tǒng)工具、完整的開發(fā)環(huán)境和應(yīng)用的UNIX類操作系統(tǒng)。1.5.1Linux——自由操作系統(tǒng)Linux是一個(gè)UNIX操作系統(tǒng)的克隆,可以免費(fèi)使用,遵循GPL聲明,可以自由修改和傳播。Linux包含了人們希望操作系統(tǒng)擁有的所有功能特性,這些功能包括真正的多任務(wù)、虛擬內(nèi)存、世界上最快的TCP/IP驅(qū)動(dòng)程序、共享庫(kù)和多用戶支持。Linux現(xiàn)在是個(gè)人計(jì)算機(jī)和工作站上的UNIX類操作系統(tǒng)。它不僅繼承了UNIX的特征,而且在許多方面超過了UNIX。作為UNIX類操作系統(tǒng),它具有下列基本特征:

是真正的多用戶、多任務(wù)操作系統(tǒng);是符合POSIX標(biāo)準(zhǔn)的系統(tǒng);提供具有內(nèi)置安全措施的分層的文件系統(tǒng);提供shell命令解釋程序和編程語言;提供強(qiáng)大的管理功能,包括遠(yuǎn)程管理功能;具有內(nèi)核的編程接口;具有圖形用戶接口;具有大量有用的實(shí)用程序和通信、聯(lián)網(wǎng)工具;具有面向屏幕的編緝軟件。大量的高級(jí)程序設(shè)計(jì)語言已移植到Linux系統(tǒng)上,因而它是理想的應(yīng)用軟件開發(fā)平臺(tái),而且,在Linux系統(tǒng)下開發(fā)的應(yīng)用程序具有很好的可移植性。同時(shí),Linux還有許多獨(dú)到之處:(1)它的源代碼幾乎全部都是開放的。(2)它可以運(yùn)行在許多硬件平臺(tái)上。(3)它不僅可以運(yùn)行許多自由發(fā)布的應(yīng)用軟件,還可以運(yùn)行許多商品化的應(yīng)用軟件。(4)強(qiáng)大的網(wǎng)絡(luò)功能。Linux系統(tǒng)的另一特征是它能充分發(fā)揮硬件的功能,因而它比其他操作系統(tǒng)的運(yùn)行效率更高。因此,Linux將有廣泛的應(yīng)用前景。1.5.2UNIX、GNU與LinuxLinux是一種類UNIX系統(tǒng),二者有相當(dāng)?shù)臏Y源,同時(shí),Linux遵循GNU的GPL許可證,是自由軟件家族中的一員,因此,要了解Linux,就必須先了解他們?nèi)咧g的關(guān)系。1.Linux與UNIX系統(tǒng)Linux的源頭要追溯到最早的UNIX。UNIX系統(tǒng)正式發(fā)表于1974年,到1975年的第6版中,引入了多道技術(shù)。1980年,Bell實(shí)驗(yàn)室公布了VAX11/780系統(tǒng)平臺(tái)的32位操作系統(tǒng)UNIX32V。一個(gè)可以運(yùn)行UNIX程序的系統(tǒng)就是UNIX。經(jīng)過多年發(fā)展,UNIX從實(shí)驗(yàn)室走出來并成為了操作系統(tǒng)的主流。直到今天,UNIX系統(tǒng)以其穩(wěn)定、高效的性能在服務(wù)器高端市場(chǎng)中依然占有絕對(duì)優(yōu)勢(shì)。很多公司也開發(fā)了用于PC的UNIX。UNIX是一個(gè)簡(jiǎn)單卻非常優(yōu)秀的操作系統(tǒng)模型。Linux系統(tǒng)最初以UNIX為原型,以實(shí)現(xiàn)POSIX標(biāo)準(zhǔn)作為其目標(biāo),到2000年為止,Linux核心從0.01版發(fā)展為2.4版。Linux具有穩(wěn)定高效的處理性能,擁有穩(wěn)定龐大的用戶群體,得到眾多廠商有力的支持,成為操作系統(tǒng)發(fā)展的熱點(diǎn)。Linux在低端服務(wù)器市場(chǎng)上已經(jīng)對(duì)WindowsNT/2000造成了極大的壓力。2.自由軟件運(yùn)動(dòng)與LinuxLinux只是自由軟件家族中的一員,是其中最具影響的成員之一。在計(jì)算機(jī)工業(yè)發(fā)展的初期,軟件只是硬件的附屬品。但是,公司很快認(rèn)識(shí)到軟件的價(jià)值,對(duì)軟件實(shí)施了版權(quán)控制,并限制源代碼的發(fā)布。RichardStallman在其他人的協(xié)作下創(chuàng)作了通用公共許可證(GeneralPublicLicense,GPL)。GPL保證任何人有共享和修改自由軟件的自由,任何人有權(quán)取得、修改和重新發(fā)布自由軟件的源代碼,并且規(guī)定在不增加附加費(fèi)用的條件下得到源代碼。3.Linux的歷史Linux可以說完全是一個(gè)互聯(lián)網(wǎng)時(shí)代的產(chǎn)物,它是在互聯(lián)網(wǎng)上產(chǎn)生、發(fā)展和不斷壯大起來的。Linus在自己的PC上,利用Tanenbaum教授自行設(shè)計(jì)的微型UNIX操作系統(tǒng)MINIX為開發(fā)平臺(tái),開發(fā)了屬于他自己的第一個(gè)程序。Linus說剛開始的時(shí)候他根本沒有想到要編寫一個(gè)操作系統(tǒng)內(nèi)核。“于是我又不得不寫一個(gè)磁盤驅(qū)動(dòng)程序,然后是一個(gè)文件系統(tǒng)。而一旦當(dāng)你有了任務(wù)切換器、文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序之后,你當(dāng)然就擁有了一個(gè)UNIX”或者至少是它的一個(gè)內(nèi)核。Linux就以這樣一種極其古怪但也極其自然的方式問世了。Linus并沒有在MINIX新聞組中公布它。他只是在赫爾辛基技術(shù)大學(xué)的一臺(tái)FTP服務(wù)器上發(fā)了一則消息,說用戶可以下載Linux的公開版本。到1992年1月止,全世界大約只有100個(gè)左右的人在使用Linux。1993年,Linus的第一個(gè)“產(chǎn)品”版Linux1.0問世的時(shí)候,是按完全自由發(fā)行版權(quán)進(jìn)行發(fā)行的。Linux與GPL的結(jié)合,使許多軟件開發(fā)人員相信這是一個(gè)有前途的項(xiàng)目,開始參與內(nèi)核的開發(fā)工作,并將GNU項(xiàng)目的C庫(kù)、gcc、Emacs、bash等很快移植到Linux內(nèi)核上來。商業(yè)軟件公司的加盟也使大多數(shù)Linux的普通用戶吃了定心丸。Linux從一開始就主要是在一些軟件行業(yè)中的高手之間流行的,并且很快就在全球范圍內(nèi)集結(jié)了一大批職業(yè)的和業(yè)余的技術(shù)專家,形成了一個(gè)數(shù)量龐大而且非常熱心的支持者群體。他們能夠通過網(wǎng)絡(luò)很快地響應(yīng)使用者所遇到的任何問題。

1997年,Linux支持者群體在眾多的軟件公司中一舉勝出,榮獲了美國(guó)《InfoWorld》雜志的最佳技術(shù)支持獎(jiǎng),而這一獎(jiǎng)項(xiàng)原本只是為商業(yè)公司而設(shè)立的。Linux核心的版本發(fā)展情況見表1.1。該表摘自參考文獻(xiàn)[2],表中最后一項(xiàng),程序行數(shù)(LinesofCode,LOC)包含了Linux可應(yīng)用于如x86、PPC、SPARC等所有平臺(tái)的程序代碼。

表1.1Linux核心發(fā)展情況(截止1998年)年份

使用者數(shù)量

版本大?。↙OC)199110.0110k

19921k0.9640k199320k0.99100k1994100k1.0170k1995500k1.2250k

19961.5M2.0400k19973.5M2.1800k19987.5M2.1.1101.5M當(dāng)Linux走向成熟時(shí),一些人開始建立軟件包來簡(jiǎn)化新用戶安裝和使用Linux的方法。這些軟件包稱為L(zhǎng)inux發(fā)布或Linux發(fā)行版本。在早期眾多的Linux發(fā)行版本中,最有影響的要數(shù)Slackware發(fā)布。Linux文檔項(xiàng)目(LDP)是圍繞Slackware發(fā)布寫成的。目前,RedHat發(fā)行版本的安裝更容易,應(yīng)用軟件更多,已成為最流行的Linux發(fā)行版本,2000年秋天已經(jīng)發(fā)行了7.0版本;而Caldera則致力于Linux的商業(yè)應(yīng)用,它的發(fā)展速度也很快。中文化的Linux發(fā)行版本也有很多,國(guó)內(nèi)自主建立的如BluePointLinux、FlagLinux、XtermLinux以及美國(guó)的XLinux、TurboLinux等。每種發(fā)行版本都有各自的優(yōu)點(diǎn)和弱點(diǎn),但它們都提供相對(duì)完整的應(yīng)用軟件及幫助文檔,都使用相同的內(nèi)核和開發(fā)工具,大家都使用同一個(gè)名稱——Linux系統(tǒng)。1.6Linux的內(nèi)核特征Linux操作系統(tǒng)的核心穩(wěn)定而高效,以獨(dú)占的方式執(zhí)行最底層任務(wù),保證其他程序的正常運(yùn)行。它是整個(gè)系統(tǒng)的核心,具有獨(dú)特的性質(zhì)。本節(jié)試圖從操作系統(tǒng)接口、功能及內(nèi)核結(jié)構(gòu)等幾個(gè)方面來展示Linux核心的特征。1.6.1接口特色按照POSIX標(biāo)準(zhǔn),一個(gè)可以運(yùn)行UNIX程序的系統(tǒng)就是UNIX。Linux系統(tǒng)提供和一般UNIX系統(tǒng)相同的標(biāo)準(zhǔn)界面,包括程序級(jí)的和用戶級(jí)的,因此也是一個(gè)UNIX系統(tǒng),一般,大家稱之為類UNIX系統(tǒng),以區(qū)別于其他傳統(tǒng)意義上的UNIX系統(tǒng)。在程序級(jí),Linux系統(tǒng)提供標(biāo)準(zhǔn)的UNIX函數(shù)庫(kù),一個(gè)在Linux下開發(fā)的應(yīng)用程序,可以幾乎不經(jīng)過任何改動(dòng)就可以在其他UNIX系統(tǒng)下編譯執(zhí)行,完成同樣的功能。Linux系統(tǒng)對(duì)用戶同時(shí)提供圖形和文本用戶界面,文本界面是shell接口,圖形界面是XWindow系統(tǒng)。UNIX下的基本命令,在Linux下功能和使用方式都完全相同。而最早在UNIX平臺(tái)開發(fā)的圖形用戶界面XWindow系統(tǒng),在Linux系統(tǒng)下運(yùn)行良好并可以展示與其他版本UNIX系統(tǒng)下相同甚至更好的效果。更為可喜的是,在XWindow系統(tǒng)基礎(chǔ)上,自由軟件開發(fā)者們?yōu)長(zhǎng)inux開發(fā)了不少種類的桌面系統(tǒng),在這樣的環(huán)境下,用戶幾乎可以不再需要傳統(tǒng)的文本用戶界面,所有的操作都可以通過鼠標(biāo)點(diǎn)擊來完成。這樣的系統(tǒng)有方便快捷的KDE(KDesktopEnvironment),基于CORBA組件技術(shù),具有圖形功能的GNOME(GNU’sNetworkObjectModelEnvironment)等等,它們都遵循GPL,都處在高速發(fā)展階段,相信他們的功能會(huì)更加完善。桌面系統(tǒng)的發(fā)展,基于桌面系統(tǒng)的辦公、家用軟件的發(fā)展,將會(huì)使Linux操作系統(tǒng)的用戶界面更加友好,Linux系統(tǒng)針對(duì)辦公用戶及普通家庭的普及工作也將具有更明顯的競(jìng)爭(zhēng)力和更美好的前景。1.6.2功能特色Linux核心最早運(yùn)行在Intel80386系列PC機(jī)上,現(xiàn)在,它也可以運(yùn)行在Apple系列、DECAlpha系列、MIPS和Motorola68000系列的計(jì)算機(jī)上,同時(shí),一些改進(jìn)的嵌入式Linux核心還可以運(yùn)行于手機(jī)、家電等設(shè)備上。從Linux2.0開始,它不僅支持單處理器的機(jī)器,還能支持對(duì)稱多處理器(SMP)的機(jī)器,實(shí)現(xiàn)真正的多任務(wù)工作。Linux系統(tǒng)可以支持多種硬件設(shè)備。Linux系統(tǒng)下的驅(qū)動(dòng)程序開發(fā)和Windows系統(tǒng)相比要簡(jiǎn)單得多。最初的硬件設(shè)備驅(qū)動(dòng)程序,都是由自由軟件開發(fā)者們提供的,隨著Linux系統(tǒng)的普及,越來越多的硬件

廠商也開始提供設(shè)備驅(qū)動(dòng),這對(duì)于廣大使用者無疑是又一個(gè)好消息。Linux采用多級(jí)分頁的存儲(chǔ)管理模式,具體的技術(shù)特征將在后面介紹。Linux自身使用的專用的文件系統(tǒng)為Ext2,可以提供方便有效的文件共享及保護(hù)機(jī)制。同時(shí),它可以通過虛擬文件系統(tǒng)的技術(shù),支持包括微軟系列操作系統(tǒng)所使用的Fat16、Fat32和NTFS等文件系統(tǒng)在內(nèi)的幾十種現(xiàn)有的文件系統(tǒng)。Linux系統(tǒng)具有內(nèi)置的TCP/IP協(xié)議棧,可以提供各種高效的網(wǎng)絡(luò)功能,包括基本的進(jìn)程間通訊、網(wǎng)絡(luò)文件服務(wù)等。1.6.3結(jié)構(gòu)特征Linux內(nèi)核基本采用模塊結(jié)構(gòu),單內(nèi)核模式,這使得系統(tǒng)具有很高的運(yùn)行效率,但系統(tǒng)的可擴(kuò)展性及可移植性受到一定的影響。為了解決這個(gè)問題,Linux使用了附加模塊技術(shù)。利用模塊技術(shù),可以方便地在內(nèi)核中添加新的組件或卸載不再需要的內(nèi)核組件,而且這種裝載和卸載可以動(dòng)態(tài)進(jìn)行。內(nèi)核模塊的引入也帶來了對(duì)系統(tǒng)性能、內(nèi)存利用和系統(tǒng)穩(wěn)定性的一些影響,可動(dòng)態(tài)裝卸的模塊需要系統(tǒng)增加額外的資源來記錄、管理,而裝入的內(nèi)核模塊和其他內(nèi)核部分一樣,具有相同的訪問權(quán)限,差的內(nèi)核模塊會(huì)導(dǎo)致系統(tǒng)不穩(wěn)定甚至崩潰,一些惡意的內(nèi)核模塊可能對(duì)系統(tǒng)安全造成極大的威脅??偟膩碇v,Linux內(nèi)核基本采用模塊式結(jié)構(gòu)構(gòu)造,同時(shí)加入動(dòng)態(tài)的模塊技術(shù),在追求系統(tǒng)整體效率的同時(shí),實(shí)現(xiàn)了內(nèi)核的動(dòng)態(tài)可伸縮性。這樣的結(jié)構(gòu),給系統(tǒng)移植帶來一定的負(fù)面影響,但是,在廣大自由軟件愛好者們不懈的努力下,Linux系統(tǒng)仍然不斷地推出支持新硬件平臺(tái)的版本,Linux可以運(yùn)行的硬件平臺(tái)超過任何一種商業(yè)系統(tǒng),具有較好的平臺(tái)適應(yīng)性。1.7Linux的發(fā)展及展望1.7.1開發(fā)模式自由軟件的開發(fā)模式不同于以往任何一種軟件開發(fā)模式。軟件工程的發(fā)展,實(shí)現(xiàn)了軟件的工程化生產(chǎn)——在經(jīng)過詳細(xì)的需求分析之后,進(jìn)入設(shè)計(jì)階段,然后是實(shí)現(xiàn)、測(cè)試等等,整個(gè)過程有嚴(yán)格的工作流程、時(shí)間限制和質(zhì)量控制,程序員在整個(gè)生產(chǎn)過程中的作用,相當(dāng)于傳統(tǒng)工廠里流水線上的工人,只是按照“圖紙”完成某個(gè)零部件加工而已,這樣的開發(fā)模式強(qiáng)調(diào)的是統(tǒng)一規(guī)劃,集中管理。一大批分布于世界各地的軟件愛好者,以互聯(lián)網(wǎng)為紐帶,通過BBS、新聞組及電子郵件等現(xiàn)代通訊方式,同時(shí)參與一個(gè)軟件開發(fā)項(xiàng)目。一個(gè)初步工作的軟件雛形首先發(fā)布出來,然后大家同時(shí)開始工作,分別結(jié)合自己的實(shí)際經(jīng)驗(yàn)和需要,尋找軟件中的漏洞,提出改進(jìn)意見,發(fā)布在互聯(lián)網(wǎng)上,很快,另外的人也發(fā)現(xiàn)了漏洞,接著,有人又提出了改進(jìn)方案,給出了補(bǔ)丁,經(jīng)過這些人分頭修整,這個(gè)軟件好像滾雪球一樣,以很快的速度不斷完善。在這樣的開發(fā)模式中,程序員是獨(dú)立的實(shí)體,他們大多是用業(yè)余時(shí)間來為自由軟件服務(wù)的,沒有工作任務(wù)的壓力,他們創(chuàng)作性工作帶來的成就感是他們最大的動(dòng)力。這樣的開發(fā)模式稱為“巴扎”(Bazaar)模式自由軟件的出現(xiàn),改變了傳統(tǒng)的以公司為主體的封閉的軟件開發(fā)模式。采用了開放和協(xié)作的開發(fā)模式,無償提供源代碼,容許任何人取得、修改和重新發(fā)布自由軟件的源代碼。這種開發(fā)模式激發(fā)了世界各地的軟件開發(fā)人員的積極性和創(chuàng)造熱情,大量軟件開發(fā)人員投入到了自由軟件的開發(fā)中。軟件開發(fā)人員的集體智慧得到充分發(fā)揮,大大減少了不必要的重復(fù)勞動(dòng),并使自由軟件的漏洞能得到及時(shí)發(fā)現(xiàn)和克服。任何一家公司都不可能投入如此強(qiáng)大的人力去開發(fā)和檢驗(yàn)商品化軟件。這種開發(fā)模式使自由軟件具有強(qiáng)大的生命力。1.7.2內(nèi)核版本為了確保看似無序的市集開發(fā)過程能夠有序地進(jìn)行,自由軟件一般都必須采取強(qiáng)有力的版本控制措施。Linux內(nèi)核采用的是雙樹系統(tǒng)。一棵樹是穩(wěn)定樹,主要用于發(fā)行;另一棵樹是非穩(wěn)定樹或者開發(fā)樹,用于產(chǎn)品開發(fā)、改進(jìn)。一些新特性、實(shí)驗(yàn)性改進(jìn)等首先在開發(fā)樹中進(jìn)行。如果在開發(fā)樹中所做的改進(jìn)也可以應(yīng)用于穩(wěn)定樹,那么在開發(fā)樹中經(jīng)過測(cè)試以后,就在穩(wěn)定樹中進(jìn)行相同的改進(jìn)。按照Linus的觀點(diǎn),一旦開發(fā)樹經(jīng)過了足夠的發(fā)展,開發(fā)樹就會(huì)成為新的穩(wěn)定樹,如此周而復(fù)始地進(jìn)行下去。源代碼版本序號(hào)的形式為x.y.z。對(duì)于穩(wěn)定樹來說,y是偶數(shù);對(duì)于開發(fā)樹來說,y是比相應(yīng)穩(wěn)定樹大一的奇數(shù)。截止到2000年10月,最新的穩(wěn)定內(nèi)核版本號(hào)是2.4.test9。這種開發(fā)會(huì)比常規(guī)慣例要快,因?yàn)槊恳话姹舅母淖儽纫郧案倭?,?nèi)核開發(fā)人員只需花很短的時(shí)間就能夠完成一個(gè)實(shí)驗(yàn)開發(fā)周期。當(dāng)今,Linus率領(lǐng)分布在世界各地的Linux內(nèi)核開發(fā)隊(duì)伍正在完善他們的作品。Linux內(nèi)核2.x版本充分顯示了Linux開發(fā)隊(duì)伍的非凡的創(chuàng)造力和市集開發(fā)模式的價(jià)值。Linux核心開發(fā)者的名單記錄在文件/usr/src/linux/CREDITS中。事實(shí)上,UNIX開始發(fā)展時(shí),也采用了類似的開發(fā)模式。這種開發(fā)模式使得UNIX的安全漏洞比其他操作系統(tǒng)解決得更徹底。從充分發(fā)揮開發(fā)人員的集體智慧這一點(diǎn)看,采用這種開發(fā)模式無疑是一大進(jìn)步。1.7.3國(guó)內(nèi)應(yīng)用狀況隨著Linux核心的不斷成熟,各種性能穩(wěn)定、安裝方便、支持多語種的發(fā)行版本被廣泛地使用。Linux得到廣大硬件、整機(jī)廠商和應(yīng)用程序廠商的大力支持,這一切,都使得Linux這個(gè)年輕的系統(tǒng)充滿了希望。由于多種原因,Linux在國(guó)內(nèi)的推廣比國(guó)外晚了幾年,近年來有更多的軟件愛好者開始了Linux的學(xué)習(xí)、應(yīng)用和研究開發(fā),同時(shí),許多大學(xué)還把它作為操作系統(tǒng)課程實(shí)驗(yàn)的內(nèi)容,這些都為L(zhǎng)inux在中國(guó)的推廣使用奠定了基礎(chǔ)。Linux的使用開始于國(guó)內(nèi)的高校和科研單位,最初大家在各地的電子公告牌上研論問題,隨著討論的深入,他們開始成立各種民間組織,建立自己的主服務(wù)器。愛好者們?cè)谶@些地方,下載軟件,自由地討論Linux方面的問題,尋找志同道合者切磋,方便而高效地交流信息。這為L(zhǎng)inux的進(jìn)一步推廣和本地化創(chuàng)造了良好的環(huán)境。目前國(guó)內(nèi)較有影響的推廣項(xiàng)目是1997年6月17日在國(guó)家經(jīng)濟(jì)信息中心網(wǎng)上建立的自由軟件協(xié)會(huì)站點(diǎn)(圖1.3),其網(wǎng)址是:/freesoft.html,這既是一個(gè)大型自由軟件庫(kù),也是一個(gè)自由軟件應(yīng)用的示范項(xiàng)目。整個(gè)系統(tǒng)建立在Linux基礎(chǔ)上,提供WWW、FTP、DNS、News和郵件服務(wù),從開通到2000年12月,訪問人數(shù)已超過70萬人次。同時(shí),國(guó)內(nèi)也出現(xiàn)了多家Linux發(fā)行商,推出多種漢化的Linux版本,如BluePoint、XtermLinux、FlagLinux等等,同時(shí)也提供系統(tǒng)集成、技術(shù)支持等服務(wù)??偟膩碇v,國(guó)內(nèi)Linux發(fā)展還處于一個(gè)比較低的層次,初級(jí)入門用戶很多,實(shí)際應(yīng)用用戶少、而從事自由軟件開發(fā)的人就更少了。1.7.4發(fā)展方向Linux內(nèi)核本身的發(fā)展方向主要是硬件支持、嵌入系統(tǒng)和分布式系統(tǒng)這三個(gè)方面。提供更多高性能的硬件驅(qū)動(dòng)程序,讓更新、更好的硬件迅速在Linux系統(tǒng)下工作,是Linux普及和廣泛應(yīng)用的基礎(chǔ)。隨著以計(jì)算技術(shù)、通信技術(shù)為主體的信息技術(shù)的快速發(fā)展和Internet的廣泛應(yīng)用,嵌入式軟件成為軟件業(yè)的新熱點(diǎn)。面對(duì)如此巨大的電子產(chǎn)品市場(chǎng)和潛在用戶群,嵌入式軟件的應(yīng)用前景十分廣闊,而Linux系統(tǒng)本身的開放特性以及穩(wěn)定的性能,都比較適合作為開發(fā)嵌入系統(tǒng)的原型,國(guó)內(nèi)外都有這樣的研究項(xiàng)目,也有相當(dāng)成功的事例。分布系統(tǒng)是當(dāng)前操作系統(tǒng)發(fā)展的另一個(gè)重要領(lǐng)域。以Linux內(nèi)核為基礎(chǔ),按照自由軟件開發(fā)模式,發(fā)展高性能的自由分布操作系統(tǒng),是操作系統(tǒng)發(fā)展的必然趨勢(shì)。

此外,Linux上的桌面系統(tǒng)、應(yīng)用軟件,尤其是軟件開發(fā)工具也是Linux發(fā)展的重要方面。桌面系統(tǒng)直接關(guān)系到Linux界面的友好性,易用性。應(yīng)用軟件關(guān)系到系統(tǒng)的可用性,而在自由軟件開發(fā)模式當(dāng)中引入軟件工程新技術(shù)和成功經(jīng)驗(yàn),有助于快速開發(fā)Linux平臺(tái)上的應(yīng)用軟件。1.8小結(jié)本章首先介紹了操作系統(tǒng)的一般概念及發(fā)展歷史,接著介紹了操作系統(tǒng)的外部接口、管理功能及其內(nèi)部結(jié)構(gòu),特別強(qiáng)調(diào)了計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)的概念。以此為基礎(chǔ),詳細(xì)剖析了Linux系統(tǒng)的接口、功能和結(jié)構(gòu),包括Linux的發(fā)展及其開發(fā)模式。操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的基本系統(tǒng)軟件,在整個(gè)計(jì)算機(jī)系統(tǒng)中處于核心地位,它是這樣一些程序模塊的集合——它們管理和控制計(jì)算機(jī)系統(tǒng)中的硬件和軟件資源,合理地組織計(jì)算機(jī)工作流程,以便有效地利用這些資源為用戶提供一個(gè)功能強(qiáng)大、使用方便和可擴(kuò)展的工作環(huán)境,從而在計(jì)算機(jī)與用戶之間起到接口作用。Linux是在日益普及的Internet上迅速形成和不斷完善的操作系統(tǒng)。Linux操作系統(tǒng)高效、穩(wěn)定,適應(yīng)多種硬件平臺(tái),支持多種文件系統(tǒng),它遵循GPL協(xié)議,整個(gè)系統(tǒng)的源代碼可以自由獲取,并且在GPL許可的范圍內(nèi)自由修改、傳播,這就為學(xué)習(xí)、應(yīng)用、開發(fā)操作系統(tǒng)及其他軟件提供了良好的基礎(chǔ)和較高的起點(diǎn)。學(xué)習(xí)操作系統(tǒng)一般概念和原理,對(duì)于理解、使用和管理Linux系統(tǒng),開發(fā)應(yīng)用軟件以及系統(tǒng)軟件,都具有相當(dāng)重要的意義。習(xí)題1-1操作系統(tǒng)的基本功能有哪些?1-2從技術(shù)的角度講,Linux是一個(gè)什么樣的操作系統(tǒng)?你認(rèn)為它有哪些不足?如何改進(jìn)?1-3閱讀通用許可證協(xié)議和參考文獻(xiàn)[1]、[2],深入了解自由軟件的“巴扎”開發(fā)模式,你愿意讓大家共享你的軟件嗎?為什么?你認(rèn)為“巴扎”模式有哪些優(yōu)點(diǎn)?哪些缺點(diǎn)?缺點(diǎn)如何改進(jìn)?1-4訪問Linux核心代碼站點(diǎn)

,了解Linux核心發(fā)展的最新進(jìn)展及新增功能。1-5訪問Internet,了解一個(gè)國(guó)內(nèi)的自由軟件項(xiàng)目,向大家介紹這個(gè)項(xiàng)目的管理及進(jìn)展情況,給出你對(duì)該項(xiàng)目的評(píng)價(jià)及改進(jìn)意見。第2章處理機(jī)管理2.1作業(yè)2.2進(jìn)程2.3線程2.4小結(jié)習(xí)題提高處理機(jī)(CPU)的使用率,使它盡可能處于工作狀態(tài),是操作系統(tǒng)管理功能的主要目標(biāo)之一。在Linux系統(tǒng)中,提高處理機(jī)使用率的技術(shù)措施主要是多道和分時(shí),處理機(jī)在進(jìn)程之間切換,按照一定的規(guī)則輪流執(zhí)行每個(gè)進(jìn)程。對(duì)于單個(gè)處理機(jī)的系統(tǒng),這些進(jìn)程宏觀上看似并行執(zhí)行,而微觀上來看仍然是串行執(zhí)行的,這種執(zhí)行方式被稱為并發(fā)執(zhí)行。操作系統(tǒng)通過并發(fā)控制機(jī)制,對(duì)處理機(jī)進(jìn)行分配、調(diào)度,在保證每個(gè)進(jìn)程都得到公平合理執(zhí)行的同時(shí),使系統(tǒng)中的各種資源得到充分的使用。本章主要圍繞處理機(jī)管理展開,著重介紹進(jìn)程的概念,同時(shí)也包括相關(guān)的兩個(gè)基本概念:作業(yè)和線程。2.1作業(yè)作業(yè)是用戶向計(jì)算機(jī)系統(tǒng)提交一項(xiàng)工作的基本單位,是用戶在一次事務(wù)處理或計(jì)算過程中要求計(jì)算機(jī)所做工作的總和。作業(yè)和程序是兩個(gè)相互聯(lián)系而又不同的概念。如果一次業(yè)務(wù)處理可以由某一個(gè)程序完成,就是說這個(gè)業(yè)務(wù)處理只要提交這一個(gè)程序就夠了,這種情況下,這個(gè)程序就是一個(gè)作業(yè)。通常,完成一次業(yè)務(wù)需要由多個(gè)程序協(xié)同完成,這時(shí),多個(gè)程序、這些程序需要的數(shù)據(jù)以及必要的作業(yè)說明一起構(gòu)成一個(gè)作業(yè)。系統(tǒng)通過作業(yè)說明書或者作業(yè)控制語句(JCL)控制程序和相應(yīng)的數(shù)據(jù)執(zhí)行,完成整個(gè)業(yè)務(wù)處理。按照對(duì)作業(yè)的處理方式,可以分為聯(lián)機(jī)、批處理等作業(yè)。Linux系統(tǒng)中的shell提供了操作系統(tǒng)和用戶之間的聯(lián)機(jī)命令接口。Linux的shell同時(shí)提供了程序級(jí)接口。用戶通過提交一個(gè)命令或一個(gè)命令序列以批處理方式執(zhí)行特定的操作(詳見本書第2部分)。在Linux分時(shí)批處理系統(tǒng)中,也可以根據(jù)對(duì)作業(yè)執(zhí)行時(shí)的響應(yīng)特征分為前臺(tái)作業(yè)和后臺(tái)作業(yè)。在多用戶系統(tǒng)中,多個(gè)用戶、不同類型的作業(yè)可能同時(shí)請(qǐng)求執(zhí)行,控制和管理這些作業(yè),協(xié)調(diào)它們之間的關(guān)系,就是作業(yè)調(diào)度,作業(yè)調(diào)度是處理機(jī)調(diào)度的一部分。2.2進(jìn)程計(jì)算機(jī)內(nèi)存中同時(shí)存放多個(gè)相互獨(dú)立的已經(jīng)開始運(yùn)行的程序?qū)嶓w,大家按照某種規(guī)則輪流使用處理器,這是現(xiàn)代多道操作系統(tǒng)實(shí)現(xiàn)資源共享,提高系統(tǒng)資源利用率的主要方式。描述這些程序?qū)嶓w的概念就是進(jìn)程。在多道情況下,每個(gè)進(jìn)程獨(dú)立地?fù)碛懈鞣N必要的資源,占有處理機(jī),獨(dú)立地運(yùn)行。在多道系統(tǒng)中,同時(shí)存在多個(gè)進(jìn)程,所以當(dāng)某個(gè)進(jìn)程進(jìn)入等待狀態(tài)時(shí),操作系統(tǒng)將把處理機(jī)控制權(quán)拿過來并交給其他可以運(yùn)行的進(jìn)程。進(jìn)程之間存在著相互制約、相互依賴的約束關(guān)系。一種最糟糕的情況是所有進(jìn)程都擁有部分資源,同時(shí)在等待其他進(jìn)程擁有的資源,這樣,大家都無法運(yùn)行,進(jìn)入一種永久等待的狀態(tài),這種情況稱為死鎖,死鎖是對(duì)系統(tǒng)資源極大的浪費(fèi),必須設(shè)法避免。本節(jié)著重討論現(xiàn)代多道操作系統(tǒng)中的核心概念——進(jìn)程,這是理解操作系統(tǒng)工作原理的基礎(chǔ)和關(guān)鍵。首先介紹單個(gè)進(jìn)程的狀態(tài)、狀態(tài)轉(zhuǎn)換的條件和控制原語、進(jìn)程在系統(tǒng)中的靜態(tài)描述等,接著介紹多個(gè)進(jìn)程之間的約束關(guān)系,由此引出進(jìn)程間通信的概念,通信是協(xié)調(diào)、解決進(jìn)程間約束關(guān)系的惟一手段,這種約束關(guān)系處理不當(dāng)造成的最嚴(yán)重的后果就是死鎖。2.2.1進(jìn)程的概念進(jìn)程(process)的概念最早出現(xiàn)在60年代中期,用于多道系統(tǒng),在Linux系統(tǒng)中,進(jìn)程也稱為任務(wù)(task)。簡(jiǎn)單地講,進(jìn)程就是正在運(yùn)行的程序,更為嚴(yán)謹(jǐn)?shù)谋磉_(dá)是,進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。進(jìn)程的概念對(duì)于理解操作系統(tǒng)有決定性的意義,而真正理解進(jìn)程,必須了解它的基本性質(zhì)。進(jìn)程是操作系統(tǒng)分配資源和進(jìn)行調(diào)度的獨(dú)立單位,具有獨(dú)立性。同時(shí),具有動(dòng)態(tài)性。多道系統(tǒng)中同時(shí)存在多個(gè)進(jìn)程,這些進(jìn)程擁有各自的資源,各自獨(dú)立地執(zhí)行,對(duì)于單處理機(jī)系統(tǒng),進(jìn)程宏觀上同時(shí)運(yùn)行而微觀上是依次執(zhí)行,這種情況稱為并發(fā)執(zhí)行。1.進(jìn)程和程序進(jìn)程和程序是一對(duì)相互聯(lián)系的概念。程序是指令的有序集合,是一個(gè)靜態(tài)的概念,描述完成某個(gè)功能的一個(gè)具體操作過程,而進(jìn)程是程序針對(duì)某一組數(shù)據(jù)的一次執(zhí)行過程,更強(qiáng)調(diào)動(dòng)態(tài)特征。一個(gè)完整的進(jìn)程,包括程序、執(zhí)行程序所需要的數(shù)據(jù),同時(shí)還必須包括記錄進(jìn)程狀態(tài)的數(shù)據(jù)資料。在多道分時(shí)操作系統(tǒng)中,按照時(shí)間片輪流在各個(gè)進(jìn)程間切換。對(duì)于單處理器系統(tǒng),每一個(gè)時(shí)刻只能有一個(gè)進(jìn)程在執(zhí)行,當(dāng)分配給該進(jìn)程的時(shí)間片用完之后,不管該進(jìn)程運(yùn)行到什么程度,都必須立即停止,然后讓出處理器資源,下一個(gè)進(jìn)程進(jìn)入執(zhí)行狀態(tài)。讓出處理器的進(jìn)程必須記錄好正在運(yùn)行的狀態(tài),包括寄存器、堆棧等各種信息,這些信息保證當(dāng)處理器下次切換到這個(gè)進(jìn)程的時(shí)候,進(jìn)程能夠正確地從上次執(zhí)行到的位置繼續(xù)往下執(zhí)行。一個(gè)程序在處理相同或不同的操作數(shù)據(jù)時(shí)可以同時(shí)對(duì)應(yīng)于多個(gè)進(jìn)程。一個(gè)進(jìn)程也可以包含多個(gè)程序,某個(gè)程序在運(yùn)行過程中,可能同時(shí)會(huì)調(diào)用到多個(gè)其他程序,這些具有調(diào)用關(guān)系的多個(gè)程序共同構(gòu)成一次完整的運(yùn)行活動(dòng),即一個(gè)完整的進(jìn)程。舉一個(gè)直觀的例子。我們?cè)贚inux系統(tǒng)下使用編輯器vi進(jìn)行編輯,同時(shí)打開多個(gè)窗口,編輯多個(gè)不同名稱的文件,vi編輯器是一個(gè)可執(zhí)行程序,不同的文件就是不同的操作數(shù)據(jù),而對(duì)應(yīng)于這些文件同時(shí)打開的每一個(gè)編輯窗口就對(duì)應(yīng)著一個(gè)進(jìn)程,每一個(gè)進(jìn)程都處于不同的狀態(tài)。如果說程序是提供計(jì)算機(jī)操作的一組工作流程的話,進(jìn)程就是具體的工作過程,按照同樣的工作流程,針對(duì)不同的原料,可以同時(shí)開始多個(gè)工作過程,得到多種不同的成品。這種工作流程和工作過程的關(guān)系就可以類比為程序和進(jìn)程的關(guān)系。2.進(jìn)程和作業(yè)作業(yè)是用戶向計(jì)算機(jī)系統(tǒng)提交一項(xiàng)工作的基本單位,是用戶在一次事務(wù)處理或計(jì)算過程中要求計(jì)算機(jī)所做工作的總和。進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng),是操作系統(tǒng)分配資源和進(jìn)行調(diào)度的基本單位。作業(yè)是描述用戶向系統(tǒng)提交工作任務(wù)的實(shí)體單位,而進(jìn)程是系統(tǒng)完成工作任務(wù)時(shí)程序執(zhí)行的實(shí)體單位。從這個(gè)角度講,他們處于不同的層次,作業(yè)描述用戶和操作系統(tǒng)之間的任務(wù)委托關(guān)系,而進(jìn)程描述操作系統(tǒng)內(nèi)部任務(wù)的具體執(zhí)行過程。一個(gè)用戶的任務(wù),即作業(yè),由用戶提交給系統(tǒng),必須以進(jìn)程的形式具體完成。對(duì)于批處理系統(tǒng),通常,作業(yè)放在外存中專門的作業(yè)隊(duì)列中等待進(jìn)入內(nèi)存執(zhí)行,要經(jīng)過一次宏觀調(diào)度,由外存進(jìn)入內(nèi)存,以進(jìn)程的形式運(yùn)行。而對(duì)于UNIX/Linux這樣的分時(shí)系統(tǒng),沒有宏觀調(diào)度,作業(yè)不經(jīng)過調(diào)度,直接進(jìn)入內(nèi)存,以進(jìn)程的形式開始運(yùn)行。任何一個(gè)進(jìn)程,都存在于內(nèi)存中,并且是已經(jīng)開始運(yùn)行的動(dòng)態(tài)實(shí)體。2.2.2進(jìn)程描述我們知道,進(jìn)程是一個(gè)動(dòng)態(tài)的概念,描述程序的一次運(yùn)行活動(dòng)。它存在于系統(tǒng)的內(nèi)存中,是操作系統(tǒng)可感知、可控制的動(dòng)態(tài)實(shí)體,是系統(tǒng)分配各種資源、進(jìn)行調(diào)度的基本單位。1.進(jìn)程控制塊現(xiàn)在我們來討論進(jìn)程在內(nèi)存中的靜態(tài)存在方式。在多道系統(tǒng)中,處理機(jī)在多個(gè)進(jìn)程之間來回切換,每個(gè)進(jìn)程都會(huì)在暫停、運(yùn)行這兩種狀態(tài)之間來回轉(zhuǎn)換。當(dāng)一個(gè)進(jìn)程在處理機(jī)切換過來重新進(jìn)入運(yùn)行狀態(tài)時(shí),它必須嚴(yán)格精確地接著上次運(yùn)行的位置繼續(xù)進(jìn)行,進(jìn)程的靜態(tài)描述可以保持切換現(xiàn)場(chǎng),確保準(zhǔn)確銜接,保證進(jìn)程調(diào)度的實(shí)現(xiàn),順利完成程序所規(guī)定任務(wù)。進(jìn)程切換現(xiàn)場(chǎng)稱為進(jìn)程上下文(context),包含了一個(gè)進(jìn)程所具有的全部信息,一般包括:進(jìn)程控制塊(ProcessControlBlock,PCB)、有關(guān)程序段和相應(yīng)的數(shù)據(jù)集,具體組成見圖2.1。程序段是某個(gè)進(jìn)程執(zhí)行的相關(guān)指令集合,和靜態(tài)的程序段有明確的對(duì)應(yīng)關(guān)系,相應(yīng)數(shù)據(jù)集是這個(gè)程序段正在操作的那部分?jǐn)?shù)據(jù),PCB是記錄進(jìn)程各種狀態(tài)的數(shù)據(jù)體,PCB是操作系統(tǒng)管理感知、控制進(jìn)程的數(shù)據(jù)實(shí)體,通過它,就可以找到進(jìn)程的程序段和數(shù)據(jù)集,系統(tǒng)正是通過PCB來控制進(jìn)程的。一般來講,PCB記錄著進(jìn)程的所有資料,是全部或部分常駐內(nèi)存的,PCB記錄著程序段和數(shù)據(jù)集的地址指針,通過這些指針,就可以得到具體的指令和數(shù)據(jù)。PCB記錄了進(jìn)程的全部控制信息,一般較龐大而復(fù)雜,它可以按照功能大概分成四個(gè)組成部分:進(jìn)程描述信息、進(jìn)程控制信息、進(jìn)程相關(guān)的資源信息和CPU現(xiàn)場(chǎng)保護(hù)結(jié)構(gòu)(如圖2.1)。圖2.1進(jìn)程描述數(shù)據(jù)關(guān)系示意圖(進(jìn)程上下文)2.Linux的PCBLinux系統(tǒng)的進(jìn)程控制塊PCB用一個(gè)稱為task-struct的結(jié)構(gòu)體來描述。(1)進(jìn)程描述信息通過進(jìn)程描述信息,Linux系統(tǒng)可以惟一地確定某一個(gè)進(jìn)程的基本情況,可以了解該進(jìn)程所屬的用戶及用戶組等信息,同時(shí)還能確定這個(gè)進(jìn)程與所有其他進(jìn)程之間的關(guān)系。這些描述信息包括:進(jìn)程號(hào)、用戶和組標(biāo)識(shí)以及描述進(jìn)程家族關(guān)系的連接信息。①進(jìn)程號(hào)(pid,processidentifier)Linux系統(tǒng)為每一個(gè)進(jìn)程分配一個(gè)標(biāo)識(shí)號(hào),通過這個(gè)標(biāo)識(shí)號(hào)識(shí)別、控制、調(diào)度這個(gè)進(jìn)程,別的進(jìn)程也通過這個(gè)標(biāo)識(shí)號(hào)來識(shí)別這個(gè)進(jìn)程并與之通信,用戶也可以使用操作命令或系統(tǒng)調(diào)用通過標(biāo)識(shí)號(hào)來控制該進(jìn)程。②用戶和組標(biāo)識(shí)(userandgroupidentifier)Linux系統(tǒng)中有四類不同的用戶和組標(biāo)識(shí),主要用來控制進(jìn)程對(duì)系統(tǒng)文件的訪問權(quán)限,實(shí)現(xiàn)系統(tǒng)資源的安全訪問。

Linux使用組將文件和目錄的訪問特權(quán)授予一組用戶,一個(gè)進(jìn)程可以同時(shí)屬于多個(gè)組,這些組都被放在進(jìn)程的task-struct中的group數(shù)組中。③連接信息(Links)Linux系統(tǒng)中的進(jìn)程之間形成樹狀的家族關(guān)系,連接信息記錄某個(gè)進(jìn)程的父進(jìn)程、兄弟進(jìn)程(具有相同父進(jìn)程的進(jìn)程)以及子進(jìn)程的信息,描述一個(gè)進(jìn)程在整個(gè)家族系統(tǒng)中的具體位置。(2)進(jìn)程控制信息進(jìn)程控制信息記錄了進(jìn)程的當(dāng)前狀態(tài)、調(diào)度信息、記時(shí)和時(shí)間信息以及進(jìn)程間通信信息,是系統(tǒng)確定進(jìn)程的狀態(tài)、了解進(jìn)程之間的關(guān)系、進(jìn)行進(jìn)程調(diào)度的主要依據(jù)。①進(jìn)程當(dāng)前狀態(tài)進(jìn)程的生命周期中,總是不停地在各種狀態(tài)之間轉(zhuǎn)換,有關(guān)進(jìn)程的狀態(tài)及轉(zhuǎn)換規(guī)則,在下一小節(jié)討論。②調(diào)度信息系統(tǒng)的調(diào)度程序利用這部分信息決定哪一個(gè)進(jìn)程應(yīng)該運(yùn)行,包括優(yōu)先級(jí)、實(shí)時(shí)優(yōu)先級(jí)、計(jì)數(shù)器和調(diào)度策略。③記時(shí)信息包括時(shí)間和定時(shí)器,給出進(jìn)程占有和利用CPU的情況,是調(diào)度的依據(jù),也是進(jìn)行統(tǒng)計(jì)、分析以及記費(fèi)的依據(jù)。④通信信息多個(gè)進(jìn)程之間通信的各種信息也記錄在PCB中。Linux支持典型的UNIX進(jìn)程間通信機(jī)制——信號(hào)、管道,也支持SystemⅤ通信機(jī)制——共享內(nèi)存、信號(hào)量和消息隊(duì)列。(3)進(jìn)程資源信息Linux的PCB中包含大量的系統(tǒng)資源信息,這些信息記錄了與該進(jìn)程有關(guān)的存儲(chǔ)器的各種地址和資料、文件系統(tǒng)以及打開文件的信息等等。通過這些資料,進(jìn)程就可以得到運(yùn)行需要的相關(guān)程序段以及必要的數(shù)據(jù)。(4)CPU現(xiàn)場(chǎng)信息進(jìn)程的靜態(tài)描述必須保證一個(gè)進(jìn)程在獲得處理機(jī)并重新進(jìn)入運(yùn)行狀態(tài)時(shí),能夠精確地接著上次運(yùn)行的位置繼續(xù)進(jìn)行。相關(guān)程序段和數(shù)據(jù)集以及處理機(jī)現(xiàn)場(chǎng)(或處理機(jī)狀態(tài))都必須保存。處理機(jī)(CPU)現(xiàn)場(chǎng)信息一般包括處理機(jī)的內(nèi)部寄存器和堆棧等基本數(shù)據(jù)。task-struct是Linux系統(tǒng)的進(jìn)程控制塊(PCB),通過對(duì)PCB的操作,系統(tǒng)為進(jìn)程分配資源并進(jìn)行調(diào)度,最終完成進(jìn)程的創(chuàng)建和撤銷。系統(tǒng)利用PCB中的描述信息來標(biāo)識(shí)一個(gè)進(jìn)程,根據(jù)PCB中的調(diào)度信息決定該進(jìn)程是否應(yīng)該運(yùn)行。如果這個(gè)進(jìn)程要進(jìn)入運(yùn)行,首先根據(jù)其中的CPU現(xiàn)場(chǎng)信息來恢復(fù)運(yùn)行現(xiàn)場(chǎng),然后根據(jù)資源信息獲取對(duì)應(yīng)的程序段和數(shù)據(jù)集,接著上次的位置開始執(zhí)行,同時(shí)通過PCB中的通信信息和其他進(jìn)程協(xié)同工作。2.2.3進(jìn)程狀態(tài)及轉(zhuǎn)換系統(tǒng)通過PCB對(duì)進(jìn)程進(jìn)行控制,進(jìn)程不斷地在不同的狀態(tài)之間轉(zhuǎn)換。1.進(jìn)程的基本狀態(tài)在分時(shí)系統(tǒng)中,一個(gè)進(jìn)程擁有了所需要的全部資源,就可以開始執(zhí)行,當(dāng)分配的時(shí)間片結(jié)束,讓出CPU資源,這種只要能夠占有CPU就能進(jìn)入執(zhí)行的狀態(tài)稱為就緒狀態(tài)。有時(shí),多個(gè)進(jìn)程之間互相制約,某個(gè)進(jìn)程必須等到某個(gè)事件發(fā)生(才能夠競(jìng)爭(zhēng)CPU資源,這是等待狀態(tài),當(dāng)?shù)却氖录l(fā)生之后,這個(gè)進(jìn)程被喚醒,由等待狀態(tài)進(jìn)入就緒狀態(tài),直到獲得CPU才開始執(zhí)行。等待狀態(tài)、就緒狀態(tài)和執(zhí)行狀態(tài)是一個(gè)進(jìn)程所具有的最基本的三種狀態(tài),見圖2.2。圖2.2進(jìn)程基本狀態(tài)及轉(zhuǎn)換示意圖2.Linux系統(tǒng)進(jìn)程狀態(tài)Linux系統(tǒng)的2.2.16版本進(jìn)程共有六種狀態(tài),包括運(yùn)行狀態(tài)、可中斷等待狀態(tài)、不可中斷等待狀態(tài)、僵死狀態(tài)、暫停狀態(tài)和交換狀態(tài),而在2.4.0版本中取消了交換狀態(tài),加入獨(dú)占狀態(tài)。表2.1Linux系統(tǒng)(2.2.X—2.4.X版本)進(jìn)程狀態(tài)表進(jìn)程狀態(tài)值說明TASK-RUNNING0運(yùn)行態(tài)TASK-INTERRUPTIBLE1等待態(tài),可中斷TASK-UNINTERRUPTIBLE2等待態(tài),不可中斷TASK-ZOMBIE4僵死態(tài)TASK-STOPPED8暫停態(tài)TASK-SWAPPING16交換態(tài)(2.4.X版本已取消)TASK-EXCLUSIVE32獨(dú)占態(tài)(1)運(yùn)行狀態(tài)(running)Linux系統(tǒng)中的運(yùn)行狀態(tài)實(shí)際包含了上述基本狀態(tài)中的執(zhí)行和就緒兩種狀態(tài),進(jìn)程到底是正在運(yùn)行還是處于就緒狀態(tài)準(zhǔn)備運(yùn)行,要靠當(dāng)前是否占有CPU資源來區(qū)分。(2)等待狀態(tài)Linux系統(tǒng)把基本的等待狀態(tài)進(jìn)一步細(xì)化為可中斷的等待態(tài)和不可中斷的等待態(tài)兩種。處于這種狀態(tài)的進(jìn)程都在等待某個(gè)事件或某個(gè)資源,可中斷等待狀態(tài)的進(jìn)程可以被信號(hào)喚醒而進(jìn)入就緒狀態(tài)等待調(diào)度,而不可中斷等待狀態(tài)的進(jìn)程是因?yàn)橛布Y源無法滿足,不能被信號(hào)喚醒,必須等到所等待的資源得到之后由特定的方式喚醒。(3)僵死狀態(tài)(zombie)由于某些原因進(jìn)程被終止,這個(gè)進(jìn)程所擁有的內(nèi)存、文件等資源全部釋放之后,還保存著PCB信息,這種占有PCB但已經(jīng)無法運(yùn)行的進(jìn)程就處于僵死狀態(tài)。(4)暫停狀態(tài)處于暫停狀態(tài)的進(jìn)程,一般都是由運(yùn)行狀態(tài)轉(zhuǎn)換而來,等待某種特殊處理。比如處于調(diào)試跟蹤的程序,每執(zhí)行到一個(gè)斷點(diǎn),就轉(zhuǎn)入暫停狀態(tài),等待新的輸入信號(hào)。(5)交換狀態(tài)處于交換狀態(tài)的進(jìn)程正在執(zhí)行內(nèi)存、外存的交換工作。這個(gè)狀態(tài)在2.2.X版本的內(nèi)核中基本已經(jīng)不使用,在2.4.X版本中沒有這種狀態(tài)。(6)獨(dú)占狀態(tài)它應(yīng)該是等待狀態(tài)的一種,處于獨(dú)占狀態(tài)的進(jìn)程位于等待隊(duì)列中,當(dāng)?shù)却氖录l(fā)生時(shí),只有處于這種狀態(tài)的進(jìn)程被喚醒,其他處于可中斷和不可中斷等待狀態(tài)的進(jìn)程則繼續(xù)等待。Linux2.4引入獨(dú)占狀態(tài)后,如果事件發(fā)生,只喚醒處于獨(dú)占狀態(tài)的那一個(gè)進(jìn)程,這就可以大大提高Apache這類Web應(yīng)用的效率,使Linux更適合網(wǎng)絡(luò)服務(wù)器的角色。來看Linux系統(tǒng)進(jìn)程的狀態(tài)轉(zhuǎn)換情況。采取一定的簡(jiǎn)化措施:按照進(jìn)程是否占有處理機(jī)為依據(jù),把進(jìn)程的運(yùn)行狀態(tài)分為執(zhí)行和就緒兩種狀態(tài);等待狀態(tài)統(tǒng)一考慮,不再區(qū)分是否可中斷,獨(dú)占狀態(tài)也作為一種等待狀態(tài)處理;不涉及交換狀態(tài)。見圖2.3。圖2.3Linux系統(tǒng)進(jìn)程狀態(tài)及轉(zhuǎn)換示意圖圖2.3同時(shí)也記錄了一個(gè)進(jìn)程在整個(gè)生命周期的變化過程。從圖的左下方開始看,系統(tǒng)在某種特定的情況下,響應(yīng)某個(gè)要求,首先分配各種資源,創(chuàng)建一個(gè)新的進(jìn)程,進(jìn)程進(jìn)入就緒隊(duì)列。所有的進(jìn)程必須在就緒之后,才有資格競(jìng)爭(zhēng)CPU,進(jìn)入運(yùn)行狀態(tài)。這樣,進(jìn)程的整個(gè)生命周期中,大致的轉(zhuǎn)換路徑總是沿著三個(gè)閉合回路進(jìn)行。就緒狀態(tài)和執(zhí)行狀態(tài)形成第一個(gè)回路。進(jìn)程進(jìn)入就緒態(tài),放入可執(zhí)行隊(duì)列等待,一旦被調(diào)度函數(shù)選中,就切換現(xiàn)場(chǎng),進(jìn)入運(yùn)行狀態(tài),等自己的時(shí)間片耗盡之后,馬上保護(hù)現(xiàn)場(chǎng),讓出CPU,轉(zhuǎn)入就緒狀態(tài),等待新的調(diào)度。執(zhí)行狀態(tài)、等待狀態(tài)和就緒狀態(tài)形成第二個(gè)回路。處于執(zhí)行狀態(tài)的進(jìn)程,有時(shí)需要等待某個(gè)事件或某種資源的發(fā)生,這時(shí),繼續(xù)占有CPU也無法開展工作,就轉(zhuǎn)入等待狀態(tài),CPU由下一個(gè)被調(diào)度的進(jìn)程占有。當(dāng)?shù)却M(jìn)程所等待的事件發(fā)生后,等待進(jìn)程被喚醒,進(jìn)入就緒狀態(tài)。執(zhí)行狀態(tài)、暫停狀態(tài)和就緒狀態(tài)構(gòu)成第三個(gè)回路。當(dāng)接收到某種特殊的信號(hào),比如SIGSTOP(Linux的停止信號(hào))時(shí),處于執(zhí)行狀態(tài)的進(jìn)程放棄CPU,保護(hù)現(xiàn)場(chǎng)之后,進(jìn)入暫停狀態(tài),直到獲得另外一個(gè)特殊的信號(hào)才進(jìn)入就緒狀態(tài)。一個(gè)處于執(zhí)行狀態(tài)的進(jìn)程調(diào)用退出函數(shù)exit之后,進(jìn)程就會(huì)進(jìn)入僵死狀態(tài),這種狀態(tài)下,進(jìn)程釋放了PCB之外的所有系統(tǒng)資源。也就是說,它在系統(tǒng)中只留下這個(gè)進(jìn)程的一個(gè)PCB。僵死進(jìn)程的父進(jìn)程通過PCB了解到該進(jìn)程所處的狀態(tài)后,采取相應(yīng)的處理措施,回收PCB,這個(gè)進(jìn)程就完成了它的使命,從僵死走向徹底消亡,上圖右上方的虛箭頭表示了這種結(jié)局。2.2.4進(jìn)程控制進(jìn)程控制,是指對(duì)系統(tǒng)中的全部進(jìn)程實(shí)施有效的管理,使得進(jìn)程能夠及時(shí)創(chuàng)建、撤銷,正確地完成進(jìn)程各狀態(tài)之間的轉(zhuǎn)換,使得多個(gè)進(jìn)程高效率并發(fā)執(zhí)行,達(dá)到系統(tǒng)資源高度共享的目的。進(jìn)程狀態(tài)之間的轉(zhuǎn)換轉(zhuǎn)換通常由三種不同的方式控制:進(jìn)程控制原語、系統(tǒng)核心函數(shù)(比如調(diào)度)、和外部事件發(fā)生(比如中斷)。這里說的所謂原語,指系統(tǒng)狀態(tài)下執(zhí)行的一些具有特定功能的程序段,這些程序段具有“原子性”,是執(zhí)行過程中不可分割的最小單位。用于進(jìn)程控制的原語有:創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語等。(1)創(chuàng)建原語進(jìn)程創(chuàng)建原語用于建立一個(gè)新的進(jìn)程,這個(gè)新進(jìn)程可以由內(nèi)核調(diào)用進(jìn)程創(chuàng)建原語建立,也可以由父進(jìn)程執(zhí)行進(jìn)程創(chuàng)建原語生成一個(gè)子進(jìn)程,子進(jìn)程還可以生成子進(jìn)程,以形成樹形進(jìn)程家族結(jié)構(gòu)。進(jìn)程創(chuàng)建原語的主要任務(wù)是形成進(jìn)程的PCB,因此,調(diào)用者必須提供有關(guān)的參數(shù),例如進(jìn)程名、進(jìn)程優(yōu)先級(jí)、進(jìn)程正文段起始地址、資源清單等。(2)撤銷原語當(dāng)一個(gè)進(jìn)程完成了指定的任務(wù)或由于某種錯(cuò)誤導(dǎo)致異常終止時(shí),要撤銷這個(gè)進(jìn)程以便釋放進(jìn)程占用的資源。進(jìn)程撤銷原語根據(jù)調(diào)用者提供的信息,找到指定的進(jìn)程,回收其占用的資源和PCB。(3)阻塞原語當(dāng)正在運(yùn)行的進(jìn)程需要等待某一事件,由自己調(diào)用阻塞原語把自己阻塞起來成為等待狀態(tài)。阻塞原語主要完成保護(hù)CPU現(xiàn)場(chǎng)的工作,即首先中斷處理機(jī)保存該進(jìn)程的CPU現(xiàn)場(chǎng),然后把被阻塞的進(jìn)程置為等待狀態(tài),插入到相應(yīng)的等待隊(duì)列,最后轉(zhuǎn)入進(jìn)程調(diào)度程序,從就緒隊(duì)列中選擇一個(gè)進(jìn)程投入運(yùn)行。(4)喚醒原語當(dāng)處于等待狀態(tài)的進(jìn)程所等待的事件出現(xiàn)時(shí),由發(fā)現(xiàn)者進(jìn)程調(diào)用喚醒原語喚醒被阻塞的進(jìn)程。進(jìn)程控制原語由系統(tǒng)執(zhí)行。同時(shí),操作系統(tǒng)還提供了一些用于進(jìn)程控制的系統(tǒng)調(diào)用和操作命令,用戶可以通過程序或者命令的方式控制進(jìn)程。2.2.5進(jìn)程約束現(xiàn)代操作系統(tǒng)中,程序并發(fā)執(zhí)行,多個(gè)進(jìn)程各自獨(dú)立地運(yùn)行,同時(shí)競(jìng)爭(zhēng)和共享系統(tǒng)中有限的資源,這種競(jìng)爭(zhēng)與合作構(gòu)成了系統(tǒng)進(jìn)程之間的約束關(guān)系。每個(gè)進(jìn)程獨(dú)立地申請(qǐng)和釋放系統(tǒng)資源,把申請(qǐng)某一類資源的進(jìn)程稱為該類資源的消費(fèi)者,把釋放同類資源的進(jìn)程稱為該類資源的生產(chǎn)者,就得到描述進(jìn)程約束關(guān)系的一般模型:生產(chǎn)者-消費(fèi)者問題,也稱為有界緩沖區(qū)問題。比較簡(jiǎn)單的情況,兩進(jìn)程共享一個(gè)長(zhǎng)度為N(N>0)的有界緩沖區(qū),一個(gè)進(jìn)程Pp往緩沖區(qū)中送數(shù)據(jù),是生產(chǎn)者,另一個(gè)進(jìn)程Pc從緩沖區(qū)中讀取數(shù)據(jù),是消費(fèi)者,如圖2.4,下面來討論它們間的約束關(guān)系。圖2.4簡(jiǎn)單的生產(chǎn)者-消費(fèi)者問題首先,生產(chǎn)者進(jìn)程Pp和消費(fèi)者進(jìn)程Pc共享同一個(gè)有界緩沖區(qū),對(duì)這個(gè)緩沖區(qū)的操作必須是獨(dú)占的。這種不允許多個(gè)并發(fā)進(jìn)程交叉執(zhí)行的資源稱為臨界資源,臨界的程序段資源稱為臨界部分或臨界區(qū)。臨界資源是由于不同并發(fā)進(jìn)程共享某個(gè)資源造成的,不可能通過增加資源的方法解決。這種因?yàn)楣蚕砟骋还匈Y源而引起的在臨界資源內(nèi)不允許并發(fā)進(jìn)程交叉執(zhí)行的現(xiàn)象,稱為進(jìn)程間的間接約束。由于對(duì)臨界資源的共享,而產(chǎn)生了臨界區(qū)問題。對(duì)于有著臨界區(qū)問題的并行進(jìn)程之間必須互斥,以保證不會(huì)同時(shí)進(jìn)入臨界區(qū)。其次,對(duì)生產(chǎn)者進(jìn)程Pp和消費(fèi)者進(jìn)程Pc訪問共享有界緩沖區(qū)的順序有嚴(yán)格的要求。具體來講,這種限制為:(1)消費(fèi)者進(jìn)程Pc要接收數(shù)據(jù)時(shí),有界緩沖區(qū)必須至少有一個(gè)單元是滿的;(2)生產(chǎn)者進(jìn)程Pp要發(fā)送數(shù)據(jù)時(shí),有界緩沖區(qū)必須至少有一個(gè)單元是空的。這樣存在一組相互獨(dú)立的并發(fā)進(jìn)程,各自的執(zhí)行結(jié)果互為對(duì)方的執(zhí)行條件,從而限制各進(jìn)程執(zhí)行速度的過程,稱為進(jìn)程間的直接制約。存在直接制約關(guān)系,相互發(fā)送消息進(jìn)行互相合作、互相等待,各自按照一定的速度向前推進(jìn)的過程稱為同步。消費(fèi)者進(jìn)程和生產(chǎn)者進(jìn)程之間因?yàn)楣蚕砭彌_區(qū),相互競(jìng)爭(zhēng)而間接制約,具有互斥關(guān)系,同時(shí)相互以對(duì)方的運(yùn)行結(jié)果為條件而直接制約,也具有同步的關(guān)系,是一對(duì)同時(shí)具有競(jìng)爭(zhēng)和合作的進(jìn)程。在并發(fā)系統(tǒng)中,進(jìn)程之間相互制約,具有同步和互斥是相當(dāng)普遍的現(xiàn)象。這種進(jìn)程之間的相互關(guān)系,依靠單個(gè)進(jìn)程自身的力量是無法解決的,必須以進(jìn)程間的相互通信為基礎(chǔ),互相發(fā)送信息,才能協(xié)調(diào)解決。具體的同步、互斥實(shí)現(xiàn)方案有很多種,分別基于不同的通信方式。2.2.6進(jìn)程通信進(jìn)程間通信是協(xié)調(diào)解決多個(gè)進(jìn)程之間的約束關(guān)系,實(shí)現(xiàn)進(jìn)程共同進(jìn)展的關(guān)鍵技術(shù),是多道系統(tǒng)中控制進(jìn)程并發(fā)執(zhí)行必不可少的機(jī)制。進(jìn)程間的通信有兩種方式:一是互相發(fā)送少量的控制信息,一般只傳遞一個(gè)或者幾個(gè)字節(jié)的數(shù)據(jù),進(jìn)程利用這些簡(jiǎn)單的信息,實(shí)現(xiàn)互斥和同步,控制運(yùn)行速度,這種簡(jiǎn)單的通信方式被稱為進(jìn)程間的低級(jí)通信;另外一種方式稱為進(jìn)程間的高級(jí)通信,基本不涉及進(jìn)程執(zhí)行速度控制,用來在進(jìn)程之間傳遞大量的信息,由于這種通信方式主要用于交換信息,因此,在開發(fā)本地進(jìn)程間通信的同時(shí),也為遠(yuǎn)程進(jìn)程間的通信,和計(jì)算機(jī)網(wǎng)絡(luò)的開發(fā)及控制奠定了基礎(chǔ)。1.進(jìn)程通信類型按照通信進(jìn)程雙方的地位,可以把進(jìn)程通信分為:主從式、會(huì)話式、消息或郵箱機(jī)制以及共享存儲(chǔ)區(qū)四種類型。(1)主從式主進(jìn)程一方在整個(gè)通信過程中處于絕對(duì)的控制地位,它可以直接控制從進(jìn)程的動(dòng)作,自由地使用從進(jìn)程的資源和數(shù)據(jù)。(2)會(huì)話式一方進(jìn)程提供服務(wù),另外一方進(jìn)程在得到服務(wù)方的許可之后,可以使用其提供的服務(wù)。在通信過程中,雙方的連接關(guān)系固定,客戶進(jìn)程提出服務(wù)請(qǐng)求,服務(wù)進(jìn)程根據(jù)情況控制服務(wù)的狀態(tài)和內(nèi)容。(3)消息或郵箱機(jī)制通信雙方具有平等的地位,和現(xiàn)實(shí)生活中的郵件類似。通信雙方通過緩沖區(qū)或郵箱存放被傳送的數(shù)據(jù),不需要建立雙方直接的連接關(guān)系。申請(qǐng)通信的發(fā)起方進(jìn)程不管接收方進(jìn)程的狀態(tài),把信息直接送入雙方共享的緩沖區(qū)(或者郵箱)中,接收進(jìn)程在合適的時(shí)機(jī)去讀取緩沖區(qū)(或者郵箱)以接收信息。(4)共享存儲(chǔ)區(qū)共享存儲(chǔ)區(qū)通信方式中,通信雙方進(jìn)程共享內(nèi)存中的一段存儲(chǔ)空間,共同操作這個(gè)存儲(chǔ)區(qū),達(dá)到數(shù)據(jù)共享的目的。通信過程中,數(shù)據(jù)一直存放在共享存儲(chǔ)區(qū)中,不需要移動(dòng),因此特別適用于大量數(shù)據(jù)的傳遞。2.Linux系統(tǒng)的進(jìn)程通信Linux系統(tǒng)提供了多種通信機(jī)制,利用這些機(jī)制,可以方便地進(jìn)行進(jìn)程之間的相互協(xié)調(diào),實(shí)現(xiàn)進(jìn)程的互斥和同步。(1)信號(hào)(signal)信號(hào)屬于Linux系統(tǒng)的低級(jí)通信,主要用于在進(jìn)程之間傳遞控制信號(hào)。信號(hào)可以發(fā)給一個(gè)或多個(gè)進(jìn)程,可以是由某個(gè)進(jìn)程發(fā)出,也可以由鍵盤中斷產(chǎn)生,還可以是由shell程序向其子進(jìn)程發(fā)送任務(wù)控制命令時(shí)產(chǎn)生。進(jìn)程在某些系統(tǒng)錯(cuò)誤環(huán)境下也會(huì)有信號(hào)產(chǎn)生。除了兩個(gè)信號(hào)外,進(jìn)程可以忽略這些信號(hào)中的絕大部分,這兩個(gè)信號(hào)是引起進(jìn)程終止執(zhí)行的SIGSTOP信號(hào)和引起進(jìn)程退出的SIGKILL信號(hào)。至于其他信號(hào),進(jìn)程可以選擇處理它們的具體方式。信號(hào)沒有固有的相對(duì)優(yōu)先級(jí)。并不是系統(tǒng)中每個(gè)進(jìn)程都可以向所有其他進(jìn)程發(fā)送信號(hào),只有核心和超級(jí)用戶具有此權(quán)限。普通進(jìn)程只能向具有相同uid和gid的進(jìn)程或者在同一進(jìn)程組中的進(jìn)程發(fā)送信號(hào)。信號(hào)是通過設(shè)置task-struct結(jié)構(gòu)中signal域里的某一位來產(chǎn)生的。如果進(jìn)程沒有阻塞信號(hào)并且處于可中斷的等待狀態(tài),則可以將其狀態(tài)改成running,若確認(rèn)進(jìn)程還處在運(yùn)行隊(duì)列中,就可以通過信號(hào)喚醒它。(2)管道(pipe)管道是UNIX操作系統(tǒng)傳統(tǒng)的進(jìn)程通信技術(shù)。Linux管道通信包括無名管道和有名管道兩種,通過文件系統(tǒng)來實(shí)現(xiàn)。管道也是一種特殊的文件類型,實(shí)際上是通過文件系統(tǒng)的高速緩沖實(shí)現(xiàn)的。兩個(gè)進(jìn)程通過管道進(jìn)行通信時(shí),兩個(gè)進(jìn)程分別進(jìn)行讀和寫操作,都指向緩沖區(qū)中同樣的物理單元,一個(gè)進(jìn)程寫入數(shù)據(jù),另一個(gè)進(jìn)程從緩沖區(qū)中讀取數(shù)據(jù),從而實(shí)現(xiàn)信息傳遞。管道方式只能按照先進(jìn)先出方式單向傳遞信息。管道方式可以用來進(jìn)行大規(guī)模的數(shù)據(jù)傳遞。(3)SYSTEMⅤ進(jìn)程間通信信號(hào)量、消息隊(duì)列和共享內(nèi)存是UNIX/Linux系統(tǒng)常用的通信方式。消息隊(duì)列用來在進(jìn)程之間傳遞分類的格式化數(shù)據(jù),共享內(nèi)存方式可以使不同進(jìn)程共同訪問一塊虛擬存儲(chǔ)空間,通過對(duì)該存儲(chǔ)區(qū)的共同操作來實(shí)現(xiàn)數(shù)據(jù)傳遞,信號(hào)量主要用于進(jìn)程之間的同步控制,通常和共享內(nèi)存共同使用。這三種方式在系統(tǒng)中是作為一個(gè)整體實(shí)現(xiàn)的。共享內(nèi)存是這三種方式中通信效率最高的,它在進(jìn)程的虛擬空間中進(jìn)行,而且不需要數(shù)據(jù)的移動(dòng)也可以實(shí)現(xiàn)大規(guī)模的數(shù)據(jù)傳遞。(4)套接字(socket)套接字是用來通過網(wǎng)絡(luò)實(shí)現(xiàn)運(yùn)行于不同計(jì)算機(jī)上的進(jìn)程之間通信的機(jī)制。它可以實(shí)現(xiàn)數(shù)據(jù)的雙向規(guī)模傳遞,是整個(gè)網(wǎng)絡(luò)通信的基礎(chǔ)。具體的原理和實(shí)現(xiàn)與網(wǎng)絡(luò)協(xié)議等有關(guān),不做具體的介紹。2.2.7死鎖死鎖,是指所有并發(fā)進(jìn)程都擁有部分資源,同時(shí)都在等待其他進(jìn)程擁有的資源,而且在得到對(duì)方資源之前不會(huì)釋放自己占有的資源,所有進(jìn)程都進(jìn)入永久等待狀態(tài)而無法運(yùn)行的情況。死鎖是并發(fā)進(jìn)程約束關(guān)系處理不當(dāng)造成的最嚴(yán)重的后果,是對(duì)系統(tǒng)資源極大的浪費(fèi),必須設(shè)法避免。死鎖出現(xiàn)的根本原因是系統(tǒng)資源的有限性。并發(fā)進(jìn)程競(jìng)爭(zhēng)資源,調(diào)度不當(dāng),就可能出現(xiàn)死鎖的情況,因此必須采取適當(dāng)?shù)拇胧﹣硐梨i。產(chǎn)生死鎖的必要條件有四個(gè):并發(fā)進(jìn)程之間是互斥關(guān)系,每個(gè)進(jìn)程必須獨(dú)占某個(gè)系統(tǒng)資源;進(jìn)程占有的資源在未結(jié)束使用之前,不能被強(qiáng)行剝奪,只能由該進(jìn)程自己釋放;進(jìn)程需要的資源采用部分分配的方式,在等待新資源的同時(shí),繼續(xù)占有已分配的資源;各占有資源的進(jìn)程形成環(huán)路,每一個(gè)進(jìn)程已獲得的資源同時(shí)被下一個(gè)進(jìn)程請(qǐng)求。解決死鎖的方案就是破壞死鎖產(chǎn)生的必要條件。方法分為預(yù)防、回避、檢測(cè)恢復(fù)三種。預(yù)防指采取某種策略,控制并發(fā)進(jìn)程對(duì)資源的請(qǐng)求,保證死鎖的四個(gè)必要條件在系統(tǒng)運(yùn)行的任何時(shí)刻都無法滿足。避免指系統(tǒng)采取某種算法,對(duì)資源使用情況進(jìn)行預(yù)測(cè),使資源分配盡可能合理,避免死鎖的發(fā)生。這兩種方法需要大量的系統(tǒng)開銷,而且系統(tǒng)的資源也無法得到充分的利用。因此,一般系統(tǒng)都采取檢測(cè)恢復(fù)的方法,這種方法是在死鎖發(fā)生之后,根據(jù)系統(tǒng)情況,檢測(cè)死鎖發(fā)生的位置和原因,使用外力,重新分配資源,破壞死鎖發(fā)生的條件,系統(tǒng)就可以從死鎖狀態(tài)恢復(fù)正常運(yùn)行,這樣的方法只要使用少量的系統(tǒng)資源,尤其是CPU時(shí)間就可以排除死鎖。2.3線程多道處理系統(tǒng)中,進(jìn)程是系統(tǒng)調(diào)度和資源分配的基本單位,計(jì)算機(jī)的CPU不停地在不同進(jìn)程之間切換,進(jìn)程切換現(xiàn)場(chǎng)稱為進(jìn)程上下文,每一次切換過程,系統(tǒng)都要對(duì)換出進(jìn)程的上下文做詳細(xì)記錄,然后恢復(fù)換入進(jìn)程的上下文。因此,系統(tǒng)的進(jìn)程管理過程要耗費(fèi)相當(dāng)多的系統(tǒng)資源和CPU時(shí)間,尤其是對(duì)于需要頻繁進(jìn)程切換的任務(wù)。針對(duì)進(jìn)程切換的時(shí)間和資源耗費(fèi)問題,為了減少系統(tǒng)進(jìn)程切換的時(shí)間,提高整個(gè)系統(tǒng)的效率,引入了線程的概念。2.3.1線程的概念線程是在一個(gè)進(jìn)程內(nèi)的基本調(diào)度單位。線程可以看作是一個(gè)執(zhí)行流,擁有記錄自己狀態(tài)和運(yùn)行現(xiàn)場(chǎng)的少量數(shù)據(jù)(棧段和上下文),但沒有單獨(dú)的代碼段和數(shù)據(jù)段,而是與其他線程共享。多個(gè)線程共享一個(gè)進(jìn)程內(nèi)部的各種資源,分別按照不同的路徑執(zhí)行,同時(shí)線程也是一個(gè)基本調(diào)度單位,可以在一個(gè)進(jìn)程內(nèi)部進(jìn)行線程切換,現(xiàn)場(chǎng)保護(hù)工作量小。一方面通過共享進(jìn)程的基本資源而減輕系統(tǒng)開銷,另一方面提高了現(xiàn)場(chǎng)切換的效率,因此,線程也被稱為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程。許多流行的多任務(wù)操作系統(tǒng)基本都支持線程。按照系統(tǒng)的管理策略,線程可以分為用戶級(jí)線程和系統(tǒng)級(jí)線程(內(nèi)核級(jí)線程)兩種基本類型。用戶級(jí)線程指不需要內(nèi)核支持,在用戶程序中實(shí)現(xiàn)的線程都需要用戶程序自己完成。系統(tǒng)級(jí)線程由內(nèi)核完成線程的調(diào)度并提供相應(yīng)的系統(tǒng)調(diào)用,用戶程序可以通過這些接口函數(shù)對(duì)線程進(jìn)行一定的控制和管理。用戶級(jí)線程不需要額外的內(nèi)核開銷,一般只要提供一個(gè)線程庫(kù)即可,剩下的工作就主要由用戶自己負(fù)責(zé)了。但是由于用戶級(jí)線程與系統(tǒng)內(nèi)核無關(guān),當(dāng)一個(gè)進(jìn)程因I/O而被調(diào)度程序切換為等待狀態(tài)時(shí),屬于該進(jìn)程的某個(gè)執(zhí)行線程可能仍然處于執(zhí)行狀態(tài)。系統(tǒng)級(jí)線程的調(diào)度由內(nèi)核完成,不需要更多用戶干預(yù),但要占用更多的系統(tǒng)開銷,效率相對(duì)低一些。線程也是系統(tǒng)中動(dòng)態(tài)變化的實(shí)體,它描述程序的運(yùn)行活動(dòng),在內(nèi)存中需要記錄。線程的記錄信息要保證系統(tǒng)能夠準(zhǔn)確地進(jìn)行線程切換。在線程的生命周期里,線程作為一個(gè)基本的執(zhí)行單位而存在,不斷地在執(zhí)行和停止的狀態(tài)之間轉(zhuǎn)換。線程的基本狀態(tài)是執(zhí)行、就緒和等待。線程的同步是一個(gè)相當(dāng)關(guān)鍵的問題。線程之間的通信相對(duì)容易,而線程間的同步問題需要更仔細(xì)地對(duì)待,特別是用戶級(jí)線程,這個(gè)問題相當(dāng)突出。2.3.2線程和進(jìn)程進(jìn)程是操作系統(tǒng)資源分配和系統(tǒng)調(diào)度的基本單位,每一個(gè)進(jìn)程都有自己獨(dú)立的地址空間和各種資源,線程也是一種系統(tǒng)調(diào)度的基本單位,多個(gè)線程可以共享一個(gè)進(jìn)程的資源,在存儲(chǔ)方面,線程占用的資源更少。進(jìn)程的調(diào)度主要由操作系統(tǒng)完成,而線程根據(jù)其類型的不同,可以由系統(tǒng)調(diào)度(內(nèi)核級(jí)線程),也可以由用戶進(jìn)行調(diào)度(用戶級(jí)線程)。進(jìn)程調(diào)度的過程中要進(jìn)行切換,切換現(xiàn)場(chǎng)的保護(hù)與恢復(fù)要求對(duì)進(jìn)程上下文做完整的記錄,要消耗一定的存儲(chǔ)資源和處理機(jī)時(shí)間;線程共享進(jìn)程的資源,可以在進(jìn)程內(nèi)部切換,不涉及資源保存和內(nèi)存地址變換等操作,可以節(jié)約大量的空間和時(shí)間資源。因此,對(duì)于切換頻繁的工作任務(wù),多線程方式比多進(jìn)程方式可以提供更高的響應(yīng)速度。多個(gè)線程共享同一進(jìn)程的資源,線程相互間通訊容易。而進(jìn)程間通訊一般必須要通過系統(tǒng)提供的進(jìn)程間通訊機(jī)制。進(jìn)程和線程都是用來描述程序的運(yùn)行活動(dòng),是存在于系統(tǒng)存儲(chǔ)區(qū)中的動(dòng)態(tài)實(shí)體,都有自己的狀態(tài),整個(gè)生命周期都在不同的狀態(tài)之間切換。2.3.3Linux系統(tǒng)的線程Linux可以同時(shí)支持內(nèi)核級(jí)線程(也稱為系統(tǒng)級(jí)線程)和用戶級(jí)線程。Linux的系統(tǒng)級(jí)線程在表示格式、管理調(diào)度等方面與進(jìn)程沒有嚴(yán)格的區(qū)分,都是當(dāng)作進(jìn)程來統(tǒng)一對(duì)待。Linux系統(tǒng)級(jí)線程和進(jìn)程的區(qū)別主要在于資源管理方面,線程可以共享父進(jìn)程的部分資源(執(zhí)行上下文)。在Linux系統(tǒng)中,線程共享資源的類型是可以控制的,系統(tǒng)調(diào)用clone

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論