豐富的嵌入式linux開發(fā)電子編程白皮書_第1頁
豐富的嵌入式linux開發(fā)電子編程白皮書_第2頁
豐富的嵌入式linux開發(fā)電子編程白皮書_第3頁
豐富的嵌入式linux開發(fā)電子編程白皮書_第4頁
豐富的嵌入式linux開發(fā)電子編程白皮書_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

系統(tǒng)結(jié)Linux內(nèi)核本身作為一個獨立的東西是沒有什么用的;它只是參與了一個更大的系統(tǒng),成為那個系統(tǒng)的一部分,而該系統(tǒng)從整體上看是非常有用的。因此,在整個系統(tǒng)的上下文中介4-1-1顯示了整個Linux操作系統(tǒng)的結(jié)構(gòu)分析。用戶應(yīng)用程序—在某個特定的Linux系統(tǒng)上運行的應(yīng)用程序集合,它將隨著該計算機eb圖4-1-1圖4-1-1Linux系統(tǒng)可分為4Linux內(nèi)核—這是本文的關(guān)注焦點;包括內(nèi)核抽象和對硬件資源(如CPU)的間接。、,、,這個系統(tǒng)劃分方法是照搬Garlan和Shaw在[Garlan194]只能與跟它相鄰的層通信。此外,子系統(tǒng)之間的依賴關(guān)系是從上到下的:靠上的層依賴于靠下的層Linux內(nèi)核,所以本文將完全不介紹用戶應(yīng)用程序子系統(tǒng),對硬件和Linux內(nèi)核向用戶進程提供了一個虛擬機器接口。編寫進程的時候并不需要知道計算機上安裝了哪些物理硬件—LinuxLinux以對用戶透明的方式支持多任務(wù):每個進程工作時就象它是計算機上唯一的進程,好象是獨占使用了主存和其他硬件資源一樣。內(nèi)核實際上同時運行許多個進程,并負責對硬件資源的間接,這樣可以保證各個進程的公平性,進程間的安全性。326第四部分Linux進程調(diào)度程序(SCHED)負責控制進程CPU。調(diào)度程序所使用的策略可以保證進內(nèi)核管理程序(MM)使多個進程可以安全地共享機器的主存系統(tǒng)。此外,內(nèi)核管理Linux可以支持進程使用超過系統(tǒng)中的內(nèi)存數(shù)量的內(nèi)存。暫時用不著的信息可以交換出內(nèi)存,存放到使用文件系統(tǒng)的永久性器上,然后在需要它們的時候再交換回來。虛擬文件系統(tǒng)(VFS)VFS抽象了不同硬件設(shè)備的細節(jié)。此外,VFS支持與其他操作系統(tǒng)兼容的不同的文件系統(tǒng)格式。進程間通信(IPC)子系統(tǒng)為單個Linux圖4-1-2是Linux內(nèi)核的高級分解,

從圖中可以看出,最中心最重要的子系統(tǒng)是進程調(diào)度程序:其他所有的子系統(tǒng)都依賴于進程調(diào)度程序,這是因為所有的子系統(tǒng)都需要中斷和恢復(fù)進程的執(zhí)行。一般來說,子系統(tǒng)會中斷那些等待硬件操作完成的進程,同時恢復(fù)那些操作已經(jīng)完成了的進程。例如,當某進程試圖通過網(wǎng)絡(luò)發(fā)送消息時,網(wǎng)絡(luò)接口可能需要中斷該進程,直到硬件成功完成了消息的發(fā)送。當

圖4-1-2子系

