《系統(tǒng)內(nèi)核結(jié)構(gòu)》ppt課件_第1頁
《系統(tǒng)內(nèi)核結(jié)構(gòu)》ppt課件_第2頁
《系統(tǒng)內(nèi)核結(jié)構(gòu)》ppt課件_第3頁
《系統(tǒng)內(nèi)核結(jié)構(gòu)》ppt課件_第4頁
《系統(tǒng)內(nèi)核結(jié)構(gòu)》ppt課件_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核構(gòu)造系統(tǒng)內(nèi)核構(gòu)造 10.1 UNIX10.1 UNIX系統(tǒng)概述系統(tǒng)概述 10.2 10.2 進程的描畫和控制進程的描畫和控制 10.3 10.3 進程的同步與通訊進程的同步與通訊 10.4 10.4 存儲器管理存儲器管理 10.5 10.5 設備管理設備管理 10.6 10.6 文件管理文件管理 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.1 UNIX系統(tǒng)概述系統(tǒng)概述 10.1.1 UNIX系統(tǒng)的開展史系統(tǒng)的開展史 1. UNIX系統(tǒng)的開展系統(tǒng)的開展 2. 兩大集團對峙兩大集團對峙

2、3. 網(wǎng)絡操作系統(tǒng)網(wǎng)絡操作系統(tǒng)UNIX 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.1.2 UNIX系統(tǒng)的特征系統(tǒng)的特征 開放性2) 多用戶、 多義務環(huán)境 3) 功能強大, 實現(xiàn)高效 4) 提供了豐富的網(wǎng)絡功能5) 支持多處置器功能 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.1.3 UNIX系統(tǒng)的內(nèi)核構(gòu)造系統(tǒng)的內(nèi)核構(gòu)造 字符設備塊設備設備驅(qū)動程序硬件控制高速緩存文件子系統(tǒng)系統(tǒng)調(diào)用接口進程間通信調(diào)度存儲管理進程控制子系統(tǒng)核心級硬件級硬件核心級用戶級庫函數(shù)用戶程序捕俘圖 10-1 UNIX中心的框圖第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 1.

3、進程控制子系統(tǒng)進程控制子系統(tǒng) 進程控制。 (2) 進程通訊。 (3) 存儲器管理。 (4) 進程調(diào)度。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 文件子系統(tǒng)文件子系統(tǒng) 文件管理。 (2) 高速緩沖機制。 (3) 設備驅(qū)動程序。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2 進程的描畫和控制進程的描畫和控制 10.2.1 進程控制塊進程控制塊PCB 在UNIX系統(tǒng)中, 把進程控制塊分為四部分:(1) 進程表項。(2) U區(qū)。 (3) 進程區(qū)表。 (4) 系統(tǒng)區(qū)表。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 1. 進程表項進程表項(Proces

4、s Table Entry) 進程標識符(PID)。 (2) 用戶標識符(UID)。 (3) 進程形狀。 (4) 事件描畫符。 (5) 進程和U區(qū)在內(nèi)存或外存的地址。 (6) 軟中斷信息。 (7) 計時域。 (8) 進程的大小。 (9) 偏置值nice。 (10) P-Link指針。 (11) 指向U區(qū)進程正文、 數(shù)據(jù)及棧在內(nèi)存區(qū)域的指針。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. U區(qū)區(qū)(U Area) 進程表項指針。 (2) 真正用戶標識符u-ruid(real user ID)。 (3) 有成效戶標識符u-euid(effective user ID)。 (4) 用戶

5、文件描畫符表。 (5) 當前目錄和當前根。 (6) 計時器。 (7) 內(nèi)部I/O參數(shù)。 (8) 限制字段。 (9) 過失字段。 (10) 前往值。 (11) 信號處置數(shù)組。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 系統(tǒng)區(qū)表系統(tǒng)區(qū)表(System Region Table) 區(qū)的類型和大小。 (2) 區(qū)的形狀。 (3) 區(qū)在物理存儲器中的位置。 (4) 援用計數(shù)。 (5) 指向文件索引結(jié)點的指針。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 4. 本進程區(qū)表本進程區(qū)表(Per Process Region Table) 正文數(shù)據(jù)棧正文數(shù)據(jù)棧abcdeabcde系

6、統(tǒng)區(qū)表A進程區(qū)表B進程區(qū)表圖 10-2 進程區(qū)表項、系統(tǒng)區(qū)表項和區(qū)的關(guān)系 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 圖 10-3 進程的數(shù)據(jù)構(gòu)造 U區(qū)進程表abcabc本進程區(qū)表系統(tǒng)區(qū)表第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2.2 進程形狀與進程映像進程形狀與進程映像 1. 進程形狀進程形狀 62379845喚醒換出換出換入內(nèi)存中睡眠睡眠且換出睡眠調(diào)度核心態(tài)執(zhí)行1搶奪被搶奪內(nèi)存中就緒內(nèi)存足內(nèi)存不足創(chuàng)建fork用戶態(tài)執(zhí)行返回到用戶態(tài)系統(tǒng)調(diào)用中斷中斷中斷返回返回僵死喚醒就緒且換出圖 10-4 進程的形狀轉(zhuǎn)換 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)

7、構(gòu) 2. 進程映像進程映像 用戶級上下文 2) 存放器上下文 程序存放器。 (2) 處置機形狀存放器(PSR)。 (3) 棧指針。 (4) 通用存放器。 3) 系統(tǒng)級上下文 靜態(tài)部分。 (2) 動態(tài)部分。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2.3 進程控制進程控制 1. fork系統(tǒng)調(diào)用系統(tǒng)調(diào)用 為新進程分配一個進程表項和進程標識符。(2) 檢查同時運轉(zhuǎn)的進程數(shù)目。 (3) 拷貝進程表項中的數(shù)據(jù)。 (4) 子進程承繼父進程的一切文件。(5) 為子進程創(chuàng)建進程上下文。 (6) 子進程執(zhí)行。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. exec系統(tǒng)調(diào)用

8、系統(tǒng)調(diào)用 trappatharg varg 2parg 1parg 0p0文件名字符串參數(shù)字符串圖 10-5 exec 的參數(shù)組織方式 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. exit系統(tǒng)調(diào)用系統(tǒng)調(diào)用 通常,父進程在創(chuàng)建子進程時,應在進程的末尾安排一條exit,使子進程能自我終止。內(nèi)核須為exit完成以下操作:(1) 封鎖軟中斷。(2) 回收資源。 (3) 寫記賬信息。 (4) 置進程為“僵死形狀。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 4. wait系統(tǒng)調(diào)用系統(tǒng)調(diào)用 wait系統(tǒng)調(diào)用用于將調(diào)用進程掛起, 直至其子進程因暫?;蚪K止而發(fā)來軟中斷信號為止。假

