計(jì)算機(jī)操作系統(tǒng)第5.6章

第五章?設(shè)備管理

1.I/O系統(tǒng)

1.1囱挑、I/O設(shè)備

1.1.1 I/O設(shè)備的類型



1.1.2 設(shè)備與控制器之間的接口

設(shè)備并不直接與CPU通信掰派,而是與設(shè)備控制器通信纳鼎。

1.2蝶缀、設(shè)備控制器

1.2.1 設(shè)備控制器的基本功能

①接收和識(shí)別命令:控制寄存器、命令譯碼器

②數(shù)據(jù)交換:CPU---(數(shù)據(jù)總線)---設(shè)備控制器(數(shù)據(jù)寄存器)------I/O設(shè)備

③標(biāo)識(shí)和報(bào)告設(shè)備的狀態(tài):狀態(tài)寄存器

④地址識(shí)別:地址譯碼器

⑤數(shù)據(jù)緩沖

⑥差錯(cuò)控制

1.2.2 設(shè)備控制器的組成

①設(shè)備控制器與處理機(jī)的接口:該接口用于實(shí)現(xiàn)CPU 與設(shè)備控制器之間的通信襟铭。共有三類信號(hào)線: 數(shù)據(jù)線碌奉、地址線和控制線。數(shù)據(jù)線通常與兩類寄存器相連接寒砖,第一類是數(shù)據(jù)寄存器(在控制器中可以有一個(gè)或多個(gè)數(shù)據(jù)寄存器赐劣,用于存放從設(shè)備送來的數(shù)據(jù)(輸入)或從CPU 送來的數(shù)據(jù)(輸出));第二類是控制/狀態(tài)寄存器(在控制器中可以有一個(gè)或多個(gè)這類寄存器哩都,用于存放從CPU 送來的控制信息或設(shè)備的狀態(tài)信息)隆豹。

②設(shè)備控制器與設(shè)備的接口:在一個(gè)設(shè)備控制器上,可以連接一個(gè)或多個(gè)設(shè)備茅逮。相應(yīng)地,在控制器中便有一個(gè)或多個(gè)設(shè)備接口判哥,一個(gè)接口連接一臺(tái)設(shè)備献雅。在每個(gè)接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的信號(hào)塌计⊥ι恚控制器中的I/O 邏輯根據(jù)處理機(jī)發(fā)來的地址信號(hào)去選擇一個(gè)設(shè)備接口。

③I/O 邏輯:在設(shè)備控制器中的I/O 邏輯用于實(shí)現(xiàn)對設(shè)備的控制锌仅。它通過一組控制線與處理機(jī)交互章钾,處理機(jī)利用該邏輯向控制器發(fā)送I/O 命令;I/O 邏輯對收到的命令進(jìn)行譯碼热芹。每當(dāng)CPU要啟動(dòng)一個(gè)設(shè)備時(shí)贱傀,一方面將啟動(dòng)命令發(fā)送給控制器;另一方面又同時(shí)通過地址線把地址發(fā)送給控制器伊脓,由控制器的I/O 邏輯對收到的地址進(jìn)行譯碼府寒,再根據(jù)所譯出的命令對所選設(shè)備進(jìn)行控制。


1.3报腔、I/O通道

I/O 通道是一種特殊的處理機(jī)株搔,它具有執(zhí)行I/O 指令的能力,并通過執(zhí)行通道(I/O)程序來控制I/O 操作纯蛾。但I(xiàn)/O 通道又與一般的處理機(jī)不同纤房,主要表現(xiàn)在以下兩個(gè)方面: 一是其指令類型單一,這是由于通道硬件比較簡單翻诉,其所能執(zhí)行的命令主要局限于與I/O 操作有關(guān)的指令炮姨;二是通道沒有自己的內(nèi)存捌刮,通道所執(zhí)行的通道程序是放在主機(jī)的內(nèi)存中的,換言之剑令,是通道與CPU共享內(nèi)存糊啡。

1.4、總線系統(tǒng)

2 I/O控制方式

程序I/O方式(輪詢)

中斷I/O控制方式

直接存儲(chǔ)器訪問(DMA)I/O控制方式

I/O通道控制方式

3.緩沖管理

3.1吁津、目的

為了緩和CPU與I/O 設(shè)備速度不匹配的矛盾棚蓄,減少對CPU的中斷頻率,提高CPU和I/O 設(shè)備的并行性碍脏,在現(xiàn)代操作系統(tǒng)中梭依,幾乎所有的I/O 設(shè)備在與處理機(jī)交換數(shù)據(jù)時(shí)都用了緩沖區(qū)(內(nèi)存中)。緩沖管理的主要職責(zé)是組織好這些緩沖區(qū)典尾,并提供獲得和釋放緩沖區(qū)的手段役拴。

3.2、實(shí)現(xiàn)方式

1)單緩沖? ?2)雙緩沖

4.I/O軟件

4.1钾埂、分層

4.2河闰、中斷處理程序

處理步驟:

1.喚醒被阻塞的驅(qū)動(dòng)(程序)進(jìn)程

當(dāng)中斷處理程序開始執(zhí)行時(shí),首先去喚醒處于阻塞狀態(tài)的驅(qū)動(dòng)(程序)進(jìn)程褥紫。

2.保護(hù)被中斷進(jìn)程的CPU 環(huán)境

通常由硬件自動(dòng)將處理機(jī)狀態(tài)字PSW 和程序計(jì)數(shù)器(PC)中的內(nèi)容姜性,保存在中斷保留區(qū)(棧)中,然后把被中斷進(jìn)程的CPU現(xiàn)場信息(即包括所有的CPU寄存器髓考,如通用寄存器部念、段寄存器等內(nèi)容)都?jí)喝胫袛鄺V校驗(yàn)樵谥袛嗵幚頃r(shí)可能會(huì)用到這些寄存器氨菇。

3.轉(zhuǎn)入相應(yīng)的設(shè)備處理程序

由處理機(jī)對各個(gè)中斷源進(jìn)行測試儡炼,以確定引起本次中斷的I/O 設(shè)備,并發(fā)送一應(yīng)答信號(hào)給發(fā)出中斷請求的進(jìn)程查蓉,使之消除該中斷請求信號(hào)乌询,然后將相應(yīng)的設(shè)備中斷處理程序的入

口地址裝入到程序計(jì)數(shù)器中,使處理機(jī)轉(zhuǎn)向中斷處理程序豌研。

4.中斷處理

5.恢復(fù)被中斷進(jìn)程的現(xiàn)場

當(dāng)中斷處理完成以后楣责,便可將保存在中斷棧中的被中斷進(jìn)程的現(xiàn)場信息取出,并裝入到相應(yīng)的寄存器中聂沙,其中包括該程序下一次要執(zhí)行的指令的地址N+1秆麸、處理機(jī)狀態(tài)字PSW,以及各通用寄存器和段寄存器的內(nèi)容及汉。這樣沮趣,當(dāng)處理機(jī)再執(zhí)行本程序時(shí),便從N+1處開始坷随,最終返回到被中斷的程序房铭。


4.3驻龟、設(shè)備驅(qū)動(dòng)程序

1. 設(shè)備驅(qū)動(dòng)程序的特點(diǎn)

(1) 驅(qū)動(dòng)程序主要是指在請求I/O 的進(jìn)程與設(shè)備控制器之間的一個(gè)通信和轉(zhuǎn)換程序。

(2) 驅(qū)動(dòng)程序與設(shè)備控制器和I/O 設(shè)備的硬件特性緊密相關(guān)缸匪,因而對不同類型的設(shè)備應(yīng)配置不同的驅(qū)動(dòng)程序翁狐。

(3) 驅(qū)動(dòng)程序與I/O 設(shè)備所采用的I/O 控制方式緊密相關(guān)。常用的I/O 控制方式是中斷驅(qū)動(dòng)和DMA方式凌蔬,這兩種方式的驅(qū)動(dòng)程序明顯不同露懒,因?yàn)楹笳邞?yīng)按數(shù)組方式啟動(dòng)設(shè)備及進(jìn)行中斷處理。

(4) 由于驅(qū)動(dòng)程序與硬件緊密相關(guān)砂心,因而其中的一部分必須用匯編語言書寫懈词。目前有很多驅(qū)動(dòng)程序的基本部分,已經(jīng)固化在ROM中辩诞。

