磁盤的結構
磁盤, 磁道, 扇區
磁盤的表面由一些磁性物質組成, 可以用這些磁性物質來記錄二進制數據
磁道 : 磁盤的盤面被划分成一個個磁道, 一個圈就是一個磁道
扇區 : 每一個磁道被划分成一個個扇區, 每個扇區就是一個個 " 數據塊 ", 各個扇區存放的數據量相同
( 最內側磁道上的扇區面積最小, 因此數據密度最大 )
數據的讀寫
盤面, 柱面
如何根據地址讀取一個塊 :
磁盤的分類
根據磁頭是否可以移動 :
-
活動頭磁盤
-
固定頭磁盤
根據盤片是否可以更換 :
- 固定盤磁盤
- 可換盤磁盤
磁盤調度算法 ( 尋道時間 )
一次讀 / 寫操作所需要的時間
尋找時間 (尋道時間)
在讀 / 寫數據之前, 把磁頭移動到指定磁道所花的時間
- 啟動磁頭臂的時間
- 移動磁頭的時間
延遲時間
通過旋轉磁盤, 使磁頭定位到目標扇區所需要的時間
傳輸時間
由磁盤讀出 或 向磁盤寫入數據所需要的時間
磁盤調度算法會直接影響尋道時間
先來先服務算法 FCFS
根據進程請求訪問磁盤的先后順序進行調度
最短尋找時間優先 SSTF
SSTF算法會優先處理的磁道是離當前磁頭最近的磁道, 可以保證每一次的尋道時間最短, 但是並不能保證總體尋道時間最短 ( 貪心 )
- 可能產生 飢餓 現象
掃描算法 SCAN ( 電梯算法 )
SSTF算法產生飢餓的原因 : 磁頭可能會在一個小區域內來回移動
SCAN :
只有磁頭移動到最外側磁道的時候才能往內移動, 移動到最內側磁道的時候才能往外移動
LOOK調度算法 ( SCAN的改進 )
在掃描算法的基礎上增加 :
如果在磁頭移動方向上已經沒有別的請求, 就可以立即改變磁頭移動方向
循環掃描算法 C-SCAN
SCAN算法對於各個位置磁道的響應頻率不平均, C-SCAN算法就是為了解決這個問題, 規定只有磁頭朝特定方向移動時才處理磁道訪問請求, 而返回時 直接快速移動至起始端而不處理任何情況
C-LOOK 調度算法
C-LOOK = C-SCAN + LOOK
總結
減少磁盤 ( 延遲時間 ) 的辦法
延遲時間 : 把目標扇區轉動到磁頭下所花的時間
由於磁頭讀入一個扇區數據后需要一小段時間處理, 如果邏輯上相鄰的扇區在物理上也相鄰, 則讀入幾個連續的邏輯扇區, 可能需要很長的 " 延遲時間 ".
交替編號
采用交替編號的策略, 讓邏輯上相鄰的扇區在物理上有一定的間隔, 可以使讀取連續的邏輯扇區所需要的延遲時間更小
錯位命名
將盤面之間的扇區不同樣按順序編號
而是使用0號盤面的1號扇區下是1號盤面的4號扇區....這樣的方式
這樣使得讀取完磁盤塊之后還有一段時間處理, 從而減少了延遲時間
磁盤地址結構的設計
采用 ( 柱面號, 盤面號, 扇區號 )--- 三維, 二維, 一維
磁盤管理
磁盤初始化
- 進行低級格式化 ( 物理格式化 ), 將磁盤的各個磁道划分為扇區, 一個扇區通常可分為頭, 數據區, 尾三個部分. 管理扇區所需要的各種數據結構 ( 校驗碼等 )一般存放在頭, 尾兩個部分
- 將磁盤分區 , 每個分區由若干柱面組成
- 進行邏輯格式化, 創建文件系統. 包括創建文件系統的根目錄, 初始化
磁盤的引導塊
計算機開機時需要進行一系列初始化的工作, 這些初始化工作是通過執行初始化程序 (自舉程序) 完成的.
初始化程序 ( 自舉程序 ) 如果直接放在ROM中, 會很不方便, 因為ROM中的數據無法更改, 解決方法 :
-
ROM中只存放很小的 " 自舉裝入程序 "
-
開機時計算機先運行 " 自舉裝入程序 ", 通過執行該程序就可以找到引導塊, 並將完整的" 自舉程序 " 讀入內存, 完成初始化
壞塊的管理
對於簡單的磁盤
,可以在邏輯格式化時, 對磁盤進行壞塊檢查, 表明哪些扇區是壞扇區. 這種處理方式中, 壞塊對操作系統不透明
對於復雜的磁盤
, 磁盤控制器 ( 磁盤設備內部的一個硬件部件 ) 會維護一個壞塊鏈表. 在磁盤出廠前進行低級格式化時就將壞塊鏈進行初始化. 會保留一些 " 備用扇區 " 用於替換壞塊. 這種方案稱為扇區備用 . 這種處理方式中, 壞塊對操作系統透明.