9、設在wait調(diào)用前,已有子進程暫?;蚪K止,那么調(diào)用進程做適當處置后便前往。中心對wait調(diào)用做以下處置:中心查找調(diào)用進程能否還有子進程, 假設無,便前往出錯碼;假設找到一個處于“僵死形狀的子進程,便將子進程的執(zhí)行時間加到其父進程的執(zhí)行時間上, 并釋放該子進程的進程表項; 假設未找四處于“僵死形狀的子進程,那么調(diào)用進程便在可被中斷的優(yōu)先級上睡眠,等待其子進程發(fā)來軟中斷信號時被喚醒。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2.4 進程調(diào)度與切換進程調(diào)度與切換 1. 引起進程調(diào)度的緣由引起進程調(diào)度的緣由 首先,由于首先,由于UNIX系統(tǒng)是分時系統(tǒng),因此其時鐘中斷處置系統(tǒng)是分時

10、系統(tǒng),因此其時鐘中斷處置程序須每隔一定時間,便對要求進程調(diào)度程序進展調(diào)度的標程序須每隔一定時間,便對要求進程調(diào)度程序進展調(diào)度的標志志runrun予以置位,以引起調(diào)度程序重新調(diào)度。其次,當進予以置位,以引起調(diào)度程序重新調(diào)度。其次,當進程執(zhí)行了程執(zhí)行了wait、exit及及sleep等系統(tǒng)調(diào)用后要放棄處置機時,等系統(tǒng)調(diào)用后要放棄處置機時, 也也會引起調(diào)度程序重新進展調(diào)度。此外,當進程執(zhí)行完系統(tǒng)調(diào)會引起調(diào)度程序重新進展調(diào)度。此外,當進程執(zhí)行完系統(tǒng)調(diào)用功能而從中心態(tài)前往到用戶態(tài)時,假設系統(tǒng)中又出現(xiàn)了更用功能而從中心態(tài)前往到用戶態(tài)時,假設系統(tǒng)中又出現(xiàn)了更高優(yōu)先級的進程在等待處置機時,內(nèi)核應搶占當前進程的

11、處高優(yōu)先級的進程在等待處置機時,內(nèi)核應搶占當前進程的處置機,置機, 這也會引起調(diào)度。這也會引起調(diào)度。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 調(diào)度算法調(diào)度算法 進程調(diào)度,在此是采用動態(tài)優(yōu)先數(shù)輪轉(zhuǎn)調(diào)度算法。進程調(diào)度,在此是采用動態(tài)優(yōu)先數(shù)輪轉(zhuǎn)調(diào)度算法。 調(diào)度程序在進展調(diào)度時,首先從處于調(diào)度程序在進展調(diào)度時,首先從處于“內(nèi)存就緒或內(nèi)存就緒或“被被搶占形狀的進程中,選擇一個其優(yōu)先數(shù)最小搶占形狀的進程中,選擇一個其優(yōu)先數(shù)最小(優(yōu)先級最優(yōu)先級最高高)的進程。假設此時系統(tǒng)中的進程。假設此時系統(tǒng)中(同時同時)有多個進程都具有一有多個進程都具有一樣的最高優(yōu)先級,那么內(nèi)核將選擇其中處于就緒形

12、狀或樣的最高優(yōu)先級,那么內(nèi)核將選擇其中處于就緒形狀或被搶占形狀最久的進程,將它從其所在隊列中移出,并被搶占形狀最久的進程,將它從其所在隊列中移出,并進展進程上下文的切換,進展進程上下文的切換, 恢復其運轉(zhuǎn)?;謴推溥\轉(zhuǎn)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 進程優(yōu)先級的分類 UNIX系統(tǒng)把進程的優(yōu)先級分成兩類,第一類是中心優(yōu)先級,又可進一步把它分為可中斷和不可中斷兩種。當一個軟中斷信號到達時,假設有進程正在可中斷優(yōu)先級上睡眠,該進程將立刻被喚醒;假設有進程處于不可中斷優(yōu)先級上, 那么該進程繼續(xù)睡眠。對諸如“對換、“等待磁盤I/O、“等待緩沖區(qū)等幾個優(yōu)先級,都屬于不可中斷

13、優(yōu)先級;而“等待輸入、“等待終端輸出、“等待子進程退出的幾個優(yōu)先級, 都是可中斷優(yōu)先級。另一類是用戶優(yōu)先級,它又被分成n+1級, 其中第0級為最高優(yōu)先級,第n級的優(yōu)先級最低。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 4. 進程優(yōu)先數(shù)的計算進程優(yōu)先數(shù)的計算 基本用戶優(yōu)先數(shù)的時間最近使用優(yōu)先數(shù)2CPU 其中,根本用戶優(yōu)先數(shù)即proc構(gòu)造中的偏移值nice,可由用戶將它設置成040中的任一個數(shù)。一旦設定后, 用戶僅能使其值添加, 特權(quán)用戶才有權(quán)減小nice的值。而最近運用CPU的時間,那么是指當前占有處置機的進程本次運用CPU的時間。內(nèi)核每隔16.667 ms,便對該時間做加1操作,

14、這樣,占有CPU的進程其優(yōu)先數(shù)將會隨著它占有CPU時間的添加而加大,相應地,其優(yōu)先級便隨之降低。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 5. 進程切換進程切換 在OS中, 凡要進展中斷處置和執(zhí)行系統(tǒng)調(diào)用時, 都將涉及到進程上下文的保管和恢復問題, 此時系統(tǒng)所保管或恢復的上下文都是屬于同一個進程的。而在進程調(diào)度之后, 內(nèi)核所應執(zhí)行的是進程上下文的切換,即內(nèi)核是把當前進程的上下文保管起來,而所恢復的那么是進程調(diào)度程序所選中的進程的上下文,以使該進程能恢復執(zhí)行。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3 進程的同步與通訊進程的同步與通訊 10.3.1 sle

