官术网_书友最值得收藏!

1.2 內容綜述

本書主要對Linux的早期內核0.11版進行詳細描述和注釋。Linux-0.11版本是在1991年12月8日發布的。在發布時包括以下幾個文件:

目前除了原來的rootimage.Z文件,其他四個文件均能找到。不過作者已經利用互聯網上的資源為Linux 0.11重新制作了一個完全可以使用的rootimage-0.11根文件系統,并重新為其編譯出能在0.11環境下使用的gcc 1.40編譯器,配置出可用的實驗開發環境。目前,這些文件均可以從oldlinux.org網站上下載。具體下載位置是:

http://oldlinux.org/Linux.old/images/該目錄中含有已經制作好的內核映像文件boot-image和根文件系統映像文件rootimage。

http://oldlinux.org/Linux.old/kernel/該目錄中含有內核源代碼程序,包括本書所描述的Linux 0.11內核源代碼程序。

http://oldlinux.org/Linux.old/bochs/該目錄中含有已經設置好的運行在計算機仿真系統bochs下的Linux系統。

http://oldlinux.org/Linux.old/Linux-0.11/該目錄中含有可以在Linux 0.11系統中使用的其他一些工具程序和說明文檔。

本書分析了Linux 0.11內核中所有源代碼程序,對每個源程序文件都進行了詳細注釋,包括對Makefile文件和.h頭文件的注釋。分析過程主要是按照計算機啟動過程進行的。因此分析的連貫性到初始化結束內核開始調用shell程序為止。其余的各個程序均針對其自身進行分析,沒有連貫性,因此可以根據自己的需要進行閱讀。但在分析時還是提供了一些應用實例。

在分析過程中,如果第一次遇到較難理解的語句時,將給出相關知識的詳細介紹。比如,在閱讀代碼第一次遇到C語言內嵌匯編代碼時,將對GNU C語言的內嵌匯編語言進行較為詳細的介紹;在遇到對中斷控制器進行輸入/輸出操作時,將對Intel中斷控制器(8259A)芯片給出詳細的說明,并列出使用的命令和方法。這樣做有助于加深對代碼的理解,又能更好地了解所用硬件的使用方法,作者認為這種解讀方法要比單獨列出一章內容來總體介紹硬件或其他知識效率要高得多。

為了保持結構的完整性,對代碼的說明是以內核中源代碼的組成結構進行的,基本上是以每個源代碼中的目錄為一章內容進行介紹。整個Linux內核源代碼的目錄結構見表1-2。所有目錄結構均以linux為當前目錄。

表1-2 linux目錄

本書內容可以分為三個部分。第1章至第4章是描述內核引導啟動和32位運行方式的準備階段,學習內核的初學者應該全部進行閱讀。第二部分從第5章到第10章是內核代碼的主要部分。其中第5章內容可以作為閱讀本部分后續章節的索引。第11章到第13章是第三部分內容,可以作為閱讀第二部分代碼的參考。

第2章概要描述了Linux操作系統的體系結構,內核源代碼文件放置的組織結構以及每個文件的大致功能。還介紹了Linux對物理內存的使用分配方式以及對虛擬線性地址的使用分配,以及如何在RedHat Linux 9操作系統上編譯本書所討論的Linux內核,對內核代碼需要修改的地方。最后開始注釋內核程序包中linux/目錄下所看到的第一個文件,即內核代碼的總體Makefile文件的內容。該文件是所有內核源程序的編譯管理配置文件,供編譯管理工具軟件make使用。

第3章將詳細注釋boot/目錄下的三個匯編程序,其中包括磁盤引導程序bootsect.s、獲取BIOS中參數的setup.s匯編程序和32位運行啟動代碼程序head.s。這三個匯編程序完成了內核從塊設備上引導加載到內存,對系統配置參數進行探測,完成了進入32位保護模式運行之前的所有工作,為內核系統進一步的初始化工作做好了準備。

