第5章內(nèi)核簡介(2學時)_第1頁
第5章內(nèi)核簡介(2學時)_第2頁
第5章內(nèi)核簡介(2學時)_第3頁
第5章內(nèi)核簡介(2學時)_第4頁
第5章內(nèi)核簡介(2學時)_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章內(nèi)核簡介(2學時)第一頁,共73頁。主要內(nèi)容Linux核心的一般結構進程的概念、進程的調(diào)度和進程通信文件系統(tǒng)的構成和管理內(nèi)存管理設備驅(qū)動及中斷處理第二頁,共73頁。5.1概述

Linux系統(tǒng)大致可分為三層:靠近硬件的底層是內(nèi)核,即Linux操作系統(tǒng)常駐內(nèi)存部分。中間層是shell層,即操作系統(tǒng)的系統(tǒng)程序部分。最高層是應用層,即用戶程序部分內(nèi)核是Linux操作系統(tǒng)的主要部分,實現(xiàn)進程管理、內(nèi)存管理、文件系統(tǒng)、設備驅(qū)動和網(wǎng)絡系統(tǒng)等功能。第三頁,共73頁。Linux操作系統(tǒng)的心臟-內(nèi)核硬件文件系統(tǒng)進程管理進程間通信內(nèi)存管理網(wǎng)絡內(nèi)核

模塊系統(tǒng)調(diào)用內(nèi)核態(tài)應用軟件應用軟件用戶態(tài)……第四頁,共73頁。區(qū)分用戶態(tài)和內(nèi)核態(tài)目的在于安全考慮:禁止用戶程序和底層硬件直接打交道

(最簡單的例子,如果用戶程序往硬件控制寄存器寫入不恰當?shù)闹?,可能導致硬件無法正常工作)禁止用戶程序訪問任意的物理內(nèi)存

(否則可能會破壞其他程序的正常執(zhí)行,如果對內(nèi)核所在的地址空間寫入數(shù)據(jù)的話,會導致系統(tǒng)崩潰)第五頁,共73頁。用戶程序如何同設備打交道?例如,用戶需通過網(wǎng)卡發(fā)送數(shù)據(jù)硬件被linux內(nèi)核隔離,只能通過內(nèi)核實現(xiàn)。不可能直接調(diào)用操作系統(tǒng)的函數(shù):不可行,也不安全。Linux提供的解決方法:系統(tǒng)調(diào)用第六頁,共73頁。系統(tǒng)調(diào)用的意義操作系統(tǒng)為用戶態(tài)進程與硬件設備進行交互提供了一組接口——系統(tǒng)調(diào)用把用戶從底層的硬件編程中解放出來極大的提高了系統(tǒng)的安全性使用戶程序具有可移植性第七頁,共73頁。trap0系統(tǒng)調(diào)用圖解第八頁,共73頁。Linux內(nèi)核體系結構第九頁,共73頁。內(nèi)核的核心-進程Fork()——創(chuàng)建新進程,是父進程的一個克隆

Exec()-新進程脫胎換骨,離家獨立,開始了獨立工作的職業(yè)生涯

父-子-孫共存的系統(tǒng)必然是一個并發(fā)的系統(tǒng)第十頁,共73頁。5.2.1進程和線程的概念5.2.2進程的結構5.2.3對進程的操作5.2.4進程調(diào)度5.2.5shell基本工作原理5.2進程管理

第十一頁,共73頁。5.2.1進程和線程的概念1.進程及其狀態(tài)簡單說來,進程就是程序的一次執(zhí)行過程。進程至少要有三種基本狀態(tài):運行態(tài)、就緒態(tài)和封鎖態(tài)(或等待態(tài))。進程的狀態(tài)可依據(jù)一定的條件和原因而變化第十二頁,共73頁。進程狀態(tài)轉(zhuǎn)換圖TASK_DEAD(EXIT_ZOMBIE或EXIT_DEAD)TASK_INTERRUPTIBLEorTASK_UNINTERRUPTIBLEorTASK_KILLABLE第十三頁,共73頁。進程的模式和類型在Linux系統(tǒng)中,進程的模式劃分為用戶模式和內(nèi)核模式;按照進程的功能和運行的程序來分,進程劃分為兩大類:系統(tǒng)進程、用戶進程