(5) 驅(qū)動(dòng)程序應(yīng)允許可重入坎弯。。一個(gè)正在運(yùn)行的驅(qū)動(dòng)程序常會(huì)在一次調(diào)用完成前被再次調(diào)用译暂。例如抠忘,網(wǎng)絡(luò)驅(qū)動(dòng)程序正在處理一個(gè)到來的數(shù)據(jù)包時(shí),另一個(gè)數(shù)據(jù)包可能到達(dá)外永。

(6) 驅(qū)動(dòng)程序不允許系統(tǒng)調(diào)用崎脉。但是為了滿足其與內(nèi)核其它部分的交互,可以允許對某些內(nèi)核過程的調(diào)用象迎,如通過調(diào)用內(nèi)核過程來分配和釋放內(nèi)存頁面作為緩沖區(qū),以及調(diào)用其它過程來管理MMU定時(shí)器呛踊、DMA控制器砾淌、中斷控制器等。

2. 設(shè)備驅(qū)動(dòng)程序的處理過程

不同類型的設(shè)備應(yīng)有不同的設(shè)備驅(qū)動(dòng)程序谭网,但大體上它們都可以分成兩部分汪厨,其中,除了要有能夠驅(qū)動(dòng)I/O 設(shè)備工作的驅(qū)動(dòng)程序外愉择,還需要有設(shè)備中斷處理程序劫乱,以處理I/O 完成后的工作。

1) 將抽象要求轉(zhuǎn)換為具體要求

2) 檢查I/O 請求的合法性

3) 讀出和檢查設(shè)備的狀態(tài)

4) 傳送必要的參數(shù)

5) 工作方式的設(shè)置

6) 啟動(dòng)I/O 設(shè)備

4.4锥涕、設(shè)備獨(dú)立性軟件

單用戶系統(tǒng)中的LUT:由于系統(tǒng)中所有進(jìn)程的設(shè)備分配情況都記錄在同一張LUT中衷戈,因而不允許在LUT中具有相同的邏輯設(shè)備名,這就要求所有用戶都不使用相同的邏輯設(shè)備名层坠。

多用戶系統(tǒng)中的LUT:為每個(gè)用戶設(shè)置一張LUT殖妇。每當(dāng)用戶登錄時(shí),便為該用戶建立一個(gè)進(jìn)程破花,同時(shí)也為之建立一張LUT谦趣,并將該表放入進(jìn)程的PCB 中疲吸。

4.5、用戶層的I/O軟件

5.設(shè)備分配

涉及的數(shù)據(jù)結(jié)構(gòu)

設(shè)備控制表

設(shè)備分配

1. 根據(jù)邏輯設(shè)備名查找SDT前鹅,找出該設(shè)備的DCT摘悴,分配設(shè)備

2. 根據(jù)DCT找出COCT,分配設(shè)備控制器

3. 根據(jù)COCT找出CHCT舰绘,分配通道

SPOOLing技術(shù)

組成:

(1) 輸入井和輸出井蹂喻。這是在磁盤上開辟的兩個(gè)大存儲(chǔ)空間。輸入井是模擬脫機(jī)輸入時(shí)的磁盤設(shè)備除盏,用于暫存I/O 設(shè)備輸入的數(shù)據(jù)叉橱;輸出井是模擬脫機(jī)輸出時(shí)的磁盤,用于暫存用

戶程序的輸出數(shù)據(jù)者蠕。

(2) 輸入緩沖區(qū)和輸出緩沖區(qū)窃祝。為了緩和CPU 和磁盤之間速度不匹配的矛盾,在內(nèi)存中要開辟兩個(gè)緩沖區(qū):輸入緩沖區(qū)和輸出緩沖區(qū)踱侣。輸入緩沖區(qū)用于暫存由輸入設(shè)備送來的數(shù)據(jù)粪小,以后再傳送到輸入井。輸出緩沖區(qū)用于暫存從輸出井送來的數(shù)據(jù)抡句,以后再傳送給輸出設(shè)備探膊。

(3) 輸入進(jìn)程SPi和輸出進(jìn)程SPo。這里利用兩個(gè)進(jìn)程來模擬脫機(jī)I/O 時(shí)的外圍控制機(jī)待榔。其中逞壁,進(jìn)程SPi模擬脫機(jī)輸入時(shí)的外圍控制機(jī),將用戶要求的數(shù)據(jù)從輸入機(jī)通過輸入緩沖區(qū)

再送到輸入井锐锣,當(dāng)CPU 需要輸入數(shù)據(jù)時(shí)腌闯,直接從輸入井讀入內(nèi)存;進(jìn)程SPo模擬脫機(jī)輸出時(shí)的外圍控制機(jī)雕憔,把用戶要求輸出的數(shù)據(jù)先從內(nèi)存送到輸出井姿骏,待輸出設(shè)備空閑時(shí),再將輸出井中的數(shù)據(jù)經(jīng)過輸出緩沖區(qū)送到輸出設(shè)備上斤彼。

6 磁盤存儲(chǔ)器的管理



磁盤的格式化

為了在磁盤上存儲(chǔ)數(shù)據(jù)分瘦,必須先將磁盤低級(jí)格式化。每個(gè)扇區(qū)容量為 600 個(gè)字節(jié)琉苇,其中512 個(gè)字節(jié)存放數(shù)據(jù)嘲玫,其余的用于存放控制信息。磁盤格式化完成后并扇,一般要對磁盤分區(qū)趁冈。在邏輯上,每個(gè)分區(qū)就是一個(gè)獨(dú)立的邏輯磁盤。每個(gè)分區(qū)的起始扇區(qū)和大小都記錄在磁盤0 扇區(qū)的主引導(dǎo)記錄分區(qū)表所包含的分區(qū)表中渗勘。在這個(gè)分區(qū)表中必須有一個(gè)分區(qū)被標(biāo)記成活動(dòng)的沐绒,以保證能夠從硬盤引導(dǎo)系統(tǒng)。但是旺坠,在真正可以使用磁盤前乔遮,還需要對磁盤進(jìn)行一次高級(jí)格式化,即設(shè)置一個(gè)引導(dǎo)塊取刃、空閑存儲(chǔ)管理蹋肮、根目錄和一個(gè)空文件系統(tǒng),同時(shí)在分區(qū)表中標(biāo)記該分區(qū)所使用的文件系統(tǒng)璧疗。

磁盤訪問時(shí)間

1)尋道時(shí)間:這是指把磁臂(磁頭)移動(dòng)到指定磁道上所經(jīng)歷的時(shí)間坯辩。

2)旋轉(zhuǎn)延遲時(shí)間:這是指定扇區(qū)移動(dòng)到磁頭下面所經(jīng)歷的時(shí)間。

3)傳輸時(shí)間:這是指把數(shù)據(jù)從磁盤讀出或向磁盤寫入數(shù)據(jù)所經(jīng)歷的時(shí)間崩侠。

在訪問時(shí)間中漆魔,尋道時(shí)間和旋轉(zhuǎn)延遲時(shí)間基本上都與所讀/寫數(shù)據(jù)的多少無關(guān),而且它通常占據(jù)了訪問時(shí)間中的大頭却音。

磁盤調(diào)度

目標(biāo):當(dāng)有多個(gè)進(jìn)程都要求訪問磁盤時(shí)改抡,應(yīng)采用一種最佳調(diào)度算法,以使各進(jìn)程對磁盤的平均訪問時(shí)間最小系瓢。磁盤調(diào)度的目標(biāo)是使磁盤的平均尋道時(shí)間最少阿纤。

算法:

1. 先來先服務(wù)(FCFS)

2. 最短尋道時(shí)間優(yōu)先

3. 掃描算法

4. 循環(huán)掃描算法

磁盤高速緩存(Cached)

概念:利用內(nèi)存中的存儲(chǔ)空間來暫存從磁盤中讀出的一系列盤塊中的信息。是一組在邏輯上屬于磁盤夷陋,而物理上是駐留在內(nèi)存中的盤塊欠拾。

高速緩存在內(nèi)存中分為兩種形式:

1. 在內(nèi)存中開辟一個(gè)單獨(dú)的存儲(chǔ)空間來作為磁盤高速緩存,其大小是固定的骗绕,不會(huì)受應(yīng)用程序多少的影響藐窄;