第4章主要介紹init/目錄中內核系統的初始化程序main.c。它是內核完成所有初始化工作并進入正常運行的關鍵。在完成了系統所有的初始化工作后,創建了用于shell的進程。在介紹該程序時將需要查看其所調用的其他程序,因此對后續章節的閱讀可以按照這里調用的順序進行。由于內存管理程序的函數在內核中被廣泛使用,因此該章內容應該最先選讀。當你能真正看懂直到main.c程序為止的所有程序時,就已經對Linux內核有了一定的了解,可以說有一半入門了,但還需要對文件系統、系統調用、各種驅動程序等進行更深一步的閱讀。

第5章主要介紹kernel/目錄中的所有程序。其中最重要的部分是進程調度函數schedule()、sleep_on()函數和有關系統調用的程序。此時你已經對其中的一些重要程序有所了解。

第6章對kernel/dev_blk/目錄中的塊設備程序進行了注釋說明。該章主要含有硬盤、軟盤等塊設備的驅動程序,主要與文件系統和高速緩沖區打交道。因此,在閱讀這章內容時需首先瀏覽一下文件系統的章節。

第7章對kernel/dev_chr/目錄中的字符設備驅動程序進行注釋說明。這一章中主要涉及串行線路驅動程序,鍵盤驅動程序和顯示器驅動程序,因此含有較多與硬件有關的內容,在閱讀時需要參考一下相關書籍。

第8章介紹kernel/math/目錄中的數學協處理器的仿真程序。由于本書所注釋的內核版本,還沒有真正開始支持協處理器,因此本章的內容較少,也比較簡單,只需有一般了解即可。

第9章介紹內核源代碼fs/目錄中的文件系統程序,在看這章內容時建議你能夠暫停一下,先去閱讀Andrew S. Tanenbaum的《操作系統:設計與實現》一書中有關MINIX文件系統的章節,因為最初的Linux系統只支持MINIX文件系統,Linux 0.11版也是如此。

第10章解說mm/目錄中的內存管理程序。要透徹地理解這方面的內容,需要對Intel 80x86微處理器的保護模式運行方式有足夠的理解,因此本章在適當的地方包含較為完整的有關80x86保護模式運行方式的說明,這些知識基本上都可以參考Intel 80386程序員編程手冊(Intel 80386 Programmer′s Reference Manual)。但在此章中,以源代碼中的運用實例為對象進行解說,可以更好地幫助讀者理解它的工作原理。

現有的Linux內核分析書籍都缺乏對內核頭文件的描述,因此對于一個初學者來講,在閱讀內核程序時會遇到許多障礙。本書的第11章對include/目錄中的所有頭文件進行了詳細說明,基本上對每一個定義、每一個常量或數據結構都進行了詳細注釋。雖然該章內容主要是為閱讀其他章節中的程序作參考使用的,但是若想徹底理解內核的運行機制,仍然需要了解這些頭文件中的許多細節。

第12章介紹了Linux 0.11版內核源代碼lib/目錄中的所有文件。這些庫函數文件主要向編譯系統等系統程序提供接口函數,閱讀這些文件對以后理解系統軟件會有較大的幫助。由于這個版本較低,所以這方面的內容并不是很多,可以很快地看完。這也是我們選擇0.11版的原因之一。

第13章介紹tools/目錄下的build.c程序。這個程序并不包括在編譯生成的內核映像(image)文件中,它僅用于將內核中的磁盤引導程序塊與其他主要內核模塊連接成一個完整的內核映像(kernel image)文件。

主站蜘蛛池模板: 潮州市| 喀喇沁旗| 呼和浩特市| 东至县| 保靖县| 德州市| 乌恰县| 绿春县| 富锦市| 卓资县| 景东| 宜良县| 泽库县| 新龙县| 扶余县| 双牌县| 馆陶县| 河西区| 鄱阳县| 泸西县| 剑阁县| 永安市| 龙陵县| 五原县| 桐庐县| 顺昌县| 玉门市| 安西县| 泗水县| 丹东市| 青铜峡市| 永靖县| 图木舒克市| 南平市| 静乐县| 晴隆县| 丹寨县| 白银市| 徐州市| 白银市| 二连浩特市|