2.3 Overview of the Kernel Structure
下圖展示了Linux內(nèi)核的五個(gè)子系統(tǒng)之間的關(guān)系,,箭頭由依賴子系統(tǒng)指向被依賴的子系統(tǒng): Figure 2.2: Kernel Subsystem Overview
從圖中可以看出來,,進(jìn)程調(diào)度子系統(tǒng)是內(nèi)核的核心子系統(tǒng):其它子系統(tǒng)都對(duì)進(jìn)程調(diào)度子系統(tǒng)有依賴,,因?yàn)槠渌酉到y(tǒng)都有暫停(suspend)和恢復(fù)(resume)進(jìn)程的功能需要,。通常,某子系統(tǒng)會(huì)在等待硬件操作而暫停進(jìn)程,,爾后在操作完成后恢復(fù)進(jìn)程,。例如,當(dāng)進(jìn)程發(fā)一條網(wǎng)絡(luò)消息后,,網(wǎng)絡(luò)接口可能需要暫停進(jìn)程,,直到硬件成功地完成信息的發(fā)送。在消息被發(fā)出后,,網(wǎng)絡(luò)接口返回一個(gè)代碼表示操作的成功與否,,然后恢復(fù)進(jìn)程。其它子系統(tǒng)(內(nèi)存管理子系統(tǒng),、虛擬文件系統(tǒng),、進(jìn)程互通信子系統(tǒng))都有類似的原因而依賴于進(jìn)程調(diào)度子系統(tǒng)。
各個(gè)子系統(tǒng)之間的其它依賴關(guān)不那么明顯,,但也同等重要:
進(jìn)程調(diào)度與內(nèi)存管理 :進(jìn)程調(diào)度子系統(tǒng)[使用]內(nèi)存管理子系統(tǒng)來調(diào)整進(jìn)程的物理內(nèi)存映射表,,這個(gè)調(diào)整動(dòng)作發(fā)生進(jìn)程被恢復(fù)時(shí)。(KEMIN:陳莉君的《深入分析 Linux內(nèi)核源代碼》里說進(jìn)程調(diào)度依賴內(nèi)存管理在于“在多道程序環(huán)境下,,程序要運(yùn)行必須為之創(chuàng)建進(jìn)程,,而創(chuàng)建進(jìn)程的第一件事,就是要將程序和數(shù)據(jù)裝入內(nèi)存”,,這就要看進(jìn)程創(chuàng)建是不是進(jìn)程調(diào)度的功能了,。)
進(jìn)程互通信與內(nèi)存管理 :進(jìn)程互通信子系統(tǒng)依賴內(nèi)存管理實(shí)現(xiàn)共享內(nèi)存互通信機(jī)制,這種機(jī)制允許兩個(gè)進(jìn)程除了訪問自己的私有內(nèi)存外,,還可訪問一段共同的內(nèi)存區(qū)域,。
虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口 :虛擬文件系統(tǒng)[利用]網(wǎng)絡(luò)接口實(shí)現(xiàn)網(wǎng)絡(luò)文件系統(tǒng)(NFS),,也利用內(nèi)存管理子系統(tǒng)實(shí)現(xiàn)RAMDISK設(shè)備。
內(nèi)存管理與虛擬文件系統(tǒng) :內(nèi)存管理子系統(tǒng)利用虛擬文件系統(tǒng)實(shí)現(xiàn)對(duì)換機(jī)制(swapping),,這也是內(nèi)存管理子系統(tǒng)依賴于進(jìn)程調(diào)度的唯一原因,。當(dāng)一個(gè)進(jìn)程讀取的內(nèi)存頁(yè)被換出(swapped out)時(shí),內(nèi)存管理向文件系統(tǒng)發(fā)出請(qǐng)求,,同時(shí),,掛起當(dāng)前正在運(yùn)行的進(jìn)程。
除上圖所示的依賴關(guān)系以外,,內(nèi)核中的所有子系統(tǒng)還要依賴一些共同的資源,,但在圖中并沒有顯示出來。這些資源包括所有子系統(tǒng)都用到的子過程,,例如分配和釋放內(nèi)存空間的子過程,,打印警告或錯(cuò)誤信息的子過程,還有系統(tǒng)的調(diào)試?yán)痰?。這些公共子過程是默認(rèn)全局可用的,,大家都依賴它們。
3.1 Process Scheduler Architecture
3.1.1 Goals 進(jìn)程調(diào)度子系統(tǒng)負(fù)責(zé)控制對(duì)CPU的訪問,,包括來自用戶進(jìn)程的訪問和內(nèi)核其它子系統(tǒng)的訪問,。 3.1.2 Modules
進(jìn)程調(diào)度子系由四個(gè)主要的模塊組成: 調(diào)度策略模塊負(fù)責(zé)裁決(judging)哪個(gè)進(jìn)程將訪問CPU;為了提高分配CPU的公平性,,調(diào)度策略需經(jīng)萬分設(shè)計(jì),。
體系相關(guān)模塊組(Architecture-specific modules)負(fù)責(zé)隱藏特定的體系功能細(xì)節(jié),為上一層(體系無關(guān)模塊)提供一系列公共抽象接口(比如暫?;蚧謴?fù)進(jìn)程的操作),。這些模塊主要任務(wù)是進(jìn)行進(jìn)程切換…… 體系無關(guān)模塊(architecture-independent module)負(fù)責(zé)與調(diào)度策略模塊通信,獲取調(diào)度信息,,然后調(diào)用體系相關(guān)模塊進(jìn)行進(jìn)程切換。此外,,本模塊還要調(diào)用內(nèi)存管理模塊,,確保被選中的進(jìn)程的內(nèi)存數(shù)據(jù)被正確的恢復(fù)(KEMIN:進(jìn)程被調(diào)出CPU后再次進(jìn)入CPU前,內(nèi)存狀態(tài)可能不完整,,請(qǐng)看內(nèi)存管理子系統(tǒng)),。 系統(tǒng)調(diào)用接口模塊………… Figure 3.1: Process Scheduler Subsystem in Context
3.1.3 Data Representation
調(diào)度程序負(fù)責(zé)[維護(hù)](maintains)一個(gè)數(shù)據(jù)結(jié)構(gòu)——任務(wù)列表(task list),每個(gè)活動(dòng)的進(jìn)程對(duì)應(yīng)列表上的一項(xiàng),。這個(gè)數(shù)據(jù)結(jié)構(gòu)包含了進(jìn)程暫停和恢復(fù)的足夠信息,;此外還有一些日志和賬戶管理信息。這個(gè)數(shù)據(jù)在整個(gè)內(nèi)核層都是可見的,。 b.有想過進(jìn)程控制塊除了作為調(diào)度程序進(jìn)行計(jì)算的根據(jù)外,,還有更高的一層的更本質(zhì)的原因嗎,?進(jìn)程控制塊里的狀態(tài)信息種類存在的理由是什么呢?進(jìn)程控制塊的另一個(gè)名字叫上下文數(shù)據(jù)塊(context block),,有上下文證明發(fā)生了斷裂現(xiàn)象,。可以回想過去單道計(jì)算的情景,,計(jì)算機(jī)要完成計(jì)算任務(wù)必須是軟硬結(jié)合,,更直接的理解是,硬件(處理器)和程序是連體的,,后來多道技術(shù)的需要產(chǎn)生了軟硬斷裂現(xiàn)象,。所以進(jìn)程控制塊的信息一部分是用來維護(hù)這種斷裂的恢復(fù)的(其中有體系相關(guān)的數(shù)據(jù)),也有一部分是用作恢復(fù)策略的根據(jù),。
3.1.4 Dependencies, Data Flow, and Control Flow
前面提到,,進(jìn)程調(diào)度子系統(tǒng)對(duì)內(nèi)存管理子系統(tǒng)是有依賴的。而其它子系統(tǒng)因?yàn)槟承┎僮鞫枰獣和.?dāng)前進(jìn)程而依賴于進(jìn)程調(diào)度子系統(tǒng),。依賴的體現(xiàn)是子系統(tǒng)間的函數(shù)調(diào)用和對(duì)任務(wù)列表(task list)的共享訪問,。對(duì)任務(wù)列表(也就是進(jìn)程控制塊)可讀可寫的的子系統(tǒng)與進(jìn)程調(diào)度子系統(tǒng)間有雙向的(bi-directional)數(shù)據(jù)流。 除了內(nèi)核層存在數(shù)據(jù)和控制流外,,系統(tǒng)服務(wù)層(O/S services)為用戶進(jìn)程提供了注冊(cè)(register)定時(shí)通知(timer notification)的接口,,這就是《An Introduction to Software Architecture 》提到過的[隱式調(diào)用風(fēng)格]。通過隱式調(diào)用,,調(diào)度程序可以把控制流反轉(zhuǎn)回進(jìn)程,,當(dāng)有通知事件直接調(diào)用用戶進(jìn)程(的注冊(cè)處理函數(shù))。一般認(rèn)為喚醒睡眠狀態(tài)的進(jìn)程的動(dòng)作不算是一種控制流,,因?yàn)橛脩舨荒軝z測(cè)到這個(gè)操作,。最后,調(diào)度程序與CPU通信,,暫停和恢復(fù)進(jìn)程運(yùn)行,,這個(gè)動(dòng)作有數(shù)據(jù)流和控制流進(jìn)出兩子系統(tǒng)。
隱式調(diào)用風(fēng)格(implicit invocation style)
The idea behind implicit invocation is that instead of invoking a procedure directly, a component can announce (or broadcast) one or more events. Other components in the system can register an interest in an event by associating a procedure with the event. When the event is announced the system itself invokes all of the procedures that have been registered for the event. Thus an event announcement ``implicitly'' causes the invocation of procedures in other modules.
--------------------------------------------------------------------------------
依賴是什么,? ④倚靠,;依仗:信賴|依賴|賴以生存。
dependency n.依靠, 信賴, 從屬, 從屬物, 屬國(guó), 屬地
dependency (名) 附屬國(guó), 附屬地; 附屬物; 依靠, 信賴; 癮
dependence when you need something or someone all the time, especially in order to continue existing or operating:
--------------------------------------------------------------------------------
控制流與數(shù)據(jù)流 控制流
專注的問題是程序的整體控制軌跡是怎樣的
數(shù)據(jù)參與控制任務(wù)的完成,,但它不是主要的 論證關(guān)于計(jì)算(computation)的次序(order) 數(shù)據(jù)流 專注的問題是數(shù)據(jù)是怎樣在各計(jì)算步驟間移動(dòng)的
隨著數(shù)據(jù)的移動(dòng),,控制也被激活 論證關(guān)于數(shù)據(jù)的可用性(availability)、數(shù)據(jù)轉(zhuǎn)化(transformation)和數(shù)據(jù)延遲(latency) --------------------------------------------------------------------------------
3.2 Memory Manager Architecture
3.2.1 Goals 內(nèi)存管理子系統(tǒng)負(fù)責(zé)控制進(jìn)程對(duì)硬件內(nèi)存資源的訪問,。這個(gè)任務(wù)可能需要硬件機(jī)構(gòu)(比如MMU)輔助來實(shí)現(xiàn)進(jìn)程邏輯地址到機(jī)器物理地址的映射,。這個(gè)映射是基于每個(gè)進(jìn)程的,所以每個(gè)進(jìn)程都擁有屬于自己的邏輯地址空間。此外,,內(nèi)存管理子系統(tǒng)實(shí)現(xiàn)了對(duì)換機(jī)制,,負(fù)責(zé)將暫時(shí)不使用的內(nèi)存頁(yè)轉(zhuǎn)移到外存。 3.2.2 Modules
內(nèi)存管理子系統(tǒng)由三個(gè)模塊組成: 體系相關(guān)模塊:與進(jìn)度管理子系統(tǒng)的體系相關(guān)模塊功能類似,,對(duì)硬件體系抽象一些虛擬接口,;
體系無關(guān)模塊:本模塊執(zhí)行所有地址映射和虛擬內(nèi)存對(duì)換,負(fù)責(zé)包括決定當(dāng)產(chǎn)生缺頁(yè)事件時(shí)哪個(gè)內(nèi)存頁(yè)將被替換,。與進(jìn)程調(diào)度子系統(tǒng)不同,,本子系統(tǒng)沒有另外的替換策略模塊,因?yàn)樘鎿Q很少很更改,,沒有必須獨(dú)立出來產(chǎn)生不必要的性能損耗,。 系統(tǒng)調(diào)用模塊為用戶進(jìn)程提供有限的訪問接口。用戶進(jìn)程可以通過這個(gè)接口進(jìn)行存儲(chǔ)分配和釋放,,還可以執(zhí)行內(nèi)存映射文件I/O,。 3.2.3 Data Representation 內(nèi)存管理子系統(tǒng)為每個(gè)進(jìn)程維護(hù)一張地址映射表。這張映射表的首地址被保存到該進(jìn)程的進(jìn)程控制塊(KEMIN:具實(shí)現(xiàn)請(qǐng)看源碼 ),,以作關(guān)聯(lián),。此外,為了實(shí)現(xiàn)內(nèi)存頁(yè)調(diào)度,,映射表還要提供關(guān)于頁(yè)調(diào)度信息,。最后,為了安全性,,映射表還要有權(quán)限和賬戶信息,。 Figure 3.2: Memory Manager subsystem in context
3.2.4 Data Flow, Control Flow, and Dependencies
內(nèi)存管理子系統(tǒng)負(fù)責(zé)控制內(nèi)存硬件,并對(duì)當(dāng)產(chǎn)生缺頁(yè)事件時(shí)接收并處理這個(gè)事件,。所以,,在內(nèi)存管理子系統(tǒng)和內(nèi)存硬件之間有雙向的數(shù)據(jù)和控制流。另外,,內(nèi)存管理子系統(tǒng)[利用]文件系統(tǒng)實(shí)現(xiàn)對(duì)換和[內(nèi)存映射I/O],。具體內(nèi)存管理子系統(tǒng)通過函數(shù)調(diào)用,調(diào)用文件系統(tǒng),,實(shí)現(xiàn)頁(yè)面替換或?qū)Q,。由于文件I/O相對(duì)較慢,內(nèi)存管理子系統(tǒng)得先暫停當(dāng)前進(jìn)程,,這個(gè)功能產(chǎn)生了一個(gè)對(duì)進(jìn)程調(diào)度子系統(tǒng)的調(diào)用依賴。又因?yàn)槊總€(gè)進(jìn)程的內(nèi)存映射表都是保存到進(jìn)程調(diào)度程序的數(shù)據(jù)結(jié)構(gòu)的,,所以在內(nèi)存管理子系統(tǒng)和進(jìn)程調(diào)度程序之間有雙向的數(shù)據(jù)流,。 KEMIN:前面說了,地址映射表是作為一個(gè)指針引用保存在進(jìn)程控制塊的,這里又說映射表是直接保存在調(diào)度程序的數(shù)據(jù)結(jié)構(gòu),,有少許前后不對(duì)應(yīng),,不過使用的術(shù)語(yǔ)也不一樣,不夠嚴(yán)謹(jǐn),。不過各子系統(tǒng)的功能實(shí)現(xiàn)需要相應(yīng)的數(shù)據(jù)結(jié)構(gòu)是無容置疑的,。具體細(xì)節(jié)有待再澄清……
3.3 Virtual File System Architecture
Figure 3.3: Virtual File System in Context
3.3.1 Goals
虛擬文件系統(tǒng)設(shè)計(jì)的目的是為了給保存在各種外存硬設(shè)備的數(shù)據(jù)一個(gè)一致的視圖。幾乎所有計(jì)算機(jī)硬件設(shè)備都是通過一個(gè)通用的設(shè)備驅(qū)動(dòng)接口連接到主機(jī)的,。虛擬文件系統(tǒng)則走得更遠(yuǎn),,透過虛擬文件系統(tǒng),系統(tǒng)管理員可以把任何物理設(shè)備上的任何邏輯文件系統(tǒng)掛接(mount)入主機(jī),。邏輯文件系統(tǒng)提高了各操作系統(tǒng)標(biāo)準(zhǔn)的兼容性,,容許開發(fā)人員使用不同的策略實(shí)現(xiàn)文件系統(tǒng)。虛擬文件系統(tǒng)通過抽象既隱藏了物理設(shè)備的細(xì)節(jié),,也隱藏了邏輯文件系統(tǒng)的特殊細(xì)節(jié),,用戶進(jìn)程可使用一個(gè)通用的接口訪問文件數(shù)據(jù)。 除了一般文件系統(tǒng)的功能目標(biāo)外,,虛擬文件系統(tǒng)也負(fù)責(zé)加載新的可執(zhí)行程序,。邏輯文件系統(tǒng)模塊負(fù)責(zé)實(shí)現(xiàn)這個(gè)功能,有了它,,Linux可支持多種可執(zhí)行文件格式,。
3.3.2 Modules
設(shè)備驅(qū)動(dòng)模塊組:每一種系統(tǒng)支持的設(shè)備(硬件控制器)都要有一相相應(yīng)的驅(qū)動(dòng)程序模塊。由于市面上存在大量不兼容的硬件設(shè)備,,所以系統(tǒng)有很多設(shè)備驅(qū)動(dòng)程序,。Linux系統(tǒng)最常見的升級(jí)是添加新的設(shè)備驅(qū)動(dòng)程序。 設(shè)備無關(guān)模塊:這個(gè)模塊隱藏了所有設(shè)備的細(xì)節(jié),,提供一致的接口給邏輯文件系統(tǒng),; 邏輯文件系統(tǒng)組:每一種系統(tǒng)支持的文件系統(tǒng)都有相應(yīng)的邏輯文件系統(tǒng)模塊; 系統(tǒng)無關(guān)接口:本模塊對(duì)邏輯文件系統(tǒng)再包裝,,把所有資源封裝成兩個(gè)文件接口,,面向數(shù)據(jù)塊的(block-oriented)和面向字符的(character-oriented)。 3.3.3 Data Representation 所有文件都通過一個(gè)叫i-nodes的數(shù)據(jù)結(jié)構(gòu)來表征,。i-node結(jié)構(gòu)內(nèi)有文件數(shù)據(jù)塊在物理設(shè)備內(nèi)的位置信息,。此外,i-node還保存有指向[邏輯文件系統(tǒng)模塊]的函數(shù)和設(shè)備驅(qū)動(dòng)的函數(shù),。通過這種保存函數(shù)指針的方式,,邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)可以把自己注冊(cè)到內(nèi)核,內(nèi)核對(duì)這些模塊沒有依賴,,從而變得很靈活,。 3.3.4 Data Flow, Control Flow, and Dependencies
虛擬磁盤(ramdisk)是一種特殊的外存設(shè)備,它的驅(qū)動(dòng)程序需要內(nèi)存管理子系統(tǒng)協(xié)助實(shí)現(xiàn)。因此,,[設(shè)備驅(qū)動(dòng)模塊組]對(duì)內(nèi)存管理子系統(tǒng)有依賴,,也有控制流和數(shù)據(jù)流。(KEMIN:這里讓我想到,,不是所有模塊都是保存到內(nèi)存的么,?那不是所有模塊都對(duì)內(nèi)存管理子系統(tǒng)有依賴?看來對(duì)上面的概念圖本質(zhì)不是十分的理解……) 網(wǎng)絡(luò)文件系統(tǒng)是一種特殊的文件系統(tǒng),。這個(gè)文件系統(tǒng)的文件不在本地,,網(wǎng)絡(luò)文件系統(tǒng)(NFS)的[邏輯文件系統(tǒng)]模塊利用網(wǎng)絡(luò)子系統(tǒng)實(shí)現(xiàn)功能。因此,,在[邏輯文件系統(tǒng)組]與網(wǎng)絡(luò)子系統(tǒng)之有依賴,、控制流和數(shù)據(jù)流。
虛擬文件系統(tǒng)與進(jìn)程調(diào)度子系統(tǒng)間有依賴前面已經(jīng)說了,,這里具體依賴的模塊是虛擬文件系統(tǒng)內(nèi)的[系統(tǒng)無關(guān)接口],。
最后,系統(tǒng)調(diào)用接口為用戶進(jìn)程提供了保存和讀取文件數(shù)據(jù)的功能,。和前面的子系統(tǒng)不同,,虛擬文件系統(tǒng)沒有為用戶進(jìn)程提供隱式調(diào)用機(jī)制,因此,,沒有由虛擬文件系統(tǒng)到用戶進(jìn)程的控制流(KEMIN:注意控制流的方向性),。
3.4 Network Interface Architecture
3.4.1 Goals 網(wǎng)絡(luò)子系統(tǒng)實(shí)現(xiàn)了Linux系統(tǒng)通過網(wǎng)絡(luò)[聯(lián)接]到其它系統(tǒng)。實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián)的硬件設(shè)備有很多種,,相應(yīng)的網(wǎng)絡(luò)協(xié)議也很多,。網(wǎng)絡(luò)子系統(tǒng)對(duì)硬件和協(xié)議都進(jìn)行了抽象,讓用戶進(jìn)程或內(nèi)核其它子系統(tǒng)通過一致的接口使用網(wǎng)絡(luò)功能,。 3.4.2 Modules
網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng):每種設(shè)備一個(gè)驅(qū)動(dòng)程序,; 設(shè)備無關(guān)接口模塊:在設(shè)備驅(qū)動(dòng)與上層之間定義一個(gè)一致的設(shè)備無關(guān)的接口; 網(wǎng)絡(luò)協(xié)議模塊組:負(fù)責(zé)現(xiàn)實(shí)不同的[網(wǎng)絡(luò)傳輸協(xié)議],; 協(xié)議無關(guān)接口模塊:在網(wǎng)絡(luò)協(xié)議模塊與上層之間定義一個(gè)一致的協(xié)議無關(guān)的接口,; 最后,系統(tǒng)調(diào)用接口為用戶進(jìn)程一定的應(yīng)用接口,。 Figure 3.4: Network Interface Subsystem in Context
3.4.3 Data Representation
每個(gè)網(wǎng)絡(luò)對(duì)象通過一個(gè)叫套接字(socket)的數(shù)據(jù)結(jié)構(gòu)表征,。Socket用與i-node類似的方式關(guān)聯(lián)到進(jìn)程(控制塊)。 3.4.4 Data Flow, Control Flow, and Dependencies
前面說了,,因?yàn)榫W(wǎng)絡(luò)操作較慢,,網(wǎng)絡(luò)子系統(tǒng)與進(jìn)程調(diào)度子有依賴。此外,,為了協(xié)助虛擬文件系統(tǒng)實(shí)現(xiàn)[網(wǎng)絡(luò)文件系統(tǒng)](NFS),,兩子系統(tǒng)間有依賴,。 4. Conclusions
Linux內(nèi)核在整個(gè)Linux系統(tǒng)中占據(jù)一層,層內(nèi)按概念分為五個(gè)主要的子系統(tǒng):進(jìn)程調(diào)度,、內(nèi)存管理、虛擬文件系統(tǒng),、網(wǎng)絡(luò)接口和進(jìn)程互通信接口,。這些子系統(tǒng)[利用]函數(shù)調(diào)用和共享數(shù)據(jù)結(jié)構(gòu)來交互協(xié)作。 在最高一層,,Linux內(nèi)核的體系風(fēng)格(architectural style)很接近Garlan的Shaw提出的Data Abstraction風(fēng)格,;當(dāng)打開各子系統(tǒng)的黑箱子,會(huì)發(fā)現(xiàn)他們的另一種體系風(fēng)格——分層,。子系統(tǒng)由粒度更小的多個(gè)子系統(tǒng)組成,,而交互只發(fā)生在鄰近的層。
Linux內(nèi)核的概念體系結(jié)構(gòu)保證了Liunx的成功,。成功的主要原因是因?yàn)榍逦母拍罱Y(jié)構(gòu)能更好組織開發(fā)人員,,也為系統(tǒng)提供了很好的可擴(kuò)展性。Linux內(nèi)核體系結(jié)構(gòu)必須支持大批獨(dú)立的志愿者參與開發(fā),。為了滿足這一條,,內(nèi)核開發(fā)工作量最大的部分——硬件驅(qū)動(dòng)、文件和網(wǎng)絡(luò)協(xié)議——必須要以可擴(kuò)展的方式實(shí)現(xiàn),。
Linux構(gòu)架師們當(dāng)初就選擇一種數(shù)據(jù)抽象技術(shù)來提供這種可擴(kuò)展性:所有的硬件設(shè)備驅(qū)動(dòng)以獨(dú)立模塊實(shí)現(xiàn),,并通過統(tǒng)一的接口接入內(nèi)核。這樣,,單獨(dú)的開發(fā)者可以在最小量知會(huì)其它內(nèi)核開發(fā)者的情況下為內(nèi)核添加新的設(shè)備驅(qū)動(dòng),。由一大批開發(fā)者參與開發(fā)的Linux內(nèi)核大獲成功,也證明這一策略的正確性,。
Linux內(nèi)核的另一個(gè)重要特點(diǎn)是它的很好的可移植性,。內(nèi)核體系結(jié)構(gòu)將每個(gè)子系統(tǒng)中硬件相關(guān)的代碼劃分到獨(dú)立的模塊來提供很好的移植性。因?yàn)橹恍鑼⑦@部分體系和硬件相關(guān)的代碼重新在新硬件平臺(tái)上實(shí)現(xiàn)就可將linux移植,,工作量大大降低,。
|
|