2.?把所有未利用的內(nèi)存空間變?yōu)橐粋€(gè)緩沖池,供請求分頁系統(tǒng)和磁盤I/O 時(shí)(作為磁盤高速緩存)共享爹谭。此時(shí)枷邪,高速緩存的大小顯然不再是固定的榛搔。當(dāng)磁盤I/O 的頻繁程度較高時(shí)诺凡,該緩沖池可能包含更多的內(nèi)存空間;而在應(yīng)用程序運(yùn)行得較多時(shí)践惑,該緩沖池可能只剩下較少的內(nèi)存空間腹泌。

高速緩存的數(shù)據(jù)交付方式:數(shù)據(jù)交付(Data Delivery)是指將磁盤高速緩存中的數(shù)據(jù)傳送給請求者進(jìn)程。當(dāng)有一進(jìn)程請求訪問某個(gè)盤塊中的數(shù)據(jù)時(shí)尔觉,由核心先去查看磁盤高速緩沖器凉袱,看其中是否存在進(jìn)程所需訪問的盤塊數(shù)據(jù)的拷貝。若有其拷貝,便直接從高速緩存中提取數(shù)據(jù)交付給請求者進(jìn)程专甩,否則钟鸵,應(yīng)先從磁盤中將所要訪問的數(shù)據(jù)讀入并交付給請求者進(jìn)程,同時(shí)也將數(shù)據(jù)送高速緩存涤躲。

1. 數(shù)據(jù)交付

2. 指針交付

置換算法:

如同請求調(diào)頁(段)一樣棺耍,在將磁盤中的盤塊數(shù)據(jù)讀入高速緩存時(shí),同樣會(huì)出現(xiàn)因高速緩存中已裝滿盤塊數(shù)據(jù)而需要將該數(shù)據(jù)先換出的問題种樱。

周期性的寫回磁盤:

在UNIX 系統(tǒng)中專門增設(shè)了一個(gè)修改(update)程序蒙袍,使之在后臺(tái)運(yùn)行,該程序周期性地調(diào)用一個(gè)系統(tǒng)調(diào)用SYNC嫩挤。該調(diào)用的主要功能是強(qiáng)制性地將所有在高速緩存中已修改的盤塊數(shù)據(jù)寫回磁盤害幅。一般是把兩次調(diào)用SYNC的時(shí)間間隔定為30 s。這樣岂昭,因系統(tǒng)故障所造成的工作損失不會(huì)超過30 s的勞動(dòng)量以现。

提高磁盤I/O速度的其他方法

1. 提前讀

用戶(進(jìn)程)對文件進(jìn)行訪問時(shí),經(jīng)常采用順序訪問方式佩抹,即順序地訪問文件各盤塊的數(shù)據(jù)叼风。在這種情況下,在讀當(dāng)前塊時(shí)可以預(yù)知下一次要讀的盤塊棍苹。因此无宿,可以采取預(yù)先讀方式,即在讀當(dāng)前塊的同時(shí)枢里,還要求將下一個(gè)盤塊(提前讀的塊)中的數(shù)據(jù)也讀入緩沖區(qū)孽鸡。這樣,當(dāng)下一次要讀該盤塊中的數(shù)據(jù)時(shí)栏豺,由于該數(shù)據(jù)已被提前讀入緩沖區(qū)彬碱,因而此時(shí)便可直接從緩沖區(qū)中取得下一盤塊的數(shù)據(jù),而不需再去啟動(dòng)磁盤I/O奥洼,從而大大減少了讀數(shù)據(jù)的時(shí)間巷疼。這也就等效于提高了磁盤I/O 的速度。

2. 延遲寫

延遲寫是指在緩沖區(qū)A中的數(shù)據(jù)灵奖,本應(yīng)立即寫回磁盤嚼沿,但考慮到該緩沖區(qū)中的數(shù)據(jù)在不久之后可能還會(huì)再被本進(jìn)程或其它進(jìn)程訪問(共享資源),因而并不立即將該緩沖區(qū)A 中的數(shù)據(jù)寫入磁盤瓷患,而是將它掛在空閑緩沖區(qū)隊(duì)列的末尾骡尽。隨著空閑緩沖區(qū)的使用,緩沖區(qū)也緩緩?fù)耙苿?dòng)擅编,直至移到空閑緩沖隊(duì)列之首攀细。當(dāng)再有進(jìn)程申請到該緩沖區(qū)時(shí)箫踩,才將該緩沖區(qū)中的數(shù)據(jù)寫入磁盤,而把該緩沖區(qū)作為空閑緩沖區(qū)分配出去谭贪。當(dāng)該緩沖區(qū)A仍在隊(duì)列中時(shí)境钟,任何訪問該數(shù)據(jù)的進(jìn)程,都可直接讀出其中的數(shù)據(jù)而不必去訪問磁盤俭识。這樣吱韭,又可進(jìn)一步減小等效的磁盤I/O時(shí)間。

3. 優(yōu)化物理塊的分布

另一種提高磁盤I/O 速度的重要措施是優(yōu)化文件物理塊的分布鱼的,使磁頭的移動(dòng)距離最小理盆。

4. 虛擬盤

所謂虛擬盤,是指利用內(nèi)存空間去仿真磁盤凑阶,又稱為RAM 盤猿规。該盤的設(shè)備驅(qū)動(dòng)程序也可以接受所有標(biāo)準(zhǔn)的磁盤操作,但這些操作的執(zhí)行宙橱,不是在磁盤上而是在內(nèi)存中姨俩。

虛擬盤與磁盤高速緩存的主要區(qū)別在于: 虛擬盤中的內(nèi)容完全由用戶控制,而高速磁盤緩存中的內(nèi)容則是由OS 控制的师郑。例如环葵,RAM 盤在開始時(shí)是空的,僅當(dāng)用戶(程序)在RAM 盤中創(chuàng)建了文件后宝冕,RAM 盤中才有內(nèi)容张遭。

廉價(jià)冗余磁盤陣列(RAID)

概念:利用一臺(tái)磁盤陣列控制器,來統(tǒng)一管理和控制一組(幾臺(tái)到幾十臺(tái))磁盤驅(qū)動(dòng)器地梨,組成一個(gè)高度可靠的菊卷、快速的大容量磁盤系統(tǒng)。

并行交叉存儲(chǔ)

在該系統(tǒng)中宝剖,有多臺(tái)磁盤驅(qū)動(dòng)器洁闰,系統(tǒng)將每一盤塊中的數(shù)據(jù)分為若干個(gè)子盤塊數(shù)據(jù),再把每一個(gè)子盤塊的數(shù)據(jù)分別存儲(chǔ)到各個(gè)不同磁盤中的相同位置上万细。在以后扑眉,當(dāng)要將一個(gè)盤塊的數(shù)據(jù)傳送到內(nèi)存時(shí),采取并行傳輸方式赖钞,將各個(gè)盤塊中的子盤塊數(shù)據(jù)同時(shí)向內(nèi)存中傳輸腰素,從而使傳輸時(shí)間大大減少。例如仁烹,在存放一個(gè)文件時(shí)耸弄,可將該文件中的第一個(gè)數(shù)據(jù)子塊放在第一個(gè)磁盤驅(qū)動(dòng)器上咧虎;將文件的第二個(gè)數(shù)據(jù)子塊放在第二個(gè)磁盤上卓缰;……;將第N 個(gè)數(shù)據(jù)子塊,放在第N個(gè)驅(qū)動(dòng)器上征唬。以后在讀取數(shù)據(jù)時(shí)缺脉,采取并行讀取方式驾凶,即同時(shí)從第1~N個(gè)數(shù)據(jù)子塊讀出數(shù)據(jù),這樣便把磁盤I/O 的速度提高了N-1 倍。

RAID的分級(jí)

(1) RAID 0級(jí)滔蝉。本級(jí)僅提供了并行交叉存取。它雖能有效地提高磁盤I/O 速度禁漓,但并無冗余校驗(yàn)功能是目,致使磁盤系統(tǒng)的可靠性不好。只要陣列中有一個(gè)磁盤損壞年枕,便會(huì)造成不彌補(bǔ)的數(shù)據(jù)丟失炫欺,故較少使用。

