資源描述:
《Linux第5章 內(nèi)核簡介》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第5章Linux內(nèi)核簡介主要內(nèi)容Linux核心的一般結(jié)構(gòu)進程的概念、進程的調(diào)度和進程通信文件系統(tǒng)的構(gòu)成和管理內(nèi)存管理設(shè)備驅(qū)動及中斷處理5.1概述Linux系統(tǒng)大致可分為三層:靠近硬件的底層是內(nèi)核,即Linux操作系統(tǒng)常駐內(nèi)存部分。中間層是shell層,即操作系統(tǒng)的系統(tǒng)程序部分。最高層是應(yīng)用層,即用戶程序部分內(nèi)核是Linux操作系統(tǒng)的主要部分,實現(xiàn)進程管理、內(nèi)存管理、文件系統(tǒng)、設(shè)備驅(qū)動和網(wǎng)絡(luò)系統(tǒng)等功能。Linux操作系統(tǒng)的心臟-內(nèi)核硬件文件系統(tǒng)進程管理進程間通信內(nèi)存管理網(wǎng)絡(luò)內(nèi)核模塊系統(tǒng)調(diào)用內(nèi)核態(tài)應(yīng)用軟件應(yīng)
2、用軟件用戶態(tài)……區(qū)分用戶態(tài)和內(nèi)核態(tài)目的在于安全考慮:禁止用戶程序和底層硬件直接打交道(最簡單的例子,如果用戶程序往硬件控制寄存器寫入不恰當(dāng)?shù)闹担赡軐?dǎo)致硬件無法正常工作)禁止用戶程序訪問任意的物理內(nèi)存(否則可能會破壞其他程序的正常執(zhí)行,如果對內(nèi)核所在的地址空間寫入數(shù)據(jù)的話,會導(dǎo)致系統(tǒng)崩潰)用戶程序如何同設(shè)備打交道?例如,用戶需通過網(wǎng)卡發(fā)送數(shù)據(jù)硬件被linux內(nèi)核隔離,只能通過內(nèi)核實現(xiàn)。不可能直接調(diào)用操作系統(tǒng)的函數(shù):不可行,也不安全。Linux提供的解決方法:系統(tǒng)調(diào)用系統(tǒng)調(diào)用的意義操作系統(tǒng)為用戶態(tài)進程與硬
3、件設(shè)備進行交互提供了一組接口——系統(tǒng)調(diào)用把用戶從底層的硬件編程中解放出來極大的提高了系統(tǒng)的安全性使用戶程序具有可移植性trap0系統(tǒng)調(diào)用圖解Linux內(nèi)核體系結(jié)構(gòu)內(nèi)核的核心-進程Fork()——創(chuàng)建新進程,是父進程的一個克隆Exec()-新進程脫胎換骨,離家獨立,開始了獨立工作的職業(yè)生涯父-子-孫共存的系統(tǒng)必然是一個并發(fā)的系統(tǒng)5.2.1進程和線程的概念5.2.2進程的結(jié)構(gòu)5.2.3對進程的操作5.2.4進程調(diào)度5.2.5shell基本工作原理5.2進程管理5.2.1進程和線程的概念1.進程及其狀態(tài)簡單說
4、來,進程就是程序的一次執(zhí)行過程。進程至少要有三種基本狀態(tài):運行態(tài)、就緒態(tài)和封鎖態(tài)(或等待態(tài))。進程的狀態(tài)可依據(jù)一定的條件和原因而變化進程狀態(tài)轉(zhuǎn)換圖TASK_DEAD(EXIT_ZOMBIE或EXIT_DEAD)TASK_INTERRUPTIBLEorTASK_UNINTERRUPTIBLEorTASK_KILLABLE進程的模式和類型在Linux系統(tǒng)中,進程的模式劃分為用戶模式和內(nèi)核模式;按照進程的功能和運行的程序來分,進程劃分為兩大類:系統(tǒng)進程、用戶進程若當(dāng)前運行的是用戶程序、應(yīng)用程序或者內(nèi)核之外的系
5、統(tǒng)程序,則在用戶模式下運行。在用戶程序執(zhí)行過程中,如果使用了系統(tǒng)調(diào)用,或者發(fā)生了中斷,就要運行操作系統(tǒng)程序,進程模式變?yōu)閮?nèi)核模式。系統(tǒng)進程只運行在內(nèi)核模式用戶進程可以在用戶模式和內(nèi)核模式下運行4.Linux線程線程和進程是緊密相關(guān)的概念,一般來說,Linux系統(tǒng)中的進程應(yīng)具有一段可執(zhí)行的程序、專用的系統(tǒng)堆??臻g、私有的“進程控制塊”、獨立的存儲空間。而Linux系統(tǒng)中,線程只具有前3個組成部分,缺少自己的存儲空間。5.2.2進程的結(jié)構(gòu)包含下列幾方面的信息:·進程狀態(tài)·調(diào)度信息·標志符·內(nèi)部進程通訊·鏈接
6、信息·時間和計時器·文件系統(tǒng)·虛擬內(nèi)存·處理器信息1、task_struct結(jié)構(gòu)Linux系統(tǒng)中的每個進程都有一個名為task_struct的數(shù)據(jù)結(jié)構(gòu),它相當(dāng)于“進程控制塊”;在進程被創(chuàng)建時,系統(tǒng)從內(nèi)存中分配一個task_struct的數(shù)據(jù)結(jié)構(gòu)。2.進程系統(tǒng)堆棧每個進程都有一個系統(tǒng)堆棧,用來保存中斷現(xiàn)場信息,以及進程進入內(nèi)核模式后的返回現(xiàn)場信息;系統(tǒng)堆棧和task_struct數(shù)據(jù)結(jié)構(gòu)之間存在緊密聯(lián)系,二者物理存儲空間也連在一起系統(tǒng)堆棧的大小靜態(tài)確定。5.2.3對進程的操作1.進程的創(chuàng)建各個進程構(gòu)成了樹
7、形的進程族系;內(nèi)核在完成了基本的初始化以后,就有了系統(tǒng)的第一個進程(即初始化進程);所有其他的進程和內(nèi)核線程都由這個原始進程或其子孫進程所創(chuàng)建。進程是有“生命期”的動態(tài)過程,包括創(chuàng)建、撤銷、掛起、恢復(fù)等等。2.進程的等待父進程創(chuàng)建子進程,往往是讓子進程替自己完成某項工作,因此,創(chuàng)建之后,父進程通常需要等待子進程運行結(jié)束;父進程可用系統(tǒng)調(diào)用wait()等待它的子進程終止;3.進程的終止進程可使用系統(tǒng)調(diào)用exit()終止自己;其實現(xiàn)算法如下:(1)撤消所有的信號量。(2)釋放其所有的資源,包括存儲空間、已打
8、開的文件、工作目錄、信號處理表等。(3)置進程狀態(tài)為“終止態(tài)”(TASK_ZOMBIE)。(4)向它的父進程發(fā)送子進程終止的信號。(5)執(zhí)行進程調(diào)度。5.2.4進程調(diào)度調(diào)度算法調(diào)度時機進程切換進程調(diào)度-系統(tǒng)有條不紊的使者任何程序要占用CPU,真正處于執(zhí)行狀態(tài),就必須經(jīng)由進程調(diào)度;進程調(diào)度機制要兼顧以下三種不同進程的需要:交互進程:需要經(jīng)常響應(yīng)用戶操作,著重于系統(tǒng)的響應(yīng)速度,使得共有一個系統(tǒng)的各個用戶,都感到自己在獨占系統(tǒng),典型的交互程序有s