存儲篇(1)

計算機體系

大學學過微機原理,裏面介紹一個計算機最小組成單元-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指令集高效。設計

存儲分類

通常咱們錄音帶這中存儲介質是沒辦法隨機定位的,這種存儲稱爲流式存儲,對於硬盤這種分扇區,能夠定位到扇區位置的存儲方式稱爲塊式存儲。所以磁帶這種存儲方式只能用於數據容災備份。server

普通磁盤的構成

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

扇區:每一個扇區能夠存放512b數據和一些其餘信息,扇區通常有兩個主要部分,一個是存儲數據地址的標識符,另外一個是存儲數據的數據段。前期扇區的頭標包括組成扇區三級地址的三個數字(扇區所在的磁道,扇區所在的柱面,扇區所在位置。稱爲CHS地址),後面換成LBA編址方式,lba編址再也不區分柱面磁道這些概念,而是提供一個線性的地址,而後這些物理信息由磁盤自己保存。這個關係保存在磁盤控制器電路的ROM芯片中,磁盤初始化時載入緩存中以便查詢。扇區頭標中包含一個字段代表扇區是否能可靠存儲數據,而且扇區頭標以循環冗餘crc值做爲結束。隊列

扇區編號和交叉因子

最簡單的扇區編號方式是採用線性順序編號,但這個方法存在一個問題,但扇區在處理一個扇區數據期間,可能因爲磁頭轉得太快,直接就進入下一個扇區頭標部分,這個時候磁盤就須要空轉一週才能從新寫入。針對這個狀況,ibm一位工程師就採起一個交叉因子的方式進行編號,好比3:1表明磁盤第一個扇區爲1號,跳過兩個扇區到第四個扇區爲2號。內存

磁盤io單位

對於磁盤而言,最小寫入單位是一個扇區,對於操做系統的page,文件系統的block通常是4KB大小,io對於越上層而已越清晰簡潔,而越底層io越複雜。好比文件系統的io比卷管理程序的io簡單,卷管理程序對應到磁盤控制器更簡單。io

磁盤的簡單描述

對於一個小白而已,磁盤能夠當作一張空白的紙,咱們經過位置信息能夠找到咱們須要的寫入或者讀取的位置,而對於這個尋址即相似上面LBA尋址方式。當尋找到對應位置後,咱們須要向磁盤發送須要寫入的數據,針對這個問題,人們抽象出一套接口系統,專門用於計算機和其外設交互數據,稱爲scsi接口協議。class

磁盤隊列技術

想象一個場景,當多個io下發到磁盤中,a須要讀取中間的數據,b要讀取最左邊的數據,c要讀取最右邊的數據。假設咱們按照先進先服務的原則,這個時候顯然效率並非最好的,因此這個就涉及一個優化問題,如何使得磁盤的執行序列最優。固然這個問題並不能只在磁盤驅動器上考慮,還必須在磁盤控制器上考慮,由於磁盤控制器默認行爲是讀取驅動器上的緩存,若是數據亂序後就會引起不少問題。(磁盤控制器和磁盤驅動器的步伐不是一致,驅動器只能預先讀取數據存在其緩存中,等待控制器去主動讀取)

  1. FCFS(first come first server)
  2. sstf(shortest seek time first)會形成餓死問題,讀取與磁盤最短距離的請求數據。
  3. scan(迴旋掃描模式)電梯模型,單邊掃描後再折返
  4. c-scan(單邊掃描)
  5. look(智能監察掃描模式)這個方式和單邊的區別在於不須要掃描到終點,而是完成最兩端io即折返
相關文章
相關標籤/搜索