15、ep與與wakeup同步機制同步機制 1. sleep過程過程 進入sleep過程后,中心首先保管進入睡眠時的處置機運轉(zhuǎn)級, 再提高處置機的運轉(zhuǎn)優(yōu)先級,來屏蔽一切的中斷,接著將該進程置為“睡眠形狀,將睡眠地址保管在進程表項中,并將該進程放入睡眠隊列中。假設進程的睡眠是不可中斷的,做了進程上下文的切換后,進程便可安穩(wěn)地睡眠。 當進程被喚醒并被調(diào)度執(zhí)行時,將恢復處置機的運轉(zhuǎn)級為進入睡眠時的值, 此時允許中斷處置機。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. wakeup過程過程 該過程的主要功能,是喚醒在指定事件隊列上睡眠該過程的主要功能,是喚醒在指定事件隊列上睡眠的一切進程,

16、并將它們放入可被調(diào)度的進程隊列中。的一切進程,并將它們放入可被調(diào)度的進程隊列中。 假假設進程尚未被裝入內(nèi)存,應喚醒對換進程;設進程尚未被裝入內(nèi)存,應喚醒對換進程; 假設被喚醒假設被喚醒進程的優(yōu)先級高于當前進程的優(yōu)先級,那么應重置調(diào)度進程的優(yōu)先級高于當前進程的優(yōu)先級,那么應重置調(diào)度標志。最后,標志。最后, 在恢復處置機的運轉(zhuǎn)級后前往。在恢復處置機的運轉(zhuǎn)級后前往。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3.2 信號信號(signal)機制機制 1. 信號機制的根本概念 信號機制主要是作為在同一用戶的諸進程之間通訊的簡單工具。 信號本身是一個119中的某個整數(shù),用來代表某一種

17、事先商定好的簡單音訊。信號機制是對硬中斷的一種模擬。第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 信號機制與中斷機制之間的類似之處表現(xiàn)為: 信號和中斷都同樣采用異步通訊方式,在檢測出有信號或有中斷懇求時,兩者都是暫停正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應的處置程序,處置完后都再前往到原來的斷點;再有是兩者對信號或中斷都可加以屏蔽。 信號與中斷兩機制之間的差別是:中斷有優(yōu)先級,而信號機制那么沒有,即一切的信號都是平等的;再者是信號處置程序是在用戶態(tài)下運轉(zhuǎn)的,而中斷處置程序那么是在中心態(tài)下運轉(zhuǎn);還有,中斷呼應是及時的,而對信號的呼應通常都有較長的時間延遲。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)

18、構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 信號機制的功能信號機制的功能 1發(fā)送信號 2) 設置對信號的處置方式 (1) func=1時, 進程對sig類信號不予理睬, 亦即屏蔽了該信號。 (2) func=0, 即為缺省值時, 進程在收到sig信號后應自我終止。 (3) func為非0、 非1類整數(shù)時, 就把func的值作為指向某信號處置程序的指針。 3) 對信號的處置 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3.3 管道機制管道機制 管道的類型管道的類型 無名管道無名管道(Unnamed Pipes) 2) 有名管道有名管道(Named Pipes) 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核

19、結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 對無名管道的讀寫對無名管道的讀寫 對pipe文件大小的限制 2) 進程互斥 3) 進程寫管道 4) 進程讀管道 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3.4 音訊機制音訊機制 1. 音訊和音訊隊列音訊和音訊隊列1) 音訊音訊(message) 圖圖 10-6 音訊機制中的數(shù)據(jù)構(gòu)造音訊機制中的數(shù)據(jù)構(gòu)造 隊列 i隊列 n消息首部msgh 0消息首部msgh 3消息首部msgh 2消息緩沖區(qū)消息緩沖區(qū)消息緩沖區(qū)消息首部m消息緩沖區(qū)消息隊列頭表032第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 音訊隊列 當一個進程收到由其它多個進程發(fā)來的

20、音訊時, 可將這些音訊排成一個音訊隊列, 每個音訊隊列有一個稱為關(guān)鍵字key的稱號, 它是由用戶指定的。 每個音訊隊列還有一個音訊隊列描畫符, 其作用與用戶文件描畫符一樣, 以方便用戶和系統(tǒng)對音訊隊列的訪問。 在一個系統(tǒng)中能夠有假設干個音訊隊列, 由一切的音訊隊列的頭標組成一個頭標數(shù)組。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 音訊隊列的建立與操作音訊隊列的建立與操作 1) 音訊隊列的建立 在一個進程要利用音訊機制與其它進程通訊之前, 應利用系統(tǒng)調(diào)用msgget( )先建立一個指名的音訊隊列。對于該系統(tǒng)調(diào)用,中心將搜索音訊隊列頭標表, 確定能否有指定名字的音訊隊列。假設無

21、,中心將分配一個新的音訊隊列頭標, 并對它進展初始化,然后給用戶前往一個音訊隊列描畫符; 否那么,它只是檢查該音訊隊列的答應權(quán)后便前往。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 音訊隊列的支配 (1) 用于查詢有關(guān)音訊隊列的情況, 如隊列中的音訊數(shù)目、 隊列中的最大字節(jié)數(shù)、 最后一個發(fā)送音訊的進程的標識符、 發(fā)送時間等。 (2) 用于設置和改動有關(guān)音訊隊列的屬性, 如改動音訊隊列的用戶標識符、 或用戶組標識符、 音訊隊列的答應權(quán)等。 (3) 消除音訊隊列的標識符。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 音訊的發(fā)送和接納音訊的發(fā)送和接納 1) 音訊的

22、發(fā)送音訊的發(fā)送 當進程要與其它進程通訊時,可利用當進程要與其它進程通訊時,可利用msgsnd( )系統(tǒng)調(diào)系統(tǒng)調(diào)用來發(fā)送音訊。用來發(fā)送音訊。 對于對于msgsnd( )系統(tǒng)調(diào)用,系統(tǒng)調(diào)用, 中心檢查音訊中心檢查音訊隊列描畫符和答應權(quán)能否合法、音訊長度能否超越系統(tǒng)規(guī)隊列描畫符和答應權(quán)能否合法、音訊長度能否超越系統(tǒng)規(guī)定的長度。經(jīng)過檢查后,中心為音訊分配音訊數(shù)據(jù)區(qū),并定的長度。經(jīng)過檢查后,中心為音訊分配音訊數(shù)據(jù)區(qū),并將音訊從用戶音訊緩沖區(qū)拷貝到音訊數(shù)據(jù)區(qū)。將音訊從用戶音訊緩沖區(qū)拷貝到音訊數(shù)據(jù)區(qū)。 分配音訊首分配音訊首部,將它鏈入音訊隊列的末尾;在音訊首部中填寫音訊的部,將它鏈入音訊隊列的末尾;在音訊首

