儲存篇(2)

渣渣強發表於2018-07-07

磁碟介面技術

  • 用於ATA指令系統的IDE介面
  • 用於ATA指令系統的SATA介面
  • 用於SCSI指令系統的並行SCSI介面
  • 用於SCSI指令系統的序列SCSI介面
  • 用於SCSI指令系統的IBM專用序列SCSI介面
  • 用於SCSI指令系統並承載FabreChannel協議的序列FC介面

scsi和ata是目前現行的兩大主機和外設通訊的協議規範,它們有各自的物理介面定義。對於ata協議對應就是ide介面,scsi協議對應的是scsi介面。scsi介面可以有8個到16個scsi裝置接入到一個scsi通道上,一般接入的機器必須擁有scsi控制卡。scsi控制卡上一個相當於cpu的晶片,它對scsi裝置進行控制,能處理大部分的工作,減少cpu的負擔。

scsi協議

對於一個完整的資料傳輸協議,必然是能夠跨越osi7層協議。

  1. 鏈路層,scsi協議中利用crc校驗碼來檢驗每個指令和資料幀的完整性。
  2. 網路層,一條scsi匯流排上最多允許接入16個裝置,其中scsi控制器佔用一個節點,scsi id恆為7,在這16個id中,7具有最高的優先順序,當7需要發起傳輸,其他id需要讓出匯流排的使用權。有匯流排的地方就會涉及到匯流排仲裁。一般普通主機板不會有scsi控制器,要想接入scsi磁碟,需要加入scsi卡,scsi卡一邊接入主機pci匯流排,另一端用一個scsi控制器接入scsi匯流排,卡上有主機的cpu,通過執行rom中的程式碼控制整個scsi卡的工作,scsi卡將scsi匯流排上的所有裝置經過pci匯流排傳遞給記憶體中的scsi卡的驅動程式,這樣cpu就會知道scsi匯流排上的所有裝置。當scsi卡不止一個scsi控制器,則是一個多通道的scsi卡。

scsi定址機制和幾個階段

(1) 空閒階段
匯流排一開始處於一種空閒狀態,沒有節點發起通訊,匯流排空閒時,bsy和sel這兩條控制訊號線的狀態都是false。
(2) 仲裁階段
節點通過8條或者16條資料匯流排上提升主機對應的那條線的電位申請匯流排的使用權,提升主機id對應線路電位同時提升bsy電位,但多個節點發起仲裁,其根據匯流排上的訊號情況,如果非高優先順序則撤銷自身訊號,如果某節點仲裁獲勝,則獲取匯流排的使用權,然後將sel訊號線提升電位。scsi匯流排的定址方式按控制器-通道-scsi id-lun id來定址。
(3) 選擇階段 仲裁階段完成後,獲勝節點會將bsy和sel訊號線置位,然後將8到16條資料匯流排上對應主機id的線路和目標id線路電位提升,這樣目的節點可以感知到自己線路有訊號,做好接受準備。 (一般從匯流排上一個硬碟複製資料到另外一個硬碟的過程是cpu將資料傳送給控制器,控制器再複製到記憶體,經過cpu運算後再次傳送給控制器,控制器再寫入另外一塊硬碟。因為對於硬碟而已,本身沒有檔案這個概念,所以必須返回到作業系統層面才可以感知)

scsi傳輸層

scsi傳輸層是提供端到端的保障機制,這個是保障通訊雙方。
傳送方獲取匯流排仲裁後,會傳送一個scsi command寫的命令幀,其中包含了lun以及lba地址段,接收端接受後,就知道對方準備傳送資料,接收方準備好後,向發起方傳送一個xfer_rdy幀,表示準備好,隨機可以傳送。
傳送方收到xfer_RDY幀後,立即傳送資料,每傳送一幀,接收方就回應一個xfer_rdy,最後接收方傳送一個resonse幀表示這條scsi命令執行完畢。

磁碟控制器

磁碟的介面包括物理介面,就是磁碟要接入磁碟控制器所需要的介面,除了物理介面規範外,還定義一套指令系統,指令集定義怎麼向磁碟傳送資料和讀取資料以及控制其他行為,比如SCSI和ATA指令。指令的內容是由執行在作業系統核心的驅動程式生產,而物理的連線則是磁碟控制器負責的,磁碟控制器負責底層匯流排初始化,仲裁等過程以及指令傳輸過程,指令傳輸狀態機,重傳,ack確認等,將這些太過底層的機制過濾後,向驅動程式提供一個簡潔的介面。

磁碟驅動器

磁碟控制器和磁碟驅動器是兩個不同的東西,對於cpu而言,其操作控制器就可以,cpu通過執行磁碟控制器的驅動程式,生產指令傳送給磁碟控制器,磁碟控制器收到這些cdb後,會做一定程度的翻譯對映工作,生成最底層磁碟可接受的純scsi指令,然後通過底層的物理操作,匯流排仲裁,編碼,再線上纜上將指令傳遞給對應的磁碟。

磁碟控制器的驅動程式

機器剛通電,還沒有載入作業系統,那麼作業系統是如何載入呢,所以在系統bios中存放初始化系統所需要的基本程式碼,bios初始化中有一步就是去執行磁碟控制器的ooptional rom,該rom包含了該控制器最原始,可在主bios下執行的驅動程式,主bios去載入並執行rom,從而載入了驅動程式,並可以與控制器互動。最後bios通過驅動程式使得cpu可以傳送對應的讀指令,提取磁碟0磁軌第一個扇區的程式碼並載入到記憶體中,從而載入os。

儲存篇(2)

相關文章