若當前運行的是用戶程序、應用程序或者內(nèi)核之外的系統(tǒng)程序,則在用戶模式下運行。在用戶程序執(zhí)行過程中,如果使用了系統(tǒng)調(diào)用,或者發(fā)生了中斷,就要運行操作系統(tǒng)程序,進程模式變?yōu)閮?nèi)核模式。系統(tǒng)進程只運行在內(nèi)核模式用戶進程可以在用戶模式和內(nèi)核模式下運行第十四頁,共73頁。4.Linux線程線程和進程是緊密相關的概念,一般來說,Linux系統(tǒng)中的進程應具有一段可執(zhí)行的程序、專用的系統(tǒng)堆??臻g、私有的“進程控制塊”、獨立的存儲空間。而Linux系統(tǒng)中,線程只具有前3個組成部分,

缺少自己的存儲空間。第十五頁,共73頁。5.2.2進程的結構包含下列幾方面的信息:·進程狀態(tài)·調(diào)度信息·標志符·內(nèi)部進程通訊·鏈接信息·時間和計時器·文件系統(tǒng)·虛擬內(nèi)存·處理器信息1、task_struct結構Linux系統(tǒng)中的每個進程都有一個名為task_struct的數(shù)據(jù)結構,它相當于“進程控制塊”;在進程被創(chuàng)建時,系統(tǒng)從內(nèi)存中分配一個task_struct的數(shù)據(jù)結構。第十六頁,共73頁。2.進程系統(tǒng)堆棧每個進程都有一個系統(tǒng)堆棧,用來保存中斷現(xiàn)場信息,以及進程進入內(nèi)核模式后的返回現(xiàn)場信息;系統(tǒng)堆棧和task_struct數(shù)據(jù)結構之間存在緊密聯(lián)系,二者物理存儲空間也連在一起系統(tǒng)堆棧的大小靜態(tài)確定。第十七頁,共73頁。5.2.3對進程的操作1.進程的創(chuàng)建各個進程構成了樹形的進程族系;內(nèi)核在完成了基本的初始化以后,就有了系統(tǒng)的第一個進程(即初始化進程);所有其他的進程和內(nèi)核線程都由這個原始進程或其子孫進程所創(chuàng)建。進程是有“生命期”的動態(tài)過程,包括創(chuàng)建、撤銷、掛起、恢復等等。第十八頁,共73頁。2.進程的等待父進程創(chuàng)建子進程,往往是讓子進程替自己完成某項工作,因此,創(chuàng)建之后,父進程通常需要等待子進程運行結束;父進程可用系統(tǒng)調(diào)用wait()等待它的子進程終止;第十九頁,共73頁。3.進程的終止進程可使用系統(tǒng)調(diào)用exit()終止自己;其實現(xiàn)算法如下:(1)撤消所有的信號量。(2)釋放其所有的資源,包括存儲空間、已打開的文件、工作目錄、信號處理表等。(3)置進程狀態(tài)為“終止態(tài)”(TASK_ZOMBIE)。(4)向它的父進程發(fā)送子進程終止的信號。(5)執(zhí)行進程調(diào)度。第二十頁,共73頁。5.2.4進程調(diào)度