(2) RAID 1級(jí)熏兄。它具有磁盤鏡像功能品洛,例如,當(dāng)磁盤陣列中具有8 個(gè)盤時(shí)摩桶,可利用其中4 個(gè)作為數(shù)據(jù)盤桥状,另外4 個(gè)作為鏡像盤,在每次訪問磁盤時(shí)硝清,可利用并行讀辅斟、寫特性,將數(shù)據(jù)分塊同時(shí)寫入主盤和鏡像盤芦拿。故其比傳統(tǒng)的鏡像盤速度快砾肺,但其磁盤容量的利用率只有50%,它是以犧牲磁盤容量為代價(jià)的防嗡。

(3) RAID 3級(jí)变汪。這是具有并行傳輸功能的磁盤陣列。它利用一臺(tái)奇偶校驗(yàn)盤來完成數(shù)據(jù)的校驗(yàn)功能蚁趁,比起磁盤鏡像裙盾,它減少了所需要的冗余磁盤數(shù)。例如他嫡,當(dāng)陣列中只有7 個(gè)盤時(shí)番官,可利用6 個(gè)盤作數(shù)據(jù)盤,一個(gè)盤作校驗(yàn)盤钢属。磁盤的利用率為6/7徘熔。RAID 3級(jí)經(jīng)常用于科學(xué)計(jì)算和圖像處理。

(4) RAID 5級(jí)淆党。這是一種具有獨(dú)立傳送功能的磁盤陣列酷师。每個(gè)驅(qū)動(dòng)器都各有自己獨(dú)立的數(shù)據(jù)通路讶凉,獨(dú)立地進(jìn)行讀/寫,且無專門的校驗(yàn)盤山孔。用來進(jìn)行糾錯(cuò)的校驗(yàn)信息懂讯,是以螺旋(Spiral)方式散布在所有數(shù)據(jù)盤上。RAID 5級(jí)常用于I/O 較頻繁的事務(wù)處理中台颠。

第六章?文件管理

1.文件和文件系統(tǒng)

文件系統(tǒng)的結(jié)構(gòu)褐望,是由文件管理部分和操作系統(tǒng)I/O部分組成的。

文件管理部分:操作系統(tǒng)內(nèi)存中的文件對象串前,并按文件的邏輯格式將對文件對象的操作轉(zhuǎn)化成對文件塊的操作瘫里。

操作系統(tǒng)I/O部分:負(fù)責(zé)內(nèi)存中的物理塊與物理磁盤中的數(shù)據(jù)交換。

文件分類

通常荡碾,文件是由一系列的記錄組成的减宣。文件系統(tǒng)設(shè)計(jì)的關(guān)鍵要素,是指將這些記錄構(gòu)成一個(gè)文件的方法玩荠,以及將一個(gè)文件存儲(chǔ)到外存上的方法漆腌。

文件的邏輯結(jié)構(gòu)

這是從用戶觀點(diǎn)出發(fā)所觀察到的文件組織形式,是用戶可以直接處理的數(shù)據(jù)及其結(jié)構(gòu)阶冈,它獨(dú)立于文件的物理特性闷尿,又稱為文件組織(FileOrganization)。

例如女坑,用戶創(chuàng)建的txt填具、cpp、word匆骗、excel劳景、ppt等,都屬于文件的邏輯結(jié)構(gòu)碉就。

①無結(jié)構(gòu)文件:字符流盟广,又稱流式文件。--源程序瓮钥、可執(zhí)行文件筋量、庫函數(shù)等

②有結(jié)構(gòu)文件:由若干個(gè)相關(guān)記錄組成,又稱記錄型文件碉熄,如下圖桨武。--數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫等

文件的物理結(jié)構(gòu)

又稱文件的存儲(chǔ)結(jié)構(gòu)锈津,指文件在外存上的存儲(chǔ)組織形式呀酸。這不僅與存儲(chǔ)介質(zhì)的存儲(chǔ)性能有關(guān),而且與所采用的外存分配方式有關(guān)琼梆。

例如性誉,采用FAT32窿吩、NTFS、EXT3艾栋、EXT4、Linux swap等蛉顽,都屬于文件的物理結(jié)構(gòu)蝗砾。

文件系統(tǒng)模型

文件系統(tǒng)管理的對象有:①文件;②目錄携冤;③磁盤空間悼粮;

模型層次圖:

文件的邏輯結(jié)構(gòu)

分類

1. 記錄型文件,按記錄的組織方式可分為:

①順序文件

順序文件中記錄的排序方式:

1)串結(jié)構(gòu)曾棕,各記錄之間的順序與關(guān)鍵字無關(guān)扣猫,通常由時(shí)間決定。----每次檢索必須從頭開始翘地。

2)順序結(jié)構(gòu)申尤,所有記錄按關(guān)鍵字排序。----采用折半查找衙耕、插值查找昧穿、跳步查找等來提高檢索效率。


②索引文件

定長記錄文件----順序存取方便橙喘、直接存取方便

變長記錄文件----順序存取方便时鸵、直接存取困難

為變長記錄文件建立一張索引表,對主文件中的每個(gè)記錄厅瞎,在索引表中設(shè)有一個(gè)相應(yīng)的表項(xiàng)饰潜,用于記錄該記錄的長度L及指向該記錄的指針(指向該記錄在邏輯地址空間的首址)。由于索引表是按記錄鍵排序的和簸,因此彭雾,索引表本身是一個(gè)定長記錄的順序文件,從而也就可以方便地實(shí)現(xiàn)直接存取锁保。

③索引順序文件

索引順序文件(Index Sequential File)可能是最常見的一種邏輯文件形式冠跷。它有效地克服了變長記錄文件不便于直接存取的缺點(diǎn),而且所付出的代價(jià)也不算太大身诺。它將順序文件中的所有記錄分為若干個(gè)組(例如蜜托,50 個(gè)記錄為一個(gè)組);為順序文件建立一張索引表霉赡,在索引表中為每組中的第一個(gè)記錄建立一個(gè)索引項(xiàng)橄务,其中含有該記錄的鍵值和指向該記錄的指針蜂挪。

④直接文件

根據(jù)給定的記錄鍵值重挑,直接獲得指定記錄的物理地址谬哀。換言之,記錄鍵值本身就決定了記錄的物理地址严肪。這種由記錄鍵值到記錄物理地址的轉(zhuǎn)換被稱為鍵值轉(zhuǎn)換(Key to addresstransformation)史煎。

⑤哈希文件

目前應(yīng)用最廣的一種直接文件。它利用Hash 函數(shù)(或稱散列函數(shù))驳糯,可將記錄鍵值轉(zhuǎn)換為相應(yīng)記錄的地址篇梭。但為了能實(shí)現(xiàn)文件存儲(chǔ)空間的動(dòng)態(tài)分配,通常由Hash函數(shù)所求得的并非是相應(yīng)記錄的地址酝枢,而是指向一目錄表相應(yīng)表目的指針恬偷,該表目的內(nèi)容指向相應(yīng)記錄所在的物理塊,如下圖所示帘睦。例如袍患,若令K為記錄鍵值,用A作為通過Hash函數(shù)H 的轉(zhuǎn)換所形成的該記錄在目錄表中對應(yīng)表目的位置竣付,則有關(guān)系A(chǔ)=H(K)协怒。通常,把Hash函數(shù)作為標(biāo)準(zhǔn)函數(shù)存于系統(tǒng)中卑笨,供存取文件時(shí)調(diào)用孕暇。

2. 流式文件

其長度以字節(jié)為單位。對流式文件的訪問赤兴,則是采用讀/寫指針來指出下一個(gè)要訪問的字符妖滔。可以把流式文件看做是記錄式文件的一個(gè)特例桶良。在UNIX 系統(tǒng)中座舍,所有的文件都被看做是流式文件,即使是有結(jié)構(gòu)文件陨帆,也被視為流式文件曲秉,系統(tǒng)不對文件進(jìn)行格式處理。

文件的外存分配方式