23、部中填寫音訊的類型、類型、 大小以及指向音訊數(shù)據(jù)區(qū)的指針等;還要修正音訊大小以及指向音訊數(shù)據(jù)區(qū)的指針等;還要修正音訊隊列頭標中的數(shù)據(jù)隊列頭標中的數(shù)據(jù)(如音訊隊列中的音訊數(shù)、字節(jié)數(shù)等。然如音訊隊列中的音訊數(shù)、字節(jié)數(shù)等。然后,喚醒在等待音訊到來的睡眠進程。后,喚醒在等待音訊到來的睡眠進程。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 音訊的接納 進程可利用msgrcv( )系統(tǒng)調(diào)用, 從指定音訊隊列中讀一個音訊。對于msgrcv( )系統(tǒng)調(diào)用, 是先由中心檢查音訊隊列標識符和答應權(quán), 繼而根據(jù)用戶指定的音訊類型做相應的處置。音訊類型msgtyp的參數(shù)能夠有三種情況:當msgtyp

24、=0時,中心尋覓音訊隊列中的第一個音訊,并將它前往給調(diào)用進程;當msgtyp為正整數(shù)時,中心前往指定類型的第一個音訊;當msgtyp為負整數(shù)時,中心應在其類型值小于或等于msgtyp絕對值的一切音訊中,選出類型值最低的第一個音訊前往。 假設所前往音訊的大小等于或小于用戶的懇求,中心便將音訊正文拷貝到用戶區(qū),再從隊列中刪除該音訊,并喚醒睡眠的發(fā)送進程;假設音訊長度比用戶要求的大, 那么系統(tǒng)前往出錯信息。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3.5 共享存儲區(qū)機制共享存儲區(qū)機制 1. 共享存儲區(qū)共享存儲區(qū) 圖 10-7 利用共享存儲區(qū)進展通訊 正 文進程A的虛空間數(shù) 據(jù)棧

25、共享存儲區(qū)B正 文數(shù) 據(jù)B棧內(nèi)存空間進程B的虛空間AA第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 共享存儲區(qū)的建立與支配共享存儲區(qū)的建立與支配 1) 共享存儲區(qū)的建立 當進程要利用共享存儲區(qū)與另一進程進展通訊時, 須先利用系統(tǒng)調(diào)用shmget( )建立一塊共享存儲區(qū),并提供該共享存儲區(qū)的名字key和共享存儲區(qū)以字節(jié)為單位的長度size等參數(shù)。 假設系統(tǒng)中曾經(jīng)建立了指名的共享存儲區(qū),那么該系統(tǒng)調(diào)用將前往該共享存儲區(qū)的描畫符shmid;假設尚未建立,便為進程建立一個指定大小的共享存儲區(qū)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 共享存儲區(qū)的支配 好像音訊機制

26、一樣,可以用shmctl( )系統(tǒng)調(diào)用對共享存儲區(qū)的形狀信息進展查詢,如其長度、所銜接的進程數(shù)、創(chuàng)建者標識符等; 也可設置或修正其屬性, 如共享存儲區(qū)的答應權(quán)、當前銜接的進程計數(shù)等;還可用來對共享存儲區(qū)加鎖或解鎖,以及修正共享存儲區(qū)標識符等。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 共享存儲區(qū)的附接與斷開共享存儲區(qū)的附接與斷開 在進程曾經(jīng)建立了共享存儲區(qū)或已獲得了其描畫符后,在進程曾經(jīng)建立了共享存儲區(qū)或已獲得了其描畫符后, 還須利用系統(tǒng)調(diào)用還須利用系統(tǒng)調(diào)用shmat( )將該共享存儲區(qū)附接到用戶給定將該共享存儲區(qū)附接到用戶給定的某個進程的虛地址的某個進程的虛地址shmad

27、dr上,并指定該存儲區(qū)的訪問上,并指定該存儲區(qū)的訪問屬性即指明該區(qū)是只讀,還是可讀可寫。以后,此共享存屬性即指明該區(qū)是只讀,還是可讀可寫。以后,此共享存儲區(qū)便成為該進程虛地址空間的一部分。進程可采取與對儲區(qū)便成為該進程虛地址空間的一部分。進程可采取與對其它虛地址空間一樣的存取方法來訪問。當進程不再需求其它虛地址空間一樣的存取方法來訪問。當進程不再需求該共享存儲區(qū)時,再利用系統(tǒng)調(diào)用該共享存儲區(qū)時,再利用系統(tǒng)調(diào)用shmdt( )把該區(qū)與進程把該區(qū)與進程斷開。斷開。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.3.6 信號量集機制信號量集機制 1. 信號量與信號量集信號量與信號量集

28、 1) 信號量 在UNIX系統(tǒng)中規(guī)定,每個信號量有一個可用來表示某類資源數(shù)目的信號量值和一個操作值,該操作值可為正整數(shù)、零或負整數(shù)三種情況之一。傳統(tǒng)的信號量機構(gòu)是對信號量施加wait及signal操作。而在UNIX系統(tǒng)中那么并未采用wait及signal, 而是利用semop( )系統(tǒng)調(diào)用對指定的信號量施加操作。此外,還可利用semget( )來建立信號量及利用semctl( )系統(tǒng)調(diào)用對信號量進展支配。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 信號量集 在一個信號量集中,通常都包含有假設干個信號量。對這組信號量的操作方式該當是原子操作方式, 此即,把對這組信號量視為一個

29、整體,要么全做,要么全不做。假設中心不能完成對這組一切信號量的操作,那么中心應將曾經(jīng)操作過的信號量恢復到操作前的形狀,這樣便可實現(xiàn)要么全做、 要么全不做的原子操作方式。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 信號量集的數(shù)據(jù)構(gòu)造信號量集的數(shù)據(jù)構(gòu)造 1) 信號量表 信號量表是信號量的構(gòu)造數(shù)組。在系統(tǒng)中,每個信號量用一個信號量構(gòu)造表示。其中,包括信號量值semval及最近一次對信號量進展操作的進程標識符sempid、等待該信號量值添加的進程數(shù)等。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 信號量集表 sem 0sem 1sem 20sem 31sem 42

30、sem 53sem 6sem 7sem 80sem 91sem 102sem 110信號量表信號量集表信號量集信號量集圖 10-8 信號量集表與信號量表第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 系統(tǒng)調(diào)用系統(tǒng)調(diào)用 在信號量機制中,同樣也提供了假設干條系統(tǒng)調(diào)用,在信號量機制中,同樣也提供了假設干條系統(tǒng)調(diào)用, 分別用于對信號量執(zhí)行各種操作。分別用于對信號量執(zhí)行各種操作。 1) semget( )系統(tǒng)調(diào)用系統(tǒng)調(diào)用 用戶可利用該系統(tǒng)調(diào)用來建立信號量集。用戶應提供用戶可利用該系統(tǒng)調(diào)用來建立信號量集。用戶應提供信號量的名字、信號量集中信號量的數(shù)目等。假設信號量信號量的名字、信號量集中信號