調(diào)度算法調(diào)度時機進程切換進程調(diào)度-系統(tǒng)有條不紊的使者第二十一頁,共73頁。任何程序要占用CPU,真正處于執(zhí)行狀態(tài),就必須經(jīng)由進程調(diào)度;進程調(diào)度機制要兼顧以下三種不同進程的需要:交互進程:需要經(jīng)常響應用戶操作,著重于系統(tǒng)的響應速度,使得共有一個系統(tǒng)的各個用戶,都感到自己在獨占系統(tǒng),典型的交互程序有shell,文本編輯器;批處理進程:也稱作“后臺作業(yè)”,在后臺運行,對響應速度無要求,只考慮“平均速度”,如:編譯程序、科學計算等;實時進程:對時間有很高要求,不僅考慮平均速度,還對完成任務的時間限制有要求。第二十二頁,共73頁。進程調(diào)度機制主要涉及到調(diào)度方式、調(diào)度時機和調(diào)度策略1.調(diào)度方式Linux內(nèi)核的調(diào)度方式,基本上采用“搶占式優(yōu)先級”,即:

當進程在用戶模式下運行時,在一定條件下(如:時間片用完),內(nèi)核調(diào)度其他進程進入運行;在選擇其他進程時以優(yōu)先級為基礎,即:系統(tǒng)中的每個進程都有個優(yōu)先權,反映了該進程可以獲得CPU使用權的資格;從進程就緒隊列中選擇一個優(yōu)先權最高的進程,為其分配一個CPU時間片;運行過程中,當前進程的優(yōu)先級隨時間遞減,從而經(jīng)過一段時間后,以前優(yōu)先級較低的進程就相對“提升”了優(yōu)先級,有機會運行;當所有進程優(yōu)先級都變?yōu)?時,就重新計算一次優(yōu)先級。第二十三頁,共73頁。2.調(diào)度策略——三種不同的調(diào)度策略SCHED_FIFO適合于短實時進程,對時間性要求比較強,每次運行所需時間較短;SCHED_RR

適合于運行時間較長的實時進程,也叫“時間片輪轉(zhuǎn)法”。當時間片用完時,該進程被送回相同優(yōu)先級隊列的末尾,因此,進程從創(chuàng)建到完成需要經(jīng)過多次循環(huán)調(diào)用;SCHED_OTHER

適合于交互式的分時進程,這類進程的優(yōu)先權取決于兩個因素:1、進程剩余時間配額:若已經(jīng)用完配給的時間,則優(yōu)先權為02、進程的優(yōu)先數(shù):沿襲UNIX的方法第二十四頁,共73頁。3.調(diào)度的時機:有以下情況:當前進程使用系統(tǒng)調(diào)用,使自己進入睡眠狀態(tài),主動讓出一段時間的CPU使用權。進程終止,永久地放棄對CPU的使用。當喚醒一個睡眠進程時,發(fā)現(xiàn)被喚醒的進程比當前進程更有資格運行。一個進程通過執(zhí)行系統(tǒng)調(diào)用,來改變調(diào)度策略或者降低自身的優(yōu)先權,從而引起立即調(diào)度。第二十五頁,共73頁。4.調(diào)度算法調(diào)度算法比較簡單,以便減少頻繁調(diào)度時的系統(tǒng)開銷。Linux執(zhí)行系統(tǒng)調(diào)度時:首先查找所有就緒隊列中的進程,選出優(yōu)先級最高、且在內(nèi)存的一個進程;如果隊列中有實時進程,那么將優(yōu)先運行;如果需要運行的進程不是當前進程,那么當前進程就被掛起,并且保存它的現(xiàn)場,然后為選中的進程恢復其運行現(xiàn)場;第二十六頁,共73頁。5.2.5shell基本工作原理

