您好,登錄后才能下訂單哦!
第四章 文件系統
文件是進程創建的信息邏輯單元
目錄是管理文件系統結構的系統文件
在Unix中,路徑各部分之間用“/”分割,在Windows中,分隔符是“\”,在Multics中是“>”
不管哪一種分隔符,如果路徑名的第一個字符是分隔符,則這個路徑是絕對路徑
支持層次目錄結構的大多數操作系統在每個目錄中都有兩個特殊的目錄項,“.”和“..”,常讀作“dot”和“dotdot”,“dot”指當前目錄,“dotdot”指父目錄(在根目錄中例外,根目錄中它指向自己。
在刪除目錄的時候,在只有空目錄可以調用刪除目錄,來刪除
文件系統的實現
文件系統的布局:磁盤的0號扇區稱為主引導記錄(MBR),用來引導計算機,在MBR結尾時分區表,該表給出了每個分區的起始地址標,表中的一個分區被標記為活動分區,在計算機被引導時,BIOS讀入并執行MBR。MBR做的第一件事就是確定活動分區,讀入它的的一塊,稱為引導塊,并執行之。除此之外,還有一個超級塊,超級塊包含文件系統的所有關鍵參數,在計算機啟動時,或者該文件系統首次使用時,把超級塊讀入內存。超級塊中的典型信息包括:確定文件系統類型用的魔術,文件系統中數據塊的數量以及其他重要的管理信息
文件實現:
1. 連續分配,優點:實現簡單、讀操作性能較好;缺點:容易產生磁盤碎片
2. 鏈表分配:每塊的第一個字作為指向下一個塊的指針。該方法盡管順序讀取非常方便,但隨機存取卻相當緩慢,另外由于指針占用了額外的空間導致每個磁盤塊不再是2的整數次冪,這種怪異的大小大大的降低了系統的性能(許多程序都是以2的整數次冪來讀取磁盤的。
3. 在內存中采用鏈表分配:取出2中的磁盤塊的指針,放入內存中的一個表中。這個表叫做文件分配表(FAT),缺點,整個表放入內存中
4. i節點:記錄文件分別屬于那些磁盤塊,列出了文件屬性和文件塊的磁盤地址,給定i節點,只有文件打開時,文件的i節點才會存在內存中,最后一個磁盤塊地址不是指向數據塊而是指向一個包含磁盤塊地址的塊的地址
目錄實現
1. 較好的一個方案是:文件項包含一個指向文件名的地址和文件的屬性,對于長目錄,線性搜索的方法太慢了,加快查找速度的一個方法是使用散列表
共享文件
1. 連接(link):特定目錄與共享文件之間的聯系稱為一個連接。
2. 文件系統本身是一個無環圖,而不是一棵樹
3. 為了解決在共享文件中單個文件寫入數據,違背了共享文件的目的,Unix采取的方法是i節點,即磁盤塊不列入目錄而是列入一個與文件本身相關的小型數據結構(i節點);另一種方案是符號連接:即系統創建一種指向共享文件的新文件(windows系統中的快捷方式)
日志結構文件系統
1. 基本思想是將整個磁盤結構化為一日志
2. 每隔一段時間,或是有特殊需要時,被緩沖在內存中的所有未決的寫操作都被放到一個單獨的段中,作為在日志末尾的一個鄰接段寫入磁盤
3. 日志文件系統有一個清理線程,該線程周期地掃描日志進行磁盤壓縮
4. 整個磁盤成為一個大的環形緩沖區,寫線程將新的段寫在前面,而清理進程則將舊的段從后面移走
虛擬文件系統
1. 思想:抽象出所有文件系統都共有的部分,并且將這部分代碼放到單獨的一層,該層調用底層的實際文件系統來具體管理數據
2. 所有和文件相關的系統調用在最初的處理上都指向虛擬文件系統
3. 虛擬文件有兩個不同的接口:上層用戶進程的接口和下層給實際文件系統的接口
文件系統管理和優化
1.幾乎所有的文件系統都把文件分割成固定的塊大小來存儲,各塊之間不一定相鄰
2.如果分配的單元太大,浪費了空間(再小的文件也會占用整個柱面),如果太小,則浪費了時間(文件跨越多個塊,多次尋道和旋轉延遲)
3.記錄空閑塊,方案一:采用磁盤塊鏈表,方案二:使用位圖
4.磁盤配額:管理員分配給每個用戶擁有文件和塊的最大數量,操作系統確保每個用戶不超過分配給他們的配額
5.文件系統備份:處理兩個問題:1)、從意外災難中恢復;2)從錯誤操作中恢復,(windos中的回收站)
6.增量轉儲:周期性地做全面的轉儲,而在每天只對當天更改的數據備份。稍微好一點的做法是只備份最近一次轉儲以來更改過的文件。
7.轉儲兩種方案:物理轉儲,邏輯轉儲;物理轉儲:從磁盤的第0塊開始,將全部的磁盤塊按序輸出到磁帶上,直到最后一塊復制完畢;邏輯轉儲:從一個或幾個指定的目錄開始,遞歸地轉儲器自給定基準日期(例如,最近一次增量轉儲或全面轉儲的日期)后有所更改的全部文件和目錄。
8.文件系統的一致性:很多計算機都帶有一個使用程序以檢查文件的一致性,Unix中是fsck,windos中是scandisk
9.文件系統的性能:
1)高速緩沖,
在Unix中有一個系統調用sync,它強制性地把全部修改過的塊立即寫回磁盤,系統啟動時,在后臺運行一個通常名為update的程序,它在無限循環中不斷的執行sync調用,每兩次調用之間休眠的實現是30秒
在windos中有一個FlushFileBuffers,它采用的做法是,只要被寫進告訴緩沖,就把每個被修改的塊寫入磁盤。將緩沖中所有被修改的塊立即寫回磁盤稱為通寫高速緩沖。同非通寫緩沖相比,通寫緩沖需要更多的磁盤IO
2)塊提前讀
3)減少磁盤臂運動
把可能順序存取的塊放在一起,當然最好在同一個柱面上,從而減少磁盤臂的移動次數
磁盤碎片整理:移動文化使它們相鄰,并把所有的(至少是大部分)空閑空間放在一個或多個大的連續的區域內。Windos有一個程序defrag從事這項工作。
文件系統實例:
1.CD-ROM,為一次性寫介質設計的
Unix,ISO 9660文件系統標準的基礎上做了一次擴展,Rock Ridge擴展,微軟做的一次擴展是Joliet擴展
2.MS_DOS文件系統,它和擴展(FAT-32)一直被許多切入式系統廣泛使用,如數碼相機等。
3.UnixV7文件系統,i節點采用3級間接塊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。