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

下載本文檔

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

文檔簡(jiǎ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 進(jìn)程的描畫(huà)和控制進(jìn)程的描畫(huà)和控制 10.3 10.3 進(jìn)程的同步與通訊進(jìn)程的同步與通訊 10.4 10.4 存儲(chǔ)器管理存儲(chǔ)器管理 10.5 10.5 設(shè)備管理設(shè)備管理 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)的開(kāi)展史系統(tǒng)的開(kāi)展史 1. UNIX系統(tǒng)的開(kāi)展系統(tǒng)的開(kāi)展 2. 兩大集團(tuán)對(duì)峙兩大集團(tuán)對(duì)峙

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

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

4、s Table Entry) 進(jìn)程標(biāo)識(shí)符(PID)。 (2) 用戶標(biāo)識(shí)符(UID)。 (3) 進(jìn)程形狀。 (4) 事件描畫(huà)符。 (5) 進(jìn)程和U區(qū)在內(nèi)存或外存的地址。 (6) 軟中斷信息。 (7) 計(jì)時(shí)域。 (8) 進(jìn)程的大小。 (9) 偏置值nice。 (10) P-Link指針。 (11) 指向U區(qū)進(jìn)程正文、 數(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) 進(jìn)程表項(xiàng)指針。 (2) 真正用戶標(biāo)識(shí)符u-ruid(real user ID)。 (3) 有成效戶標(biāo)識(shí)符u-euid(effective user ID)。 (4) 用戶

5、文件描畫(huà)符表。 (5) 當(dāng)前目錄和當(dāng)前根。 (6) 計(jì)時(shí)器。 (7) 內(nèi)部I/O參數(shù)。 (8) 限制字段。 (9) 過(guò)失字段。 (10) 前往值。 (11) 信號(hào)處置數(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ū)在物理存儲(chǔ)器中的位置。 (4) 援用計(jì)數(shù)。 (5) 指向文件索引結(jié)點(diǎn)的指針。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 4. 本進(jìn)程區(qū)表本進(jìn)程區(qū)表(Per Process Region Table) 正文數(shù)據(jù)棧正文數(shù)據(jù)棧abcdeabcde系

6、統(tǒng)區(qū)表A進(jìn)程區(qū)表B進(jìn)程區(qū)表圖 10-2 進(jìn)程區(qū)表項(xiàng)、系統(tǒng)區(qū)表項(xiàng)和區(qū)的關(guān)系 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 圖 10-3 進(jìn)程的數(shù)據(jù)構(gòu)造 U區(qū)進(jìn)程表abcabc本進(jìn)程區(qū)表系統(tǒng)區(qū)表第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2.2 進(jìn)程形狀與進(jìn)程映像進(jìn)程形狀與進(jìn)程映像 1. 進(jìn)程形狀進(jìn)程形狀 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 進(jìn)程的形狀轉(zhuǎn)換 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)

7、構(gòu) 2. 進(jìn)程映像進(jìn)程映像 用戶級(jí)上下文 2) 存放器上下文 程序存放器。 (2) 處置機(jī)形狀存放器(PSR)。 (3) 棧指針。 (4) 通用存放器。 3) 系統(tǒng)級(jí)上下文 靜態(tài)部分。 (2) 動(dòng)態(tài)部分。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 10.2.3 進(jìn)程控制進(jìn)程控制 1. fork系統(tǒng)調(diào)用系統(tǒng)調(diào)用 為新進(jìn)程分配一個(gè)進(jìn)程表項(xiàng)和進(jìn)程標(biāo)識(shí)符。(2) 檢查同時(shí)運(yùn)轉(zhuǎn)的進(jìn)程數(shù)目。 (3) 拷貝進(jìn)程表項(xiàng)中的數(shù)據(jù)。 (4) 子進(jìn)程承繼父進(jìn)程的一切文件。(5) 為子進(jìn)程創(chuàng)建進(jìn)程上下文。 (6) 子進(jìn)程執(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)用 通常,父進(jìn)程在創(chuàng)建子進(jìn)程時(shí),應(yīng)在進(jìn)程的末尾安排一條exit,使子進(jìn)程能自我終止。內(nèi)核須為exit完成以下操作:(1) 封鎖軟中斷。(2) 回收資源。 (3) 寫記賬信息。 (4) 置進(jìn)程為“僵死形狀。 第十章第十章 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)用進(jìn)程掛起, 直至其子進(jìn)程因暫停或終止而發(fā)來(lái)軟中斷信號(hào)為止。假

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