Linux系統(tǒng)提供給用戶的最重要的系統(tǒng)程序是shell命令,它不屬于內(nèi)核部分,基本功能是解釋并執(zhí)行用戶輸入的各種命令,實現(xiàn)用戶與Linux內(nèi)核的接口。系統(tǒng)初次啟動后,系統(tǒng)為每個終端用戶建立一個進程,以執(zhí)行shell解釋程序。第二十七頁,共73頁。最簡單也是最復雜的操作在控制臺下輸入ls命令Shell程序分析輸入?yún)?shù),確定這是ls命令調(diào)用系統(tǒng)調(diào)用fork生成一個子進程什么是系統(tǒng)調(diào)用?為什么我們敲擊鍵盤就會在終端上顯示?中斷的概念,終端控制臺設備驅(qū)動內(nèi)核態(tài)用戶態(tài)相關問題系統(tǒng)調(diào)用是怎么實現(xiàn)的?軟中斷、異常的概念調(diào)用execve系統(tǒng)調(diào)用將ls的可執(zhí)行文件裝入內(nèi)存內(nèi)存管理,進程的地址空間,分頁機制,文件系統(tǒng)從系統(tǒng)調(diào)用返回如何做到正確的返回?堆棧的維護,寄存器的保存與恢復Ls命令得以執(zhí)行進程的調(diào)度,運行隊列等待隊列的維護什么是shell?終端解釋程序第二十八頁,共73頁。shell命令的基本執(zhí)行過程第二十九頁,共73頁。5.3文件系統(tǒng)Linux系統(tǒng)的一個重要特征,就是支持多種不同的文件系統(tǒng),如:ext,FAT,ext2,ext3,MINIX,MSDOS,SYSV等。目前,Linux主要使用的文件系統(tǒng)是ext3。ext3是ext2的升級版本,其主要優(yōu)點是:在ext2的基礎上加入了記錄數(shù)據(jù)的日志功能。5.3.1ext2文件系統(tǒng)5.3.2虛擬文件系統(tǒng)第三十頁,共73頁。5.3.1ext2文件系統(tǒng)1.ext2文件系統(tǒng)的物理結構與其他文件系統(tǒng)一樣,文件信息都保存在數(shù)據(jù)塊中,所有數(shù)據(jù)塊的大小都是一樣的,如圖所示:介質(zhì)上的第一個數(shù)據(jù)塊,只有根文件系統(tǒng)才有引導程序第三十一頁,共73頁。2.塊組的構造包含超級塊、組描述結構、塊位圖、索引節(jié)點位圖、索引節(jié)點表和數(shù)據(jù)塊。(1)超級塊(Superblock)超級塊中包含有文件系統(tǒng)本身的大小和形式的基本信息。例如:塊組號碼、數(shù)據(jù)塊大小、每組數(shù)據(jù)塊的個數(shù)、空閑塊、空閑索引節(jié)點、第一個索引節(jié)點(2)塊組描述結構(BlockGroupDescriptor)每個數(shù)據(jù)塊組都有一個描述它的數(shù)據(jù)結構,即塊組描述結構。第三十二頁,共73頁。3.索引節(jié)點(Inode)每個文件都有惟一一個索引節(jié)點,起著文件控制塊的作用,利用這種數(shù)據(jù)結構可對文件進行控制和管理。索引節(jié)點有兩種形式:盤索引節(jié)點、內(nèi)存索引節(jié)點

