一、文件系統
1.1文件與文件系統
1、文件
1)數據項
在文件系統中,數據項是最低級的數據組織形式。分為兩種類型:
- 基本數據項。描述一個對象某種屬性的字符集,是數據組織中可以命名的最小邏輯數據單位,又稱字段。除了數據名還有數據類型
- 組合數據項。由若干基本數據項組成
數據項的名字和類型共同定義了數據項的“型”,表征一個實體在數據項上的數據稱為“值”
2)記錄
記錄是一組相關數據項的集合,用於描述一個對象在某方面的屬性
一個記錄應包含哪些數據項取決於需要描述對象的哪個方面
唯一標識一個記錄的一個或多個數據項稱為關鍵字
3)文件
文件是具有文件名的一組相關元素的集合,可分為有結構文件和無結構文件
有結構文件由若干個相關記錄組成,無結構文件看成是一個字符流
文件是文件系統中最大的數據單位
文件屬性包括:文件類型、文件長度、文件的物理地址、文件的建立時間
2、文件系統
1)定義
文件系統是操作系統用於明確磁盤或分區上的文件的方法和數據結構,即在磁盤上組織文件的方法;也指用於存儲文件的磁盤或分區,或文件系統種類
操作系統中負責管理和存儲文件信息的軟件機構稱為文件管理系統,簡稱文件系統
文件系統由三部分組成:與文件管理有關軟件、被管理文件以及實施文件管理所需數據結構
從系統角度來看,文件系統是對文件存儲器空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等
2)文件系統的層次結構
文件系統的模型可分為三個層次:最底層是對象及其屬性,中間層是對對象進行操縱和管理的軟件集合,最高層是文件系統提供給用戶的接口
文件系統管理的對象:文件、目錄、磁盤存儲空間
與文件系統有關的軟件分為四個層次:
- I/O控制層。文件系統的最底層,主要由磁盤驅動程序組成
- 基本文件系統層。處理內存與磁盤之間數據塊的交換
- 基本 I/O管理程序。完成與磁盤 I/O有關的事務
- 邏輯文件系統。處理與文件和記錄相關的操作
文件系統的接口:命令接口,程序接口
1.2文件的邏輯結構
用戶看到的文件稱為邏輯文件,它由一系列邏輯記錄組成。從用戶角度看,文件的邏輯記錄是能被存取的基本單位
1、順序文件
排列方式:
- 串結構:按存入時間的先后排序。對串結構文件進行檢索時,每次都必須從頭開始,逐個查找
- 順序結構:按關鍵字排序。檢索時可利用有效的查找算法,如折半查找、跳步查找等
優點:
- 最佳應用場合是對文件中的記錄進行批量存取
- 所有邏輯文件中順序文件的存取效率最高
- 順序存儲設備(如磁帶)只能存儲順序存儲文件
缺點:
- 用戶查找或修改單個記錄需要在記錄中逐個查找
- 增刪一個記錄很困難
2、索引文件
出現原因:變長記錄文件查找一個記錄必須從第一個記錄查起,耗時很長
為變長記錄文件建立一張索引表,主文件中的每個記錄在索引表中設置一個表項,包括指向記錄的指針和記錄的長度
索引表按關鍵字排序,其本身也是一個定長記錄的順序文件。這樣就把對變長記錄順序文件的順序檢索變為對定長記錄索引文件的隨機檢索
優點:
- 將需要順序查找的文件改造成可隨即查找的文件,提高了查找速度
- 記錄的插入、刪除非常方便
缺點:除了主文件,還需配置一張索引表,每個記錄都要有一個索引項,增加了存儲開銷
3、索引順序文件
基本克服了邊長記錄順序文件不能隨機訪問,以及不便於記錄插入、刪除的缺點,但記錄仍按關鍵字排序
增加了兩個新特征:
- 引入文件索引表,通過該表能實現對順序文件的隨機訪問
- 增加溢出文件,記錄增加的、刪除的、修改的記錄
1)一級索引順序文件
首先將變長記錄順序文件的所有記錄分為若干組(如50個一組),然后為順序文件建立一張索引表,並為每組的第一個記錄在索引表中建立一個索引項,包括該記錄的關鍵字和指向該記錄的指針
對索引順序文件進行檢索時,先利用用戶提供的關鍵字和某種查找算法檢索索引表,找到該記錄所在組;然后利用順序查找法查找主文件,直到找到記錄
2)兩級索引順序文件
先為文件建立一張低級索引表,若干記錄一組;再為低級索引表建立一張高級索引表,若干低級索引表一組。每個表項存放的是低級索引表每組第一個表項的關鍵字以及指向該表項的指針
1.3文件目錄
對目錄管理的要求:
- 實現”按名存取“
- 提高對目錄的檢索速度
- 文件共享
- 允許文件重名
1、文件控制塊和索引節點
1)文件控制塊
文件控制塊中應包括三類信息:基本信息,存取控制信息,使用信息
基本信息包括:文件名,文件物理位置,文件邏輯結構,文件物理結構
存取控制信息包括:文件主、核准用戶、一般用戶的存取權限
使用信息包括:文件的建立日期和時間,文件上次修改的日期和時間,當前使用信息
2)索引結點
在檢索目錄文件的過程中只用到了文件名,僅當其中的文件名和指定查找的文件名匹配時,才從該目錄文件中讀取文件的物理地址
為使檢索更高效,系統把文件名和文件描述信息分開,將文件描述信息單獨形成一個稱為索引結點的數據結構
- 磁盤索引結點:存放在磁盤上的索引結點。每個文件有唯一的磁盤索引結點
- 內存索引結點:存放在內存中的索引結點。當文件被打開時,要將磁盤索引結點拷貝到內存索引結點中
2、單級文件目錄和兩級文件目錄
1)單級文件目錄
整個文件系統只建立一張目錄表,每個文件占一個目錄項,每個目錄項含文件名、文件擴展名、文件長度、文件類型、文件物理地址及其他文件屬性。此外還設置一個狀態位表示文件是否空閑
建立新文件時,先檢索所有的目錄項以保證新文件名在目錄中唯一。然后從目錄表中找出一個空白目錄項,填入新文件的信息並置狀態位為 1。刪除文件時,先從目錄中找到該文件的目錄項,回收文件所占存儲空間,再清除目錄項
優點:簡單
缺點:只能實現按名存取,查找速度慢,不允許重名,不便於實現文件共享
2)兩級文件目錄
為每個用戶建立一個單獨的用戶文件目錄 UFD,它由用戶所有文件的文件控制塊組成
系統中建立一個主文件目錄 MFD,MFD中每個用戶目錄文件都占有一個目錄項,包括用戶名和指向該用戶目錄文件的指針
在兩級目錄文件中,如果用戶希望有自己的 UFD,可請求系統為自己建立;當不再需要時請求系統管理員撤銷即可。有了 UFD后,用戶想增刪文件,OS只需檢查該用戶的 UFD,然后執行相關操作
3、樹形目錄結構
電腦日常使用的結構即樹形目錄結構。以 Linux為例,方框代表目錄文件,圓圈代表數據文件
1)路徑名
在樹形結構中,從根目錄到任何數據文件都只有唯一的路
該路徑從主目錄開始,把全部目錄文件名與數據文件名用”/“連接起來你,構成該數據文件唯一的路徑名
2)當前目錄
進程運行時訪問的文件大多局限於某個范圍,每次從主目錄開始查找極不方便,於是為進程設置一個”當前目錄“,進程對各文件的訪問都相當於當前目錄進行
從當前目錄到數據文件構成的路徑叫相對路徑名
從主目錄開始的路徑名叫絕對路徑名
1.4文件共享
1、基於有向無循環圖
樹形結構目錄不適合文件共享
如果允許一個文件可以有多個父目錄,即有多個屬於不同用戶的多個目錄,同時指向同一個文件,雖然會破壞樹的特性,但這些用戶可用對稱的方式實現文件共享而不必通過其屬主目錄訪問
如何建立父目錄與共享文件間的鏈接?
方法一:
如果文件目錄中包含的是文件的物理地址,即文件所在盤塊的盤號,鏈接時必須將文件的物理地址拷貝到父目錄中
但以后父目錄向文件中添加新內容時必然相應增加新的盤塊,這些新增盤塊只會出現在執行了操作的目錄中,新增的內容不能被共享
方法二:
在文件目錄中只設置文件名和指向相應索引結點的指針
如圖,用戶 Wang和 Lee的文件目錄中都設置有指向共享文件的索引結點指針,任何用戶對共享文件的操作都會引起相應結點內容的改變,這些改變對用戶可見,從而能讓用戶共享
索引結點中有一個鏈接計數 count,表示鏈接到本索引結點上的用戶目錄項的數目
當某用戶 C創建一個文件,並有其它用戶 B共享該文件。當 C刪除文件時,也刪除了該文件的索引結點,會導致 B的指針懸空,執行的操作半途而廢
2、利用符號鏈接
1)基本思想
允許一個文件或子目錄有多個父目錄,但僅有一個作為主父目錄,其它父目錄通過符號鏈接方式與之相鏈接
這樣的好處是屬主結構(實線連接起來的結構)仍然是簡單樹,對文件的刪除、查找更為方便
2)實現
為使鏈接父目錄 D5能共享文件 F,可以由系統創建一個 LINK類型的新文件,取名 F,並將 F寫入鏈接父目錄 D5中,以實現 D5與 F8的鏈接。新文件 F中只包含被鏈接文件 F8的路徑名
當用戶通過 D5訪問被鏈接的文件 F8,且正要讀 LINK類新文件時,此要求被 OS截獲,OS根據新文件中的路徑名找到文件 F8進行操作。這樣就實現了用戶 B對文件 F的共享
優點:
- 只有文件主才擁有指向其索引結點的指針,共享該文件的其它用戶只有該文件的路徑名
- 當文件擁有者刪除共享文件后,其他用戶會因為系統找不到該文件而訪問失敗,然后刪除符號鏈而不會有任何影響
缺點:
- 其他用戶讀共享文件時,系統根據給定的文件路徑名逐個分量查找目錄,開銷甚大,且增加了啟動磁盤的頻率
- 要為每個共享用戶建立一條符號鏈,耗費一定的磁盤空間
1.5文件保護
為了防止文件共享可能會導致的文件被破壞或未經核准的用戶修改文件,文件系統必須控制用戶對文件的存取,即解決對文件的讀、寫、執行的許可問題。為此必須在文件系統中建立相應的文件保護機制
文件保護通過口令保護、加密保護和訪問控制等方式實現。其中,口令保護和加密保護是為了防止用戶文件被他人存取或竊取,而訪問控制用於控制用戶對文件的訪問方式
1、訪問類型
對文件的保護可以從限制對文件的訪問類型出發。可加以控制的訪問類型主要有以下幾種:
- 讀:從文件中讀
- 寫:向文件中寫
- 執行:將文件裝入內存並執行
- 添加:將新信息添加到文件結尾部分
- 刪除:刪除文件,釋放空間
- 列表清單:列出文件名和文件屬性
此外可以對文件的重命名、復制、編輯等加以控制。這些高層的功能可以通過系統程序調用低層系統調用來實現
保護可以只在低層提供。例如,復制文件可利用一系列的讀請求來完成,這樣具有讀訪問的用戶同時也具有復制和打印的權限
2、訪問控制
解決訪問控制最常用的方法是根據用戶身份進行控制。而實現基於身份訪問的最普通方法是為每個文件和目錄增加一個訪問控制列表,以規定每個用戶名及其所允許的訪問類型
這種方法的優點是可以使用復雜的訪問方法,缺點是長度無法預期並且可能導致復雜的空間管理。可使用精簡的訪問列表可以解決這個問題,精簡的訪問列表包括擁有者、組和其他三種用戶類型:
- 擁有者:創建文件的用戶。
- 組:一組需要共享文件且具有類似訪問的用戶。
- 其他:系統內的所有其他用戶。
只需用三個域寫出訪問列表中三類用戶的訪問權限:
- 文件擁有者在創建文件時,說明創建者用戶名及所在的組名;系統在創建文件時也將文件主的名字、所屬組名寫在該文件的 FCB中
- 用戶訪問該文件時,按照擁有者所擁有的權限訪問文件,如果用戶和擁有者在同一個用戶組則按照同組權限訪問,否則只能按其他用戶權限訪問
口令和密碼是另外兩種訪問控制方法
- 口令指用戶在建立一個文件時提供一個口令,系統為其建立 FCB時附上相應口令,同時通知允許共享該文件的其他用戶。用戶請求訪問時必須提供相應口令
- 密碼指用戶對文件進行加密,文件被訪問時需要使用密鑰
注意:
- 現代操作系統常用的文件保護方法,是將訪問控制列表與用戶、組和其他成員訪問控制方案一起組合使用
- 對於多級目錄結構而言,不僅需要保護單個文件,而且還需要保護子目錄內的文件, 即需要提供目錄保護機制。目錄操作與文件操作並不相同,因此需要不同的保護機制
二、文件系統實現
2.1文件系統層次結構
1、用戶調用接口
文件系統為用戶提供與文件及目錄有關的調用,如新建、打開、讀寫、關閉、刪除文件,建立、刪除目錄等
此層由若干程序模塊組成,每一模塊對應一條系統調用,用戶發出系統調用時,控制即轉入相應的模塊
2、文件目錄系統
文件目錄系統的主要功能是管理文件目錄,其任務有管理活躍文件目錄表、管理讀寫狀態信息表、管理用戶進程的打開文件表、管理與組織在存儲設備上的文件目錄結構、調用下一級存取控制模塊
3、存取控制驗證
實現文件保護主要由該級軟件完成,它把用戶的訪問要求與FCB中指示的訪問控制權限進行比較,以確認訪問的合法性
4、邏輯文件系統與文件信息緩沖區
邏輯文件系統與文件信息緩沖區的主要功能是根據文件的邏輯結構將用戶要讀寫的邏輯記錄轉換成文件邏輯結構內的相應塊號
5、物理文件系統
物理文件系統的主要功能是把邏輯記錄所在的相對塊號轉換成實際的物理地址
6、分配模塊
分配模塊的主要功能是把邏輯記錄所在的相對塊號轉換成實際的物理地址
7、設備管理程序模塊
設備管理程序模塊的主要功能是分配設備、分配設備讀寫用緩沖區、磁盤調度、啟動設備、處理設備中斷、釋放設備讀寫緩沖區、釋放設備等
2.2目錄實現
目錄分配和目錄管理算法的選擇對文件系統的效率、性能和可靠性有很大的影響
1、線性列表
最為簡單的目錄實現算法就是使用存儲文件名和數據塊指針的線性列表,這種方法編程簡單但是運行時較為費時
要創建新文件,必須首先搜索目錄以確定沒有同樣名稱的文件存在,接着,在目錄后增加一個新條目,要刪除文件時,根據給定文件名搜索目錄,接着釋放分配給他的空間,如果需要重用目錄條目,可以有許多辦法,可以將目錄條目標記為不再使用或者可以將它加到空閑目錄條目上
2、哈希表
用於文件目錄的另一個數據結構就是哈希表,采用這種方法時,處理使用線性列表存儲目錄條目,還使用了哈希數據結構。哈希表根據文件名得到一個值,並返回一個指向線性列表中元素的指針,大大減小了目錄搜索時間
哈希表的最大困難就是其通常固定的大小和哈希函數對大小的依賴性
2.3文件實現
1、文件分配方式
文件分配對應於文件的物理結構,是指如何為文件分配磁盤塊。常用的磁盤空間分配方式有三種:連續分配、鏈接分配和索引分配。有的系統對三種方式都支持,但是更普遍的是一個系統只提供一種方法支持
1)連續分配
連續分配方法要求每個文件在磁盤上占有一組連續的塊。磁盤地址定義了磁盤上的一個線性排序,這種排序使作業訪問磁盤時需要的尋道數和尋道時間最小
文件的連續分配可以用第一塊的磁盤地址和連續塊的數量來定義。如果文件有 n塊長並從位置 b開始,那么該文件將占 b,b + 1,b + 2,…,b + n - 1
一個文件的目錄條目包括開始塊的地址和該文件所分配區域的長度
連續分配支持順序訪問和直接訪問
優點:實現簡單、存取速度快
缺點:
- 文件長度不宜動態增加,因為一個文件末尾后的盤塊可能已經分配給其他文件,一旦需要增加就需要大量移動盤塊
- 反復增刪文件后會產生外部碎片(與內存管理分配方式中的碎片相似),並且很難確定一個文件需要的空間大小,因而只適用於長度固定的文件。
2)鏈接分配
鏈接分配解決了連續分配的碎片和文件大小問題
采用鏈接分配,每個文件對應一個磁盤塊的鏈表;磁盤塊分布在磁盤的任何地方,除最后一個盤塊外,每個盤塊都有指向下一個盤塊的指針,這些指針對用戶是透明的
目錄包括文件第一塊的指針和最后一塊的指針。創建新文件時,目錄中會增加一個新條目
鏈接分配中每個目錄項都有一個指向文件首塊的指針,該指針初始化為 NULL 以表示空文件,大小字段為0。寫文件會通過空閑空間管理系統找到空閑塊,將該塊鏈接到文件的尾部,以便於寫入;讀文件則通過塊到塊的指針進行讀操作
優點:
- 鏈接分配方式沒有外部碎片,空閑空間列表上的任何塊都可以用來滿足請求
- 創建文件時並不需要說明文件大小,只要有空閑塊文件就可以創建,也無需合並磁盤空間
缺點:
- 無法直接訪問盤塊,只能通過指針順序訪問文件,以及盤塊指針消耗了一定的存儲空間
- 鏈接分配方式的穩定性也是一個問題
- 系統在運行過程中由於軟件或者硬件錯誤導致鏈表中的指針丟失或損壞,會導致文件數據的丟失
3)索引分配
鏈接分配解決了連續分配的外部碎片和文件大小管理的問題,但是鏈接分配不能有效支持直接訪問(FAT除外),索引分配解決了這個問題
索引分配把每個文件的所有的盤塊號都集中在一起構成索引塊。每個文件都有其索引塊,這是一個磁盤塊地址的數組。索引塊的第 i 個條目指向文件的第 i 個塊,目錄條目包括索引塊的地址,要讀第 i 塊,通過索引塊的第 i 個條目的指針來查找和讀入所需的塊
創建文件時,索引塊的所有指針都設為空。當首次寫入第 i 塊時,先從空閑空間中取得一個塊,再將其地址寫到索引塊的第 i 個條目
優點:索引分配支持直接訪問,且沒有外部碎片問題
缺點:索引塊的分配增加了系統存儲空間的開銷
索引塊的大小是一個重要的問題,每個文件必須有一個索引塊,因此索引塊應盡可能小,但索引塊太小就無法支持大文件。可以采用以下機制來處理這個問題:
鏈接方案:一個索引塊通常為一個磁盤塊,因此本身能直接讀寫。為了處理大文件,可以將多個索引塊鏈接起來
多層索引:多層索引使第一層索引塊指向第二層的索引塊,第二層的索引塊再指向文件塊。這種方法根據最大文件的大小的要求,可以繼續到第三層或第四層。例如,4096B的塊,能在索引塊中存入1024個4B的指針。兩層索引允許1048576個數據塊,即允許最大文件為4G
混合索引:將多種索引分配方式相結合的分配方式。例如,系統既采用直接地址又采用單級索引分配方式或兩級索引分配方式
此外,訪問文件需要兩次訪問外存——首先要讀取索引塊的內容,然后在訪問具體的磁盤塊。因而降低了文件的存取速度,為了解決這一問題,通常將文件的索引塊讀入內存的緩沖區,以加快文件的訪問速度
2、文件存儲器空間管理
文件存儲管理空間的划分與初始化
一般來說,一個文件存儲在一個文件卷中。文件卷可以是物理盤的一部分,也可以是整個物理盤,支持超大型文件的文件卷也可以是有多個物理盤組成。
在一個文件卷中,文件數據信息的空間(文件區)和存放文件控制信息FCB的空間(目錄區)是分離的。由於存在很多種類的文件表示和存放格式,所以現代操作系統中一般都有很多不同的文件管理模塊,通過他們可以訪問不同格式的邏輯卷中的文件。邏輯卷在提供文件服務前,必須由對應的文件程序進行初始化,划分好目錄區和文件區,建立空閑空間管理表格及存放邏輯卷信息的超級塊。
文件存儲設備分成許多大小相同的物理塊,並以塊為單位交換信息,因此,文件存儲設備的管理實質上是對空閑塊的組織和管理,它包括空閑塊的組織,分配與回收等問題。
1)空閑表法
空閑表法屬於連續分配方式,它與內存的動態分配方式類似,為每個文件分配一塊連續的存儲空間
系統為外存上的所有空閑區建立一張空閑盤塊表,每個空閑區對應一個空閑表項,其中包括表項序號、該空閑區第一個盤塊號、該區的空閑盤塊數等信息。再將所有空閑區按其起始盤塊號遞增的次序排列
空閑盤區的分配與內存的動態分配類似,同樣是采用首次適應算法、循環首次適應算法等。例如,在系統為某新創建的文件分配空閑盤塊時,先順序的檢索空閑盤塊表的各表項,直至找到第一個其大小能滿足要求的空閑區,再將該盤區分配給用戶(進程),同時修改空閑盤塊表
系統在對用戶所釋放的存儲空間進行回收時,也采取類似於內存回收的方法,即要考慮回收區是否與空閑表中插入點的前區和后區相鄰接,對相鄰接者應予以合並
2)空閑鏈表法
將所有空閑盤區拉成一條空閑鏈,根據構成連所有的基本元素不同,可以把鏈表分成兩種形式:空閑盤塊鏈和空閑盤區鏈
①空閑盤塊鏈是將磁盤上所有空閑空間以盤塊為單位拉成一條鏈
當用戶因創建文件而請求分配存儲空間時,系統從鏈首開始,一次摘下適當數目的空閑盤塊分配給用戶。當用戶因刪除文件而釋放存儲空間時,系統將回收的盤塊一次並入空閑盤塊鏈的末尾
優點:分配和回收一個盤塊很簡單
缺點:為一個文件分配盤塊時,可能要重復多次操作
②空閑盤區鏈是將磁盤上所有空閑盤區(每個盤區可包含若干個盤塊)拉成一條鏈
在每個盤區上除含有用於指示下一個空閑盤區的指針外,還應有能指明本盤區大小(盤塊數)的信息。分配盤區的方法與內存的動態分區分配類似,通常采用首次適應算法。在回收盤區時,同樣也要將回收區域相鄰接的空閑盤區相合並
3)位視圖法
位視圖是利用二進制的移位來表示磁盤中的一個盤塊的使用情況
磁盤上所有的盤塊都有一個二進制位與之對應,當其值為0時,表示對應的盤塊空閑;當其值為1時,表示對應的盤塊已分配
盤塊的分配:
- 順序掃描位視圖,從中找出一個或一組其值為0的二進制位
- 將所找到的一個或一組二進制位,轉換成與之對應的盤塊號。假定找到的其值為0的二進制位,位於位視圖的第 i 行,第 j 列,則其相應的盤塊號硬干下式計算:b = n * ( i - 1) + j
- 修改位視圖,令 map[ i , j ] = 1
盤塊的回收:
- 將回收盤塊的盤塊號轉換成位視圖中的行號和列號
- 修改位視圖,令 map[ i , j ] = 0
4)成組鏈接法
空閑表法和空閑鏈表法都不適用於大型文件系統,因為會造成空閑表或空閑鏈表太大
UNIX系統中采用成組鏈接法,這種方法結合了空閑表和空閑鏈表法兩種方法,克服了表太大的缺點
思想:把順序的 n個空閑扇區地址保存在第一個空閑扇區內,其后一個空閑扇區則保存另一順序空閑扇區的地址,如此繼續直至所有空閑扇區均予以鏈接。系統只需要保存一個指向第一個空閑扇區的指針
表示文件存儲器空閑空間的位向量表或第一個成組鏈塊以及卷中的目錄區、文件區划分都需要存放在輔存儲器中,一般放在卷頭位置,UNIX系統中叫超級塊。在對卷中文件進行操作前,超級塊需要預先讀入系統空間的主存,並且經常保持主存超級塊與輔存卷中超級塊的一致性
三、磁盤組織與管理
3.1磁盤的結構
磁盤是表面塗有磁性物質的金屬或塑料構成的圓形盤片
通常一個稱為磁頭的導體線圈從磁盤中存取數據。在讀/寫操作期間,磁頭固定,磁盤在下面高速旋轉
磁盤盤面上的數據存儲在一組同心圓中,稱為磁道。每個磁道與磁頭一樣寬,一個盤面上有上千個磁道
磁道又划分為幾百個扇區,每個扇區固定存儲大小,一個扇區稱為一個盤塊
相鄰磁道及相鄰扇區間通過一定的間隙分隔開,以避免精度錯誤
由於扇區按固定圓心角划分,所以密度從外道向內道遞增,磁盤的存儲能力受限於最內道的最大記錄密度
磁盤安裝在一個磁盤驅動器中,它由磁頭臂、用於旋轉磁盤的主軸和用於數據輸入/輸出的電子設備組成。多個盤片垂直堆疊,組成磁盤組,每個盤面對應一個磁頭,所有磁頭固定在一起,與磁盤中心的距離相同且一起移動。所有盤片上相對位置相同的磁道組成柱面
扇區就是磁盤可尋址的最小存儲單位,磁盤地址用“柱面號 ● 盤面號 ● 扇區號(或塊號)”表示
磁盤按不同方式可以分為若干類型:
- 磁頭相對於盤片的徑向方向固定的稱為固定頭磁盤,每個磁道一個磁頭
- 磁頭可移動的稱為活動頭磁盤,磁頭臂可以來回伸縮定位磁道
- 磁盤永久固定在磁盤驅動器內的稱為固定盤磁盤
- 可移動和替換的稱為可換盤磁盤
3.2磁盤調度算法
一次磁盤讀寫操作的時間由尋找(尋道)時間、延遲時間和傳輸時間決定:
①尋找時間Ts
活動頭磁盤在讀寫信息前,將磁頭移動到指定磁道所需要的時間
這個時間除跨越 n條磁道的時間外,還包括啟動磁臂的時間 s,即:Ts = m * n + s
m為與磁盤驅動器速度有關的常數,約為0.2ms,磁臂的啟動時間約為2ms
②延遲時間Tr
磁頭定位到某一磁道的扇區(塊號)所需要的時間
設磁盤的旋轉速度為r,則:Tr = 1 / 2r
對於硬盤,典型的旋轉速度為5400r/m,相當於一周11.1m,則Tr為5.55ms;對於軟盤,其旋轉速度在300600r/m之間,則Tr為50100ms
③傳輸時間Tt
從磁盤讀出或向磁盤寫入數據所經歷的時間
這個時間取決於每次所讀/寫的字節數b和磁盤的旋轉速度:Tt = b / r * N
r為磁盤每秒鍾的轉數,N為一個磁道上的字節數
在磁盤存取時間的計算中,尋道時間與磁盤調度算法相關,而延遲時間和傳輸時間與磁盤旋轉速度線性相關,所以在硬件上,轉速是磁盤性能的一個非常重要的參數
1、先來先服務(FCFS)算法
FCFS算法根據進程請求訪問磁盤的先后順序進行調度處理
優點:
-
具有公平性
-
如果只有少量進程需要訪問,且大部分請求都是訪問簇聚的文件扇區,則會達到較好的性能
缺點:如果有大量進程競爭使用磁盤,那么該算法在性能上往往低於隨即調度
2、最短尋找時間優先(SSTF)算法
SSTF選擇調度處理的磁道是與當前磁頭所在磁道距離最近的磁道
優點:每次的尋找時間最短。當然總是選擇最小尋找時間並不能保證平均尋找時間最小,但是能提供比FCFS算法更好的性能
缺點:會產生飢餓現象
3、掃描(SCAN)算法
又稱電梯調度算法
SCAN算法在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求作為下一次服務的對象
SCAN算法對最掃描過的區域不公平,在訪問局部性方面不如 FCFS算法和 SSTF算法好
4、循環掃描(C-SCAN)算法
在掃面算法的基礎上規定磁頭單向移動來提供服務,回返時直接快速移動至起始端而不服務任何請求
SCAN算法偏向於處理接近最里或最外層磁道的訪問請求,所以使用C-SCAN算法來避免這個問題
采用 SCAN算法和 C-SCAN算法時磁頭總是嚴格地遵循從盤面的一端到另一端,顯然在實際使用時還可以改進,即磁頭移動只需要到達最遠端的一個請求即可返回,不需要到達磁盤端點
這種形式的 SCAN算法和 C-SCAN算法成為 LOOK和 C-LOOK調度。這是因為它們在朝一個給定方向移動前會查看是否有請求
3.3磁盤的管理
1、磁盤初始化
一個新的磁盤只是一個含有磁性記錄材料的空白盤
在磁盤能存儲數據之前,它必須分成扇區以便磁盤控制器能進行讀和寫操作,這個過程稱為低級初始化(物理分區)
低級初始化為磁盤的每個扇區采用特別的數據結構。每個扇區的數據結構通常由頭、數據區域和尾部組成,頭部和尾部包含一個初始化為空的目錄
2、引導塊
計算機啟動時需要運行一個初始化程序(自舉程序),它初始化 CPU、寄存器、設備控制器和內存等,接着啟動操作系統。為此,該自舉程序應找到磁盤上的操作系統內核,裝入內存,並轉到起始地址,從而開始操作系統的運行
自舉程序通常保存在 ROM中,為了避免改變自舉程序需要改變 ROM硬件的問題,只在 ROM中保留很小的自舉裝入程序,將完整功能的自舉程序保存在磁盤的啟動塊上。啟動塊位於磁盤的固定位,擁有啟動分區的磁盤稱為自動磁盤或者系統磁盤
3、壞塊
由於磁盤有移動部件且容錯能力弱,所以容易導致一個或多個扇區損壞。部分磁盤甚至從出廠時就有壞扇區
根據所使用的磁盤和控制器,對這些塊有多種處理方式:
-
對於簡單磁盤,如電子集成驅動器,壞扇區可手工處理,如 MS-DOS的 Format命令執行邏輯格式化時便會掃描磁盤以檢查壞扇區,壞扇區在 FAT表會標明,因此程序不會使用
-
對於復雜磁盤,如小型計算機系統接口,其控制器維護一個磁盤壞塊鏈表,該鏈表在出廠前進行低級格式化時就初始化,並在磁盤的整個使用過程中不斷更新。低級格式化將一些塊保留作為備用,對操作系統透明。控制器可以用塊來邏輯地替代壞塊,這種方案稱為扇區備用
對壞塊的處實質上就是用某種機制使系統不去使用壞塊。壞塊屬於硬件故障,操作系統無法修復壞塊