31、量的數(shù)目等。假設(shè)信號(hào)量集的建立勝利,將前往信號(hào)量集的描畫(huà)符集的建立勝利,將前往信號(hào)量集的描畫(huà)符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)用可用來(lái)對(duì)信號(hào)量集進(jìn)展操作。用戶需提供信號(hào)量集的描畫(huà)符、信號(hào)量的編號(hào),即信號(hào)量在信號(hào)量集中的序號(hào),以及所要施加操作的操作數(shù)semop。 內(nèi)核根據(jù)semop來(lái)改動(dòng)信號(hào)量的值。當(dāng)semop為正值時(shí),便將該正值加到信號(hào)量的值上。當(dāng)semop為負(fù)值時(shí),假設(shè)信號(hào)量的值大于semop的絕對(duì)值,應(yīng)將該負(fù)值加到信號(hào)量值上; 否那么, 操作失敗,內(nèi)核將曾經(jīng)操作過(guò)的信號(hào)量恢復(fù)到該系統(tǒng)調(diào)用開(kāi)場(chǎng)執(zhí)行時(shí)的值。 第十章第

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

33、可以是對(duì)換設(shè)備, 也可以是文件系統(tǒng)。 塊號(hào): 當(dāng)邏輯設(shè)備為對(duì)換設(shè)備時(shí), 這是盤塊號(hào); 而當(dāng)邏輯設(shè)備為文件系統(tǒng)時(shí),這是指文件的邏輯塊號(hào)。 指針1: 指向空閑頁(yè)鏈表中的下一個(gè)頁(yè)框數(shù)據(jù)表的指針。 指針2: 指向散列隊(duì)列中下一個(gè)頁(yè)框數(shù)據(jù)表的指針。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 圖 10-10 頁(yè)框數(shù)據(jù)表項(xiàng)及其散列隊(duì)列 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 對(duì)換運(yùn)用表 頁(yè)表項(xiàng)頁(yè)框號(hào)794磁盤塊描述項(xiàng)對(duì)換設(shè)備1塊號(hào)2743引用數(shù)1對(duì)換設(shè)備1塊號(hào)2743物理頁(yè)794引用數(shù) 1對(duì)換設(shè)備塊2743對(duì)換使用表項(xiàng)頁(yè)框數(shù)據(jù)表項(xiàng)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 換頁(yè)進(jìn)程換頁(yè)進(jìn)程 1. 添加有效頁(yè)的年齡添加有效頁(yè)的年齡 一個(gè)頁(yè)可計(jì)數(shù)的最大年齡,取決于它的硬件設(shè)備。對(duì)于只一個(gè)頁(yè)可計(jì)數(shù)的最大年齡,取決于它的硬件設(shè)備。對(duì)于只設(shè)置兩位作為年齡域的頁(yè),其有效頁(yè)的年齡只能取值為設(shè)置兩位作為年齡域的頁(yè),其有效頁(yè)的年齡只能取值為0、1、2和和3。當(dāng)該頁(yè)的年齡為。當(dāng)該頁(yè)的年齡為0、 1、 2時(shí),該頁(yè)處于不可換出形狀;時(shí),該頁(yè)處于不可換出形狀;而當(dāng)其年齡到達(dá)而當(dāng)其年齡到達(dá)3時(shí),該頁(yè)便為換出形狀。時(shí),該頁(yè)便為換出形狀。 每當(dāng)內(nèi)存中的空閑每當(dāng)內(nèi)存中的空閑頁(yè)面數(shù)低于某規(guī)定的低限時(shí),中心便喚

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

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

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

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

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

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

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

