2016-07-25 49 views
1

我知道linux內核使用驅動程序與硬盤設備進行通信,並且設備上有固件代碼來爲驅動程序的請求提供服務。我的問題是:sata硬盤驅動器暴露的是什麼類型的api?

  1. 什麼樣的功能(即api)固件暴露?例如,它是否僅暴露內核管理的地址空間,還是在linux內核中存在一些處理某些與硬盤相關的物理內容的代碼(即軌道/扇區/盤片上的數據佈局等)。 )

  2. 內核調度磁盤的磁頭移動,還是固件?

  3. 是否有硬盤設備暴露的apis標準規格?

回答

4

據我所知,Linux內核採用了驅動程序與硬盤設備

這對所有外設真正的溝通。

有設備上的固件代碼以服務駕駛員的請求

現代硬盤(IDE以來的問世),具有集成的磁盤控制器。
固件」本身不會做任何事情,並且是一個含糊的描述。 I.E.什麼是執行此「固件」

  1. 固件顯示哪種功能(即api)?例如,它是否僅暴露內核管理的地址空間,還是在linux內核中存在一些處理某些與硬盤相關的物理內容的代碼(即軌道/扇區/盤片上的數據佈局等)。 )

SATA驅動器使用ATA Packet Interface, ATAPI

舊的SMD和ST506驅動器接口使用圓柱體,頭部和扇區(又名CHS)尋址。這種驅動器的磁盤控制器通常在主機端保持類似的接口,因此操作系統有義務知道驅動器(物理)幾何體。操作系統會嘗試通過將分區對齊到柱面來優化性能,並通過按柱面地址對請求進行排序來最小化查找/訪問時間。

雖然磁盤控制器通常需要CHS尋址,但操作系統的高層將使用順序的邏輯扇區地址。只要驅動器幾何形狀已知,邏輯扇區地址到圓柱體,頭部,&扇區地址之間的轉換就很簡單。

磁盤控制器主機端的SCSI和IDE(ATA)接口提供邏輯塊尋址(塊=扇區)而不是CHS尋址。操作系統不再需要了解驅動器的物理幾何結構,並且磁盤控制器能夠使用邏輯尋址的抽象來使用區位記錄來實現每個扇區更一致的面密度。

因此,操作系統應該只發出一個邏輯塊地址的讀或寫塊操作,而不要過於關心驅動器的幾何形狀。
例如,通過ATA接口不再可以使用低級格式,並且由於區位記錄,驅動器的幾何體是可變的(主機未知)。壞扇區管理通常由集成控制器單獨控制。 但是,您仍然可以在各種操作系統中找到一些CHS優化的殘留(例如,驅動器分區與「柱面」對齊)。

  • 是否內核安排磁盤的磁頭移動,或者是它的固件?
  • 這是可能的搜索操作,但更可能的操作系統使用R/W操作與自動搜索或LBA R/W操作。
    但是,對於LBA和具有大容量緩存和區位記錄的現代HDD而言,這種查找操作不是必需的,並且可能適得其反。

    最終磁盤控制器執行實際尋道。

    1. 是否有硬盤設備暴露的apis的標準規格?

    ATA/ATAPI是公開發布的說明(雖然它似乎是一個「工作草案」狀態20年)。
    參見http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf

    摘要 該標準規定了用於主機系統和 存儲設備之間進行通信的AT附件命令集。這爲系統製造商,系統集成商,軟件供應商和存儲設備供應商提供了一套通用的命令組。 AT附件命令集包括由通常稱爲ATAPI設備的設備實現的PACKET功能集 。該標準保持與ATA/ATAPI命令集-2(ACS-2)的高度兼容性。

    +0

    感謝您的全面回答。是否可以查詢硬盤驅動器的位置?我想知道如何自動尋找移動頭 –

    +0

    *「是否有可能查詢硬盤的頭部的位置?」 - 對於典型的控制器,沒有。此外,由於真實的驅動幾何形狀也是未知的,所以氣缸數量效用不大。 *「我想知道自動尋找如何移動頭部」* - 我正在考慮使用SMD控制器(爲此我執行了固件)。 WD控制器芯片和ATA接口不使用該術語:讀/寫命令將始終執行任何必要的查找。僅供參考,較新的ATA規格(如上所述)已棄用「seek」命令並使用CHS尋址;兩者都比較舊(例如1995年)規格。 – sawdust