第三十三頁,共73頁。4.多重索引結構如果文件索引表很大,則把索引表整個放在內(nèi)存中是不合適的,在使用過程中很可能需要擴充空間;此外,單一索引表已經(jīng)無法滿足靈活性和節(jié)省內(nèi)存的要求;為此,提出多重索引結構,采用間接索引的方式,進行幾級尋址,最末尾的數(shù)據(jù)塊中存儲文件具體內(nèi)容;第三十四頁,共73頁。ext2文件系統(tǒng)的物理結構第三十五頁,共73頁。盤塊盤塊盤塊盤塊盤塊文件系統(tǒng)在查找文件時,根據(jù)路徑名和文件名,搜索對應的索引節(jié)點,找到該文件的數(shù)據(jù)塊;第三十六頁,共73頁。ext2中的目錄項當創(chuàng)建一個文件時,就構成一個目錄項,并添加到相應的目錄文件中。一個目錄文件可以包含很多目錄項,每個目錄項包含的信息有:●索引節(jié)點號●目錄項長度●名字長度●文件類型●文件名字第三十七頁,共73頁。例如:要讀取文件/home/meng/m1.c文件系統(tǒng)首先按照超級塊中根目錄的索引節(jié)點,找到根目錄的數(shù)據(jù)塊,從中找到表示home文件的目錄項,得到相應索引節(jié)點的號碼;接著在節(jié)點中找到存放home數(shù)據(jù)塊的地址,從中找到meng對應的目錄項,得到相應的索引節(jié)點號碼;再由meng目錄文件中獲取m1.c文件的索引節(jié)點號碼,通過這個節(jié)點就可以訪問m1.c文件。第三十八頁,共73頁。進程控制塊使用文件時的邏輯結構Linux系統(tǒng)中每個進程控制塊都有兩個數(shù)據(jù)結構,用來描述進程與文件相關信息。兩個指針根目錄節(jié)點當前目錄節(jié)點保存該進程打開文件的有關信息。最多打開256個文件第四章中I/O重定向中講到的文件描述符(如:0,1,2)就是fd數(shù)組的下標文件在VFS中的索引節(jié)點索引節(jié)點表第三十九頁,共73頁。文件的打開 在進程與文件之間建立起連接。第四十頁,共73頁。6.位示圖每個塊組中包含一個塊位示圖,和一個索引節(jié)點位示圖第四十一頁,共73頁。位示圖管理塊組的數(shù)據(jù)塊,具體方法是:利用一串二進位的值來反映該塊組中數(shù)據(jù)塊的分配情況,也稱作位向量(BitVector)法。0表示空閑,1表示已分配。例如:設下列數(shù)據(jù)塊是空閑的:2,3,4,5,8,9,10,11,12,13,17,18,25,26,27,...則,塊位示圖的表示為:11000...第四十二頁,共73頁。5.3.2虛擬文件系統(tǒng)Linux系統(tǒng)可以支持多種文件系統(tǒng),為此,必須使用一種統(tǒng)一的接口,這就是虛擬文件系統(tǒng)VFS(Virtual).第四十三頁,共73頁。VFS是一個軟件層,是用戶應用程序與具體文件系統(tǒng)實現(xiàn)之間的抽象層:對用戶界面:一組標準的、抽象的文件操作,以系統(tǒng)調(diào)用提供,如read()、write()、open()等。對具體文件系統(tǒng)界面:主體是結構,全是函數(shù)指針,提供函數(shù)跳轉(zhuǎn)表。第四十四頁,共73頁。虛擬文件系統(tǒng)-抽象的體現(xiàn)用戶程序虛擬文件系統(tǒng)VFSMinixExt2……FAT設備文件文件系統(tǒng)的系統(tǒng)調(diào)用接口,包括read()、write()、open()、close()等

用戶空間

內(nèi)核空間 系統(tǒng)調(diào)用對應的內(nèi)核函數(shù)sys_read()等

支撐VFS的具體文件系統(tǒng)

第四十五頁,共73頁。VFS在一個簡單文件復制操作中的作用假設用戶輸入shell命令:$cp/floppy/TEST/tmp/test

