Linux作業系統原始碼詳細分析(三)(轉)
Linux作業系統原始碼詳細分析(三)(轉)[@more@] 第3章 核心體系結構概述
本章從較高層次上對核心進行說明。從順序上來說,本章首先介紹核心設計目標,接下來介紹核心體系結構,最後介紹核心源程式目錄結構。
3.1 核心設計目標
Linux 的核心展現出了幾個相互關聯的設計目標,它們依次是:清晰性、相容性、可移植性、健壯性、安全性和速度。這些目標有時是互補的,有時則是矛盾的。但是它們被儘可能的保持在相互一致的狀態,核心設計和實現的特性通常都要回歸到這些問題上來。本節接下來的部分將分別討論這些設計目標,同時還將對它們之間的取捨與平衡進行簡要的說明。
3.1.1 清晰性
稍微簡化點說,核心目標是在保證速度和健壯性的前提下儘量清晰。這和現在的大多數應用程式的開發有所區別,後者的目標通常是在保證清晰性和健壯性的基礎上儘量提高速度。因而在核心內部,速度和清晰性經常是一對矛盾。
在某種程度上,清晰性是健壯性的必要補充:一個很容易理解的實現方法比較容易證明是正確的;或者即使不正確,也能比較容易的找出其問題所在。從而這兩個目標很少會發生衝突。
但是清晰性和速度通常卻是一對矛盾。經過仔細手工最佳化的演算法通常都使用了編譯器生成程式碼的類似技術,很少可能是最清晰的解決方案。當核心中清晰性和速度要求不一致時,通常都是以犧牲清晰性來保證速度的。即便如此,程式設計師仍然清楚地知道清晰性的重要性,而且他們也做了大量的工作以使用最清晰的方法保證速度。
3.1.2 相容性
正如第1章中所述,Linux最初的編寫目的是為了實現一個完整的、與Unix相容的作業系統核心。隨著開發過程的展開,它也開始以符合POSIX標準為目標。就核心而言,相容Unix(至少是同某一現代的Unix實現相相容)和符合POSIX標準並沒有什麼區別,因此我們也不會在這個問題上詳細追究。
核心提供了另外一種型別的相容性。基於Linux 的系統能夠提供可選擇的對Java.class檔案的本地執行支援(據說Linux是第一個提供這種支援的作業系統)。儘管實際負責Java程式解釋執行的是另外一個Java虛擬機器程式,該虛擬機器並沒有內建到核心中。但是核心提供的這種機制可以使得這種支援對使用者是透明的。透過核心本身提供的程度不同的支援(這並不代表大部分工作像Java的解決方式一樣能夠透過外部程式實現),對其他可執行檔案格式的支援也能夠以同樣的方式插入核心中。這方面的內容將在第7章中詳細介紹。
另外需要說明的是,GNU/Linux系統作為一個整體透過DOSEMU模擬機器提供了對DOS可執行程式的支援,而且也透過WINE設計提供了對Windows可執行程式的部分支援。系統還以同樣的方式透過SAMBA提供了對Windows相容檔案和列印服務的支援。但是這些都不是同核心密切相關的問題,因此在本書中我們不再對它們進行討論。
相容性的另外一個方面是相容異種檔案系統,本章中稍後會有更為詳細的介紹,但是大部分內容已經超出了本書的範圍。Linux能夠支援很多檔案系統,例如ext2(“本地”檔案系統)、ISO-9660(CD-ROM使用的檔案系統)、MS-DOS、網路檔案系統(NFS)等許多其他檔案系統。如果你有使用其他作業系統格式的磁碟或者一個網路磁碟伺服器,那麼Linux將能夠和這些不同的檔案系統進行互動。
相容性的另外一個問題是網路,這在當今Internet流行的時代尤為重要。作為Unix的一個變種,Linux自然從很早就開始提供對TCP/IP的支援。核心還支援其他許多網路協議,它們包括AppleTalk協議的程式碼,這使得Linux單元可以和Macintosh機自由通訊;Novell的網路協議,也就是網路報文交換(IPX),分組報文交換(SPX)和NetWare核心協議(NCP);IP協議的新版本IPv6以及其它一些不太出名的協議。
相容性考慮的最後一個方面是硬體相容性。似乎每個不常見的顯示卡、市場份額小的網路卡、非標準的CD-ROM介面和專用磁帶裝置都有Linux的驅動程式(只要它不是專為特定作業系統設計的專用硬體)。而且只要越來越多的廠商也逐漸認識到Linux的優勢,併為更容易地實現向Linux上移植而開放相應的源程式程式碼,Linux對硬體支援會越來越好。
這些相容性必須透過一個重要的子目標:模組度(modularity)來實現。在可能的情況下,核心只定義子系統的抽象介面,這種抽象介面可以透過任何方法來實現。例如,核心對於新檔案系統的支援將簡化為對虛擬檔案系統(VFS)介面的程式碼實現。第7章中介紹的是另外一個例子,核心對二進位制控制程式碼的抽象支援是實現對諸如Java之類的新可執行格式的支援的方法。增加新的可執行格式的支援將轉變為對相應的二進位制控制程式碼介面的實現。
本章從較高層次上對核心進行說明。從順序上來說,本章首先介紹核心設計目標,接下來介紹核心體系結構,最後介紹核心源程式目錄結構。
3.1 核心設計目標
Linux 的核心展現出了幾個相互關聯的設計目標,它們依次是:清晰性、相容性、可移植性、健壯性、安全性和速度。這些目標有時是互補的,有時則是矛盾的。但是它們被儘可能的保持在相互一致的狀態,核心設計和實現的特性通常都要回歸到這些問題上來。本節接下來的部分將分別討論這些設計目標,同時還將對它們之間的取捨與平衡進行簡要的說明。
3.1.1 清晰性
稍微簡化點說,核心目標是在保證速度和健壯性的前提下儘量清晰。這和現在的大多數應用程式的開發有所區別,後者的目標通常是在保證清晰性和健壯性的基礎上儘量提高速度。因而在核心內部,速度和清晰性經常是一對矛盾。
在某種程度上,清晰性是健壯性的必要補充:一個很容易理解的實現方法比較容易證明是正確的;或者即使不正確,也能比較容易的找出其問題所在。從而這兩個目標很少會發生衝突。
但是清晰性和速度通常卻是一對矛盾。經過仔細手工最佳化的演算法通常都使用了編譯器生成程式碼的類似技術,很少可能是最清晰的解決方案。當核心中清晰性和速度要求不一致時,通常都是以犧牲清晰性來保證速度的。即便如此,程式設計師仍然清楚地知道清晰性的重要性,而且他們也做了大量的工作以使用最清晰的方法保證速度。
3.1.2 相容性
正如第1章中所述,Linux最初的編寫目的是為了實現一個完整的、與Unix相容的作業系統核心。隨著開發過程的展開,它也開始以符合POSIX標準為目標。就核心而言,相容Unix(至少是同某一現代的Unix實現相相容)和符合POSIX標準並沒有什麼區別,因此我們也不會在這個問題上詳細追究。
核心提供了另外一種型別的相容性。基於Linux 的系統能夠提供可選擇的對Java.class檔案的本地執行支援(據說Linux是第一個提供這種支援的作業系統)。儘管實際負責Java程式解釋執行的是另外一個Java虛擬機器程式,該虛擬機器並沒有內建到核心中。但是核心提供的這種機制可以使得這種支援對使用者是透明的。透過核心本身提供的程度不同的支援(這並不代表大部分工作像Java的解決方式一樣能夠透過外部程式實現),對其他可執行檔案格式的支援也能夠以同樣的方式插入核心中。這方面的內容將在第7章中詳細介紹。
另外需要說明的是,GNU/Linux系統作為一個整體透過DOSEMU模擬機器提供了對DOS可執行程式的支援,而且也透過WINE設計提供了對Windows可執行程式的部分支援。系統還以同樣的方式透過SAMBA提供了對Windows相容檔案和列印服務的支援。但是這些都不是同核心密切相關的問題,因此在本書中我們不再對它們進行討論。
相容性的另外一個方面是相容異種檔案系統,本章中稍後會有更為詳細的介紹,但是大部分內容已經超出了本書的範圍。Linux能夠支援很多檔案系統,例如ext2(“本地”檔案系統)、ISO-9660(CD-ROM使用的檔案系統)、MS-DOS、網路檔案系統(NFS)等許多其他檔案系統。如果你有使用其他作業系統格式的磁碟或者一個網路磁碟伺服器,那麼Linux將能夠和這些不同的檔案系統進行互動。
相容性的另外一個問題是網路,這在當今Internet流行的時代尤為重要。作為Unix的一個變種,Linux自然從很早就開始提供對TCP/IP的支援。核心還支援其他許多網路協議,它們包括AppleTalk協議的程式碼,這使得Linux單元可以和Macintosh機自由通訊;Novell的網路協議,也就是網路報文交換(IPX),分組報文交換(SPX)和NetWare核心協議(NCP);IP協議的新版本IPv6以及其它一些不太出名的協議。
相容性考慮的最後一個方面是硬體相容性。似乎每個不常見的顯示卡、市場份額小的網路卡、非標準的CD-ROM介面和專用磁帶裝置都有Linux的驅動程式(只要它不是專為特定作業系統設計的專用硬體)。而且只要越來越多的廠商也逐漸認識到Linux的優勢,併為更容易地實現向Linux上移植而開放相應的源程式程式碼,Linux對硬體支援會越來越好。
這些相容性必須透過一個重要的子目標:模組度(modularity)來實現。在可能的情況下,核心只定義子系統的抽象介面,這種抽象介面可以透過任何方法來實現。例如,核心對於新檔案系統的支援將簡化為對虛擬檔案系統(VFS)介面的程式碼實現。第7章中介紹的是另外一個例子,核心對二進位制控制程式碼的抽象支援是實現對諸如Java之類的新可執行格式的支援的方法。增加新的可執行格式的支援將轉變為對相應的二進位制控制程式碼介面的實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-963499/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux作業系統原始碼詳細分析(二)(轉)Linux作業系統原始碼
- Linux作業系統的許可權程式碼分析【轉】Linux作業系統
- Linux作業系統下Shell病毒詳細介紹Linux作業系統
- Linux作業系統tcpdump抓包分析詳解Linux作業系統TCP
- Linux作業系統記憶體管理的原始碼實現(轉)Linux作業系統記憶體原始碼
- Linux作業系統核心編譯詳解(2)(轉)Linux作業系統編譯
- Linux作業系統上編譯程式的方法詳細介紹Linux作業系統編譯
- Linux 下檢視開源軟體或作業系統的原始碼(轉)Linux作業系統原始碼
- 精華所在 Linux作業系統7大武器詳解(轉)Linux作業系統
- Linux作業系統介紹(轉)Linux作業系統
- 阿凡達系統開發(原始碼部署)詳細方案原始碼
- Linux作業系統分析 | 深入理解系統呼叫Linux作業系統
- 詳解Linux作業系統的核心空間保護(轉)Linux作業系統
- 【高可用】分散式作業系統 Elastic-Job-Cloud 原始碼分析分散式作業系統ASTCloud原始碼
- linux是什麼作業系統 linux和windows的區別詳細說明Linux作業系統Windows
- 深入分析 Linux作業系統的核心連結串列(轉)Linux作業系統
- 配置安全的Linux作業系統(轉)Linux作業系統
- 紅旗Linux作業系統加速(轉)Linux作業系統
- 麒麟作業系統核心同其他作業系統核心的相似性分析(轉)作業系統
- 詳解Linux作業系統裝置驅動相容性(轉)Linux作業系統
- Linux作業系統的中文輸入三劍客淺談(轉)Linux作業系統
- 從原始碼構建一個極簡的Linux作業系統原始碼Linux作業系統
- 有人想學習作業系統原始碼嗎作業系統原始碼
- Linux 作業系統Linux作業系統
- Linux作業系統Linux作業系統
- AIX作業系統安裝SSH服務-最詳細版AI作業系統
- Linux作業系統中的7功能詳解Linux作業系統
- 紅旗Linux作業系統下載(轉)Linux作業系統
- 紅旗Linux作業系統安裝(轉)Linux作業系統
- Laravel 原始碼方法執行類詳細分析Laravel原始碼
- 【linux】Linux作業系統Linux作業系統
- 深入分析Linux作業系統深度安全加固Linux作業系統
- 作業系統列表(轉)作業系統
- 深入分析阿凡達Avatar泰山眾籌系統開發詳細方案及案例原始碼原始碼
- Linux作業系統檔案系統的桌面應用(轉)Linux作業系統
- Linux作業系統主要用途有哪些?細分三大應用領域!Linux作業系統
- Linux作業系統的Shell程式設計指令碼欣賞(轉)Linux作業系統程式設計指令碼
- 【作業系統】== Win10 安裝 VMware 15 超詳細教程 ==作業系統Win10