【操作系統】文件系統(二):文件系統的管理及性能

技術是開源的,知識是共享的。

本篇主要介紹文件系統的調度算法及性能優化,關於文件系統的結構請參考上一篇【操作系統】文件系統(一):文件的存儲介質及結構

1 文件操作的實現

1.1 創建文件和打開文件

創建文件:建立系統與文件的聯繫,實際是建立文件的FCB。

在目錄中爲新文件建立一個目錄項,根據提供的參數及需要填寫相關內容。
分配必要的存儲空間

打開文件:根據文件名在文件目錄中檢索,並將該文件的目錄項讀入內存,建立相應的數據結構並返回文件描述符/文件句柄
創建、打開文件流程如下圖所示:
在這裏插入圖片描述

1.2 指針定位

系統爲每個進程打開的每個文件維護一個讀寫指針,即相對於文件開頭的偏移地址

讀寫指針指向每個文件讀寫的開始位置,在每次讀寫完成後,讀寫指針按照讀寫的數據量自動後移相應數值。

1.3 讀文件

1、根據打開文件時返回的文件描述符(file descriptor),找到相應的文件控制塊;
2、將文件的邏輯塊號轉換爲物理塊號;
3、申請緩衝區;
4、啓動磁盤I/O操作,把磁盤中的信息讀入緩衝區,再送到指定的內存區;
5、返回執行第3/4步直至讀出所需數量的數據。

2 文件系統的管理

2.1 文件系統的可靠性

可靠性:抵禦和預防各種物理性破壞和人爲性破壞的能力。

2.2 文件系統的一致性

1 問題的產生
磁盤塊–>內存–>寫回磁盤塊,若在寫回之前,系統崩潰,則文件系統出現不一致的情況。
**文件系統的不一致主要是指元數據的不一致,包括系統的卷信息、空閒的磁盤塊信息、文件目錄信息、分配給文件的塊信息。**至於說Word文件在使用過程中由於系統崩潰沒有保存導致數據丟失,這就不在文件系統的一致性討論範疇。
2 磁盤塊的一致性檢查
這裏以Unix系統爲例,OS保存了兩張表,每塊對應一個表中的計數器,初值爲0。
表一:記錄了每塊在文件中出現的次數;
表二:記錄了每塊在空閒塊表中出現的次數。

塊號 0 1 2 3 4 5 6
表一:使用中的塊 1 1 0 1 0 1 2
表二:空閒塊 0 0 0 0 2 0 0

如上表所示,正常情況應該是:同一塊號,在使用塊中爲1,在空閒塊中就應該爲0,反之在使用塊中爲0則在空閒塊中就應該爲1。但是表中塊號爲2、4、6的就是異常。下面依次就行說明。
塊號2:該塊在使用塊和空閒塊表中都不存在,丟失了,解決方案是在空閒塊表中把該塊的值標記爲1。
塊號4:磁盤在空閒塊表中出現了兩次,解決方案是將2修改爲1。
塊號6:磁盤塊在兩個文件當中都出現了,此時只能在空閒的磁盤塊中找一個空閒的磁盤塊,將兩個文件中的其中之一的內容拷貝到該塊中,另一個文件就用原來的磁盤塊。

2.3 文件系統的寫入策略

1 通寫(write-through)
內存中的修改立即寫到磁盤,性能較差,如FAT文件系統
2 延遲寫(lazy-write)
利用回寫(write back)緩存的方法實現
3 可恢復寫(transaction log)
利用事務日誌來實現文件系統的寫入,既考慮了安全性又考慮了性能,如NTFS

3 文件系統的安全性

3.1 文件保護機制

用於提供安全性、特定的操作系統機制,對擁有權限的用戶,應該讓其進行相應操作,否則應禁止。

3.2 文件的訪問控制

主動控制:訪問控制表

每個文件一個
記錄用戶ID和訪問權限
用戶可以是一組用戶
文件可以是一組文件

能力表(權限表)

每個用戶一個
記錄文件名及訪問權限
用戶可以是一組用戶
文件可以是一組文件

3.3Unix的文件訪問控制

採用二級存取控制:
第一級:對訪問者的識別
對用戶分類:文件主(owner)、文件主的同組用戶(group)、其他用戶(other)
第二級:對操作權限的識別
對操作分類:讀操作(r)、寫操作(w)、執行操作(x)、不能執行任何操作(-)

例如:rwx rwx rw-,表示對文件主可讀可寫可執行,對同組用戶可讀可寫可執行,對其他用戶可讀可寫不可執行。
chmod 731 file:將file的權限修改爲對文件主可讀可寫可執行,對同組用戶可讀可寫,對其他用戶可讀。

讀操作對應數字1,寫操作對應2,可執行對應數字4(7=1+2+4)

4 提高文件系統的性能

磁盤服務相對於內存讀取速度差異巨大,成爲系統性能的主要瓶頸之一。所以有必要對文件系統的性能進行優化提高。