對換空間的管理:具有對換功能的OS中疲牵,將外存分為文件區(qū)(用于存放文件)和對換區(qū)(用于存放從內(nèi)存中換出的進(jìn)程)承二。由于通常的文件都是較長久的駐留在外存上亥鸠,故對文件區(qū)管理的主要目標(biāo),是提高文件存儲(chǔ)空間的利用率神妹。為此鸵荠,對文件區(qū)采取離散分配方式伤极。然而塑荒,進(jìn)程在對換區(qū)中駐留的時(shí)間是短暫的姜挺,對換操作又較頻繁炊豪,故對對換空間(swap分區(qū))管理的主要目標(biāo),是提高進(jìn)程換入和換出的速度牵舱。為此芜壁,采取的是連續(xù)分配方式高氮,較少考慮外存中的碎片問題剪芍。

連續(xù)分配

1、連續(xù)分配(Continuous Allocation)要求為每一個(gè)文件分配一組相鄰接的盤塊饱普。一組盤塊的地址定義了磁盤上的一段線性地址套耕。

2峡继、物理結(jié)構(gòu):順序式鬓椭。

3关划、如同內(nèi)存的動(dòng)態(tài)分區(qū)分配一樣贮折,隨著文件建立時(shí)空間的分配和文件刪除時(shí)空間的回收调榄,將使磁盤空間被分割成許多小塊每庆,這些較小的連續(xù)區(qū)已難于用來存儲(chǔ)文件今穿,此即外存的碎片蓝晒。同樣,我們也可以利用緊湊的方法胚嘲,將盤上所有的文件緊靠在一起馋劈,把所有的碎片拼接成一大片連續(xù)的存儲(chǔ)空間妓雾。

鏈接分配

1变擒、分類:

①隱式鏈接

在采用隱式鏈接分配方式時(shí)娇斑,在文件目錄的每個(gè)目錄項(xiàng)中,都須含有指向鏈接文件第一個(gè)盤塊和最后一個(gè)盤塊的指針唯竹。

隱式鏈接分配方式的主要問題在于:它只適合于順序訪問浸颓,它對隨機(jī)訪問是極其低效的产上。

②顯式鏈接----FAT/NTFS

把用于鏈接文件各物理塊的指針,顯式地存放在內(nèi)存的一張鏈接表中仪媒。該表在整個(gè)磁盤僅設(shè)置一張算吩。表的序號(hào)是物理盤塊號(hào)佃扼,從0 開始兼耀,直至N-1;N為盤塊總數(shù)巢音。在每個(gè)表項(xiàng)中存放鏈接指針尽超,即下一個(gè)盤塊號(hào)似谁。在該表中巩踏,凡是屬于某一文件的第一個(gè)盤塊號(hào)续搀,或者說是每一條鏈的鏈?zhǔn)字羔標(biāo)鶎?yīng)的盤塊號(hào)禁舷,均作為文件地址被填入相應(yīng)文件的FCB 的“物理地址”字段中牵咙。由于查找記錄的過程是在內(nèi)存中進(jìn)行的,因而不僅顯著地提高了檢索速度渴丸,而且大大減少了訪問磁盤的次數(shù)谱轨。由于分配給文件的所有盤塊號(hào)都放在該表中,故把該表稱為文件分配表FAT(File Allocation Table)溪食。

2错沃、物理結(jié)構(gòu):鏈接式枢析。

扇區(qū)(盤塊):512B

簇:2n個(gè)連續(xù)的扇區(qū)

索引分配

為每個(gè)文件分配一個(gè)索引塊(表)刃麸,再把分配給該文件的所有盤塊號(hào)都記錄在該索引塊中泊业,因而該索引塊就是一個(gè)含有許多盤塊號(hào)的數(shù)組。在建立一個(gè)文件時(shí)饮睬,只需在為之建立的目錄項(xiàng)中填上指向該索引塊的指針捆愁。

1窟却、分類:

①單級(jí)索引分配夸赫;②多級(jí)索引分配;③混合索引分配呼奢;


2.目錄管理

文件控制塊和索引結(jié)點(diǎn)

為了能對一個(gè)文件進(jìn)行正確的存取控妻,必須為文件設(shè)置用于描述和控制文件的數(shù)據(jù)結(jié)構(gòu)弓候,稱之為“文件控制塊(FCB)”。文件管理程序可借助于文件控制塊中的信息夸研,對文件施以各種操作依鸥。文件與文件控制塊一一對應(yīng)贱迟,而人們把文件控制塊的有序集合稱為文件目錄,即一個(gè)文件控制塊就是一個(gè)文件目錄項(xiàng)茶敏。通常惊搏,一個(gè)文件目錄也被看做是一個(gè)文件恬惯,稱為目錄文件亚茬。

文件控制塊

為了能對系統(tǒng)中的大量文件施以有效的管理才写,在文件控制塊中奖蔓,通常應(yīng)含有三類信息吆鹤,即基本信息、存取控制信息及使用信息沾凄。

1) 基本信息類

基本信息類包括: ① 文件名撒蟀,指用于標(biāo)識(shí)一個(gè)文件的符號(hào)名保屯。在每個(gè)系統(tǒng)中,每一個(gè)文件都必須有惟一的名字竟终,用戶利用該名字進(jìn)行存取切蟋。② 文件物理位置柄粹,指文件在外存上的存儲(chǔ)位置,它包括存放文件的設(shè)備名迷守、文件在外存上的起始盤塊號(hào)兑凿、指示文件所占用的盤塊數(shù)或字節(jié)數(shù)的文件長度茵瘾。③ 文件邏輯結(jié)構(gòu)拗秘,指示文件是流式文件還是記錄式文件、記錄數(shù)扮匠;文件是定長記錄還是變長記錄等棒搜。④ 文件的物理結(jié)構(gòu)力麸,指示文件是順序文件育韩,還是鏈接式文件或索引文件筋讨。

2) 存取控制信息類

存取控制信息類包括:文件主的存取權(quán)限、核準(zhǔn)用戶的存取權(quán)限以及一般用戶的存取權(quán)限赤屋。

3) 使用信息類

使用信息類包括: 文件的建立日期和時(shí)間、文件上一次修改的日期和時(shí)間及當(dāng)前使用信息(這項(xiàng)信息包括當(dāng)前已打開該文件的進(jìn)程數(shù)谜慌、是否被其它進(jìn)程鎖住欣范、文件在內(nèi)存中是否已被修改但尚未拷貝到盤上)恼琼。應(yīng)該說明屏富,對于不同OS 的文件系統(tǒng)狠半,由于功能不同,可能只含有上述信息中的某些部分已维。

索引結(jié)點(diǎn)

1) 索引結(jié)點(diǎn)的引入

文件目錄通常是存放在磁盤上的垛耳,當(dāng)文件很多時(shí)堂鲜,文件目錄可能要占用大量的盤塊护奈。在查找目錄的過程中逆济,先將存放目錄文件的第一個(gè)盤塊中的目錄調(diào)入內(nèi)存,然后把用戶所給定的文件名與目錄項(xiàng)中的文件名逐一比較。若未找到指定文件简僧,便再將下一個(gè)盤塊中的目錄項(xiàng)調(diào)入內(nèi)存雕欺。稍加分析可以發(fā)現(xiàn),在檢索目錄文件的過程中啦逆,只用到了文件名夏志,僅當(dāng)找到一個(gè)目錄項(xiàng)(即其中的文件名與指定要查找的文件名相匹配)時(shí),才需從該目錄項(xiàng)中讀出該文件的物理地址湿诊。而其它一些對該文件進(jìn)行描述的信息厅须,在檢索目錄時(shí)一概不用朗和。顯然簿晓,這些信息在檢索目錄時(shí)不需調(diào)入內(nèi)存抢蚀。為此,在有的系統(tǒng)中唱逢,如UNIX 系統(tǒng)坞古,便采用了把文件名與文件描述信息分開的辦法痪枫,亦即叠艳,使文件描述信息單獨(dú)形成一個(gè)稱為索引結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)附较,簡稱為i結(jié)點(diǎn)。在文件目錄中的每個(gè)目錄項(xiàng)僅由文件名和指向該文件所對應(yīng)的i 結(jié)點(diǎn)的指針?biāo)鶚?gòu)成徐勃。

2) 磁盤索引結(jié)點(diǎn)

這是存放在磁盤上的索引結(jié)點(diǎn)僻肖。每個(gè)文件有惟一的一個(gè)磁盤索引結(jié)點(diǎn),它主要包括以下內(nèi)容:

(1) 文件主標(biāo)識(shí)符劝堪,即擁有該文件的個(gè)人或小組的標(biāo)識(shí)符幅聘。

(2) 文件類型帝蒿,包括正規(guī)文件巷怜、目錄文件或特別文件延塑。

(3) 文件存取權(quán)限,指各類用戶對該文件的存取權(quán)限侥涵。

(4) 文件物理地址芜飘,每一個(gè)索引結(jié)點(diǎn)中含有13 個(gè)地址項(xiàng)嗦明,即iaddr(0)~iaddr(12)蚪燕,它們以直接或間接方式給出數(shù)據(jù)文件所在盤塊的編號(hào)馆纳。

(5) 文件長度厕诡,指以字節(jié)為單位的文件長度。

(6) 文件連接計(jì)數(shù)壹罚,表明在本文件系統(tǒng)中所有指向該(文件的)文件名的指針計(jì)數(shù)猖凛。

(7) 文件存取時(shí)間绪穆,指本文件最近被進(jìn)程存取的時(shí)間玖院、最近被修改的時(shí)間及索引結(jié)點(diǎn)最近被修改的時(shí)間难菌。

3) 內(nèi)存索引結(jié)點(diǎn)

這是存放在內(nèi)存中的索引結(jié)點(diǎn)。當(dāng)文件被打開時(shí)遇绞,要將磁盤索引結(jié)點(diǎn)拷貝到內(nèi)存的索引結(jié)點(diǎn)中摹闽,便于以后使用付鹿。在內(nèi)存索引結(jié)點(diǎn)中又增加了以下內(nèi)容:

(1) 索引結(jié)點(diǎn)編號(hào)蚜迅,用于標(biāo)識(shí)內(nèi)存索引結(jié)點(diǎn)慢叨。

(2) 狀態(tài),指示i結(jié)點(diǎn)是否上鎖或被修改烛缔。

(3) 訪問計(jì)數(shù)践瓷,每當(dāng)有一進(jìn)程要訪問此i結(jié)點(diǎn)時(shí)晕翠,將該訪問計(jì)數(shù)加1,訪問完再減1硫麻。

(4) 文件所屬文件系統(tǒng)的邏輯設(shè)備號(hào)拿愧。

(5) 鏈接指針浇辜。設(shè)置有分別指向空閑鏈表和散列隊(duì)列的指針唾戚。

目錄結(jié)構(gòu)

目錄查詢技術(shù)

線性檢索法

Hash方法

如果我們建立了一張Hash索引文件目錄熊镣,便可利用Hash 方法進(jìn)行查詢轧钓,即系統(tǒng)利用用戶提供的文件名并將它變換為文件目錄的索引值锐膜,再利用該索引值到目錄中去查找道盏,這將顯著地提高檢索速度荷逞。順便指出,在現(xiàn)代操作系統(tǒng)中涩澡,通常都提供了模式匹配功能妙同,即在文件名中使用了通配符“*”粥帚、“限次?”等。對于使用了通配符的文件名赠群,系統(tǒng)此時(shí)便無法利用Hash 方法檢索目錄依啰,因此速警,這時(shí)系統(tǒng)還是需要利用線性查找法查找目錄闷旧。

文件存儲(chǔ)空間的管理

①首先钧唐,系統(tǒng)必須能記住存儲(chǔ)空間的使用情況钝侠。為此,系統(tǒng)應(yīng)為分配存儲(chǔ)空間而設(shè)置相應(yīng)的數(shù)據(jù)結(jié)構(gòu)里初。

②其次双妨,系統(tǒng)應(yīng)提供對存儲(chǔ)空間進(jìn)行分配和回收的手段刁品。(存儲(chǔ)空間分配的基本單位都是盤塊而非字節(jié))

空閑表法

空閑表法屬于連續(xù)分配方式浩姥,它與內(nèi)存的動(dòng)態(tài)分配方式雷同勒叠,它為每個(gè)文件分配一塊連續(xù)的存儲(chǔ)空間,即系統(tǒng)也為外存上的所有空閑區(qū)建立一張空閑表,每個(gè)空閑區(qū)對應(yīng)于一個(gè)空閑表項(xiàng)担猛,其中包括表項(xiàng)序號(hào)傅联、該空閑區(qū)的第一個(gè)盤塊號(hào)、該區(qū)的空閑盤塊數(shù)等信息仇奶。再將所有空閑區(qū)按其起始盤塊號(hào)遞增的次序排列该溯。

在內(nèi)存分配上狈茉,雖然很少采用連續(xù)分配方式氯庆,然而在外存的管理中扰付,由于這種分配方式具有較高的分配速度羽莺,可減少訪問磁盤的I/O 頻率禽翼,故它在諸多分配方式中仍占有一席之地。例如锐墙,在前面所介紹的對換方式中溪北,對對換空間一般都采用連續(xù)分配方式夺脾。對于文件系統(tǒng)咧叭,當(dāng)文件較小(1~4個(gè)盤塊)時(shí),仍采用連續(xù)分配方式吉挣,為文件分配相鄰接的幾個(gè)盤塊;當(dāng)文件較大時(shí)终吼,便采用離散分配方式际跪。

空閑鏈表法

①空閑盤塊鏈姆打。這是將磁盤上的所有空閑空間出牧,以盤塊為單位拉成一條鏈舔痕。

②空閑盤區(qū)鏈伯复。這是將磁盤上的所有空閑盤區(qū)(每個(gè)盤區(qū)可包含若干個(gè)盤塊)拉成一條鏈啸如。

位示圖法

位示圖是利用二進(jìn)制的一位來表示磁盤中一個(gè)盤塊的使用情況叮雳。當(dāng)其值為“0”時(shí)妇汗,表示對應(yīng)的盤塊空閑杨箭;為“1”時(shí),表示已分配捣郊。有的系統(tǒng)把“0”作為盤塊已分配的標(biāo)志呛牲,把“1”作為空閑標(biāo)志娘扩。磁盤上的所有盤塊都有一個(gè)二進(jìn)制位與之對應(yīng),這樣元扔,由所有盤塊所對應(yīng)的位構(gòu)成一個(gè)集合澎语,稱為位示圖验懊。通骋逋迹可用m × n 個(gè)位數(shù)來構(gòu)成位示圖,并使m × n等于磁盤的總塊數(shù)娃承,如圖6-22 所示历筝。

成組鏈接法

空閑表法和空閑鏈表法都不適用于大型文件系統(tǒng)梳猪,因?yàn)檫@會(huì)使空閑表或空閑鏈表太長春弥。在UNIX 系統(tǒng)中采用的是成組鏈接法匿沛。

空閑盤塊的組織

①空閑盤塊號(hào)棧(只有一個(gè)蝙叛,每一組的第一個(gè)盤塊的S.free借帘、S.free(0)~S.free(99)記錄了下一組的盤塊總數(shù)N和下一組所有的盤塊號(hào))用來存放當(dāng)前可用的一組空閑盤塊的盤塊號(hào)(最多含100 個(gè)號(hào)),以及棧中尚有的空閑盤塊號(hào)數(shù)N蔫缸。順便指出拾碌,N 還兼作棧頂指針用。例如弟跑,當(dāng)N=100 時(shí)孟辑,它指向S.free(99)蔫敲。由于棧是臨界資源奈嘿,每次只允許一個(gè)進(jìn)程去訪問,故系統(tǒng)為棧設(shè)置了一把鎖尽狠。圖6-23 左部示出了空閑盤塊號(hào)棧的結(jié)構(gòu)晚唇。其中,S.free(0)是棧底平项,棧滿時(shí)的棧頂為S.free(99)闽瓢。

②文件區(qū)中的所有空閑盤塊被分成若干個(gè)組,比如缺猛,將每100 個(gè)盤塊作為一組荔燎。假定盤上共有10 000 個(gè)盤塊销钝,每塊大小為1 KB,其中第201~7999 號(hào)盤塊用于存放文件座享,即作

為文件區(qū),這樣丈秩,該區(qū)的最末一組盤塊號(hào)應(yīng)為7901~7999;次末組為7801~7900……蘑秽;第二組的盤塊號(hào)為301~400筷狼;第一組為201~300匠童,如圖6-23右部所示。

