操作系统原理:文件系统、磁盘调度
目錄
一、相關概念? ? ? ?
二、文件的分配
三、空閑空間列表
四、多磁盤管理-RAID
五、磁盤調度
一、相關概念? ? ? ?
? ? ? ?文件系統是一種用于持久性存儲的系統抽象。硬盤屬于持久性存儲介質的一種。管理文件系統例如硬盤,需要管理文件塊,哪一塊屬于哪一個文件;需要管理空閑空間和分配策略;為文件提供相應的保護,文件數據的存儲需要可靠性持久性。文件的屬性包含名稱、文件類型(后綴)、位置、大小、讀寫權,創建者、創建時間,最近修改時間等 ; 文件頭 保存了文件的控制信息。
? ? ? ?文件描述符是操作系統為每個進程維護維護的一個打開文件表的索引。需要元數據來對文件進行有效的管理,元數據包括文件指針來記錄最后一次讀寫位置,文件打開計數(文件是共享資源,允許多個進程打開同一個文件),文件磁盤位置(緩存數據的訪問信息),訪問權限等。在操作系統更上層的應用程序不需要關心文件在磁盤中的哪一個位置,只管對緩存區Buffer的讀寫就行。具體的邏輯內存和外存之間的映射關系由操作系統完成。內存的讀寫單位是頁或者字節,而外存磁盤的讀寫是扇區。
? ? ?當用戶需要讀取文件數據時,操作系統會獲取用戶需要訪問的字節空間,進一步地操作系統會根據用戶需要訪問字節所在的扇區給取出來。
? ? ?別名,及一個文件由多個名字。軟連接生成出的文件,其內容是另一個文件的路徑名(指針),通過訪問這路徑名可以間接的訪問對應的文件,又稱快捷方式。硬鏈接生成出的文件其文件項指向同一個文件的內容。對于硬鏈接,有種特殊的數據結構記錄了文件被引用的計數。刪除硬鏈接對應的文件,只是把計數減1,直到減為0文件才會徹底刪除。如果刪除軟連接對應的文件,文件沒了,鏈接也就懸空了。有點像C++里的智能指針和弱指針。別名的應用潛在的風險就是循環引用,可能在遍歷路徑時造成異常,所以需要考慮檢索文件算法的健壯性。
? ? 文件系統分為磁盤文件系統,數據庫文件系統(例如WinFs),日志文件系統(例如 Journaling file system,用于可恢復文件數據),網絡/分布式文件系統(例如NFS、GFS等,利用網絡訪問其他系統的文件),特殊/虛擬文件系統
? ? 虛擬文件系統是對所有文件系統的抽象,管理所有文件和文件系統關聯的數據結構,給上層提供統一的接口,實現對各種文件系統高效的讀/寫/查/打開/關閉等功能。
? ??
對于基本的文件系統數據結構包含:卷控制塊(超級塊)用來記錄文件系統的特征信息,例如塊大小,塊數量,空余塊,指針等;文件控制塊用來記錄文件的特征信息,例如擁有者,文件大小,數據庫位置等; 目錄節點,每個目錄項一個,包含了目錄項的數據結構和指向的文件控制塊、父節點項目列表等。
?
二、文件的分配
? ? ? ?文件的分配分成3種,連續分配方式、鏈式分配方式、索引分配方式。對于不同大小文件應考慮空間高效和時間高效采用適合數據塊分配方式。通常的表現指標是訪問時間和空間利用率。
? ? ? ?連續分配策略就是找到一塊滿足文件大小的數據塊進行分配。和頁內存的連續分配策略類似。如果頻繁進行文件的修改/刪除可能會有無法利用的空閑塊。當然這種組織方式是簡單的,通常方法就最佳分配,最先適配等。
? ? ? ?鏈式分配策略,像鏈表一樣的數據結構。優點就是很少的碎片,但是串行訪問可能會比較花時間。訪問第三個數據塊,先要訪問第二個數據塊,訪問第二個數據庫,首先應訪問第一個數據庫才行。還有一個缺點就是,鏈表的指針(鏈接)信息,可能會因為突然斷點導致文件數據來不及寫入到硬盤中導致中間修改數據塊的鏈接信息丟失,斷了“鏈”就會造成之后的文件數據無法關聯起來。
? ? ? ?多級索引分配策略,像樹一樣的數據結構,每個非葉子節點都是索引,通過索引塊可以找到數據庫的位置。這種方式可以高效地利用碎片,增刪也方便。缺點就是存儲小文件也需要為索引塊分配空間,不能直接訪問。
三、空閑空間列表
? ? ? ?文件系統需要把空閑空間組織起來。可以用‘0’ 和 ‘1’ 表示數據塊是否為空閑。所以可以用位圖來管理文件系統的所有數據塊列表的空閑情況。訪問文件系統時,數據塊空閑列表需要裝入到內存中,因此還需要考慮可能因為斷電造成內存和硬盤數據信息不一致情況的問題。
四、多磁盤管理-RAID
? ? ? ?早期磁盤容易壞,數據容易丟失。為了保持高健壯性,通常用多個便宜的硬盤并行寫數據,這樣一個硬盤損壞也不至于數據丟失,同時也可以提高磁盤的訪問效率。
? ? ? ?RAID-0:把數據均勻地放在獨立的硬盤里,對硬盤并行的寫操作和讀操作。對于操作系統來說,訪問數據,可以并行地將不同硬盤的數據寫入內存中。
? ? ? ?RAID-1:如果其中有一個硬盤損壞,那么其他硬盤可以替代損壞的硬盤的工作,提高可靠性。多硬盤起到了鏡像作用。
? ? ? ?RAID-4:多硬盤中,用一個硬盤用來完成數據糾錯功能,稱為Parity Disk。此方法考慮到了RAID-0 和RAID-1的高效和高可靠的特點。缺點是Parity Disk 的讀寫非常頻繁。
? ? ? ?RAID-5:多硬盤中,選其中用幾個或多個硬盤用來完成數據糾錯功能。讓多個硬盤分攤原先Parity Disk的讀寫負擔。
五、磁盤調度
? ? ? ?? ?在磁盤調度管理中都是先進行是移臂調度,然后進行旋轉調度。?磁頭通過移動來找到扇區具體位置,磁盤通過旋轉來尋道找到數據的位置。一個磁盤有多個盤片,每個盤片有一到兩個的磁頭來讀取數據。“旋轉”和“移動”都是機械操作,與電子讀取的效率相比慢了好幾個數量級。
? ? 那么有什么調度策略來減少讀取磁盤的開銷呢?當有一系列尋道請求時,如果采用先來先服務策略,訪問數據如果在不同扇區,而扇區在磁盤的物理位置距離過長,那么磁頭讀取數據時可能會來回“跳動”。造成很大的開銷。
? ? ?最短尋道時間,在系列尋道請求中,找到扇區位置與當前磁頭所在扇區的位置的距離最短的請求,先執行。這個可能會造成離磁頭的遠的尋道請求長時間無法執行,造成饑餓現象。
? ? ?Scan,又稱電梯算法,磁頭先往磁盤內環移動接收相應的尋道請求,再往磁盤外環接收相應的尋道請求,像電梯一樣。那么所有請求都可以公平地得到訪問。
? ? C-Scan,單方向尋道法,磁頭從磁盤內環當作起始位置。往磁盤外環移動接收相應的尋道請求,到了外環后迅速回到起始位置。
? ??C-Look, 單方向尋道法,磁頭從磁盤內環當作起始位置。往磁盤外環移動接收相應的尋道請求,到了最外環的尋道請求后迅速回到起始位置。
? ? N-step-Scan.將尋道請求隊列分成N個子隊列,每處理子隊列請求都采用Scan算法。
? ? F-Scan。是N-step-Scan的特例,只分成兩個子隊列,每處理子隊列請求都采用Scan算法。
以上是基本的尋道策略,然而現實情況可能根據磁盤的特點指定出特有的策略,有些硬盤的尋道甚至都不需要程序來完成,硬件幫你做了。
總結
以上是生活随笔為你收集整理的操作系统原理:文件系统、磁盘调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三菱PLC ALTP指令
- 下一篇: Python去除空格