4.1 塊高速緩存(Block Cache)

1 概念
又稱文件緩存、磁盤高速緩存、緩衝區高速緩存。是在內存中爲磁盤塊設置的一個緩衝區,保存了磁盤中某些塊的副本

檢查所有的讀請求,看所需塊是否在塊高速緩存中
如果在,則可直接進行讀操作;否則先將數據讀入塊高速緩存,再拷貝到所需的地方
由於訪問的局部性原理,當一數據塊被讀入塊高速緩存以滿足一個I/O請求時,很可能將來還會再次訪問到這一數據塊

2 實現
是通過哈希表組織,若是塊高速緩存已滿則需要通過LRU算法進行置換,當塊中的數據二筆修改時,爲保證數據一致性,需要寫回磁盤(包括即時寫和延遲迴寫兩種方式)。

4.2 提前讀取

根據程序執行的局部性原理,每次訪問磁盤時,多讀入一些磁盤塊。這樣就節省了尋道時間等消耗。

4.3 合理分配磁盤空間

分配磁盤塊時,把有可能順序存取的塊放在一起,儘量分配在同一柱面上,從而減少磁盤臂的移動次數和距離。

4.4 磁盤調度

4.4.1 相關概念

當有多個訪盤請求等待時,採用一定的策略,對這些請求的服務順序調整安排,降低平均磁盤服務時間,達到公平、高效。

公平:一個I/O請求在有限的時間內滿足
高效:減少設備機械運動帶來的時間開銷

一次訪盤時間=尋道時間+旋轉延遲時間+傳輸時間

4.4.2 磁盤調度算法

假設有這樣一個場景,磁盤訪問序列是98,183,37,122,14,124,65,67,讀寫頭起始位置是53,研究一下各種算法的效率。
1 先來先服務
按訪問請求到達的先後次序服務。
上述場景的效率是:總移動640磁道
2 最短尋道時間優先(Shortest Seek Time First)
優先選擇距離當前磁頭最近的訪問請求進行服務,缺點是容易造成某些訪問請求長期等待得不到服務。
上述場景的效率是:總移動236磁道
3 掃描算法SCAN(電梯算法)
當設備無訪問請求時,磁頭不動;當有訪問請求時,磁頭按照一個方向移動,在移動過程中對遇到的訪問請求進行服務,然後判斷該方向上是否還有訪問請求,如果有則繼續掃描;否則改變移動方向,併爲經過的訪問請求服務。
上述場景的效率是:總移動218磁道
4 單向掃描調度算法C-SCAN
總是從0號柱面開始掃描,到達最後一個柱面後立即帶動讀寫磁頭快速返回到0號柱面,返回時不爲任何的等待訪問者服務,返回後可再次進行掃描。該算法的特點在於減少了新請求的最大延遲。
5 N-step-SCAN策略
把磁盤請求隊列分成長度爲N的子隊列,每一次用SCAN處理一個子隊列,在處理某一個隊列時,新請求添加到其他子隊列中。
6 FSCAN策略
使用兩個子隊列,掃描開始時,所有請求都在一個隊列中,而另一個隊列爲空,掃描過程中所有新到的請求都放入另一個隊列中,新請求需要等所有老請求處理完之後才能被服務。
7 旋轉調度算法
根據延遲時間來決定執行次序。有三種情況,如下表所示:

情況 解決方案
若干等待訪問者請求訪問同一磁頭上的不同扇區 讓先到達讀寫磁頭位置下的扇區進行傳送操作
若干等待訪問者請求訪問不同磁頭上的不同扇區 讓先到達讀寫磁頭位置下的扇區進行傳送操作
若干等待訪問者請求訪問不同磁頭上的相同扇區 任選一個讀寫磁頭進行傳送操作,剩下的磁頭在下一次扇區到達讀寫磁頭位置時操作

4.5 RAID技術

獨立磁盤冗餘陣列(Redundant Arrays of Independent Disks),目標在於提高可靠性和性能。
1 基本思想
通過把多個磁盤組織在一起,作爲一個邏輯卷提供磁盤跨越功能
通過把數據分成多個數據塊,並行寫入/讀出多個磁盤,以提高數據傳輸率(數據分條stripe)
通過鏡像或校驗操作,提供容錯能力(冗餘)
2 RAID 0-條帶化
數據分佈在陣列的所有磁盤上,有數據請求時同時對多個磁盤並行操作,無冗餘(即無差錯控制),性能最佳。如下圖所示:
在這裏插入圖片描述
3 RAID 1-鏡像
所有數據同時存在於兩塊磁盤的相同位置,可最大限度的保證數據安全性及可恢復性。如下圖所示:
在這裏插入圖片描述
4 RAID 4 交錯塊奇偶校驗
以數據塊爲單位,另外還有一塊盤專門存放奇偶校驗信息,如下圖所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章