③將每一組含有的盤塊總數(shù)N 和該組所有的盤塊號(hào)記入其前一組的第一個(gè)盤塊的S.free(0)~S.free(99)中俏险。這樣竖独,由各組的第一個(gè)盤塊可鏈成一條鏈挤牛。

④將第一組的盤塊總數(shù)和所有的盤塊號(hào)記入空閑盤塊號(hào)棧中墓赴,作為當(dāng)前可供分配的空閑盤塊號(hào)诫硕。

⑤最末一組只有99 個(gè)盤塊,其盤塊號(hào)分別記入其前一組的S.free(1) ~S.free(99)中锉走,而在S.free(0)中則存放“0”挪蹭,作為空閑盤塊鏈的結(jié)束標(biāo)志嚣潜。(注:最后一組的盤塊數(shù)應(yīng)為99椅贱,

不應(yīng)是100,因?yàn)檫@是指可供使用的空閑盤塊计技,其編號(hào)應(yīng)為(1~99)芝此,0號(hào)中放空閑盤塊鏈的結(jié)尾標(biāo)志萌衬。)

空閑盤塊的分配與回收

當(dāng)系統(tǒng)要為用戶分配文件所需的盤塊時(shí)秕豫,須調(diào)用盤塊分配過程來完成观蓄。該過程首先檢查空閑盤塊號(hào)棧是否上鎖歌径,如未上鎖亲茅,便從棧頂取出一空閑盤塊號(hào),將與之對應(yīng)的盤塊分配給用戶勺届,然后將棧頂指針下移一格。若該盤塊號(hào)已是棧底饼酿,即S.free(0)故俐,這是當(dāng)前棧中最后一個(gè)可分配的盤塊號(hào)药版。由于在該盤塊號(hào)所對應(yīng)的盤塊中記有下一組可用的盤塊號(hào)槽片,因此,須調(diào)用磁盤讀過程传轰,將棧底盤塊號(hào)所對應(yīng)盤塊的內(nèi)容讀入棧中谷婆,作為新的盤塊號(hào)棧的內(nèi)容纪挎,并把原棧底對應(yīng)的盤塊分配出去(其中的有用數(shù)據(jù)已讀入棧中)异袄。然后隙轻,再分配一相應(yīng)的緩沖區(qū)(作為該盤塊的緩沖區(qū))玖绿。最后斑匪,把棧中的空閑盤塊數(shù)減1 并返回蚀瘸。

在系統(tǒng)回收空閑盤塊時(shí)贮勃,須調(diào)用盤塊回收過程進(jìn)行回收。它是將回收盤塊的盤塊號(hào)記入空閑盤塊號(hào)棧的頂部奏瞬,并執(zhí)行空閑盤塊數(shù)加1 操作硼端。當(dāng)棧中空閑盤塊號(hào)數(shù)目已達(dá)100 時(shí)珍昨,表示棧已滿镣典,便將現(xiàn)有棧中的100個(gè)盤塊號(hào)記入新回收的盤塊中瞒御,再將其盤塊號(hào)作為新棧底肴裙。

3.文件共享與文件保護(hù)

文件共享

基于索引結(jié)點(diǎn)的共享方式

利用符號(hào)鏈實(shí)現(xiàn)文件共享

為使B能共享C的一個(gè)文件F蜻懦,可以由系統(tǒng)創(chuàng)建一個(gè)LINK 類型的新文件宛乃,也取名為F,并將F寫入B的目錄中躬贡,以實(shí)現(xiàn)B的目錄與文件F的鏈接拂玻。在新文件中只包含被鏈接文件F的路徑名檐蚜。這樣的鏈接方法被稱為符號(hào)鏈接(Symbolic Linking)市栗。新文件中的路徑名則只被看作是符號(hào)鏈(Symbolic Link)咳短,當(dāng)B要訪問被鏈接的文件F且正要讀LINK 類新文件時(shí),此要求將被OS 截獲敷扫,OS 根據(jù)新文件中的路徑名去讀該文件葵第,于是就實(shí)現(xiàn)了用戶B 對文件F的共享缀台。

在利用符號(hào)鏈方式實(shí)現(xiàn)文件共享時(shí)哮奇,只是文件主才擁有指向其索引結(jié)點(diǎn)的指針哲身;而共享該文件的其他用戶則只有該文件的路徑名贸伐,并不擁有指向其索引結(jié)點(diǎn)的指針勘天。這樣,也

就不會(huì)發(fā)生在文件主刪除一共享文件后留下一懸空指針的情況捉邢。當(dāng)文件的擁有者把一個(gè)共享文件刪除后脯丝,其他用戶試圖通過符號(hào)鏈去訪問一個(gè)已被刪除的共享文件時(shí),會(huì)因系統(tǒng)找不到該文件而使訪問失敗伏伐,于是再將符號(hào)鏈刪除宠进,此時(shí)不會(huì)產(chǎn)生任何影響。

文件保護(hù)

本小節(jié)主要討論磁盤容錯(cuò)技術(shù)秘案,而存取控制機(jī)制將在系統(tǒng)安全性一章中介紹。容錯(cuò)技術(shù)是通過在系統(tǒng)中設(shè)置冗余部件的辦法赚导,來提高系統(tǒng)可靠性的一種技術(shù)。磁盤容錯(cuò)技術(shù)則是通過增加冗余的磁盤驅(qū)動(dòng)器、磁盤控制器等方法员串,來提高磁盤系統(tǒng)可靠性的一種技術(shù)。

第一級(jí)容錯(cuò)技術(shù)SFT-Ⅰ

第一級(jí)容錯(cuò)技術(shù)(SFT-Ⅰ)是最基本的一種磁盤容錯(cuò)技術(shù),主要用于防止因磁盤表面缺陷所造成的數(shù)據(jù)丟失塞颁。它包含雙份目錄、雙份文件分配表及寫后讀校驗(yàn)等措施。

1) 雙份目錄和雙份文件分配表

2) 熱修復(fù)重定向和寫后讀校驗(yàn)

①熱修復(fù)重定向:系統(tǒng)將磁盤容量的一部分(例如2%~3%)作為熱修復(fù)重定向區(qū)是偷,用于存放當(dāng)發(fā)現(xiàn)磁盤有缺陷時(shí)的待寫數(shù)據(jù)放接,并對寫入該區(qū)的所有數(shù)據(jù)進(jìn)行登記玛瘸,以便于以后對數(shù)據(jù)進(jìn)行訪問慧脱。

②寫后讀校驗(yàn)方式。為了保證所有寫入磁盤的數(shù)據(jù)都能寫入到完好的盤塊中殷绍,應(yīng)該在每次從內(nèi)存緩沖區(qū)向磁盤中寫入一個(gè)數(shù)據(jù)塊后殖侵,又立即從磁盤上讀出該數(shù)據(jù)塊楞陷,并送至另一緩沖區(qū)中结执,再將該緩沖區(qū)內(nèi)容與內(nèi)存緩沖區(qū)中在寫后仍保留的數(shù)據(jù)進(jìn)行比較。若兩者一致,便認(rèn)為此次寫入成功,可繼續(xù)寫下一個(gè)盤塊情连;否則挽拔,再重寫。若重寫后兩者仍不一致,則認(rèn)為該盤塊有缺陷穗椅,此時(shí),便將應(yīng)寫入該盤塊的數(shù)據(jù),寫入到熱修復(fù)重定向區(qū)中绸吸。

第二級(jí)容錯(cuò)技術(shù)SFT-Ⅱ

第二級(jí)容錯(cuò)技術(shù)主要用于防止由磁盤驅(qū)動(dòng)器和磁盤控制器故障所導(dǎo)致的系統(tǒng)不能正常工作码俩,它具體又可分為磁盤鏡像和磁盤雙工。

①磁盤鏡像(Disk Mirroring)

磁盤鏡像雖然實(shí)現(xiàn)了容錯(cuò)功能寂诱,但未能使服務(wù)器的磁盤I/O 速度得到提高,卻使磁盤的利用率降至僅為50%。

②磁盤雙工(Disk Duplexing)

基于集群技術(shù)的容錯(cuò)功能