31、量的數(shù)目等。假設信號量集的建立勝利,將前往信號量集的描畫符集的建立勝利,將前往信號量集的描畫符semid。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) semop( )系統(tǒng)調(diào)用 該系統(tǒng)調(diào)用可用來對信號量集進展操作。用戶需提供信號量集的描畫符、信號量的編號,即信號量在信號量集中的序號,以及所要施加操作的操作數(shù)semop。 內(nèi)核根據(jù)semop來改動信號量的值。當semop為正值時,便將該正值加到信號量的值上。當semop為負值時,假設信號量的值大于semop的絕對值,應將該負值加到信號量值上; 否那么, 操作失敗,內(nèi)核將曾經(jīng)操作過的信號量恢復到該系統(tǒng)調(diào)用開場執(zhí)行時的值。 第十章第

32、十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.4 存存 儲儲 器器 管管 理理 10.4.1 懇求調(diào)頁管理的數(shù)據(jù)構(gòu)造懇求調(diào)頁管理的數(shù)據(jù)構(gòu)造 1. 頁表和磁盤描畫表頁表和磁盤描畫表1) 頁表頁表 圖 10-9 頁表項和磁盤描畫表項 物理頁號年齡寫時拷貝修改位訪問位有效位保護a頁表項對換設備號設備塊號存儲器類型b盤塊闡明第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 頁框數(shù)據(jù)表和對換運用表頁框數(shù)據(jù)表和對換運用表 1) 頁框數(shù)據(jù)表 頁形狀: 指示該頁的拷貝是在對換設備上, 還是在可執(zhí)行文件中。 內(nèi)存援用計數(shù): 指出援用該頁面的進程數(shù)目。 邏輯設備: 指含有此拷貝的邏輯設備, 它

33、可以是對換設備, 也可以是文件系統(tǒng)。 塊號: 當邏輯設備為對換設備時, 這是盤塊號; 而當邏輯設備為文件系統(tǒng)時,這是指文件的邏輯塊號。 指針1: 指向空閑頁鏈表中的下一個頁框數(shù)據(jù)表的指針。 指針2: 指向散列隊列中下一個頁框數(shù)據(jù)表的指針。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 圖 10-10 頁框數(shù)據(jù)表項及其散列隊列 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 對換運用表 頁表項頁框號794磁盤塊描述項對換設備1塊號2743引用數(shù)1對換設備1塊號2743物理頁794引用數(shù) 1對換設備塊2743對換使用表項頁框數(shù)據(jù)表項794虛地址1493K圖 10-11 四種

34、數(shù)據(jù)構(gòu)造之間的關(guān)系 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.4.2 換頁進程換頁進程 1. 添加有效頁的年齡添加有效頁的年齡 一個頁可計數(shù)的最大年齡,取決于它的硬件設備。對于只一個頁可計數(shù)的最大年齡,取決于它的硬件設備。對于只設置兩位作為年齡域的頁,其有效頁的年齡只能取值為設置兩位作為年齡域的頁,其有效頁的年齡只能取值為0、1、2和和3。當該頁的年齡為。當該頁的年齡為0、 1、 2時,該頁處于不可換出形狀;時,該頁處于不可換出形狀;而當其年齡到達而當其年齡到達3時,該頁便為換出形狀。時,該頁便為換出形狀。 每當內(nèi)存中的空閑每當內(nèi)存中的空閑頁面數(shù)低于某規(guī)定的低限時,中心便喚

35、醒換頁進程,由換頁進頁面數(shù)低于某規(guī)定的低限時,中心便喚醒換頁進程,由換頁進程去檢查內(nèi)存中的每一個活動的、程去檢查內(nèi)存中的每一個活動的、 非上鎖的區(qū),對一切有效頁非上鎖的區(qū),對一切有效頁的年齡字段加的年齡字段加1。對于那些其年齡已增至。對于那些其年齡已增至3的頁,便不再加的頁,便不再加1,而是將它們換出。假設這種頁已被進程訪問過,便將其年齡域而是將它們換出。假設這種頁已被進程訪問過,便將其年齡域中的年齡降為中的年齡降為0。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 對換出頁的幾種處置方式對換出頁的幾種處置方式 (1) 假設在對換設備上已有被換出頁的拷貝,且該頁的內(nèi)容未被修正,

36、此時,中心只須將該頁頁表項中的有效位清零,并將頁框數(shù)據(jù)表項中的援用計數(shù)減1,最后將該頁表項放入空閑頁鏈表中。 (2) 假設在對換設備上沒有被換出頁的拷貝,那么換出進程應將該頁寫到對換設備上。 (3) 雖然在對換設備上已有換出頁的副本,但該頁的內(nèi)容已被修正正,此時中心應將該頁在對換設備上原來占有的空間釋放, 再重新將該頁拷貝到對換設備上,使在對換設備上的拷貝內(nèi)容總是最新的。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 將換出頁面寫到對換設備上將換出頁面寫到對換設備上 當在換出頁面鏈表中的頁面數(shù)已到達規(guī)定值時, 中心應將它們換出。為此,應首先為它們分配一個延續(xù)的對換空間,以便一同

37、將它們換出; 但假設在對換設備上沒有足夠大的延續(xù)空間,而其空閑存儲空間的總和又大于64 KB時,中心可采取每次換出一頁的方式將它們換出。 每當中心向?qū)Q設備上寫一個頁時, 須首先去除該頁頁表項的有效位,并將頁框數(shù)據(jù)表項中的援用計數(shù)減1。假設援用計數(shù)為0,闡明已無其它進程再援用該頁,中心便將其頁框數(shù)據(jù)表項鏈入空閑頁鏈表的尾部。 假設雖援用計數(shù)不為0,闡明仍有進程共享該頁,但假設該頁已長期未被訪問過,那么也須將該頁換出。最后,中心將分配給該頁的對換空間的地址填入相應的磁盤描畫表項中, 并將對換運用表中的計數(shù)加1。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.4.3 懇求調(diào)頁懇求調(diào)