42、10-13 緩沖首部 設(shè)備號(hào) 塊號(hào) 狀態(tài) 緩沖區(qū)指針 散列隊(duì)列的前向指針 散列隊(duì)列的后向指針 空閑表上的前向指針 空閑表上的后向指針 第十章第十章 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空閑表頭標(biāo)圖 10-14 空閑隊(duì)列(鏈)及散列隊(duì)列 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 3. 盤塊緩沖區(qū)的分配盤塊緩沖區(qū)的分配 (1) getblk( )過(guò)程。 該過(guò)程用于從空閑緩沖區(qū)隊(duì)列中獲得任一空閑緩沖區(qū)

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

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

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

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

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

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

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

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

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

52、的數(shù)據(jù)。如未出錯(cuò),那么繼續(xù)傳送下一個(gè)緩沖區(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過(guò)程完成。提早讀方式:當(dāng)一個(gè)進(jìn)程要順序地讀一個(gè)文件所在的各個(gè)盤塊時(shí),會(huì)預(yù)見(jiàn)到所要讀的下一個(gè)盤塊,因此在讀出指定盤塊(作為當(dāng)前塊)的同時(shí),可要求提早將下一個(gè)盤塊(提早塊)中的信息讀入緩沖區(qū)。這樣,當(dāng)以后需求該盤塊的數(shù)據(jù)時(shí),由于它已在內(nèi)存, 故而可縮短讀這塊數(shù)據(jù)的時(shí)間,從而改善了系統(tǒng)性能。 提早讀功能由breada過(guò)程完成。 第十章第十章 UNIXUN

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

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

55、異步寫、且有延遲寫標(biāo)志,那么在給緩沖區(qū)打上標(biāo)志后,將之放入空閑鏈表的首部。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 2) 異步寫過(guò)程bawrite 它與普通寫過(guò)程很類似,但不須等待I/O完成即可前往。 進(jìn)入bawrite過(guò)程后,設(shè)置異步寫標(biāo)志,再調(diào)用bwrite過(guò)程實(shí)現(xiàn)之。 3) 延遲寫過(guò)程bdwrite 延遲寫過(guò)程也很簡(jiǎn)單。這里只須設(shè)置延遲寫標(biāo)志及數(shù)據(jù)有效標(biāo)志, 再調(diào)用brelse過(guò)程,將該緩沖區(qū)釋放,并鏈入空閑鏈表的尾部。以后,當(dāng)某進(jìn)程調(diào)用getblk獲得該緩沖區(qū)時(shí),再用異步寫方式將緩沖區(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)的特點(diǎn)文件系統(tǒng)的特點(diǎn) 文件系統(tǒng)的組織是分級(jí)樹(shù)形構(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)的資源管理 當(dāng)文件處于“未翻開(kāi)形狀時(shí), 文件需占用三種資源: 一個(gè)目錄項(xiàng)。 (2) 一個(gè)磁盤索引結(jié)點(diǎn)項(xiàng)。 (3) 假設(shè)干個(gè)盤塊。 當(dāng)文件被援用或“翻開(kāi)時(shí), 須再添加三種資源:(1) 一個(gè)內(nèi)存索引結(jié)點(diǎn)項(xiàng)。 它駐留在內(nèi)存中。(2) 文件表中的一個(gè)登記項(xiàng)。(3) 用戶文件描畫(huà)符表中的一個(gè)登記項(xiàng)。 第十章第十章 UNIXUNIX系統(tǒng)內(nèi)核結(jié)構(gòu)系統(tǒng)內(nèi)核結(jié)構(gòu) 由于對(duì)文件的讀寫管理,必需涉及到上述各種資源, 因此使對(duì)文件的讀寫管理,又在很大程度上依賴于對(duì)這些資源的管理, 故可從資源管理觀念上來(lái)引見(jiàn)文件系統(tǒng)。這樣,對(duì)文件的管理就必然包括: 對(duì)索引結(jié)點(diǎn)的管理; 對(duì)空閑盤塊的管理; 對(duì)目錄文件的管理; 對(duì)文件表

58、和描畫(huà)符表的管理; 對(duì)文件的運(yùn)用。第十章第十章 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)換為文件邏輯塊號(hào) 2) 把文件邏輯塊號(hào)轉(zhuǎn)換為物理盤塊號(hào) 直接尋址。 (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é)點(diǎn)的管理索引結(jié)點(diǎn)的管理 1. 超級(jí)塊超級(jí)塊(Superblock)

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論