消息發(fā)送完以后(或者硬件返回出錯信號,則網(wǎng)絡(luò)接口將用返回碼來恢復(fù)該進程。返回碼顯示了操作是成功完成還是失敗。別的子系統(tǒng)(內(nèi)存管理程序、虛擬文件系統(tǒng)、以及進程間通信)都是由于相似的原因而必須依賴于進程調(diào)度程序。進程間通信子系統(tǒng)依賴于內(nèi)存管理程序來支持共享存通信機制。進程除了可以它們通常的私有內(nèi)存外,共享內(nèi)存通信機制將使它們可以一個公共的內(nèi)存區(qū)。虛擬文件系統(tǒng)使用網(wǎng)絡(luò)接口來支持網(wǎng)絡(luò)文件系統(tǒng)(NFS),它還使用內(nèi)存管理程序來提內(nèi)存管理程序使用虛擬文件系統(tǒng)來支持交換。這是內(nèi)存管理程序之所以依賴于進程調(diào)度程序的唯一原因。當某進程的內(nèi)存當前已經(jīng)被換出內(nèi)存時,內(nèi)存管理程序請求文件系統(tǒng)從永久性設(shè)備中去取該內(nèi)存,并中斷該進程。除了顯式的依賴關(guān)系以外,內(nèi)核中所有的子系統(tǒng)還依賴于一些在任何子系統(tǒng)中都沒有顯示出來的公共資源。它們包括:所有內(nèi)核子系統(tǒng)用于分配和釋放內(nèi)核所使用內(nèi)存的過程,打第1章系統(tǒng)結(jié) 印警告或錯誤信息的過程,以及系統(tǒng)調(diào)試過程等等。這些資源之所以稱之為非顯式的,是因為它們只能在圖1-1所示的內(nèi)核層中使用。這一級別的系統(tǒng)結(jié)構(gòu)類型類似于Garlan和Shaw在[Garlan1994]中所討論的數(shù)據(jù)抽象類型。這里描述的每一個系統(tǒng)都包含狀態(tài)信息,這些狀態(tài)信息可以使用過程接口來,而每個子系統(tǒng)都需要它們所管理的資源的完整性。

說明實現(xiàn)

圖4-1-3328第四部分LinuxLinux系統(tǒng)是由大量的所開發(fā)的(當前CREDITS文件列舉出了196個曾經(jīng)進行過Linux系統(tǒng)開發(fā)的開發(fā)人員。開發(fā)人員非常多,而且他們都是,這勢必會影響到系統(tǒng)的構(gòu)造。因為開發(fā)人員在地域上分布上很廣泛,所以很難開發(fā)出一個緊耦合的系統(tǒng)來—開發(fā)人員常常需要閱讀別人的代碼。因此,Linux系統(tǒng)系統(tǒng)結(jié)構(gòu)的原則是:把那些可能需要作很大修改的子系統(tǒng)—文件系統(tǒng)、硬件接口和網(wǎng)絡(luò)系統(tǒng)—設(shè)計成高度模塊化的系Linux實現(xiàn)可能需要支持具有不同接口的許多硬件設(shè)備,一種樸實的系統(tǒng)結(jié)構(gòu)是把所有硬件設(shè)備的實現(xiàn)做在一個子系統(tǒng)中。而一種支持多個開發(fā)人員的更好的方法是:把每個硬件設(shè)備的代碼分離成一個設(shè)備驅(qū)動程序,這些驅(qū)動程序是文件系統(tǒng)中獨立的圖4-1-3列出了曾經(jīng)在Linux內(nèi)核開發(fā)方面作出了貢獻的大部分開發(fā)人員,以及他們已經(jīng)實現(xiàn)了的區(qū)域。一些開發(fā)人員修改了內(nèi)核的很多部分。為了描述方便,我們沒有列出這些開發(fā)LinusTorvald是大部分內(nèi)核子系統(tǒng)的實現(xiàn)者,盡管后續(xù)的開發(fā)是由其他人完成的。該圖不能做到十分精確,因為在內(nèi)核開發(fā)過程中,開發(fā)人員的組成經(jīng)常變動,但從圖中基本可以看出哪些系統(tǒng)是開發(fā)人員花費了大量精力去實現(xiàn)的。該圖重新確認了前面描述過的內(nèi)核的大規(guī)模結(jié)構(gòu)。很有趣的是,很少有開發(fā)人員曾經(jīng)在多個系統(tǒng)上工作過,但這樣的人的確存在,它主要發(fā)生在那些存在子系統(tǒng)依賴性的多個子系統(tǒng)上。這種組織方式符合MelvinConway所拇指規(guī)則(參見[Raymond1993],即系統(tǒng)的組織應(yīng)該反映開發(fā)人員的組織。大部分開發(fā)人員都在開發(fā)硬件設(shè)備驅(qū)動程序、邏輯文件系統(tǒng)模塊、網(wǎng)絡(luò)設(shè)備驅(qū)動程序以及網(wǎng)絡(luò)協(xié)議模塊。內(nèi)核的這4個區(qū)域的系統(tǒng)結(jié)構(gòu)是最具有擴展性的,這一點也不奇怪。進程調(diào)度程序為每個活躍的進程一塊數(shù)據(jù)。這些數(shù)據(jù)塊是在鏈表中的,該鏈表稱為任務(wù)列表。進程調(diào)度程序常常一個當前指針,該指針顯示當前的活躍進程。內(nèi)存管理程序為每個進程都了一個從虛擬地址到物理地址的映射表,它還了一些有關(guān)如何取和替換特定頁面的其他信息。這一信息存放在內(nèi)存映射數(shù)據(jù)結(jié)構(gòu)中,該結(jié)構(gòu)存放在進程調(diào)度程序的任務(wù)列表中。從文件塊編號到物理設(shè)備地址的映射。如果兩個進程打開了同一個文件,則這兩個進程可以共享索引節(jié)點數(shù)據(jù)結(jié)構(gòu)。這一共享是通過指向同一個索引節(jié)點的任務(wù)數(shù)據(jù)塊來完成的。第1章系統(tǒng)結(jié) 所有的數(shù)據(jù)結(jié)構(gòu)都保存在進程調(diào)度程序的任務(wù)列表中。系統(tǒng)的每個進程都會有一個數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)中包含著指向內(nèi)存映射信息的指針,以及指向代表所有打開文件的索引節(jié)點的指針。最后,任務(wù)數(shù)據(jù)結(jié)構(gòu)還包含著指向一些數(shù)據(jù)結(jié)構(gòu)的指針,這些數(shù)據(jù)結(jié)構(gòu)代表了與每個任務(wù)相聯(lián)系的打開的網(wǎng)絡(luò)連接。 進程調(diào)度程序是Linux內(nèi)核中最重要的子系統(tǒng)。它的目標是控制對計算機CPU的,這調(diào)度策略模塊負責判定哪個進程對CPU有權(quán);策略的設(shè)計應(yīng)該使進程可以公平CPU。系統(tǒng)結(jié)構(gòu)相關(guān)的模塊一般使用公共接口設(shè)計而成,這樣可以抽象出任意特定的計算機CPU的通信,以中斷或者恢復(fù)進程的執(zhí)行。這些操作包括需要為每個進程保留哪些寄存器和狀態(tài)信息,以及執(zhí)行匯編代碼來影響中斷或者恢復(fù)操作。獨立于系統(tǒng)結(jié)構(gòu)的模塊與策略模塊互相通信,來確定接下來執(zhí)行哪個進程,然后調(diào)用系統(tǒng)結(jié)構(gòu)相關(guān)的模塊來恢復(fù)適當?shù)倪M程。此外,這個模塊調(diào)用內(nèi)存管理程序,來確保已經(jīng)為4-2-1

數(shù)據(jù)圖4-2-1系統(tǒng)調(diào)用接口模塊只允許用戶進程由內(nèi)核顯式打開的那些資源。這就決定了用戶進程必須依賴于內(nèi)核能提供一個很少變動的且定義良好的用戶接口,而不管其他的內(nèi)核模塊在第2章子系統(tǒng)的系統(tǒng)結(jié) 調(diào)度程序一個數(shù)據(jù)結(jié)構(gòu)—任務(wù)列表。其中每個項目對應(yīng)一個活躍進程,這個數(shù)據(jù)結(jié)構(gòu)包含足夠的信息,可以中斷和恢復(fù)進程的執(zhí)行,但同時也包含了一些記帳和狀態(tài)信息。在整個內(nèi)核層中都可以用到這個數(shù)據(jù)結(jié)構(gòu)。正如前面所說的那樣,進程調(diào)度程序調(diào)用內(nèi)存管理程序子系統(tǒng)。因此,進程調(diào)度程序依賴于內(nèi)存管理子系統(tǒng)。此外,其他所有的內(nèi)核子系統(tǒng)也都依賴于進程調(diào)度程序,在等待硬件請求完成時,可以中斷和恢復(fù)進程。這些依賴性是通過函數(shù)調(diào)用以及對共享任務(wù)列表數(shù)據(jù)結(jié)構(gòu)的來體現(xiàn)的。所有的內(nèi)核子系統(tǒng)都會讀寫代表當前任務(wù)的數(shù)據(jù)結(jié)構(gòu),這導致了整個系統(tǒng)中數(shù)據(jù)的單向流動。O/S服務(wù)層為用戶進程提供了一個接口,以登錄定時器通知。這對應(yīng)于[Garlan1994]中所描述的隱式執(zhí)行系統(tǒng)結(jié)構(gòu)類型。它會引起從調(diào)度程序到用戶進程的控制流。類似恢復(fù)靜止進程這樣普通的例子不應(yīng)看作是普通意義上的控制流,因為用戶進程不能檢測出這個操作。最后,調(diào)度程序與CPU通信,以便中斷和恢復(fù)進程,這會導致數(shù)據(jù)流和控制流。CPU負責中斷當前執(zhí)行的進程,并允許內(nèi)核調(diào)度其他的進程。內(nèi)存管理程序子系統(tǒng)負責控制進程對硬件內(nèi)存資源的。這是通過硬件內(nèi)存管理系統(tǒng)完成的,該系統(tǒng)提供進程內(nèi)存與計算機的物理內(nèi)存之間的映射。內(nèi)存管理程序子系統(tǒng)為個進程都一個這樣的映射關(guān)系,這樣,兩個進程就可以同一個虛擬內(nèi)存地址,而實際使用的是不同的物理內(nèi)存位置。此外,內(nèi)存管理程序子系統(tǒng)支持交換,它把暫時不使用的內(nèi)存頁面移出內(nèi)存,存放到久性器中,樣計算機可以支持比物理內(nèi)存要的虛擬內(nèi)存。系統(tǒng)結(jié)構(gòu)無關(guān)的管理程序執(zhí)行每個進程的映射工作和虛擬內(nèi)存的交換工作。當出現(xiàn)頁面錯時,該模塊負責判定應(yīng)該把哪個內(nèi)存頁面移出內(nèi)存—這里不存在獨立的策略模塊,這是因為這個策略不太可能會有變化。內(nèi)存管理程序子系統(tǒng)還提供了一個系統(tǒng)調(diào)用接口,以提供對用戶進程的約束。該接口允許用戶進程分配釋放,并可執(zhí)行內(nèi)存射文件I/O。332第四部分Linux務(wù)列表數(shù)據(jù)結(jié)構(gòu)中,這一映射關(guān)系是以的方式的。除了這一映射關(guān)系以外,數(shù)據(jù)塊中的其他細節(jié)也將告訴內(nèi)存管理程序如何取頁面及頁面。例如,可執(zhí)行代碼可以使用可執(zhí)行映象作為后援,但動態(tài)分配的數(shù)據(jù)必須備份到系統(tǒng)分頁文件中。最后,內(nèi)存管理程序在這數(shù)據(jù)構(gòu)中了信和計信息以保證系安全,如圖4-2-2示。

依賴于圖4-2-2

依賴于數(shù)據(jù)流 圖4-2-3第2章子系統(tǒng)的系統(tǒng)結(jié) —這意味著在內(nèi)存管理程序模塊和內(nèi)存管理程序硬件之間存在單向的數(shù)據(jù)流和控制流。此外,內(nèi)存管理程序使用文件系統(tǒng)來支持交換和內(nèi)存映射I/O。這就意味著內(nèi)存管理程序需要向文件系統(tǒng)作過程調(diào)用,以便把頁面到永久性器中,或者從永久性器中頁面。因為文件系統(tǒng)請求不能立即完成,所以內(nèi)存管理程序需要中斷某個進程的執(zhí)行,直到該內(nèi)存頁面被交換回來。這就導致了內(nèi)存管理程序必須向進程調(diào)度程序作過程調(diào)用。此外,因為每個進程的內(nèi)存映射信息是在進程調(diào)度程序的數(shù)據(jù)結(jié)構(gòu)中的,所以在內(nèi)存管理程序和進程調(diào)度程序之間存在單向的數(shù)據(jù)流。用戶進程可以在進程的地址空間中建立起新的內(nèi)存映射關(guān)系,并在新映射的區(qū)域登記它們,以便發(fā)出頁錯誤通知。這又導致了一個從內(nèi)存管理程序通過系統(tǒng)調(diào)用接口模塊到用戶進程的控制流。用戶進程不會發(fā)出傳統(tǒng)意義上的數(shù)據(jù)流,但是用戶進程使用系統(tǒng)調(diào)用接口模塊中的系統(tǒng)調(diào)用select,可以從內(nèi)存管理程序獲取一些信息。虛擬文件系統(tǒng)設(shè)計的目的是為了提供一個在硬件設(shè)備上的數(shù)據(jù)的統(tǒng)一視圖。幾乎計算機中的所有設(shè)備都是使用通用設(shè)備驅(qū)動程序接口來表示的。而虛擬文件系統(tǒng)則更進一步,允許系統(tǒng)管理員在任意物理設(shè)備上掛裝任意一個邏輯文件系統(tǒng)的集合,邏輯文件系統(tǒng)提高了與其他操作系統(tǒng)標準的兼容性,并允許開發(fā)人員用不同的策略來實現(xiàn)文件系統(tǒng)。這個虛擬文件系統(tǒng)抽象了物理設(shè)備和邏輯文件系統(tǒng)的細節(jié),允許用戶進程使用公共接口文件,而無需知道文件實際駐留在哪個物理或邏輯系統(tǒng)上。除了傳統(tǒng)的文件系統(tǒng)目標以外,虛擬文件系統(tǒng)還負責裝入新的可執(zhí)行程序。這個任務(wù)是由邏輯文件系統(tǒng)模塊完成的,這就使得Linux每個硬件控制器都對應(yīng)一個設(shè)備驅(qū)動程序模塊。因為存在大量不兼容的硬件設(shè)備,所以設(shè)備驅(qū)動程序的數(shù)量也很多。Linux系統(tǒng)的大多數(shù)通用擴展都是增加了新的設(shè)備驅(qū)動程序。最后,系統(tǒng)調(diào)用接口為用戶進程提供了對文件系統(tǒng)的受控制的。這個虛擬文件系統(tǒng)只把特定的功能導出給用戶進程。所有的文件都是使用索引節(jié)點來表示的,每個索引結(jié)點結(jié)構(gòu)都包含著位置信息,以指定文件塊在物理設(shè)備上的位置。此外,索引節(jié)點了指向邏輯文件系統(tǒng)中過程的指針,還存儲了指向?qū)⒁獔?zhí)行所需讀寫操作的設(shè)備驅(qū)動程序的指針。通過以這種方式函數(shù)指針,邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序在內(nèi)核中自己時,就不需要內(nèi)核依賴于任何特定的模塊。334第四部分Linuxramdisk,這個設(shè)備分配主存的一個區(qū)域,并把它當作永久性設(shè)備來對待。這個設(shè)備驅(qū)動程序使用內(nèi)存管理程序來完成它的任務(wù),所以在文件系統(tǒng)設(shè)備驅(qū)動程序和內(nèi)存管理程序之間存在依賴性,控制流和數(shù)據(jù)流。網(wǎng)絡(luò)文件系統(tǒng)是受支持的一個特定的邏輯文件系統(tǒng)僅作為一個客戶,該文件系統(tǒng)可以另一臺計算機的文件,就好象它們是本地計算機的一部分。為了完成這個任務(wù),邏輯文件系統(tǒng)模塊需要使用網(wǎng)絡(luò)子系統(tǒng)來完成它的任務(wù)。這就導致在兩個子系統(tǒng)之間存在依賴性、數(shù)據(jù)流和控制流。正如前面在2.2節(jié)中所說的那樣,內(nèi)存管理程序使用虛擬文件系統(tǒng)來完成內(nèi)存交換和內(nèi)存映射I/O。此外,在進程等待硬件請求完成時,虛擬文件系統(tǒng)使用進程調(diào)度程序來中斷進程,而一旦請求完成則立刻恢復(fù)它們的執(zhí)行。最后,系統(tǒng)調(diào)用接口允許用戶進程調(diào)用虛擬文件系統(tǒng),以便或者獲取數(shù)據(jù)。與前一個子系統(tǒng)不同的是,這里沒有為用戶提供隱式調(diào)用的注冊機制,所以在虛擬文件系統(tǒng)到用戶進程之間沒有控制流(恢復(fù)進程并不認為是控制流。網(wǎng)絡(luò)子系統(tǒng)允許Linux系統(tǒng)通過網(wǎng)絡(luò)與其他系統(tǒng)相連接。因為它支持大量的硬件設(shè)備,所以相應(yīng)地也需要使用大量的網(wǎng)絡(luò)協(xié)議。網(wǎng)絡(luò)子系統(tǒng)抽象了這兩者在實現(xiàn)上的細節(jié),這樣用戶進程和其他內(nèi)核子系統(tǒng)在網(wǎng)絡(luò)時就無需知道使用的是什么物理設(shè)備和協(xié)議了。

圖4-2-4第2章子系統(tǒng)的系統(tǒng)結(jié) 每個網(wǎng)絡(luò)對象都表示成一個套接字。套接字與進程的關(guān)系類似于索引節(jié)點與進程的關(guān)系。通過使兩個任務(wù)數(shù)據(jù)結(jié)構(gòu)指向同一個套接字數(shù)據(jù)結(jié)構(gòu),進程之間可以共享套接字。在等待硬件請求完成時,網(wǎng)絡(luò)子系統(tǒng)使用進程調(diào)度程序中斷和恢復(fù)進程的執(zhí)行(這導致了依賴性、控制流和數(shù)據(jù)流(NFS)的實現(xiàn),這導致了虛擬文件系統(tǒng)依賴于網(wǎng)絡(luò)接口,并與它之間存在數(shù)據(jù)流和控制流。 Linux內(nèi)核是整個Linux系統(tǒng)的系統(tǒng)結(jié)構(gòu)中的一層。在概念上內(nèi)核是由5個主要的子系統(tǒng)組成的:進程調(diào)度程度、內(nèi)存管理程序、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進程間通口。這些子系統(tǒng)之間是通過函數(shù)調(diào)用和共享數(shù)據(jù)結(jié)構(gòu)相互通信的。,Linux內(nèi)核的系統(tǒng)結(jié)構(gòu)類型與Garlan和Shaw在[Garlan1994]中所描述的數(shù)據(jù)抽象類型十分接近。內(nèi)核是由子系統(tǒng)所組成的,而子系統(tǒng)通過使用特定的過程接口來保持內(nèi)部表示的一致性。通過對每個子系統(tǒng)進行認真的解剖分析,我們可以看出它的系統(tǒng)結(jié)構(gòu)類型與Garlan和Shaw的分層類型十分相似。每一個子系統(tǒng)都是由模塊組成的,這些模塊只能與相鄰層相通信。Linux內(nèi)核的概念系統(tǒng)結(jié)構(gòu)已經(jīng)被證明是非常成功的;而它之所以成功,關(guān)鍵在于它規(guī)定Linux內(nèi)核系統(tǒng)結(jié)構(gòu)必須支持大量獨立的志愿開發(fā)人員。這就要求投入工作量最大的系統(tǒng)分區(qū)(如硬件設(shè)備驅(qū)動程序和文件以及網(wǎng)絡(luò)協(xié)議)以一種可擴展的方式來實現(xiàn)。Linux系統(tǒng)結(jié)構(gòu)者為了使這些系統(tǒng)可以擴展,使用了一種數(shù)據(jù)抽象技術(shù):每個硬件設(shè)備驅(qū)動程序都是作為一個獨立的模塊來實現(xiàn)的,而這些模塊又都支持一個通用接口。通過這種方式,單個的開發(fā)人員可以加入一個新的設(shè)備驅(qū)動程序,并且不需要與Linux內(nèi)核的其他開發(fā)人員進行很多交互。內(nèi)核由大量的志愿開發(fā)人員實現(xiàn)成功,這個事實已經(jīng)證明了這個策略的正確性。Linux內(nèi)核的另一個重要展是加入了受支持件平臺。通過把與硬件相關(guān)的所有代碼分離到每個子系統(tǒng)各自的模塊中,系統(tǒng)的系統(tǒng)結(jié)構(gòu)支持了這種擴展性。通過這種方式,Linux內(nèi)核移植到新的硬件系統(tǒng)結(jié)構(gòu)下。 術(shù)語定設(shè)備驅(qū)動程序(Device設(shè)備驅(qū)動程序是與特定的硬件設(shè)備交互所需要的所有代碼。設(shè)備驅(qū)動程序?qū)嶋H上是內(nèi)核的一部分,但是Linux內(nèi)核提供了一種機制,它允許動態(tài)裝入設(shè)備驅(qū)動程序。索引節(jié)點即indexnode,可以被文件系統(tǒng)用來文件系統(tǒng)數(shù)據(jù)所的硬件地址。每個索引節(jié)點了一個文件塊到物理塊的映射關(guān)系,以及安全性方面以及計帳方面的其他一些信息。網(wǎng)絡(luò)文件系統(tǒng)(NetworkFileSystem,網(wǎng)絡(luò)文件系統(tǒng)是一個文件系統(tǒng)接口,它把計算機上的文件表示成本地計算機上的文件系統(tǒng)。進程進程(也稱為任務(wù))就是執(zhí)行中的程序,它由可執(zhí)行代碼和動態(tài)數(shù)據(jù)所組成。內(nèi)核為每個進程都保留了足夠多的信息,以便停止或恢復(fù)它的執(zhí)行。Ramdisk是一個設(shè)備驅(qū)動程序,它把主存的一塊區(qū)域用作文件系統(tǒng)設(shè)備。它允許把經(jīng)常訪問的文件在能隨時提供有效的區(qū)域中,在使用Linux支持硬實時的需求時,這個特征非常有用。對于一般的情況而言,普通的文件系統(tǒng)高速緩存機制將高效地使用內(nèi)存,以提供對文件的高效。Linux支持進程使用超過計算機上物理內(nèi)存數(shù)量的內(nèi)存。要做到這一點,內(nèi)存管理程序必須把暫時不使用的內(nèi)存頁面交換到永久性設(shè)備中。當以后該內(nèi)存時,再把它交換回主存(這時可能會導致其他頁面被交換出去。 參考文GarlanDavidGarlan和MaryShaw,AnIntroductiontoSoftwareArchitecture,AdvancesinSoftwareEngineeringandKnowledgeEngineering,第1卷,WorldScientificPublishing,1993。MonroeRobertT.Monroe,AndrewKompanek,RalphMelton和DavidGarlanArchitecturalStyles,DesignPatternsandObjects,IEEESoftwareJanuary1997,pp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論