所謂集群嗡靡,是指由一組互連的自主計(jì)算機(jī)組成統(tǒng)一的計(jì)算機(jī)系統(tǒng),給人們的感覺是躏嚎,它們是一臺(tái)機(jī)器箭阶。利用集群系統(tǒng)不僅可提高系統(tǒng)的并行處理能力荞彼,還可用于提高系統(tǒng)的可用性,它們是當(dāng)前使用最廣泛的一類具有容錯(cuò)功能的集群系統(tǒng)。其主要工作模式有三種:① 熱備份模式(DRBD);② 互為備份模式;③ 公用磁盤模式(DRBD)。

①雙機(jī)熱備份模式

在這種模式的系統(tǒng)中,備有兩臺(tái)服務(wù)器,兩者的處理能力通常是完全相同的,一臺(tái)作為主服務(wù)器缅帘,另一臺(tái)作為備份服務(wù)器。平時(shí)主服務(wù)器運(yùn)行,備份服務(wù)器則時(shí)刻監(jiān)視著主服務(wù)器的運(yùn)行,一旦主服務(wù)器出現(xiàn)故障,備份服務(wù)器便立即接替主服務(wù)器的工作而成為系統(tǒng)中的主服務(wù)器,修復(fù)后的服務(wù)器再作為備份服務(wù)器凄杯。為使在這兩臺(tái)服務(wù)器間能保持鏡像關(guān)系膊存,應(yīng)在這兩臺(tái)服務(wù)器上各裝入一塊網(wǎng)卡虚缎,并通過一條鏡像服務(wù)器鏈路MSL(Mirrored Server Link)將兩臺(tái)服務(wù)器連接起來创坞。纲堵。此外,還必須在系統(tǒng)中設(shè)置某種機(jī)制,來檢測主服務(wù)器中數(shù)據(jù)的改變。一旦該機(jī)制檢測到主服務(wù)器中有數(shù)據(jù)變化睹耐,便立即通過通信系統(tǒng)將修改后的數(shù)據(jù)傳送到備份服務(wù)器的相應(yīng)數(shù)據(jù)文件中赘风。

③公用磁盤模式

為了減少信息復(fù)制的開銷,可以將多臺(tái)計(jì)算機(jī)連接到一臺(tái)公共的磁盤系統(tǒng)上去。該公共磁盤被劃分為若干個(gè)卷。每臺(tái)計(jì)算機(jī)使用一個(gè)卷钾挟。如果某臺(tái)計(jì)算機(jī)發(fā)生故障汤锨,此時(shí)系統(tǒng)將重新進(jìn)行配置慎菲,根據(jù)某種調(diào)度策略來選擇另一臺(tái)替代機(jī)器有决,后者對發(fā)生故障的機(jī)器的卷擁有所有權(quán),從而來接替故障計(jì)算機(jī)所承擔(dān)的任務(wù)。這種模式的優(yōu)點(diǎn)是:消除了信息的復(fù)制時(shí)間,因而減少了網(wǎng)絡(luò)和服務(wù)器的開銷俄精。

數(shù)據(jù)一致性控制

軟件

硬件:采用冗余技術(shù)圾旨,將一份信息同時(shí)存放在多個(gè)獨(dú)立的产雹、非易失性存儲(chǔ)器上(如磁盤雙工方式)瘟判。

事務(wù)

事務(wù)是用于訪問和修改各種數(shù)據(jù)項(xiàng)的一個(gè)程序單位。事務(wù)也可以被看做是一系列相關(guān)讀和寫操作左冬。事務(wù)具有原子性铸鹰。

事務(wù)記錄

數(shù)據(jù)結(jié)構(gòu)被放在穩(wěn)定存儲(chǔ)器中教馆,用來記錄在事務(wù)運(yùn)行時(shí)數(shù)據(jù)項(xiàng)修改的全部信息究恤,故又稱為運(yùn)行記錄(Log)绵患。該記錄中包括有下列字段:

· 事務(wù)名:用于標(biāo)識(shí)該事務(wù)的惟一名字赚瘦;

· 數(shù)據(jù)項(xiàng)名:指被修改數(shù)據(jù)項(xiàng)的惟一名字;

· 舊值:修改前數(shù)據(jù)項(xiàng)的值;

· 新值:修改后數(shù)據(jù)項(xiàng)將具有的值屠尊。

在事務(wù)記錄表中的每一記錄赃绊,描述了在事務(wù)運(yùn)行中的重要事務(wù)操作,如修改操作邢滑、開始事務(wù)、托付事務(wù)或夭折事務(wù)等。

恢復(fù)算法

(1) undo〈Ti〉哎迄。該過程把所有被事務(wù)Ti修改過的數(shù)據(jù)恢復(fù)為修改前的值阶女。

(2) redo〈Ti〉。該過程把所有被事務(wù)Ti修改過的數(shù)據(jù)設(shè)置為新值岁经。

檢查點(diǎn)

引入檢查點(diǎn)的主要目的,是使對事務(wù)記錄表中事務(wù)記錄的清理工作經(jīng)秤德Γ化柱宦,即每隔一定時(shí)間便做一次下述工作:首先是將駐留在易失性存儲(chǔ)器(內(nèi)存)中的當(dāng)前事務(wù)記錄表中的所

有記錄輸出到穩(wěn)定存儲(chǔ)器中;其次是將駐留在易失性存儲(chǔ)器中的所有已修改數(shù)據(jù)輸出到穩(wěn)定存儲(chǔ)器中经宏;然后是將事務(wù)記錄表中的〈檢查點(diǎn)〉記錄輸出到穩(wěn)定存儲(chǔ)器中币喧;最后是每當(dāng)出現(xiàn)一個(gè)〈檢查點(diǎn)〉記錄時(shí)冀续,系統(tǒng)便執(zhí)行上小節(jié)所介紹的恢復(fù)操作顺献,利用redo和undo過程實(shí)現(xiàn)恢復(fù)功能萝招。

引入檢查點(diǎn)后兼吓,可以大大減少恢復(fù)處理的開銷筋遭。因?yàn)樵诎l(fā)生故障后石蔗,并不需要對事務(wù)記錄表中的所有事務(wù)記錄進(jìn)行處理,而只需對最后一個(gè)檢查點(diǎn)之后的事務(wù)記錄進(jìn)行處理员寇。

并發(fā)控制

①利用互斥鎖實(shí)現(xiàn)順序性

②利用互斥鎖和共享鎖實(shí)現(xiàn)順序性

重復(fù)數(shù)據(jù)的數(shù)據(jù)一致性問題

①重復(fù)文件的一致性

②盤塊號(hào)的一致性

③鏈接數(shù)的一致性

新增一張計(jì)數(shù)器表,遍歷目錄后將文件的引用計(jì)數(shù)放入該計(jì)數(shù)器表中科侈,并與該文件的索引節(jié)點(diǎn)的count比較黍析。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奄抽,一起剝皮案震驚了整個(gè)濱河市逞度,隨后出現(xiàn)的幾起案子甜熔,更是在濱河造成了極大的恐慌,老刑警劉巖锌俱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匹舞,死亡現(xiàn)場離奇詭異,居然都是意外死亡线脚,警方通過查閱死者的電腦和手機(jī)赐稽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浑侥,“玉大人姊舵,你說我怎么就攤上這事≡⒙洌” “怎么了括丁?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伶选。 經(jīng)常有香客問我史飞,道長,這世上最難降的妖魔是什么仰税? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任构资,我火速辦了婚禮,結(jié)果婚禮上陨簇,老公的妹妹穿的比我還像新娘吐绵。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布己单。 她就那樣靜靜地躺著唉窃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纹笼。 梳的紋絲不亂的頭發(fā)上纹份,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音廷痘,去河邊找鬼蔓涧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牍疏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拨齐,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鳞陨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞻惋?” 一聲冷哼從身側(cè)響起厦滤,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歼狼,沒想到半個(gè)月后掏导,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羽峰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年趟咆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅屉。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡值纱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坯汤,到底是詐尸還是另有隱情虐唠,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布惰聂,位于F島的核電站疆偿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搓幌。R本人自食惡果不足惜杆故,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溉愁。 院中可真熱鬧反番,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枫疆,卻和暖如春爵川,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背息楔。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工寝贡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人值依。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓圃泡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愿险。 傳聞我的和親對象是個(gè)殘疾皇子颇蜡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344