在cp命令中,通過VFS提供的系統(tǒng)調(diào)用接口進行文件操作。第四十六頁,共73頁。VFS支持的文件系統(tǒng)類型VFS支持三種主要類型的文件系統(tǒng):基于磁盤的文件系統(tǒng):管理在本地磁盤分區(qū)中可用的存儲空間。包括:ext2、ext3、ReiserFS、MINIX、MS-DOS、NTFS、VFAT、DVD文件系統(tǒng)、JFS等等網(wǎng)絡文件系統(tǒng):用于訪問屬于其他網(wǎng)絡計算機的文件系統(tǒng)所包含的文件NFS、Coda、AFS、SMB、NCP特殊文件系統(tǒng)第四十七頁,共73頁。文件系統(tǒng)的安裝與拆卸在系統(tǒng)初啟時,往往只有一個文件系統(tǒng)安裝上,即:根文件系統(tǒng),主要包括:保證系統(tǒng)正常運行的操作系統(tǒng)代碼文件,以及語言編譯程序、命令解釋程序、命令處理程序、以及用戶文件;根文件系統(tǒng)一旦安裝上,則在整個系統(tǒng)運行過程中是不能卸載的;其他的文件系統(tǒng)(例如,由軟盤構成的文件系統(tǒng)),可以根據(jù)需要(如從硬盤向軟盤復制文件),作為子系統(tǒng)動態(tài)地安裝到主系統(tǒng)第四十八頁,共73頁。f2是為了安裝子文件系統(tǒng)而預留的安裝節(jié)點;安裝之后,主文件系統(tǒng)和子文件系統(tǒng)構成一個有完整目錄層次、容量更大的文件系統(tǒng)第四十九頁,共73頁。VFS有下列主要對象類型:超級塊對象(superblock)存放文件系統(tǒng)相關信息:例如文件系統(tǒng)控制塊索引節(jié)點對象(inode)存放具體文件的一般信息:文件控制塊/inode目錄項對象(dentry)存放目錄項與文件的鏈接信息文件對象(file)存放已打開的文件和進程之間交互的信息第五十頁,共73頁。VFS索引節(jié)點緩存和目錄緩存為了加快對系統(tǒng)中所有已經(jīng)安裝文件系統(tǒng)的存取,VFS提供了索引節(jié)點緩存——把當前使用的索引節(jié)點保存在高速緩存中。為了能夠很快地從中找到所需的VFS索引節(jié)點,采用散列(hash)方法。其基本思想是:第五十一頁,共73頁。為了加速對常用目錄的存取,VFS還提供目錄高速緩存;當文件系統(tǒng)讀取一個目錄時,就把目錄的詳細信息加入到目錄緩存中,下一次查找該目錄時,就可以直接從緩存中找到該目錄的詳細信息;目錄緩存也采用散列表的方法進行管理:表中每一項都是一個指針,指向有相同散列值的目錄緩存隊列。第五十二頁,共73頁。Linux系統(tǒng)采用多重緩沖技術,來平滑和加快文件信息從內(nèi)存到磁盤的傳輸;一個緩沖區(qū)由兩部分組成:存放數(shù)據(jù)的緩沖區(qū)和一個緩沖控制塊;所有處于“空閑”狀態(tài)的buffer_head都鏈入自由鏈中,它只有一條。具有相同散列值的緩沖區(qū)組成一條散列隊列.數(shù)據(jù)塊緩沖區(qū)第五十三頁,共73頁。5.4內(nèi)存管理近年來,隨著硬件技術和生產(chǎn)水平的迅速發(fā)展,內(nèi)存的成本迅速降低,容量也不斷擴大;但是,仍然不能滿足各種軟件對存儲空間的需求,因此,內(nèi)存的有效管理仍是現(xiàn)代操作系統(tǒng)研究的重點問題。Linux系統(tǒng)采用了虛擬內(nèi)存管理機制,就是交換和請求分頁存儲管理技術:第五十四頁,共73頁。虛擬內(nèi)存管理:地址映射機制請頁機制內(nèi)存分配和回收機制

交換機制緩存和刷新機制物理內(nèi)存有限,是一種稀缺資源32位系統(tǒng)中,每個進程獨立的占有4G虛擬空間。虛擬內(nèi)存優(yōu)勢:用戶程序開發(fā)方便保護內(nèi)核不受惡意或者無意的破壞隔離各個用戶進程第五十五頁,共73頁。物理內(nèi)存獲取過程:

用戶程序請求物理內(nèi)存內(nèi)核分配物理頁面內(nèi)核填寫對應頁表項用戶程序獲得物理內(nèi)存從這個過程看出,內(nèi)存管理的核心內(nèi)容是:

