儲存篇(1)

渣渣強發表於2018-07-07

計算機體系

大學學過微機原理,裡面介紹一個計算機最小組成單元-cpu,記憶體,磁碟。相應的這三者也構成所謂的圖靈機,即有限狀態機。 在主機主機板中還包含了南北橋晶片,前者的設計意圖是接入低速的io裝置,後者是建立cpu和記憶體南橋的通道。

cpu和北橋連線是匯流排為系統匯流排,匯流排頻率為cpu從外部存取資料的資料傳輸速率,cpu自身的震盪頻率為cpu計算的頻率。 記憶體和北橋連線的匯流排為記憶體匯流排。北橋的速率高於外設的傳輸速率,所以在io匯流排連線北橋中引入南橋,其整合了很多外設的控制器,比如磁碟控制器,usb控制器等。

io匯流排

對於io匯流排,其並非只有一條匯流排,而是分為地址匯流排,控制匯流排,資料匯流排。

cpu與硬碟裝置的互動

  1. 每個io裝置在啟動後會在記憶體中對映一個或者多個地址,這個地址8位長,稱為io埠。針對這個地址的資料,統統會被北橋晶片重定向到匯流排實際裝置上。
  2. 首先cpu會把io地址放到系統匯流排上,北橋收到之後,會等待cpu傳送第一個針對外設的指令。然後cpu傳送如下三條指令 1) 指令包含當前指令是讀或者寫,而且包含其他一些選項,如是否中斷或者開啟磁碟快取 2) 傳送需要讀取的硬碟邏輯塊號 3) 給出讀取出來的記憶體應該存放到記憶體的哪個地址上。
  3. 這三條指令會依次傳送給io匯流排上的磁碟控制器來執行。比如第二條指令,磁碟控制器收到後會進行磁碟實際扇區和邏輯塊號的查詢,然後定址,讀取,第三條指令cpu給出資料應該放在記憶體的地址,磁碟控制器讀取出資料然後通過DMA技術直接在記憶體進行定址並執行寫入。

注:cpu傳送的指令是到南橋晶片上整合的控制器,控制器對磁碟發出一系列指令分為兩個體系,一個是ATA指令集,一種是SCSI指令集,scsi指令集比ata指令集高效。

儲存分類

一般我們錄音帶這中儲存介質是沒辦法隨機定位的,這種儲存稱為流式儲存,對於硬碟這種分扇區,可以定位到扇區位置的儲存方式稱為塊式儲存。因此磁帶這種儲存方式只能用於資料容災備份。

普通磁碟的構成

普通磁碟的資料組織一般由多個雙邊盤面,每個盤面有多條磁碟,每個同心同磁軌不是連續記錄資料,而是劃分為一段段的圓弧,根據角速度一致,外圈的資料讀取速度比內圈的快。每段圓弧稱為一個扇區,這個是io讀寫的最小單位。 同一個磁軌下所有盤面構成一個柱面,磁頭讀寫首先從同一個柱面內從0磁頭開始進行操作,依次向下在不同盤面進行操作,寫完後再轉移到下一個柱面。(減少尋軌,電訊號切換遠快於機械切換)

扇區:每個扇區可以存放512b資料和一些其他資訊,扇區一般有兩個主要部分,一個是儲存資料地址的識別符號,另一個是儲存資料的資料段。前期扇區的頭標包括組成扇區三級地址的三個數字(扇區所在的磁軌,扇區所在的柱面,扇區所在位置。稱為CHS地址),後面換成LBA編址方式,lba編址不再區分柱面磁軌這些概念,而是提供一個線性的地址,然後這些物理資訊由磁碟本身儲存。這個關係儲存在磁碟控制器電路的ROM晶片中,磁碟初始化時載入快取中以便查詢。扇區頭標中包含一個欄位表明扇區是否能可靠儲存資料,並且扇區頭標以迴圈冗餘crc值作為結束。

扇區編號和交叉因子

最簡單的扇區編號方式是採用線性順序編號,但這個方法存在一個問題,但扇區在處理一個扇區資料期間,可能由於磁頭轉得太快,直接就進入下一個扇區頭標部分,這個時候磁碟就需要空轉一週才能重新寫入。針對這個情況,ibm一位工程師就採取一個交叉因子的方式進行編號,比如3:1代表磁碟第一個扇區為1號,跳過兩個扇區到第四個扇區為2號。

磁碟io單位

對於磁碟而言,最小寫入單位是一個扇區,對於作業系統的page,檔案系統的block一般是4KB大小,io對於越上層而已越清晰簡潔,而越底層io越複雜。比如檔案系統的io比卷管理程式的io簡單,卷管理程式對應到磁碟控制器更簡單。

磁碟的簡單描述

對於一個小白而已,磁碟可以看成一張空白的紙,我們通過位置資訊可以找到我們需要的寫入或者讀取的位置,而對於這個定址即類似上面LBA定址方式。當尋找到對應位置後,我們需要向磁碟傳送需要寫入的資料,針對這個問題,人們抽象出一套介面系統,專門用於計算機和其外設互動資料,稱為scsi介面協議。

磁碟佇列技術

想象一個場景,當多個io下發到磁碟中,a需要讀取中間的資料,b要讀取最左邊的資料,c要讀取最右邊的資料。假設我們按照先進先服務的原則,這個時候顯然效率並不是最好的,所以這個就涉及一個優化問題,如何使得磁碟的執行序列最優。當然這個問題並不能只在磁碟驅動器上考慮,還必須在磁碟控制器上考慮,因為磁碟控制器預設行為是讀取驅動器上的快取,如果資料亂序後就會引發很多問題。(磁碟控制器和磁碟驅動器的步伐不是一致,驅動器只能預先讀取資料存在其快取中,等待控制器去主動讀取)

  1. FCFS(first come first server)
  2. sstf(shortest seek time first)會造成餓死問題,讀取與磁碟最短距離的請求資料。
  3. scan(迴旋掃描模式)電梯模型,單邊掃描後再折返
  4. c-scan(單邊掃描)
  5. look(智慧監察掃描模式)這個方式和單邊的區別在於不需要掃描到終點,而是完成最兩端io即折返

相關文章