磁碟排程演算法詳解

2020-07-16 10:04:36
作業系統的職責之一是有效使用硬體。對於磁碟驅動器,滿足這個要求具有較快的存取速度和較寬的磁碟頻寬。

對於磁碟,存取時間包括兩個主要部分:
  • 尋道時間:是磁臂移動磁頭到包含目標磁區的柱面的時間;
  • 旋轉延遲:是磁碟旋轉目標磁區到磁頭下的額外時間;

磁碟頻寬是傳輸位元組的總數除以從服務請求開始到最後傳遞結束時的總時間。通過管理磁碟 I/O 請求的處理次序,可以改善存取時間和頻寬。

每當進程需要進行磁碟 I/O 操作時,它就向作業系統發出一個系統呼叫。這個請求需要一些資訊:
  • 這個操作是輸入還是輸出;
  • 傳輸的磁碟地址是什麼;
  • 傳輸的記憶體地址是什麼;
  • 傳輸的磁區數是多少;

如果所需的磁碟驅動器和控制器空閒,則立即處理請求。如果磁碟驅動器或控制器忙,則任何新的服務請求都會新增磁碟驅動器的待處理請求佇列。對於具有多個進程的一個多道程式系統,磁碟佇列可能有多個待處理的請求。因此,當一個請求完成時,作業系統可以選擇哪個待處理的請求服務。

作業系統如何進行選擇?有多個磁碟排程演算法可以使用。

FCFS 排程

磁碟排程的最簡單形式當然是先來先服務(FCFS)演算法。雖然這種演算法比較公平,但是它通常並不提供最快的服務。

例如,考慮一個磁碟佇列,其 I/O 請求塊的柱面的順序如下:

98,183,37,122,14,124,65,67

如果磁頭開始位於柱面 53,那麼它首先從 53 移到 98,接著再到 183、37、122、14、124、65,最後到 67,磁頭移動柱面的總數為 640。這種排程如圖 1 所示。

FCFS磁盤調度
圖 1 FCFS 磁碟排程