38、頁 缺頁在可執(zhí)行文件上缺頁在可執(zhí)行文件上2. 缺頁在對換設備上缺頁在對換設備上 3. 缺頁在內(nèi)存頁面緩沖區(qū)中缺頁在內(nèi)存頁面緩沖區(qū)中 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.5 設設 備備 管管 理理10.5.1 字符設備緩沖區(qū)管理字符設備緩沖區(qū)管理 1. 空閑字符緩沖區(qū)隊列空閑字符緩沖區(qū)隊列 cblock0c_nextc_nextc_nextcblock1cblock2c_nextcblockN1cfreelist圖 10-12 空閑字符緩沖區(qū)隊列 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 空閑字符緩沖區(qū)的分配與回收空閑字符緩沖區(qū)的分配與回收 在字符設

39、備進展在字符設備進展I/O時,內(nèi)核可利用時,內(nèi)核可利用getcf過程從空閑字過程從空閑字符緩沖區(qū)隊列中獲得一個空閑緩沖區(qū),假設隊列空,闡明符緩沖區(qū)隊列中獲得一個空閑緩沖區(qū),假設隊列空,闡明已無空閑緩沖區(qū)可提供,便前往;否那么,從隊首獲得一已無空閑緩沖區(qū)可提供,便前往;否那么,從隊首獲得一個空閑緩沖區(qū),個空閑緩沖區(qū), 并把指向該緩沖區(qū)的指針并把指向該緩沖區(qū)的指針bp前往給調(diào)用者。前往給調(diào)用者。由于空閑緩沖區(qū)隊列屬于臨界資源,故還須采取互斥訪問由于空閑緩沖區(qū)隊列屬于臨界資源,故還須采取互斥訪問措施,措施, 即,在過程開場處,將處置機的優(yōu)先級提升為即,在過程開場處,將處置機的優(yōu)先級提升為6,在,在獲

40、得空緩沖區(qū)之后,再恢復處置機的優(yōu)先級。獲得空緩沖區(qū)之后,再恢復處置機的優(yōu)先級。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 設備的字符緩沖區(qū)隊列設備的字符緩沖區(qū)隊列 (1) getc過程。 該過程用于從一個clist構(gòu)造的隊首指針所指示的字符緩沖隊列中,取出為首的字符,然后修正該隊列的可用字符計數(shù)和隊首指針。當取完一個緩沖區(qū)中的一切字符時,將釋放該緩沖區(qū)。該過程的前往值是取出的字符。 (2) putc過程。 該過程用于將一個字符C放入設備的指定字符緩沖區(qū)隊列的末尾。假設此時該隊列空、或隊列的最后一個緩沖區(qū)已滿,且空閑字符緩沖區(qū)隊列也空,該過程無法將字符放入隊列中, 那么前往“

41、-1。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) (3) getcb過程。 該過程用于從指定的設備字符緩沖區(qū)隊列中, 取出第一個緩沖區(qū),并將該隊列的可用字符計數(shù)減去第一個緩沖區(qū)中的字符數(shù),然后前往指向該緩沖區(qū)的指針bp。假設該緩沖區(qū)已是該隊列中獨一的緩沖區(qū), 那么置隊尾指針為空。 (4) putcb過程。 該過程用于將由bp所指向的緩沖區(qū)放入指定的設備字符緩沖區(qū)隊列的末尾,然后將該隊列的可用字符計數(shù)加上bp緩沖區(qū)中的字符數(shù)后前往。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.5.2 塊設備緩沖區(qū)管理塊設備緩沖區(qū)管理1. 盤塊緩沖區(qū)及其首部盤塊緩沖區(qū)及其首部 圖

42、10-13 緩沖首部 設備號 塊號 狀態(tài) 緩沖區(qū)指針 散列隊列的前向指針 散列隊列的后向指針 空閑表上的前向指針 空閑表上的后向指針 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 盤塊緩沖池構(gòu)造盤塊緩沖池構(gòu)造 blkno 0 mod 4blkno 1 mod 4blkno 2 mod 4blkno 3 mod 4281798346459750103599空閑表頭標圖 10-14 空閑隊列(鏈)及散列隊列 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 盤塊緩沖區(qū)的分配盤塊緩沖區(qū)的分配 (1) getblk( )過程。 該過程用于從空閑緩沖區(qū)隊列中獲得任一空閑緩沖區(qū)

43、。 該過程首先檢查空閑塊緩沖隊列能否為空,假設空,便調(diào)用sleep過程睡眠等待, 直至在空閑塊緩沖隊列中出現(xiàn)空閑緩沖區(qū)為止; 否那么,從空閑塊緩沖隊列中摘下第一個緩沖區(qū)。假設在其緩沖首部中還有延遲寫標志,那么還須調(diào)用bdwrite過程,將此緩沖區(qū)中的數(shù)據(jù)寫回到磁盤中,再從空閑隊列中獲得一個空緩沖區(qū);否那么,便將b-flag中的bCD*2busy標志置為1, 并前往指向該緩沖區(qū)的指針bp。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) (2) getblk(dev, blkno)過程。 該過程用于為指定設備dev和盤塊號為blkno的盤塊懇求一個緩沖區(qū)。中心首先檢查要讀入的盤塊內(nèi)容能否

44、已在某個緩沖區(qū)中,假設發(fā)現(xiàn)已在某緩沖區(qū)中,便不再從磁盤上讀; 否那么,中心須從磁盤上將數(shù)據(jù)讀入,這時才需為其分配一個空緩沖區(qū)。類似地,當要把數(shù)據(jù)寫入一特定盤塊時, 中心先檢查該盤塊的內(nèi)容能否已在某緩沖區(qū),僅當該塊的內(nèi)容尚不在緩沖區(qū)中時,才需調(diào)用getblk( )過程,分配一個空緩沖區(qū)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 4. 盤塊緩沖區(qū)的回收 當中心用完某緩沖區(qū)時,可調(diào)用brelse過程將之收回。 此前,能夠有些進程因等待運用該緩沖區(qū)而睡眠,此時,釋放者進程應將睡眠隊列的隊首進程喚醒。此外,還有能夠有進程因空閑鏈表空而處于等待形狀,同樣也應將之喚醒。假設在所釋放的緩沖區(qū)中

