![實(shí)用linux編程白皮書(shū)_第1頁(yè)](http://file4.renrendoc.com/view/5d47ec276cbe39b6715a6457fdd3a824/5d47ec276cbe39b6715a6457fdd3a8241.gif)
![實(shí)用linux編程白皮書(shū)_第2頁(yè)](http://file4.renrendoc.com/view/5d47ec276cbe39b6715a6457fdd3a824/5d47ec276cbe39b6715a6457fdd3a8242.gif)
![實(shí)用linux編程白皮書(shū)_第3頁(yè)](http://file4.renrendoc.com/view/5d47ec276cbe39b6715a6457fdd3a824/5d47ec276cbe39b6715a6457fdd3a8243.gif)
![實(shí)用linux編程白皮書(shū)_第4頁(yè)](http://file4.renrendoc.com/view/5d47ec276cbe39b6715a6457fdd3a824/5d47ec276cbe39b6715a6457fdd3a8244.gif)
![實(shí)用linux編程白皮書(shū)_第5頁(yè)](http://file4.renrendoc.com/view/5d47ec276cbe39b6715a6457fdd3a824/5d47ec276cbe39b6715a6457fdd3a8245.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1系統(tǒng)結(jié)Linux內(nèi)核本身作為一個(gè)獨(dú)立的東西是沒(méi)有什么用的;它只是參與了一個(gè)更大的系統(tǒng),成為那個(gè)系統(tǒng)的一部分,而該系統(tǒng)從整體上看是非常有用的。因此,在整個(gè)系統(tǒng)的上下文中介4-1-1顯示了整個(gè)Linux操作系統(tǒng)的結(jié)構(gòu)分析。用戶(hù)應(yīng)用程序在某個(gè)特定的Linux系統(tǒng)上運(yùn)行的應(yīng)用程序集合,它將隨著該計(jì)算機(jī) eb用戶(hù)應(yīng)用程O(píng)/S服Linnx內(nèi)用戶(hù)應(yīng)用程O(píng)/S服Linnx內(nèi)硬件控制圖4-1-1 Linux系統(tǒng)可分為4個(gè)子系Linux內(nèi)核 這是本文的關(guān)注焦點(diǎn);包括內(nèi)核抽象和對(duì)硬件資源(如CPU)的間接。、,、,這個(gè)系統(tǒng)劃分方法是照搬Garlan和Shaw在 Garlan 194只能與跟它相鄰的層通信。此外,
2、子系統(tǒng)之間的依賴(lài)關(guān)系是從上到下的:靠上的層依賴(lài)于靠下的層因?yàn)楸疚牡闹攸c(diǎn)是LinuxLinux內(nèi)核向用戶(hù)進(jìn)程提供了一個(gè)虛擬機(jī)器接口。編寫(xiě)進(jìn)程的時(shí)候并不需要知道計(jì)算機(jī)上安裝了哪些物理件Linux內(nèi)核會(huì)把所有的硬件象成的虛擬接口。此外, Linux用戶(hù)透明的方式支持多任務(wù):每個(gè)進(jìn)程工作時(shí)就象它是計(jì)算機(jī)上唯一的進(jìn)程,好象是獨(dú)占使用了主存和其他硬件資源一樣。內(nèi)核實(shí)際上同時(shí)運(yùn)行許多個(gè)進(jìn)程,并負(fù)責(zé)對(duì)硬件資源的間接 ,這樣可以保證各個(gè)進(jìn)程的公平性,進(jìn)程間的安全性。進(jìn)程調(diào)度程序( SCHED)負(fù)責(zé)控制進(jìn)程 CPU。調(diào)度程序所使用的策略可以保證進(jìn)程能夠公平地 CPU,同時(shí)保證內(nèi)核可以準(zhǔn)時(shí)執(zhí)行一些必需的硬件操作。內(nèi)
3、核管理程序( MM)使多個(gè)進(jìn)程可以安全地共享機(jī)器的主存系統(tǒng)。此外,內(nèi)核管理程序支持虛擬內(nèi)存。虛擬內(nèi)存使得Linux可以支持進(jìn)程使用超過(guò)系統(tǒng)中的內(nèi)存數(shù)量的內(nèi)存。暫時(shí)用不著的 信息可以交換出內(nèi)存,存放到使用文件系統(tǒng)的性 器上,然后在需要它們的時(shí)候再交換回來(lái)。虛擬文件系統(tǒng)( VFS)。通過(guò)提供一個(gè)所有設(shè)備的公共文件接口, VFS抽象了不同硬件VFS支持與其他操作系統(tǒng)兼容的不同的文件系統(tǒng)格式。網(wǎng)絡(luò)接口( NET)提供了對(duì)許多建網(wǎng)標(biāo)準(zhǔn)和網(wǎng)絡(luò)硬件的 進(jìn)程間通信( IPC)子系統(tǒng)為單個(gè) Linux圖4-1-說(shuō)明子系依賴(lài)網(wǎng)絡(luò)進(jìn)程間通進(jìn)程調(diào)度程虛擬文件系內(nèi)存管理程,。圖4 -1 -2是,。,從圖中可以看出,最中
4、心最重要的子系統(tǒng)是進(jìn)程調(diào)度程序:其他所有的子系統(tǒng)都依賴(lài)于進(jìn)程調(diào)度程序,這是因?yàn)樗械淖酉到y(tǒng)都需要中斷和恢復(fù)進(jìn)程的執(zhí)行。一般來(lái)說(shuō),子系統(tǒng)會(huì)中斷那些等待硬件操作完成的進(jìn)程同時(shí)恢復(fù)那些操作已經(jīng)完成了的進(jìn)程例如,當(dāng)某進(jìn)程試圖通過(guò)網(wǎng)絡(luò)發(fā)送消息時(shí),網(wǎng)絡(luò)接口可能需要中斷該進(jìn)程直到硬件成功完成了消息的發(fā)送。當(dāng),消息發(fā)送完以后(或者硬件返回出錯(cuò)信號(hào),則網(wǎng)絡(luò)接口將用返回碼來(lái)恢復(fù)該進(jìn)程。返回碼顯示了操作是成功完成還是失敗。別的子系統(tǒng)(內(nèi)存管理程序、虛擬文件系統(tǒng)、以及進(jìn)程間通信)都是由于相似的原因而必須依賴(lài)于進(jìn)程調(diào)度程序。 進(jìn)程間通信子系統(tǒng)依賴(lài)于內(nèi)存管理程序來(lái)支持共享內(nèi)存通信機(jī)制。進(jìn)程除了可以 它們通常的私有內(nèi)存外,
5、共享內(nèi)存通信機(jī)制將使它們可以 一個(gè)公共的內(nèi)存區(qū)。內(nèi)存管理程序使用虛擬文件系統(tǒng)來(lái)支持交換。這是內(nèi)存管理程序之所以依賴(lài)于進(jìn)程調(diào)度程序的唯一原因。當(dāng)某進(jìn)程的內(nèi)存當(dāng)前已經(jīng)被換出內(nèi)存時(shí),內(nèi)存管理程序請(qǐng)求文件系統(tǒng)從性 設(shè)備中去取該內(nèi)存,并中斷該進(jìn)程。除了顯式的依賴(lài)關(guān)系以外,內(nèi)核中所有的子系統(tǒng)還依賴(lài)于一些在任何子系統(tǒng)中都沒(méi)有顯示出來(lái)的公共資源。它們包括:所有內(nèi)核子系統(tǒng)用于分配和內(nèi)核所使用內(nèi)存的過(guò)程,打印警告或錯(cuò)誤信息的過(guò)程,以及系統(tǒng)調(diào)試過(guò)程等等。這些資源之所以稱(chēng)之為非顯式的,是因?yàn)樗鼈冎荒茉趫D1-1所示的內(nèi)核層中使用。這一級(jí)別的系統(tǒng)結(jié)構(gòu)類(lèi)型類(lèi)似于Garlan和Shaw在Garlan 1994中所的數(shù)據(jù)抽象類(lèi)
6、型。這里描述的每一個(gè)系統(tǒng)都包含狀態(tài)信息,這些狀態(tài)信息可以使用過(guò)程接口來(lái) ,而每個(gè)子系統(tǒng)都需要它們所管理的資源的完整性。 說(shuō) 子系進(jìn)程調(diào)度程內(nèi)存管理程實(shí) 現(xiàn)文件設(shè)備動(dòng)程網(wǎng)絡(luò)設(shè)備動(dòng)程邏輯文件系進(jìn)程間通邏輯網(wǎng)絡(luò)接圖4-1-3 開(kāi)發(fā)職責(zé)劃分Linux系統(tǒng)是由大量的 所開(kāi)發(fā)的(當(dāng)前 CREDITS文件列舉出了 196個(gè)曾經(jīng)進(jìn)行過(guò) Linux系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā) 。開(kāi)發(fā) 非常多,而且他們都是 ,這勢(shì)必會(huì)影響到系統(tǒng)的構(gòu)造。因?yàn)殚_(kāi)發(fā) 在地域上分布上很廣泛,所以很難開(kāi)發(fā)出一個(gè)緊耦合的系統(tǒng)來(lái) 開(kāi)發(fā) 常常需要閱讀別人的代碼。因此, Linux系統(tǒng)系統(tǒng)結(jié)構(gòu)的原則是:把那些可需要作很大修改的子系統(tǒng)文件系統(tǒng)、硬件接口和網(wǎng)絡(luò)系統(tǒng)
7、設(shè)計(jì)成高度模塊化的系統(tǒng)。例如,一個(gè) Linux實(shí)現(xiàn)可能需要支持具有不同接口的許多硬件設(shè)備,一種樸實(shí)的系統(tǒng)結(jié)構(gòu)是把所有硬件設(shè)備的實(shí)現(xiàn)做在一個(gè)子系統(tǒng)中。而一種支持多個(gè)開(kāi)發(fā)的更好的方法是:把每個(gè)硬件設(shè)備的代碼分離成一個(gè)設(shè)備驅(qū)動(dòng)程序,這些驅(qū)動(dòng)程序是文件系統(tǒng)中獨(dú)立的圖4-1-3列出了曾經(jīng)在Linux內(nèi)核開(kāi)發(fā)方面作出了貢獻(xiàn)的大部分開(kāi)發(fā),以及他們已經(jīng)實(shí)現(xiàn)了的區(qū)域。一些開(kāi)發(fā)修改了內(nèi)核的很多部分。為了描述方便,沒(méi)有列出這些開(kāi)發(fā) Linus Torvald是大部分內(nèi)核子系統(tǒng)的實(shí)現(xiàn)者,盡管后續(xù)的開(kāi)發(fā)是由其他人完成的。該圖不能做到十分精確,因?yàn)樵趦?nèi)核開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)的組成經(jīng)常變動(dòng),但從圖中基本可以看出哪些系統(tǒng)是開(kāi)發(fā)花
8、費(fèi)了大量精力去實(shí)現(xiàn)的。該圖重新確認(rèn)了前面描述過(guò)的內(nèi)核的大規(guī)模結(jié)構(gòu)。很有趣的是,很少有開(kāi)發(fā)曾經(jīng)在多個(gè)系統(tǒng)上工作過(guò),但這樣的人的確存在,它主要發(fā)生在那些存在子系統(tǒng)依賴(lài)性的多個(gè)子系統(tǒng)上。這種組織方式符合Melvin Conway所拇指規(guī)則(參見(jiàn)Raymond 1993,即系統(tǒng)的組織應(yīng)該反映開(kāi)發(fā)的組織。大部分開(kāi)發(fā)都在開(kāi)發(fā)硬件設(shè)備驅(qū)動(dòng)程序、邏輯文件系統(tǒng)模塊、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序以及網(wǎng)絡(luò)協(xié)議模塊。內(nèi)核的這4個(gè)區(qū)域的系統(tǒng)結(jié)構(gòu)是最具有擴(kuò)展性的,這一點(diǎn)也不奇怪。進(jìn)程調(diào)度程序?yàn)槊總€(gè)活躍的進(jìn)程 一塊數(shù)據(jù)。這些數(shù)據(jù)塊是 在鏈表中的,該鏈表稱(chēng)為任務(wù)列表。進(jìn)程調(diào)度程序常常一個(gè)當(dāng)前指針,該指針顯示當(dāng)前的活躍進(jìn)程。內(nèi)存內(nèi)存管理程
9、序?yàn)槊總€(gè)進(jìn)程都 了一個(gè)從虛擬地址到物理地址的 表,它還 了一些有關(guān)如何取和替換特定頁(yè)面的其他信息。這一信息存放在內(nèi)存數(shù)據(jù)結(jié)構(gòu)中,該結(jié)構(gòu)存放在進(jìn)程調(diào)度程序的任務(wù)列表中。在邏輯文件系統(tǒng)上,虛擬文件系統(tǒng)使用索引節(jié)點(diǎn)來(lái)表示文件。索引節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)存放著從文件塊到物理設(shè)備地址的 。如果兩個(gè)進(jìn)程打開(kāi)了同一個(gè)文件,則這兩個(gè)進(jìn)程可以共享索引節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)。這一共享是通過(guò)指向同一個(gè)索引節(jié)點(diǎn)的任務(wù)數(shù)據(jù)塊來(lái)完成的。所有的數(shù)據(jù)結(jié)構(gòu)都保存在進(jìn)程調(diào)度程序的任務(wù)列表中。系統(tǒng)的每個(gè)進(jìn)程都會(huì)有一個(gè)數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)中包含著指向內(nèi)存 信息的指針,以及指向代表所有打開(kāi)文件的索引節(jié)點(diǎn)的指針。最后,任務(wù)數(shù)據(jù)結(jié)構(gòu)還包含著指向一些數(shù)據(jù)結(jié)構(gòu)的
10、指針,這些數(shù)據(jù)結(jié)構(gòu)代表了與每個(gè)任務(wù)相聯(lián)系的打開(kāi)的網(wǎng)絡(luò)連接。第2目進(jìn)程調(diào)度程序是Linux內(nèi)核中最重要的子系統(tǒng)。它的目標(biāo)是控制對(duì)計(jì)算機(jī)CPU的,這模調(diào)度策略模塊負(fù)責(zé)判定哪個(gè)進(jìn)程對(duì) CPU有 權(quán);策略的設(shè)計(jì)應(yīng)該使進(jìn)程可以公平 CPU。系統(tǒng)結(jié)構(gòu)相關(guān)的模塊一般使用公共接口設(shè)計(jì)而成,這樣可以抽象出任意特定的計(jì)算機(jī) CPU的通信,以中斷或者恢復(fù)進(jìn)程的執(zhí)行。這些操作包括需要為每個(gè)進(jìn)程保留哪些寄存器和狀態(tài)信息,以及執(zhí)行匯編代碼來(lái)影響中斷或者恢復(fù)操作。獨(dú)立于系統(tǒng)結(jié)構(gòu)的模塊與策略模塊互相通信,來(lái)確定接下來(lái)執(zhí)行哪個(gè)進(jìn)程,然后調(diào)用系統(tǒng)結(jié)構(gòu)相關(guān)的模塊來(lái)恢復(fù)適當(dāng)?shù)倪M(jìn)程。此外,這個(gè)模塊調(diào)用內(nèi)存管理程序,來(lái)確保已經(jīng)為 4-2
11、-1編編程調(diào)度程序接O/S 說(shuō)非內(nèi)核理程進(jìn)程調(diào)度程 系統(tǒng)調(diào)用接 模網(wǎng)系系統(tǒng)結(jié)構(gòu)相關(guān)的度程 調(diào)度策多個(gè)模內(nèi)依賴(lài)硬數(shù)據(jù)控制獨(dú)立于系統(tǒng)結(jié)構(gòu)的調(diào)度程圖4-2-1 上下文中的進(jìn)程調(diào)度程度子系系統(tǒng)調(diào)用接口模塊只允許用戶(hù)進(jìn)程 由內(nèi)核顯式打開(kāi)的那些資源。這就決定了用戶(hù)進(jìn)程必須依賴(lài)于內(nèi)核能提供一個(gè)很少變動(dòng)的且定義良好的用戶(hù)接口,而不管其他的內(nèi)核模塊在調(diào)度程序一個(gè)數(shù)據(jù)結(jié)構(gòu)任務(wù)列表。其中每個(gè)項(xiàng)目對(duì)應(yīng)一個(gè)活躍進(jìn)程,這個(gè)數(shù)據(jù)結(jié)構(gòu)包含足夠的信息,可以中斷和恢復(fù)進(jìn)程的執(zhí)行,但同時(shí)也包含了一些記帳和狀態(tài)信息。在整個(gè)內(nèi)核層中都可以用到這個(gè)數(shù)據(jù)結(jié)構(gòu)。依賴(lài)性、數(shù)據(jù)流和控制流正如前面所說(shuō)的那樣,進(jìn)程調(diào)度程序調(diào)用內(nèi)存管理程序子系統(tǒng)。因
12、此,進(jìn)程調(diào)度程序依賴(lài)于內(nèi)存管理子系統(tǒng)。此外,其他所有的內(nèi)核子系統(tǒng)也都依賴(lài)于進(jìn)程調(diào)度程序,在等待硬件請(qǐng)求完成時(shí),可以中斷和恢復(fù)進(jìn)程。這些依賴(lài)性是通過(guò)函數(shù)調(diào)用以及對(duì)共享任務(wù)列表數(shù)據(jù)結(jié)構(gòu)的 來(lái)體現(xiàn)的。所有的內(nèi)核子系統(tǒng)都會(huì)讀寫(xiě)代表當(dāng)前任務(wù)的數(shù)據(jù)結(jié)構(gòu),這導(dǎo)致了整個(gè)系統(tǒng)中數(shù)據(jù)的單向流動(dòng)。O/S服務(wù)層為用戶(hù)進(jìn)程提供了一個(gè)接口,以登錄定時(shí)器通知。這對(duì)應(yīng)于Garlan 1994中所描述的隱式執(zhí)行系統(tǒng)結(jié)構(gòu)類(lèi)型。它會(huì)引起從調(diào)度程序到用戶(hù)進(jìn)程的控制流。類(lèi)似恢復(fù) 進(jìn)程這樣普通的例子不應(yīng)看作是普通意義上的控制流,因?yàn)橛脩?hù)進(jìn)程不能檢測(cè)出這個(gè)操作。最后,調(diào)度程序與 CPU通信,以便中斷和恢復(fù)進(jìn)程,這會(huì)導(dǎo)致數(shù)據(jù)流和控制流。CP
13、U負(fù)責(zé)中斷當(dāng)前執(zhí)行的進(jìn)程,并允許內(nèi)核調(diào)度其他的進(jìn)程。目?jī)?nèi)存管理程序子系統(tǒng)負(fù)責(zé)控制進(jìn)程對(duì)硬件內(nèi)存資源的。這是通過(guò)硬件內(nèi)存管理系統(tǒng)來(lái)完成的,該系統(tǒng)提供進(jìn)程內(nèi)存與計(jì)算機(jī)的物理內(nèi)存之間的。內(nèi)存管理程序子系統(tǒng)為個(gè)進(jìn)程都一個(gè)這樣的關(guān)系,這樣,兩個(gè)進(jìn)程就可以同一個(gè)虛擬內(nèi)存地址,而實(shí)際使用的是不同的物理內(nèi)存位置。此外,內(nèi)存管理程序子系統(tǒng)支持交換,它把暫時(shí)不使用的內(nèi)存頁(yè)面移出內(nèi)存,存放到性器中,樣計(jì)算機(jī)可以支持比物理內(nèi)存要的虛擬內(nèi)存。模系統(tǒng)結(jié)構(gòu)無(wú)關(guān)的管理程序執(zhí)行每個(gè)進(jìn)程的工作和虛擬內(nèi)存的交換工作。當(dāng)出現(xiàn)頁(yè)面錯(cuò)時(shí),該模塊負(fù)責(zé)判定應(yīng)該把哪個(gè)內(nèi)存頁(yè)面移出內(nèi)存這里不存在獨(dú)立的策略模塊,這是因?yàn)檫@個(gè)策略不太可能會(huì)有變化。
14、內(nèi)存管理程序子系統(tǒng)還提供了一個(gè)系統(tǒng)調(diào)用接口,以提供對(duì)用戶(hù)進(jìn)程的約束。該接口允許用戶(hù)進(jìn)程分配,并可執(zhí)行內(nèi)存文件 I/O。務(wù)列表數(shù)據(jù)結(jié)構(gòu)中,這一關(guān)系是以的方式 的。除了這一關(guān)系以外,數(shù)據(jù)塊中的其他細(xì)節(jié)也將告訴內(nèi)存管理程序如何取頁(yè)面及 頁(yè)面。例如,可執(zhí)行代碼可以使用可執(zhí)行映象作為后援 ,但動(dòng)態(tài)分配的數(shù)據(jù)必須備份到系統(tǒng)分頁(yè)文件中。最后,內(nèi)存管理程序這數(shù)結(jié)中了息計(jì)息以保系安性如圖 4-2-2所。編編程內(nèi)存接O/S說(shuō)非內(nèi)核內(nèi)存管系統(tǒng)調(diào)用接立于系統(tǒng)結(jié)構(gòu)的管理程模多個(gè)模系統(tǒng)結(jié)構(gòu)相關(guān)的管理程內(nèi)依賴(lài)數(shù)據(jù)內(nèi)存硬硬控制圖4-2-2 上下文中的內(nèi)存管理程序子系數(shù)據(jù)流、控制流和依賴(lài)性4-2-3編編程文件系統(tǒng)接O/S 說(shuō)非
15、內(nèi)核虛擬文件系內(nèi)存系統(tǒng)調(diào)用接理程獨(dú)立于系統(tǒng)的接度程模多個(gè)模網(wǎng)絡(luò)接邏輯系依賴(lài)獨(dú)立于設(shè)備的接數(shù)據(jù)控制設(shè)備驅(qū)動(dòng)程內(nèi)設(shè)備硬硬圖4-2-3 上下文中的虛擬文這意味著在內(nèi)存管理程序模塊和內(nèi)存管理程序硬件之間存在單向的數(shù)據(jù)流和控制流。此外,內(nèi)存管理程序使用文件系統(tǒng)來(lái)支持交換和內(nèi)存 I/O。這就意味著內(nèi)存管理程序需要向文件系統(tǒng)作過(guò)程調(diào)用,以便把頁(yè)面 到性 器中,或者從性 器中頁(yè)面。因?yàn)槲募到y(tǒng)請(qǐng)求不能立即完成,所以?xún)?nèi)存管理程序需要中斷某個(gè)進(jìn)程的執(zhí)行,直到該內(nèi)存頁(yè)面被交換回來(lái)。這就導(dǎo)致了內(nèi)存管理程序必須向進(jìn)程調(diào)度程序作過(guò)程調(diào)用。此外,因?yàn)槊總€(gè)進(jìn)程的內(nèi)存 信息是 在進(jìn)程調(diào)度程序的數(shù)據(jù)結(jié)構(gòu)中的,所以在內(nèi)存管理程序和
16、進(jìn)程調(diào)度程序之間存在單向的數(shù)據(jù)流。用戶(hù)進(jìn)程可以在進(jìn)程的地址空間中建立起新的內(nèi)存 關(guān)系,并在新映射的區(qū)域登記它們,以便發(fā)出頁(yè)錯(cuò)誤通知。這又導(dǎo)致了一個(gè)從內(nèi)存管理程序通過(guò)系統(tǒng)調(diào)用接口模塊到用戶(hù)進(jìn)程的控制流。用戶(hù)進(jìn)程不會(huì)發(fā)出傳統(tǒng)意義上的數(shù)據(jù)流,但是用戶(hù)進(jìn)程使用系統(tǒng)調(diào)用接口模塊中的系統(tǒng)調(diào)用select,可以從內(nèi)存管理程序獲取一些信息。目虛擬文件系統(tǒng)設(shè)計(jì)的目的是為了提供一個(gè) 在硬件設(shè)備上的數(shù)據(jù)的視圖。幾乎計(jì)算機(jī)中的所有設(shè)備都是使用通用設(shè)備驅(qū)動(dòng)程序接口來(lái)表示的。而虛擬文件系統(tǒng)則更進(jìn)一步,允許系統(tǒng)管理員在任意物理設(shè)備上掛裝任意一個(gè)邏輯文件系統(tǒng)的集合,邏輯文件系統(tǒng)提高了與其他操作系統(tǒng)標(biāo)準(zhǔn)的兼容性,并允許開(kāi)發(fā)用不
17、同的策略來(lái)實(shí)現(xiàn)文件系統(tǒng)。這個(gè)虛擬文件系統(tǒng)抽象了物理設(shè)備和邏輯文件系統(tǒng)的細(xì)節(jié),允許用戶(hù)進(jìn)程使用公共接口 文件,而無(wú)需知道文件實(shí)際駐留在哪個(gè)物理或邏輯系統(tǒng)上。除了傳統(tǒng)的文件系統(tǒng)目標(biāo)以外,虛擬文件系統(tǒng)還負(fù)責(zé)裝入新的可執(zhí)行程序。這個(gè)任務(wù)是由邏輯文件系統(tǒng)模塊完成的,這就使得Linux模每個(gè)硬件控制器都對(duì)應(yīng)一個(gè)設(shè)備驅(qū)動(dòng)程序模塊。因?yàn)榇嬖诖罅坎患嫒莸挠布O(shè)備,所以設(shè)備驅(qū)動(dòng)程序的數(shù)量也很多。Linux系統(tǒng)的大多數(shù)通用擴(kuò)展都是增加了新的設(shè)備驅(qū)動(dòng)程序。獨(dú)立于設(shè)備的接口模塊提供了所有設(shè)備的 視圖獨(dú)立于系統(tǒng)的接口提供了硬件資源的視圖,該視圖與硬件和邏輯文件系統(tǒng)無(wú)關(guān)。這一模塊使用面向塊的或面向字符的文件接口來(lái)表示所有資
18、源。最后,系統(tǒng)調(diào)用接口為用戶(hù)進(jìn)程提供了對(duì)文件系統(tǒng)的受控制的 。這個(gè)虛擬文件系統(tǒng)只把特定的功能導(dǎo)出給用戶(hù)進(jìn)程。所有的文件都是使用索引節(jié)點(diǎn)來(lái)表示的,每個(gè)索引結(jié)點(diǎn)結(jié)構(gòu)都包含著位置信息,以指定文件塊在物理設(shè)備上的位置。此外,索引節(jié)點(diǎn) 了指向邏輯文件系統(tǒng)中過(guò)程的指針,還存儲(chǔ)了指向?qū)⒁獔?zhí)行所需讀寫(xiě)操作的設(shè)備驅(qū)動(dòng)程序的指針。通過(guò)以這種方式 函數(shù)指針,邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序在內(nèi)核中自己時(shí),就不需要內(nèi)核依賴(lài)于任何特定的模塊。數(shù)據(jù)流、控制流和依賴(lài)性有個(gè)特定的設(shè)備驅(qū)動(dòng)程序,它就是ramdisk,這個(gè)設(shè)備分配主存的一個(gè)區(qū)域,并把它當(dāng)作 性 設(shè)備來(lái)對(duì)待。這個(gè)設(shè)備驅(qū)動(dòng)程序使用內(nèi)存管理程序來(lái)完成它的任務(wù),所以在文件系統(tǒng)
19、設(shè)備驅(qū)動(dòng)程序和內(nèi)存管理程序之間存在依賴(lài)性,控制流和數(shù)據(jù)流。網(wǎng)絡(luò)文件系統(tǒng)是受支持的一個(gè)特定的邏輯文件系統(tǒng)僅作為一個(gè)客戶(hù),該文件系統(tǒng)可以 另一臺(tái)計(jì)算機(jī)的文件,就好象它們是本地計(jì)算機(jī)的一部分。為了完成這個(gè)任務(wù),邏輯文件系統(tǒng)模塊需要使用網(wǎng)絡(luò)子系統(tǒng)來(lái)完成它的任務(wù)。這就導(dǎo)致在兩個(gè)子系統(tǒng)之間存在依賴(lài)性、數(shù)據(jù)流和控制流。正如前面在2.2節(jié)中所說(shuō)的那樣,內(nèi)存管理程序使用虛擬文件系統(tǒng)來(lái)完成內(nèi)存交換和內(nèi)存 I/O。此外,在進(jìn)程等待硬件請(qǐng)求完成時(shí),虛擬文件系統(tǒng)使用進(jìn)程調(diào)度程序來(lái)中斷進(jìn)程,而一旦請(qǐng)求完成則立刻恢復(fù)它們的執(zhí)行。最后,系統(tǒng)調(diào)用接口允許用戶(hù)進(jìn)程調(diào)用虛擬文件系統(tǒng),以便 或者獲取數(shù)據(jù)。與前一個(gè)子系統(tǒng)不同的是,這里
20、沒(méi)有為用戶(hù)提供隱式調(diào)用的注冊(cè)機(jī)制,所以在虛擬文件系統(tǒng)到用戶(hù)進(jìn)程之間沒(méi)有控制流(恢復(fù)進(jìn)程并不認(rèn)為是控制流。目網(wǎng)絡(luò)子系統(tǒng)允許Linux系統(tǒng)通過(guò)網(wǎng)絡(luò)與其他系統(tǒng)相連接。因?yàn)樗С执罅康挠布O(shè)備,所以相應(yīng)地也需要使用大量的網(wǎng)絡(luò)協(xié)議。網(wǎng)絡(luò)子系統(tǒng)抽象了這兩者在實(shí)現(xiàn)上的細(xì)節(jié),這樣用戶(hù)進(jìn)程和其他內(nèi)核子系統(tǒng)在網(wǎng)絡(luò)時(shí)就無(wú)需知道使用的是什么物理設(shè)備和協(xié)議了。模4-2-4編編程網(wǎng)絡(luò)接O/S說(shuō)非內(nèi)核網(wǎng)絡(luò)接虛擬件系系統(tǒng)調(diào)用接獨(dú)立于協(xié)議的接模多個(gè)模網(wǎng)絡(luò)協(xié)獨(dú)立于設(shè)備的接依賴(lài)數(shù)據(jù)控制 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程 內(nèi)設(shè)備硬硬度程進(jìn)程圖4-2-4 上下文中的網(wǎng)絡(luò)接口子系獨(dú)立于設(shè)備的接口模塊為所有的硬件設(shè)備提供了一個(gè)的視圖,這樣在子系統(tǒng)的高級(jí)別上
21、就不需要關(guān)于所使用的硬件的特定知識(shí)了。獨(dú)立于協(xié)議的接口模塊提供了一個(gè)獨(dú)立于硬件設(shè)備和網(wǎng)絡(luò)協(xié)議的接口。其他內(nèi)核子系統(tǒng)可以通過(guò)該接口模塊來(lái)網(wǎng)絡(luò),而無(wú)需依賴(lài)于特定的協(xié)議或硬件。每個(gè)網(wǎng)絡(luò)對(duì)象都表示成一個(gè)套接字。套接字與進(jìn)程的關(guān)系類(lèi)似于索引節(jié)點(diǎn)與進(jìn)程的關(guān)系。通過(guò)使兩個(gè)任務(wù)數(shù)據(jù)結(jié)構(gòu)指向同一個(gè)套接字?jǐn)?shù)據(jù)結(jié)構(gòu),進(jìn)程之間可以共享套接字。數(shù)據(jù)流、控制流和依賴(lài)性在等待硬件請(qǐng)求完成時(shí),網(wǎng)絡(luò)子系統(tǒng)使用進(jìn)程調(diào)度程序中斷和恢復(fù)進(jìn)程的執(zhí)行(這導(dǎo)致了依賴(lài)性、控制流和數(shù)據(jù)流。此絡(luò)子系統(tǒng)為擬文件系統(tǒng)提供了邏輯文件系統(tǒng)( NF的實(shí)現(xiàn),這導(dǎo)致了虛擬文件系統(tǒng)依賴(lài)于網(wǎng)絡(luò)接口,并與它之間存在數(shù)據(jù)流和控制流。第3Linux內(nèi)核是整個(gè)Linux
22、系統(tǒng)的系統(tǒng)結(jié)構(gòu)中的一層。在概念上內(nèi)核是由5個(gè)主要的子系統(tǒng)組成的:進(jìn)程調(diào)度程度、內(nèi)存管理程序、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進(jìn)程間通口。這些子系統(tǒng)之間是通過(guò)函數(shù)調(diào)用和共享數(shù)據(jù)結(jié)構(gòu)相互通信的。上, Linux內(nèi)核的系統(tǒng)結(jié)構(gòu)類(lèi)型與Garlan和Shaw在Garlan 1994中所描述的數(shù)據(jù)抽象類(lèi)型十分接近。內(nèi)核是由子系統(tǒng)所組成的,而子系統(tǒng)通過(guò)使用特定的過(guò)程接口來(lái)保持 表示的一致性。通過(guò)對(duì)每個(gè)子系統(tǒng)進(jìn)行認(rèn)真的解剖分析,可以看出它的系統(tǒng)結(jié)構(gòu)類(lèi)型與Garlan和Shaw的分層類(lèi)型十分相似。每一個(gè)子系統(tǒng)都是由模塊組成的,這些模塊只能與相鄰層相通信。Linux內(nèi)核的概念系統(tǒng)結(jié)構(gòu)已經(jīng)被證明是非常成功的;而它之所以成功
23、,關(guān)鍵在于它規(guī)定了開(kāi)發(fā)的組織和系統(tǒng)擴(kuò)展性。 Linux內(nèi)核系統(tǒng)結(jié)構(gòu)必須支持大量獨(dú)立的志愿開(kāi)發(fā)這就要求投入工作量最大的系統(tǒng)分區(qū)(如硬件設(shè)備驅(qū)動(dòng)程序和文件以及網(wǎng)絡(luò)協(xié)議)以一種可擴(kuò)展的方式來(lái)實(shí)現(xiàn)。Linux系統(tǒng)結(jié)構(gòu)者為了使這些系統(tǒng)可以擴(kuò)展,使用了一種數(shù)據(jù)抽象技術(shù):每個(gè)硬件設(shè)備驅(qū)動(dòng)程序都是作為一個(gè)獨(dú)立的模塊來(lái)實(shí)現(xiàn)的,而這些模塊又都支持一個(gè)通用接口。通過(guò)這種方式,單個(gè)的發(fā)可以加入個(gè)新的設(shè)驅(qū)動(dòng)程序,并且不需要與 Linux內(nèi)的其他開(kāi)發(fā)進(jìn)行很多交互。內(nèi)核由大量的志愿開(kāi)發(fā)實(shí)現(xiàn)成功,這個(gè)事實(shí)已經(jīng)證明了這個(gè)策略的正確性。Linux內(nèi)核的另一個(gè)重要展是加入了受支持件平臺(tái)。通過(guò)把與硬件相關(guān)的所有代碼分離到每個(gè)子系統(tǒng)各
24、自的模塊中,系統(tǒng)的系統(tǒng)結(jié)構(gòu)支持了這種擴(kuò)展性。通過(guò)這種方式,一小群發(fā)通過(guò)新實(shí)內(nèi)核機(jī)器關(guān)部,可以把 Linux內(nèi)核移植到新的硬件系統(tǒng)結(jié)構(gòu)下。術(shù)語(yǔ)定設(shè)備驅(qū)動(dòng)程序(Device 設(shè)備驅(qū)動(dòng)程序是與特定的硬件設(shè)備交互所需要的所有代碼。設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是內(nèi)核的一部分,但是Linux內(nèi)核提供了一種機(jī)制,它允許動(dòng)態(tài)裝入設(shè)備驅(qū)動(dòng)程序。索引節(jié)點(diǎn)即index node,可以被文件系統(tǒng)用來(lái)文件系統(tǒng)數(shù)據(jù)所的硬件地址。每索引節(jié)點(diǎn) 了一個(gè)文件塊到物理塊的關(guān)系,以及安全性方面以及計(jì)帳方面的其他一些信息。網(wǎng)絡(luò)文件系統(tǒng)(Network File System, 網(wǎng)絡(luò)文件系統(tǒng)是一個(gè)文件系統(tǒng)接口,它把 計(jì)算機(jī)上 的文件表示成本地計(jì)算
25、機(jī)上進(jìn)程進(jìn)程(也稱(chēng)為任務(wù))就是執(zhí)行中的程序,它由可執(zhí)行代碼和動(dòng)態(tài)數(shù)據(jù)所組成。內(nèi)核為每個(gè)進(jìn)程都保留了足夠多的信息,以便停止或恢復(fù)它的執(zhí)行。Ramdisk是一個(gè)設(shè)備驅(qū)動(dòng)程序,它把主存的一塊區(qū)域用作文件系統(tǒng)設(shè)備。它允許把經(jīng)常訪問(wèn)的文能隨提供效的區(qū)中,使用 Linux支持硬實(shí)時(shí)的需時(shí),這個(gè)特征非常有用。對(duì)于一般的情況而言,普通的文件系統(tǒng)高速緩存機(jī)制將高效地使用內(nèi)存,以提供對(duì)文件的高效。Linux支持進(jìn)程使用超過(guò)計(jì)算機(jī)上物理內(nèi)存數(shù)量的內(nèi)存。要做到這一點(diǎn),內(nèi)存管理程序必須把暫時(shí)不使用的內(nèi)存頁(yè)面交換到性 設(shè)備中。當(dāng)以后 該內(nèi)存時(shí),再把它交換回主存(這時(shí)可能會(huì)導(dǎo)致其他頁(yè)面被交換出去。參考文Garlan David Garlan和Mary Shaw, An Introduction to Software Architecture, Advances in Software Engineering and Knowledge Engineering, 第1卷,World Scientific Publishing Company, 1993。Monroe Robert T.Monroe, Andrew Kompanek, Ralph Melton和David Garlan Architectural
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司注銷(xiāo)委托代理服務(wù)協(xié)議
- 2025年信用擔(dān)保與抵押合同
- 2025年農(nóng)副產(chǎn)品直銷(xiāo)業(yè)務(wù)協(xié)議
- 2025年農(nóng)業(yè)用地承包權(quán)抵債協(xié)議范本
- 2025年優(yōu)惠協(xié)議價(jià)格
- 2025年會(huì)議室重構(gòu)性合作協(xié)議
- 2025年光通信電纜項(xiàng)目規(guī)劃申請(qǐng)報(bào)告范文
- 2025年信息安全集成項(xiàng)目合作協(xié)議
- 2025年個(gè)人財(cái)產(chǎn)抵押巨額借款合同示范文本
- 2025年企業(yè)電器租賃合同
- 湖北省普通高中2022-2023學(xué)年高一下學(xué)期學(xué)業(yè)水平合格性考試模擬化學(xué)(一)含解析
- 銀行案件防控培訓(xùn)課件
- 裝配式混凝土結(jié)構(gòu)施工技術(shù)講課課件
- 小型屠宰場(chǎng)可行性研究報(bào)告
- 急性呼吸道感染護(hù)理查房課件
- 物業(yè)品質(zhì)檢查標(biāo)準(zhǔn)及評(píng)分細(xì)則
- 密閉取芯完整
- 駕駛服務(wù)外包投標(biāo)方案(完整版)
- 全日制普通高級(jí)中學(xué)體育教學(xué)大綱
- 2023年敬老院重陽(yáng)節(jié)老年人活動(dòng)策劃方案通用
- 《Web前端綜合實(shí)戰(zhàn)》實(shí)訓(xùn)-課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論