一、文件系統(tǒng)
1.1 文件系統(tǒng)的層次結(jié)構(gòu)
- 用戶需要通過(guò)操作系統(tǒng)提供的接口發(fā)出上述請(qǐng)求——用戶接口
- 由于用戶提供的是文件的存放路徑,因此需要操作系統(tǒng)一層一層地查找目錄,找到對(duì)應(yīng)的目錄項(xiàng)——文件目錄系統(tǒng)
- 不同的用戶對(duì)文件有不同的操作權(quán)限,因此為了保證安全,需要檢查用戶是否有訪問(wèn)權(quán)限——存取控制模塊(存取控制驗(yàn)證層)
- 驗(yàn)證了用戶的訪問(wèn)權(quán)限之后,需要把用戶提供的“記錄號(hào)”轉(zhuǎn)變?yōu)閷?duì)應(yīng)的邏輯地址——邏輯文件系統(tǒng)與文件信息緩沖區(qū)
- 知道了目標(biāo)記錄對(duì)應(yīng)的邏輯地址后,還需要轉(zhuǎn)換成實(shí)際的物理地址——物理文件系統(tǒng)
- 要?jiǎng)h除這條記錄,必定要對(duì)磁盤設(shè)備發(fā)出請(qǐng)求——設(shè)備管理程序模塊
- 刪除這些記錄后,會(huì)有一些盤塊空閑,因此要將這些空閑盤塊回收——輔助分配模塊
1.2 文件系統(tǒng)的全局結(jié)構(gòu)
- 原始磁盤 → 物理格式化 → 邏輯格式化 →
- 物理格式化,即低級(jí)格式化——?jiǎng)澐稚葏^(qū),檢測(cè)壞扇區(qū),并用備用扇區(qū)替換壞扇區(qū)
- 邏輯格式化后,磁盤分區(qū)(分卷 Volume),完成各分區(qū)的文件系統(tǒng)初始化(灰色部分就有實(shí)際數(shù)據(jù)了,白色部分還沒(méi)有數(shù)據(jù))
- open系統(tǒng)調(diào)用打開(kāi)文件的過(guò)程
1.3 虛擬文件系統(tǒng)
- 虛擬文件系統(tǒng)的特點(diǎn):
- 向上層用戶進(jìn)程提供統(tǒng)一標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口,屏蔽底層具體文件系統(tǒng)的實(shí)現(xiàn)差異
- VFS要求下層的文件系統(tǒng)必須實(shí)現(xiàn)某些規(guī)定的函數(shù)功能,如:open/read/write。一個(gè)新的文件系統(tǒng)想要在某操作系統(tǒng)上被使用,就必須滿足該操作系統(tǒng)VFS的要求
- 每打開(kāi)一個(gè)文件,VFS就在主存中新建一個(gè) vnode,用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)表示文件,無(wú)論該文件存儲(chǔ)在哪個(gè)文件系統(tǒng)
- vnode 只存在于主存中,而 inode 既會(huì)被調(diào)入主存,也會(huì)在外存中存儲(chǔ)
- 存在的問(wèn)題:不同的文件系統(tǒng),表示文件數(shù)據(jù)結(jié)構(gòu)各不相同;打開(kāi)文件后,其在內(nèi)存中的表示就不同
1.4 文件系統(tǒng)掛載(mounting)
- 文件系統(tǒng)掛載(mounting),即文件系統(tǒng)安裝/裝載
- 文件系統(tǒng)掛載要做的事:
- 在VFS中注冊(cè)新掛載的文件系統(tǒng),**內(nèi)存中的掛載表(mount table)**包含每個(gè)文件系統(tǒng)的相關(guān)信息,包括文件系統(tǒng)類型、容量大小等
- 新掛載的文件系統(tǒng),要向VFS提供一個(gè)函數(shù)地址列表
- 將新文件系統(tǒng)加到掛載點(diǎn)(mount point),也就是將新文件系統(tǒng)掛載在某個(gè)父目錄下
二、磁盤
2.1 磁盤的結(jié)構(gòu)
- 磁盤的基本概念
- 磁盤:磁盤的表面由一些磁性物質(zhì)組成,可以用這些磁性物質(zhì)來(lái)記錄二進(jìn)制數(shù)據(jù)
- 磁道:磁盤的盤面被劃分成一個(gè)個(gè)磁道,這樣的一個(gè)“圈”就是一個(gè)磁道。最內(nèi)側(cè)磁道上的扇區(qū)面積最小,因此數(shù)據(jù)密度最大
- 扇區(qū):一個(gè)磁道又被劃分成一個(gè)個(gè)扇區(qū),每個(gè)扇區(qū)就是一個(gè)“磁盤塊”。各個(gè)扇區(qū)存放的數(shù)據(jù)量相同
- 需要把“磁頭”移動(dòng)到想要讀/寫(xiě)的扇區(qū)所在的磁道,磁盤會(huì)轉(zhuǎn)起來(lái),讓目標(biāo)扇區(qū)從磁頭下面劃過(guò),才能完成對(duì)扇區(qū)的讀/寫(xiě)操作
- 磁盤的物理地址:可用(柱面號(hào),盤面號(hào),扇區(qū)號(hào))來(lái)定位任意一個(gè)“磁盤塊”(文件數(shù)據(jù)存放在外存中的幾號(hào)塊,這個(gè)塊號(hào)就可以轉(zhuǎn)換成(柱面號(hào),盤面號(hào),扇區(qū)號(hào))的地址形式)
- 根據(jù)該地址讀取一個(gè)“塊”:
- 根據(jù)“柱面號(hào)”移動(dòng)磁臂,讓磁頭指向指定柱面
- 激活指定盤面對(duì)應(yīng)的磁頭
- 磁盤旋轉(zhuǎn)的過(guò)程中,指定的扇區(qū)會(huì)從磁頭下面劃過(guò),這樣就完成了對(duì)指定扇區(qū)的讀/寫(xiě)
- 磁盤的分類
- 盤頭可否移動(dòng):活動(dòng)頭磁盤、固定頭磁盤
- 盤片能否更換:可換盤磁盤、固定盤磁盤
2.2 磁盤調(diào)度算法
2.2.1 一次磁盤讀/寫(xiě)操作需要的時(shí)間
-
尋找時(shí)間(尋道時(shí)間)TS:在讀/寫(xiě)數(shù)據(jù)前,將磁頭移動(dòng)到指定磁道所花的時(shí)間
- 啟動(dòng)磁頭臂是需要時(shí)間的,假設(shè)耗時(shí)為 s
- 移動(dòng)磁頭也是需要時(shí)間的,假設(shè)磁頭勻速移動(dòng),每跨越一個(gè)磁道耗時(shí)為 m,總共需要跨越 n 條磁道。則:尋道時(shí)間 TS = s + m*n(現(xiàn)在的硬盤移動(dòng)一個(gè)磁道大約需要0.2ms,磁臂啟動(dòng)時(shí)間約為2ms)
- 延遲時(shí)間TR:通過(guò)旋轉(zhuǎn)磁盤,使磁頭定位到目標(biāo)扇區(qū)所需要的時(shí)間。設(shè)磁盤轉(zhuǎn)速為 r (單位:轉(zhuǎn)/秒,或 轉(zhuǎn)/分),則平均所需的延遲時(shí)間 TR = (1/2)*(1/r) = 1/2r(1/r 就是轉(zhuǎn)一圈需要的時(shí)間,找到目標(biāo)扇區(qū)平均需要轉(zhuǎn)半圈,因此再乘以 1/2)
- 傳輸時(shí)間Tt:從磁盤讀出或向磁盤寫(xiě)入數(shù)據(jù)所經(jīng)歷的時(shí)間,假設(shè)磁盤轉(zhuǎn)速為 r,此次讀/寫(xiě)的字節(jié)數(shù)為 b,每個(gè)磁道上的字節(jié)數(shù)為 N。則:傳輸時(shí)間Tt = (1/r) * (b/N) = b/(rN)
- 延遲時(shí)間和傳輸時(shí)間都與磁盤轉(zhuǎn)速相關(guān),且為線性相關(guān);轉(zhuǎn)速是硬件的固有屬性,無(wú)法優(yōu)化
- 操作系統(tǒng)的磁盤調(diào)度算法會(huì)影響尋道時(shí)間
- 總的平均存取時(shí)間 Ta = TS + 1/2r + b/(rN)
2.2.2 先來(lái)先服務(wù)算法FCFS
- 根據(jù)進(jìn)程請(qǐng)求訪問(wèn)磁盤的先后順序進(jìn)行調(diào)度
- 優(yōu)點(diǎn):公平;如果請(qǐng)求訪問(wèn)的磁道比較集中的話,算法性能還算過(guò)的去
- 缺點(diǎn):如果有大量進(jìn)程競(jìng)爭(zhēng)使用磁盤,請(qǐng)求訪問(wèn)的磁道很分散,則FCFS在性能上很差,尋道時(shí)間長(zhǎng)
2.2.3 最短尋找時(shí)間優(yōu)先SSTF
- SSTF 算法會(huì)優(yōu)先處理的磁道是與當(dāng)前磁頭最近的磁道??梢员WC每次的尋道時(shí)間最短,但是并不能保證總的尋道時(shí)間最短。(其實(shí)就是貪心算法的思想,只是選擇眼前最優(yōu),但是總體未必最優(yōu))
- 優(yōu)點(diǎn):性能較好,平均尋道時(shí)間短
- 缺點(diǎn):可能產(chǎn)生“饑餓”現(xiàn)象
2.2.4 掃描算法SCAN電梯算法
- 掃描算法(SCAN):只有磁頭移動(dòng)到最外側(cè)磁道的時(shí)候才能往內(nèi)移動(dòng),移動(dòng)到最內(nèi)側(cè)磁道的時(shí)候才能往外移動(dòng)
- 由于磁頭移動(dòng)的方式很像電梯,因此也叫電梯算法
- 優(yōu)點(diǎn):性能較好,平均尋道時(shí)間較短,不會(huì)產(chǎn)生饑餓現(xiàn)象
- 缺點(diǎn):
- 只有到達(dá)最邊上的磁道時(shí)才能改變磁頭移動(dòng)方向
- SCAN算法對(duì)于各個(gè)位置磁道的響應(yīng)頻率不平均
2.2.5 LOOK調(diào)度算法
- LOOK 調(diào)度算法:如果在磁頭移動(dòng)方向上已經(jīng)沒(méi)有別的請(qǐng)求,就可以立即改變磁頭移動(dòng)方向(邊移動(dòng)邊觀察,因此叫 LOOK)
- 優(yōu)點(diǎn):比起 SCAN 算法來(lái),不需要每次都移動(dòng)到最外側(cè)或最內(nèi)側(cè)才改變磁頭方向,使尋道時(shí)間進(jìn)一步縮短
2.2.6 循環(huán)掃描算法C-SCAN
- C-SCAN 算法:只有磁頭朝某個(gè)特定方向移動(dòng)時(shí)才處理磁道訪問(wèn)請(qǐng)求,而返回時(shí)直接快速移動(dòng)至起始端而不處理任何請(qǐng)
求 - 優(yōu)點(diǎn):比起SCAN 來(lái),對(duì)于各個(gè)位置磁道的響應(yīng)頻率很平均
- 缺點(diǎn):
- 只有到達(dá)最邊上的磁道時(shí)才能改變磁頭移動(dòng)方向;并且,磁頭返回時(shí)并不一定需要返回到最邊緣的磁道
- 另外,比起SCAN算法來(lái),平均尋道時(shí)間更長(zhǎng)。
2.2.7 C-LOOK調(diào)度算法
- C-LOOK 算法:如果磁頭移動(dòng)的方向上已經(jīng)沒(méi)有磁道訪問(wèn)請(qǐng)求了,就可以立即讓磁頭返回,并且磁頭只需要返回到有磁道訪問(wèn)請(qǐng)求的位置即可
- 優(yōu)點(diǎn):比起 C-SCAN 算法來(lái),不需要每次都移動(dòng)到最外側(cè)或最內(nèi)側(cè)才改變磁頭方向,使尋道時(shí)間進(jìn)一步縮短
2.3 減少延遲時(shí)間的方法
- 延遲時(shí)間:將目標(biāo)扇區(qū)轉(zhuǎn)到磁頭下面所花的時(shí)間
- 磁頭讀入一個(gè)扇區(qū)數(shù)據(jù)后需要一小段時(shí)間處理,如果邏輯上相鄰的扇區(qū)在物理上也相鄰,則讀入幾個(gè)連續(xù)的邏輯扇區(qū),可能需要很長(zhǎng)的“延遲時(shí)間”
2.3.1 交替編號(hào)、錯(cuò)位命名
- 若采用**交替編號(hào)**的策略,即讓邏輯上相鄰的扇區(qū)在物理上有一定的間隔,可以使讀取連續(xù)的邏輯扇區(qū)所需要的延遲時(shí)間更小
- 采用**錯(cuò)位命名法**,因此讀取完磁盤塊(000, 00, 111)之后,還有一段時(shí)間處理,當(dāng)(000, 01, 000)第一次劃過(guò)1號(hào)盤面的磁頭下方時(shí),就可以直接讀取數(shù)據(jù)。從而減少了延遲時(shí)間
2.3.2 磁盤地址結(jié)構(gòu)的設(shè)計(jì)
- 為什么磁盤的物理地址是(柱面號(hào),盤面號(hào),扇區(qū)號(hào))而不是(盤面號(hào),柱面號(hào),扇區(qū)號(hào))?
- 答:若物理地址結(jié)構(gòu)是(柱面號(hào),盤面號(hào),扇區(qū)號(hào)),且需要連續(xù)讀取物理地址 (000, 00, 000)~(000, 01, 111)的扇區(qū):(000, 00, 000) ~( 000, 00, 111 ) 由盤面0的磁頭讀入數(shù)據(jù)之后再讀取物理地址相鄰的區(qū)域,即(000, 01, 000) ~( 000, 01, 111 ),由于柱面號(hào)/磁道號(hào)相同,只是盤面號(hào)不同,因此不需要移動(dòng)磁頭臂,只需要激活相鄰盤面的磁頭即可。
2.4 磁盤的管理
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-510010.html
2.4.1 磁盤初始化
- 進(jìn)行低級(jí)格式化(物理格式化),將磁盤的各個(gè)磁道劃分為扇區(qū)。一個(gè)扇區(qū)通常可分為 頭、數(shù)據(jù)區(qū)域、尾 三個(gè)部分組成。管理扇區(qū)所需要的各種數(shù)據(jù)結(jié)構(gòu)一般存放在頭、尾兩個(gè)部分,包括扇區(qū)校驗(yàn)碼(如奇偶校驗(yàn)、CRC循環(huán)冗余校驗(yàn)碼等,校驗(yàn)碼用于校驗(yàn)扇區(qū)中的數(shù)據(jù)是否發(fā)生錯(cuò)誤)
- 將磁盤分區(qū),每個(gè)分區(qū)由若干柱面組成(即分為我們熟悉的 C盤、D盤、E盤)
- 進(jìn)行邏輯格式化,創(chuàng)建文件系統(tǒng)。包括創(chuàng)建文件系統(tǒng)的根目錄、初始化存儲(chǔ)空間管理所用的數(shù)據(jù)結(jié)構(gòu)(如 位示圖、空閑分區(qū)表)
2.4.2 引導(dǎo)塊
- 計(jì)算機(jī)開(kāi)機(jī)時(shí)需要進(jìn)行一系列初始化的工作,通過(guò)執(zhí)行**初始化程序(自舉程序)**完成;初始化程序可以放在ROM (只讀存儲(chǔ)器)中,ROM中的數(shù)據(jù)在出廠時(shí)就寫(xiě)入了,并且以后不能再修改
- 完整的自舉程序放在磁盤的啟動(dòng)塊(即引導(dǎo)塊/啟動(dòng)分區(qū))上,啟動(dòng)塊位于磁盤的固定位置
- 擁有啟動(dòng)分區(qū)的磁盤稱為啟動(dòng)磁盤或系統(tǒng)磁盤(C:盤)
- ROM中只存放很小的“自舉裝入程序”,開(kāi)機(jī)時(shí)計(jì)算機(jī)先運(yùn)行“自舉裝入程序”,通過(guò)執(zhí)行該程序就可找到引導(dǎo)塊,并將完整的“自舉程序”讀入內(nèi)存,完成初始化
2.4.3 壞塊的管理
- 壞塊:壞了、無(wú)法正常使用的扇區(qū);屬于硬件故障,操作系統(tǒng)是無(wú)法修復(fù)的。應(yīng)該將壞塊標(biāo)記出來(lái),以免錯(cuò)誤地使用到它
- 簡(jiǎn)單的磁盤:邏輯格式化時(shí)(建立文件系統(tǒng)時(shí))對(duì)整個(gè)磁盤進(jìn)行壞塊檢查,標(biāo)明哪些扇區(qū)是壞扇區(qū),比如:在 FAT 表上標(biāo)明。(在這種方式中,壞塊對(duì)操作系統(tǒng)不透明)
- 復(fù)雜的磁盤:磁盤控制器(磁盤設(shè)備內(nèi)部的一個(gè)硬件部件)會(huì)維護(hù)一個(gè)壞塊鏈表,在磁盤出廠前進(jìn)行低級(jí)格式化(物理格式化)時(shí)就將壞塊鏈進(jìn)行初始化
- 扇區(qū)備用:保留一些“備用扇區(qū)”,用于替換壞塊;這種處理方式中,壞塊對(duì)操作系統(tǒng)透明
2.5 固態(tài)硬盤SSD
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-510010.html
- 機(jī)械硬盤 vs 固態(tài)硬盤
- 固態(tài)硬盤基于閃存技術(shù),一個(gè)固態(tài)硬盤可能包含多個(gè)閃存芯片
- 系統(tǒng)對(duì)SSD的讀/寫(xiě)以頁(yè)為單位
- 寫(xiě)入數(shù)據(jù)時(shí),若其他頁(yè)上有數(shù)據(jù)則,將其他頁(yè)的數(shù)據(jù)復(fù)制到另一個(gè)塊上并寫(xiě)入;并擦除原塊
- 優(yōu)點(diǎn):SSD讀寫(xiě)速度快,隨機(jī)訪問(wèn)性能高,用電路控制訪問(wèn)位置(機(jī)械硬盤通過(guò)移動(dòng)磁臂旋轉(zhuǎn)磁盤控制訪問(wèn)位置,有尋道時(shí)間和旋轉(zhuǎn)延遲);安靜無(wú)噪音、耐摔抗震、能耗低、造價(jià)更貴
- 磨損均衡技術(shù):
- 動(dòng)態(tài)磨損均衡:寫(xiě)入數(shù)據(jù)時(shí),優(yōu)先選擇累計(jì)擦除次數(shù)少的新閃存塊
- 靜態(tài)磨損均衡:SSD監(jiān)測(cè)并自動(dòng)進(jìn)行數(shù)據(jù)分配、遷移,讓老舊的閃存塊承擔(dān)以讀為主的儲(chǔ)存任務(wù),讓較新的閃存塊承擔(dān)更多的寫(xiě)任務(wù)
到了這里,關(guān)于【王道·操作系統(tǒng)】第四章 文件管理(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!