物理頁面分配和所有進程頁表的維護,即:物理內(nèi)存管理和虛擬空間管理。第五十六頁,共73頁。邏輯空間分頁:進程的邏輯地址空間劃分為大小相等的頁面;內(nèi)存空間分頁:內(nèi)存也劃分成相同大小的存儲塊;邏輯地址表示:地址結構如圖所示:5.4.1請求分頁機制1、分頁的概念內(nèi)存分配原則:以內(nèi)存塊為單位分給進程,并且進程的頁面可以裝在物理上不連續(xù)的內(nèi)存塊中。頁表:由于頁號連續(xù),而塊號不一定連續(xù),為了找到進程的每個頁面對應內(nèi)存中的物理塊號,為每個進程建立頁表??芍撁娲笮椋?12=4K第五十七頁,共73頁。請求分頁存儲管理示意圖第五十八頁,共73頁。Linux進程的虛存空間3.Linux的多級頁表每個進程的虛擬存儲空間可達4GB,分為兩個部分:系統(tǒng)空間1G+用戶空間3G所有進程共享系統(tǒng)空間Linux系統(tǒng)中頁面大小為4K,因此,進程的虛存空間要劃分為4G/4K=220個頁面第五十九頁,共73頁。Linux系統(tǒng)采用兩種方法來管理內(nèi)存頁:位圖:記錄內(nèi)存單元的使用情況鏈表:記錄已分配的內(nèi)存單元和空閑的內(nèi)存單元采用雙向鏈表結構將內(nèi)存單元連接起來,可以加速空閑內(nèi)存的查找,或鏈表處理操作。4.內(nèi)存頁的分配與釋放第六十頁,共73頁。空閑內(nèi)存的組織示意圖項0:單個空閑內(nèi)存頁信息;項1:以兩個連續(xù)內(nèi)存頁為一組的頁組信息;項2:以四個內(nèi)存頁。。。頁組中內(nèi)存頁的數(shù)量依次按2的倍數(shù)遞增

每個頁組的起始內(nèi)存編號。記錄相應頁組的分配情況釋放的時候檢查是否有與之相鄰的空閑頁,如果有,則組合成一個大的空閑頁組。第六十一頁,共73頁。5.4.2內(nèi)存交換當出現(xiàn)內(nèi)存不足時,Linux內(nèi)核中的內(nèi)存管理子系統(tǒng)調(diào)用交換守護進程kswapd,釋放一些內(nèi)存頁;進程kswapd有自己的進程控制塊task_struct結構,但是,它沒有自己獨立的地址空間,只使用系統(tǒng)空間;所以也把它稱為線程,其任務就是保證系統(tǒng)中有足夠的空閑內(nèi)存頁;當系統(tǒng)啟動時,交換守護進程由內(nèi)核的init(初始化)進程啟動,并進入無限循環(huán),每次循環(huán)末尾進入睡眠,內(nèi)核在一定時間之后,喚醒并調(diào)度該進程使之運行。第六十二頁,共73頁。交換守護進程的工作主要分為兩部分:1、若發(fā)現(xiàn)可用內(nèi)存頁出現(xiàn)短缺,則將若干不常用的活躍內(nèi)存頁面變?yōu)椴换钴S狀態(tài);2、清理不活躍的“臟”頁面(即:內(nèi)存頁上的內(nèi)容與盤上內(nèi)容不一致),將其寫入交換設備,或回收一些內(nèi)存頁,使之成為空閑的內(nèi)存頁。第六十三頁,共73頁。5.5進程通信系統(tǒng)中的進程與內(nèi)核之間,以及不同的進程之間,需要進行通信和協(xié)調(diào),最常用的通信方式是:信號機制管道文件SystemVIPC(內(nèi)部進程通信)機制本節(jié)只介紹上述方法的基本實現(xiàn)思想第六十四頁,共73頁。1.信號概念5.5.1信號機制信號(signal,稱為軟中斷)機制:是在軟件層次上對中斷機制的一種模擬。異步進程可以通過彼此發(fā)送信號來實現(xiàn)簡單通信。接收信號的進程,在運行過程中檢測自身是否收到信號;若收到信號,則轉(zhuǎn)去執(zhí)行預先規(guī)定好的信號處理程序;再返回原先正在執(zhí)行的進程。第六十五頁,共73頁。3.進程對信號可采取的處理方式進程間可用系統(tǒng)提供的系統(tǒng)調(diào)用發(fā)送信號;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論