標簽(空格分隔): 20135328陳都
Unix 雖然已經使用了40年,但計算機科學家仍然認為它是現存操作系統中最強大和最優秀的系統。從1969 年誕生以來,由Dennis
Ritchie 和Ken Thompson 的靈感火花點亮的這個Unix產物已經成為一種傳奇,它歷經了時間的考驗依然聲名不墜。
Multics 項目被終止後,貝爾實驗室計算科學研究中心的人們發現自己處於一個沒有交互式操作系統可用的境地。在這種情況下,1969年的夏天,貝爾實驗室的程序員們設計了一個文件系統原型,而這個原型最終發展橫化成了Unix.
由於一些現行商業操作系統日趨龐雜及其設計上的缺陸,操作系統的精確定義並沒有一個統一的標准。許多用戶把他們在顯示器屏幕上看到的東西理所當然地認為就是操作系統。通常,當然在本書中也這麼認為,操作系統是指在整個系統中負責完成最基本功能和系統管理的那些部分。這些部分應該包括內核
、設備驅動程序
、啟動引導程序
、命令行Shell
或者其他種類的用戶界面、基本的文件管理工具和系統工具。
系統其他部分必須依靠內接這部分軟件提供的服務,像管理硬件設備、分配系統資源等。內核有時候被稱作是管理者或者是操作系統核心。通常一個內核由負責響應中斷的中斷服務程序,負責管理多個進程從而分享處理器時間的調度程序,負責管理進程地址空間的內存管理程序和網絡、進程間通信等系統服務程序共同組成。
通過Git這個分布式的版本控制系統來進行:
壓縮形式為bzip2:tar xvjf linux-x.y.z.tar.bz2
壓縮形式為zip:tar xvzf linux-x.y.z.tar.gz
補丁:從內部源碼樹開始,運行:patch - pl< .. /patch -x .y.z
一般來說,一個給定版本的內核補丁總是打在前一個版本上。
內核源碼樹由很多目錄組成,而大多數目錄叉包含更多的子目錄。源碼樹的根目錄及其子目錄如下表所示。
|目 錄 |描 述|
|:---:|:---:|
|arch |特定體系結構的代碼|
|block |塊設備I/O層|
|crypo| 加密API|
|Documentation |內核源碼文檔|
|drivers |設備驅動程序|
|firmware| 使用某些驅動程序而需要的設備固件|
|fs| VFS和各種文件系統|
|include| 內核頭文件|
|init| 內核引導和初始化|
|ipc| 進程間通信代碼|
|kernel| 像調度程序這樣的核心子系統|
|lib| 同樣內核函數|
|mm |內存管理子系統和VM|
|net |網絡子系統|
|samples |示例,示范代碼|
|scripts| 編譯內核所用的腳本|
|security| Linux 安全模塊|
|sound |語音子系統|
|usr |早期用戶空間代碼(所謂的initramfs)|
|tools| 在Linux開發中有用的工具|
|virt| 虛擬化基礎結構|
內核提供了各種不同的工具來簡化內核配置。最簡單的一種是一個字符界面下的命令行工具:
$ make config
配置選項CONFlG_lKCONFIG_PROC把完整的壓縮過的內核配置文件存放在/proc/con且g.gz 下,這樣當你編譯一個新內棋的時候就可以方便地克隆當前的配置。如果你目前的內核已經啟用了此選項,就可以從/proc下復制出配置文件並且使用它來編譯一個新內核:
zcat /proc/con且.g.gz > .config
make oldconfig
make modules_install
把所有已編譯的模塊安裝到正確的主目錄/lib/modules下
2.4 內核開發的特點
最重要的差異包括以下幾種:
第 一章將帶我們從 Unix 的歷史視角來認識 Linux 內核與 Linux 操作系統的前世今生。今天Unix 系統業已憤化成一個具有相似應用程序編程接口(API),並且基於相似設計理念的操作 系統家族。但它又是一個別具特色的操作系統,從萌芽到現在已經有 40余年的歷史。若要了解 Linux,我們必須首先認識 Unix 系統。
第二章主要介紹Linux內核的一些基本常識:從何處在取源碼,如何編譯它,又如何 安裝新內核。那麼,讓我們考察一下內核程序與用戶空間程序的差異,以及內核中所使用的通 用編程結構。雖然內核在很多方面有其獨特性,但從現在來看,它和其他大型軟件項目並無多大差別。