第章Linu內(nèi)核簡介_第1頁
第章Linu內(nèi)核簡介_第2頁
第章Linu內(nèi)核簡介_第3頁
第章Linu內(nèi)核簡介_第4頁
第章Linu內(nèi)核簡介_第5頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、 CT權(quán) 第三篇Lin u系統(tǒng)內(nèi)核分析 第8章Linu內(nèi)核簡介 本章介紹有關(guān) Lin uX勺內(nèi)核內(nèi)容,如系統(tǒng)初始化、運行以及內(nèi)核提供的各種調(diào)用等。 8.1系統(tǒng)初始化 當PC啟動時,Inte系列的CPU首先進入的是實模式,并開始執(zhí)行位于地址OxFFFF處的代 碼,也就是 ROM-BIO起始位置的代碼。BIOS先進行一系列的系統(tǒng)自檢,然后初始化位于地 址0的中斷向量表。最后BIOS各啟動盤的第一個扇區(qū)裝入到0X7C0P并開始執(zhí)行此處的代碼。 這就是對內(nèi)核初始化過程的一個最簡單的描述。 最初,Linux核心的最開始部分是用8086匚編語言編寫的。當開始運行時,核心將自己裝 入到絕對地址 0 x900

2、00再將其后的 2k字節(jié)裝入到地址0 x902(處,最后將核心的其余部分裝入 到0 x10000當系統(tǒng)裝入時,會顯示Loading言息。裝入完成后,控制轉(zhuǎn)向另一個實模式下的 匯編語言代碼 boot/Setup.S Setu部分首先設置一些系統(tǒng)的硬件設備,然后將核心從0 x100處移至0 x100處。這時系 統(tǒng)轉(zhuǎn)入保護模式,開始執(zhí)行位于0 x100處的代碼。 接下來是內(nèi)核的解壓縮。0 x100處的代碼來自于文件zBoot/head.它用來初始化寄存器 禾口調(diào)用 decompress_ke程el() decompress_ke程序由 zBoot/inflate.c, zBoot/un和p.c zB

3、oot/misCB成。解壓縮后的數(shù)據(jù)被裝入到了0 x1000處,這也是 Linux不能在內(nèi)存小于 2M 的環(huán)境下運行的主要原因。 解壓后的代碼在0 x10100處開始執(zhí)行,緊接著所有的32位的設置都將完成:IDT GDT 和LDT將被裝入,處理器初始化完畢,設置好內(nèi)存頁面,最終調(diào)用start_kerne程。這大概是 整個內(nèi)核中最為復雜的部分。 start_kern程序用于初始化系統(tǒng)內(nèi)核的各個部分,包括: ?設置內(nèi)存邊界,調(diào)用pag in g_in初始臺化內(nèi)存頁面。 ?初始化陷阱,中斷通道和調(diào)度。 ?對命令行進行語法分析。 ?初始化設備驅(qū)動程序和磁盤緩沖區(qū)。 ?校對延遲循環(huán)。 最后,系統(tǒng)核心轉(zhuǎn)向

4、move_to_user_moc以便創(chuàng)建初始化進程(in it)。此后,進程0開 始進入無限循環(huán)。 8.2系統(tǒng)運行 初始化進程開始執(zhí)行/etc/init /bin/ini或/sbin/in中的一個之后,系統(tǒng)內(nèi)核就不再對程序 進行直接控制了。之后系統(tǒng)內(nèi)核的作用主要是給進程提供系統(tǒng)調(diào)用,以及提供異步中斷事件的 74訶 計計第二篇 Linu系統(tǒng)內(nèi)核分析 處理。多任務機制已經(jīng)建立起來,并開始處理多個用戶的登錄和fork(創(chuàng)建的進程。 8.3內(nèi)核提供的各種系統(tǒng)調(diào)用 8.3.1進程的基本概念和系統(tǒng)的基本數(shù)據(jù)結(jié)構(gòu) 從系統(tǒng)內(nèi)核的角度看來,一個進程僅僅是進程控制表(process tab中的一項。 進程控制表中

5、的每一項都是一個task_struct結(jié)構(gòu),而task_struct結(jié)構(gòu)本身是在 in clude/li nux/sch中定義的。在task_strUCt構(gòu)中存儲各種低級和高級的信息,包括從一些 硬件設備的寄存器拷貝到進程的工作目錄的鏈接點。 進程控制表既是一個數(shù)組,又是一個雙向鏈表,同時又是一個樹。其物理實現(xiàn)是一個包括 多個指針的靜態(tài)數(shù)組。此數(shù)組的長度保存在in clude/li nux/tas定義的常量 NR_TASKS,其 缺省值為128數(shù)組中的結(jié)構(gòu)則保存在系統(tǒng)預留的內(nèi)存頁中。鏈表是由next_ta和prev_ta!k 個指針實現(xiàn)的,而樹的實現(xiàn)則比較復雜。 系統(tǒng)啟動后,內(nèi)核通常作為某一個

6、進程的代表。一個指向task_struc的全局指針變量 current來記錄正在運行的進程。變量current能由kernel/sche中.的進程調(diào)度改變。當系統(tǒng) 需要查看所有的進程時,則調(diào)用for_each_tas這將比系統(tǒng)搜索數(shù)組的速度要快得多。 某一個進程只能運行在用戶方式(user mode或內(nèi)核方式(kernel mo)e下。用戶程序 運行在用戶方式下,而系統(tǒng)調(diào)用運行在內(nèi)核方式下。在這兩種方式下所用的堆棧不一樣:用戶 方式下用的是一般的堆棧,而內(nèi)核方式下用的是固定大小的堆棧(一般為一個內(nèi)存頁的大?。?。 8.3.2創(chuàng)建和撤消進程 Linux系統(tǒng)使用系統(tǒng)調(diào)用fork(來創(chuàng)建一個進程,使用

7、exit(來結(jié)束進程。fork(和exit(的源 程序保存在ker nel/fork.c and kerne中xitfork(的主要任務是初始化要創(chuàng)建進程的數(shù)據(jù)結(jié)構(gòu), 其主要的步驟有: 1)申請一個空閑的頁面來保存task_struct 2查找一個空的進程槽(fin d_empty_pro)ss() 3為kernel_stack_pO請另一個空閑的內(nèi)存頁作為堆棧。 4)將父進程的LDT表拷貝給子進程。 5復制父進程的內(nèi)存映射信息。 6)管理文件描述符和鏈接點。 撤消一個進程可能稍微復雜些,因為撤消子進程必須通知父進程。另外,使用kill()也可以 結(jié)束一個進程。sys_kill() sys_w

8、a和 sys_ex都保存在文件 exit.中。 8.3.3執(zhí)行程序 使用fork(創(chuàng)建一個進程后,程序的兩個拷貝都在運行。通常一個拷貝使用exec調(diào)用另一 個拷貝。系統(tǒng)調(diào)用exec負責定位可執(zhí)行文件的二進制代碼,并負責裝入和運行。 Linux系統(tǒng)中的exec通過使用linux_binfr結(jié)構(gòu)支持多種二進制格式。每種二進制格式都 代表可執(zhí)行代碼和鏈接庫。linux_binfr結(jié)構(gòu)種包含兩個指針,一個指向裝入可執(zhí)行代碼的函 數(shù),另一個指向裝入鏈接庫的函數(shù)。 Unix系統(tǒng)提供給程序員6種調(diào)用exec()的方法。其中的5種是作為庫函數(shù)實現(xiàn),而 計75 sys_execv是由系統(tǒng)內(nèi)核實現(xiàn)的。它執(zhí)行一個十

9、分簡單的任務:裝入可執(zhí)行文件的文件頭, 并試圖執(zhí)行它。如果文件的頭兩個字節(jié)是#!那么它就調(diào)用在文件第一行中所指定的解釋器,否 則,它將逐個嘗試注冊的二進制格式。 8.4存取文件系統(tǒng) 眾所周知,文件系統(tǒng)是Unix系統(tǒng)最基本的資源。最初的Unix系統(tǒng)一般都只支持一種單一類 型的文件系統(tǒng),在這種情況下,文件系統(tǒng)的結(jié)構(gòu)深入到整個系統(tǒng)內(nèi)核中。而現(xiàn)在的系統(tǒng)大多都 在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供一個標準的接口,這樣不同文件結(jié)構(gòu)之間的數(shù)據(jù)可以十分方便 地交換。Lin uX也在系統(tǒng)內(nèi)核和文件系統(tǒng)之間提供了一種叫做VFS( virtual file system勺標準 接口。 這樣,文件系統(tǒng)的代碼就分成了兩部分:上

10、層用于處理系統(tǒng)內(nèi)核的各種表格和數(shù)據(jù)結(jié)構(gòu); 而下層用來實現(xiàn)文件系統(tǒng)本身的函數(shù),并通過VFS來調(diào)用。這些函數(shù)主要包括: ?管理緩沖區(qū)(buffer。) ?響應系統(tǒng)調(diào)用 fentl(和 ioctl()(fcntl.c and ioctl.c) ?將管道和文件輸入輸岀映射到索引節(jié)點和緩沖區(qū)(fifo.c, pipe。) ?鎖定和不鎖定文件和記錄(locks.c) ?映射名字到索引節(jié)點(n amei.c, ope n.c) ?實現(xiàn) selec函數(shù)(selects) ?提供各種信息(stat.c) ?掛接和卸載文件系統(tǒng)(super ?調(diào)用可執(zhí)行代碼和轉(zhuǎn)存核心(execQ ?裝入各種二進制格式(bin_fmt*Q VFS口則由一系列相對高級的操作組成,這些操作由和文件系統(tǒng)無關(guān)的代碼調(diào)用,并且 由不同的文件系統(tǒng)執(zhí)行。其中最主要的結(jié)構(gòu)有in ode_operat和ns

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論