45、的數(shù)據(jù)是有效的,為使以后在某進程需求它時,也能直接從緩沖區(qū)中讀出而不用啟動磁盤的I/O操作, 可將該緩沖區(qū)鏈入空閑鏈表的末尾;否那么(緩沖區(qū)中數(shù)據(jù)無效),應將它鏈入空閑隊列的頭部??臻e鏈表屬于臨界資源, 為了保證對它操作的互斥性,UNIX系統(tǒng)經(jīng)過提高處置機的運轉(zhuǎn)級對中斷加以屏蔽的方法來實現(xiàn)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.5.3 內(nèi)核與驅(qū)動程序接口內(nèi)核與驅(qū)動程序接口1. 設備開關(guān)表的作用設備開關(guān)表的作用 圖 10-15 設備開關(guān)表及系統(tǒng)調(diào)用和驅(qū)動程序間的接口 openclosereadwriteioctl字符設備開關(guān)表openmountcloseunmountr

46、eadwrite塊設備開關(guān)表高速緩沖調(diào)用openclosereadwriteioctl驅(qū)動程序設備中斷處理程序openclosestrategy驅(qū)動程序設備中斷處理程序中斷向量中斷向量設備中斷文件子系統(tǒng)第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 塊設備開關(guān)表塊設備開關(guān)表 函數(shù) 表項 open close strategy 01gdopen gtopen gdclose gtclose gdstrategy gtstrategy 圖 10-16 塊設備開關(guān)表 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 字符設備開關(guān)表字符設備開關(guān)表 函數(shù) 表項 openclos

47、ereadwriteIoctl0ConopenConcloseConrdadConwriteConioctl1DzbopenDzbcloseDzbreadDzbwriteDzbioctl2Syopennulldevsyreadsywritesyioctl圖 10-17 字符設備開關(guān)表 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.5.4 磁盤驅(qū)動程序磁盤驅(qū)動程序 1. 翻開磁盤驅(qū)動器的過程翻開磁盤驅(qū)動器的過程gdopen 在UNIX系統(tǒng)中,設備被看作是一種特殊類型的文件, 因此在運用該文件之前,也須先將它翻開。gdopen便是用于翻開磁盤驅(qū)動器的過程,該過程的輸入?yún)?shù)是設備號,

48、無輸出參數(shù)。進入該過程后,首先檢查系統(tǒng)中能否有由輸入?yún)?shù)dev所指定類型的磁盤驅(qū)動器,假設有,再檢查它能否已被翻開, 假設尚未翻開,便將此驅(qū)動器翻開,亦即,將該磁盤控制器表中的標志b-flag設置為B-ONCE; 再調(diào)用gdtimer過程啟動對應的控制器和設備短期時鐘鬧鐘,用于控制磁盤驅(qū)動器的執(zhí)行時間。假設系統(tǒng)中無指定類型的磁盤驅(qū)動器,那么置相應的出錯信息后前往。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 啟動磁盤控制器的過程啟動磁盤控制器的過程 該過程的輸入?yún)?shù)是控制器號該過程的輸入?yún)?shù)是控制器號ctl,無輸出參數(shù)。進入該,無輸出參數(shù)。進入該過程后,先從磁盤設備控制表中找

49、到過程后,先從磁盤設備控制表中找到I/O隊列的隊首指針,隊列的隊首指針,假設它為假設它為0,表示,表示I/O隊列空,無隊列空,無I/O緩沖區(qū)可取,于是前往;緩沖區(qū)可取,于是前往;否那么,否那么, 將控制器表中的忙閑標志將控制器表中的忙閑標志b-active置置“1。設置磁。設置磁盤控制器中的各存放器,如磁盤地址存放器、內(nèi)存總線地址盤控制器中的各存放器,如磁盤地址存放器、內(nèi)存總線地址存放器、控制形狀存放器、字計數(shù)器等,最后啟動磁盤控制存放器、控制形狀存放器、字計數(shù)器等,最后啟動磁盤控制器讀器讀(或?qū)懟驅(qū)?后前往。而后前往。而gdstartegy過程的主要功能,那么是把過程的主要功能,那么是把指定

50、的緩沖首部排在磁盤控制器指定的緩沖首部排在磁盤控制器I/O隊列的末尾,并啟動磁隊列的末尾,并啟動磁盤控制器。盤控制器。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 磁盤中斷處置過程磁盤中斷處置過程gdintr 當磁盤當磁盤I/O傳送完成并發(fā)出中斷懇求信號時,傳送完成并發(fā)出中斷懇求信號時,CPU呼應后呼應后將經(jīng)過中斷總控程序進入磁盤中斷處置過程將經(jīng)過中斷總控程序進入磁盤中斷處置過程gdintr。該過程。該過程的輸入?yún)?shù)是控制器號的輸入?yún)?shù)是控制器號ctl。進入該過程后,先檢查磁盤能否。進入該過程后,先檢查磁盤能否曾經(jīng)啟動,假設尚未啟動,程序便不予理睬即前往;曾經(jīng)啟動,假設尚未啟

51、動,程序便不予理睬即前往; 假設已假設已啟動,啟動, 那么還須先經(jīng)過對形狀存放器的檢查,來了解本次傳那么還須先經(jīng)過對形狀存放器的檢查,來了解本次傳送能否出錯。送能否出錯。 假設已出錯,便在控制終端上顯示出錯信息。假設已出錯,便在控制終端上顯示出錯信息。由于磁盤的出錯率較高,因此并不采取一旦出錯便停頓傳送由于磁盤的出錯率較高,因此并不采取一旦出錯便停頓傳送的戰(zhàn)略,而是做好重新執(zhí)行的預備,然后再傳送。僅當重試的戰(zhàn)略,而是做好重新執(zhí)行的預備,然后再傳送。僅當重試多次都失敗、且超越規(guī)定的執(zhí)行時間時,才設置出錯標志。多次都失敗、且超越規(guī)定的執(zhí)行時間時,才設置出錯標志。如未出錯,那么繼續(xù)傳送下一個緩沖區(qū)中

52、的數(shù)據(jù)。如未出錯,那么繼續(xù)傳送下一個緩沖區(qū)中的數(shù)據(jù)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.5.5 磁盤讀、寫程序磁盤讀、寫程序 1) 讀方式 在UNIX系統(tǒng)中有兩種讀方式:普通讀方式:只把盤塊中的信息讀入緩沖區(qū),由bread過程完成。提早讀方式:當一個進程要順序地讀一個文件所在的各個盤塊時,會預見到所要讀的下一個盤塊,因此在讀出指定盤塊(作為當前塊)的同時,可要求提早將下一個盤塊(提早塊)中的信息讀入緩沖區(qū)。這樣,當以后需求該盤塊的數(shù)據(jù)時,由于它已在內(nèi)存, 故而可縮短讀這塊數(shù)據(jù)的時間,從而改善了系統(tǒng)性能。 提早讀功能由breada過程完成。 第十章第十章 UNIXUN

53、IX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 寫方式 普通寫方式:這是真正把緩沖區(qū)中的數(shù)據(jù)寫到磁盤上, 且進程須等待寫操作完成,由bwrite過程完成。 異步寫方式:進程無須等待寫操作完成便可前往, 異步寫過程是bawrite。 延遲寫方式:該方式并不真正啟動磁盤,而只是在緩沖首部設置延遲寫標志,然后便釋放該緩沖區(qū),并將之鏈入空閑鏈表的末尾。以后,當有進程懇求到該緩沖區(qū)時,才將其內(nèi)容寫入磁盤。引入延遲寫的目的是為了減少不用要的磁盤I/O, 由于只需沒有進程懇求到此緩沖區(qū),其中的數(shù)據(jù)便不會被寫入磁盤,倘假設再有進程需求訪問其中的數(shù)據(jù)時,便可直接從空閑鏈表中摘下該緩沖區(qū),而不用從磁盤讀入。延遲寫方式由過程b

54、dwrite完成。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 讀過程讀過程bread和和breada 普通讀過程bread 2) 提早讀過程breada 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 寫過程寫過程bwrite、 bawrite和和bdwrite 1) 普通寫過程bwrite 該過程的輸入?yún)?shù)是緩沖區(qū)指針bp。進入該過程后,根據(jù)bp指針找到緩沖區(qū)首部,設置緩沖區(qū)首部的初值,經(jīng)過設備開關(guān)表轉(zhuǎn)入戰(zhàn)略過程,啟動磁盤。如是普通寫, 應等待I/O完成,為此, 須調(diào)用sleep過程使本人睡眠。 I/O完成后才被喚醒,再調(diào)用brelse過程釋放該緩沖區(qū)。如是

55、異步寫、且有延遲寫標志,那么在給緩沖區(qū)打上標志后,將之放入空閑鏈表的首部。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 異步寫過程bawrite 它與普通寫過程很類似,但不須等待I/O完成即可前往。 進入bawrite過程后,設置異步寫標志,再調(diào)用bwrite過程實現(xiàn)之。 3) 延遲寫過程bdwrite 延遲寫過程也很簡單。這里只須設置延遲寫標志及數(shù)據(jù)有效標志, 再調(diào)用brelse過程,將該緩沖區(qū)釋放,并鏈入空閑鏈表的尾部。以后,當某進程調(diào)用getblk獲得該緩沖區(qū)時,再用異步寫方式將緩沖區(qū)內(nèi)容寫入磁盤。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.6 文文

56、 件件 管管 理理 10.6.1 UNIX文件系統(tǒng)概述文件系統(tǒng)概述 1. UNIX文件系統(tǒng)的特點文件系統(tǒng)的特點 文件系統(tǒng)的組織是分級樹形構(gòu)造。 (2) 文件的物理構(gòu)造為混合索引式文件構(gòu)造。 (3) 采用了成組鏈接法管理空閑盤塊。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 文件系統(tǒng)的構(gòu)造文件系統(tǒng)的構(gòu)造ibinusrdeviiibin的目錄表usr的目錄表dev的目錄表root目錄表iilettertesttestreportWangWang圖圖 10-18 UNIX文件系統(tǒng)的構(gòu)造文件系統(tǒng)的構(gòu)造第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 文件系統(tǒng)的資源管理文件

57、系統(tǒng)的資源管理 當文件處于“未翻開形狀時, 文件需占用三種資源: 一個目錄項。 (2) 一個磁盤索引結(jié)點項。 (3) 假設干個盤塊。 當文件被援用或“翻開時, 須再添加三種資源:(1) 一個內(nèi)存索引結(jié)點項。 它駐留在內(nèi)存中。(2) 文件表中的一個登記項。(3) 用戶文件描畫符表中的一個登記項。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 由于對文件的讀寫管理,必需涉及到上述各種資源, 因此使對文件的讀寫管理,又在很大程度上依賴于對這些資源的管理, 故可從資源管理觀念上來引見文件系統(tǒng)。這樣,對文件的管理就必然包括: 對索引結(jié)點的管理; 對空閑盤塊的管理; 對目錄文件的管理; 對文件表

58、和描畫符表的管理; 對文件的運用。第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.6.2 文件的物理構(gòu)造文件的物理構(gòu)造 1. 尋址方式尋址方式(1) 直接尋址。直接尋址。(2) 一次間接尋址方式。一次間接尋址方式。 (3) 多次間接尋址。多次間接尋址。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) i.addr(0)i.addr(1)i.addr(2)i.addr(9)i.addr(10)i.addr(11)i.addr(12)一次間接塊數(shù)據(jù)塊二次間接塊三次間接塊直接尋址一次間址二次間址三次間址圖 10-19 直接尋址和間接尋址 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)

59、構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 地址轉(zhuǎn)換地址轉(zhuǎn)換 將字節(jié)偏移量轉(zhuǎn)換為文件邏輯塊號 2) 把文件邏輯塊號轉(zhuǎn)換為物理盤塊號 直接尋址。 (2) 一次間址。 (3) 多次間址。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 圖 10-20 文件的地址映射例如 i.addr(0)i.addr(1)i.addr(2)i.addr(10)i.addr(11)i.addr(12)數(shù)據(jù)塊二次間接塊直接尋址一次間址二次間址三次間址36742891563313333952第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.6.3 索引結(jié)點的管理索引結(jié)點的管理 1. 超級塊超級塊(Superblock)

60、(1) 文件系統(tǒng)的盤塊數(shù)目。(2) 空閑盤塊號棧。 (3) 當前空閑盤塊號數(shù)目。 (4) 空閑磁盤i結(jié)點號棧。 (5) 空閑磁盤i結(jié)點數(shù)目。(6) 空閑盤塊編號棧的鎖字段。 (7) 空閑磁盤i結(jié)點棧的鎖字段。 (8) 超級塊修正標志。 (9) 修正時間。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2. 磁盤索引結(jié)點的分配與回收磁盤索引結(jié)點的分配與回收 分配過程ialloc檢查超級塊上鎖否。 (2) 檢索i結(jié)點??辗?。 (3) 從空閑i結(jié)點編號棧中分配一個i結(jié)點, 并且加以初始化, 填寫有關(guān)文件的屬性。(4) 分配內(nèi)存i結(jié)點。 (5) 將磁盤i結(jié)點總數(shù)減1, 并在置超級塊的修正標志

溫馨提示

  • 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

提交評論