天天看點

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

本文轉載自:https://blog.csdn.net/hguisu/article/details/7408047

硬碟的種類主要是SCSI 、IDE 、以及現在流行的SATA等;任何一種硬碟的生産都要一定的标準;随着相應的标準的更新,硬碟生産技術也在更新;比如 SCSI标準已經經曆了SCSI-1 、SCSI-2、SCSI-3;其中目前咱們經常在伺服器網站看到的 Ultral-160就是基于SCSI-3标準的;IDE 遵循的是ATA标準,而目前流行的SATA,是ATA标準的更新版本;IDE是并口裝置,而SATA是序列槽,SATA的發展目的是替換IDE;

     我們知道資訊存儲在硬碟裡,把它拆開也看不見裡面有任何東西,隻有些盤片。假設,你用顯微鏡把盤片放大,會看見盤片表面凹凸不平,凸起的地方被磁化,凹的地方是沒有被磁化;凸起的地方代表數字1(磁化為1),凹的地方代表數字0。是以硬碟可以以二進制來存儲表示文字、圖檔等資訊。

1、硬碟的組成

        硬碟大家一定不會陌生,我們可以把它比喻成是我們電腦儲存資料和資訊的大倉庫。一般說來,無論哪種硬碟,都是由盤片、磁頭、盤片主軸、控制電機、磁頭控制器、資料轉換器、接口、緩存等幾個部份組成。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算
硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

                        平面圖:                                          立體圖

        所有的盤片都固定在一個旋轉軸上,這個軸即盤片主軸。而所有盤片之間是絕對平行的,在每個盤片的存儲面上都有一個磁頭,磁頭與盤片之間的距離比頭發 絲的直徑還小。所有的磁頭連在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。磁頭可沿盤片的半徑方向動作,(實際是斜切向運動),每個磁頭同一時刻也必須是同軸的,即從正上方向下看,所有磁頭任何時候都是重疊的(不過目前已經有多磁頭獨立技術,可不受此限制)。而盤片以每分鐘數千轉到上萬轉的速度在高速旋轉,這樣磁頭就能對盤片上的指定位置進行資料的讀寫操作。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

由于硬碟是高精密裝置,塵埃是其大敵,是以必須完全密封。

 2、硬碟的工作原理

硬碟在邏輯上被劃分為磁道、柱面以及扇區.

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

硬碟的每個盤片的每個面都有一個讀寫磁頭,磁盤盤面區域的劃分如圖所示。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算
硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

        磁頭靠近主軸接觸的表面,即線速度最小的地方,是一個特殊的區域,它不存放任何資料,稱為啟停區或着陸區(LandingZone),啟停區外就是資料區。在最外圈,離主軸最遠的地方是“0”磁道,硬碟資料的存放就是從最外圈開始的。那麼,磁頭是如何找到“0”磁道的位置的 呢?在硬碟中還有一個叫“0”磁道檢測器的構件,它是用來完成硬碟的初始定位。“0”磁道是如此的重要,以緻很多硬碟僅僅因為“0”磁道損壞就報廢,這是 非常可惜的。

        早期的硬碟在每次關機之前需要運作一個被稱為Parking的程式,其作用是讓磁頭回到啟停區。現代硬碟在設計上已摒棄了這個雖不複雜卻很讓人不愉快的小缺陷。硬碟不工作時,磁頭停留在啟停區,當需要從硬碟讀寫資料時,磁盤開始旋轉。旋轉速度達到額定的高速時,磁頭就會因盤片旋轉産生的氣流而擡起, 這時磁頭才向盤片存放資料的區域移動。

       盤片旋轉産生的氣流相當強,足以使磁頭托起,并與盤面保持一個微小的距離。這個距離越小,磁頭讀寫資料的靈敏度就越高,當然對硬碟各部件的要求也越 高。早期設計的磁盤驅動器使磁頭保持在盤面上方幾微米處飛行。稍後一些設計使磁頭在盤面上的飛行高度降到約0.1μm~0.5μm,現在的水準已經達到 0.005μm~0.01μm,這隻是人類頭發直徑的千分之一。

        氣流既能使磁頭脫離開盤面,又能使它保持在離盤面足夠近的地方,非常緊密地跟随着磁盤表面呈起伏運動,使磁頭飛行處于嚴格受控狀态。磁頭必須飛行在盤面上方,而不是接觸盤面,這種位置可避免擦傷磁性塗層,而更重要的是不讓磁性塗層損傷磁頭。

但是,磁頭也不能離盤面太遠,否則,就不能使盤面達到足夠強的磁化,難以讀出盤上的磁化翻轉(磁極轉換形式,是磁盤上實際記錄資料的方式)。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

        硬碟驅動器磁頭的飛行懸浮高度低、速度快,一旦有小的塵埃進入硬碟密封腔内,或者一旦磁頭與盤體發生碰撞,就可能造成資料丢失,形成壞塊,甚至造成 磁頭和盤體的損壞。是以,硬碟系統的密封一定要可靠,在非專業條件下絕對不能開啟硬碟密封腔,否則,灰塵進入後會加速硬碟的損壞。另外,硬碟驅動器磁頭的尋道伺服電機多采用音圈式旋轉或直線運動步進電機,在伺服跟蹤的調節下精确地跟蹤盤片的磁道,是以,硬碟工作時不要有沖擊碰撞,搬動時要小心輕放。

        這種硬碟就是采用溫徹斯特(Winchester)技術制造的硬碟,是以也被稱為溫盤,目前絕大多數硬碟都采用此技術。

3、盤面、磁道、柱面和扇區

硬碟的讀寫是和扇區有着緊密關系的。在說扇區和讀寫原理之前先說一下和扇區相關的”盤面”、“磁道”、和“柱面”。        

1. 盤面

      硬碟的盤片一般用鋁合金材料做基片,高速硬碟也可能用玻璃做基片。硬碟的每一個盤片都有兩個盤面(Side),即上、下盤面,一般每個盤面都會利用,都可以存儲資料,成為有效盤片,也有極個别的硬碟盤面數為單數。每一個這樣的有效盤面都有一個盤面号,按順序從上至下從“0”開始依次編号。在硬碟系統中,盤面号又叫磁頭号,因為每一個有效盤面都有一個對應的讀寫磁頭。硬碟的盤片組在2~14片不等,通常有2~3個盤片,故盤面号(磁頭号)為0~3或 0~5。

2. 磁道

         磁盤在格式化時被劃分成許多同心圓,這些同心圓軌迹叫做磁道(Track)。磁道從外向内從0開始順序編号。硬碟的每一個盤面有300~1 024個磁道,新式大容量硬碟每面的磁道數更多。資訊以脈沖串的形式記錄在這些軌迹中,這些同心圓不是連續記錄資料,而是被劃分成一段段的圓弧,這些圓弧的角速度一樣。由于徑向長度不一樣,是以,線速度也不一樣,外圈的線速度較内圈的線速度大,即同樣的轉速下,外圈在同樣時間段裡,劃過的圓弧長度要比内圈 劃過的圓弧長度大。每段圓弧叫做一個扇區,扇區從“1”開始編号,每個扇區中的資料作為一個單元同時讀出或寫入。一個标準的3.5寸硬碟盤面通常有幾百到幾千條磁道。磁道是“看”不見的,隻是盤面上以特殊形式磁化了的一些磁化區,在磁盤格式化時就已規劃完畢。

3. 柱面

        所有盤面上的同一磁道構成一個圓柱,通常稱做柱面(Cylinder),每個圓柱上的磁頭由上而下從“0”開始編号。資料的讀/寫按柱面進行,即磁 頭讀/寫資料時首先在同一柱面内從“0”磁頭開始進行操作,依次向下在同一柱面的不同盤面即磁頭上進行操作,隻在同一柱面所有的磁頭全部讀/寫完畢後磁頭 才轉移到下一柱面(同心圓的再往裡的柱面),因為選取磁頭隻需通過電子切換即可,而選取柱面則必須通過機械切換。電子切換相當快,比在機械上磁頭向鄰近磁道移動快得多,是以,資料的讀/寫按柱面進行,而不按盤面進行。也就是說,一個磁道寫滿資料後,就在同一柱面的下一個盤面來寫,一個柱面寫滿後,才移到下一個扇區開始寫資料。讀資料也按照這種方式進行,這樣就提高了硬碟的讀/寫效率。

一塊硬碟驅動器的圓柱數(或每個盤面的磁道數)既取決于每條磁道的寬窄(同樣,也與磁頭的大小有關),也取決于定位機構所決定的磁道間步距的大小。

4.扇區

        作業系統以扇區(Sector)形式将資訊存儲在硬碟上,每個扇區包括512個位元組的資料和一些其他資訊。一個扇區有兩個主要部分:存儲資料地點的辨別符和存儲資料的資料段。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

扇區的第一個主要部分是辨別符。辨別符,就是扇區頭标,包括組成扇區三維位址的三個數字:

      盤面号:扇區所在的磁頭(或盤面)

      柱面号:磁道,确定磁頭的徑向方向。

      扇區号:在磁道上的位置。也叫塊号。确定了資料在盤片圓圈上的位置。

頭标中還包括一個字段,其中有顯示扇區是否能可靠存儲資料,或者是否已發現某個故障因而不宜使用的标記。有些硬碟控制器在扇區頭标中還記錄有訓示字,可在原扇區出錯時指引磁盤轉到替換扇區或磁道。最後,扇區頭标以循環備援校驗(CRC)值作為結束,以供控制器檢驗扇區頭标的讀出情況,確定準确無誤。

扇區的第二個主要部分是存儲資料的資料段,可分為資料和保護資料的糾錯碼(ECC)。在初始準備期間,計算機用512個虛拟資訊位元組(實際資料的存放地)和與這些虛拟資訊位元組相應的ECC數字填入這個部分。

 5. 訪盤請求完成過程 :

确定磁盤位址(柱面号,磁頭号,扇區号),記憶體位址(源/目):

       當需要從磁盤讀取資料時,系統會将資料邏輯位址傳給磁盤,磁盤的控制電路按照尋址邏輯将邏輯位址翻譯成實體位址,即确定要讀的資料在哪個磁道,哪個扇區。

為了讀取這個扇區的資料,需要将磁頭放到這個扇區上方,為了實作這一點:

         1)首先必須找到柱面,即磁頭需要移動對準相應磁道,這個過程叫做尋道,所耗費時間叫做尋道時間,

         2)然後目标扇區旋轉到磁頭下,即磁盤旋轉将目标扇區旋轉到磁頭下。這個過程耗費的時間叫做旋轉時間。

即一次訪盤請求(讀/寫)完成過程由三個動作組成:

       1)尋道(時間):磁頭移動定位到指定磁道

       2)旋轉延遲(時間):等待指定扇區從磁頭下旋轉經過

       3)資料傳輸(時間):資料在磁盤與記憶體之間的實際傳輸

是以在磁盤上讀取扇區資料(一塊資料)所需時間:

      Ti/o=tseek +tla + n *twm

其中:

tseek 為尋道時間

tla為旋轉時間

twm 為傳輸時間

4、磁盤的讀寫原理

系統将檔案存儲到磁盤上時,按柱面、磁頭、扇區的方式進行,即最先是第1磁道的第一磁頭下(也就是第1盤面的第一磁道)的所有扇區,然後,是同一柱面的下一磁頭,……,一個柱面存儲滿後就推進到下一個柱面,直到把檔案内容全部寫入磁盤。

(檔案的記錄在同一盤組上存放是,應先集中放在一個柱面上,然後再順序存放在相鄰的柱面上,對應同一柱面,則應該按盤面的次序順序存放。)

(從上到下,然後從外到内。資料的讀/寫按柱面進行,而不按盤面進行,先)

系統也以相同的順序讀出資料。讀出資料時通過告訴磁盤控制器要讀出扇區所在的柱面号、磁頭号和扇區号(實體位址的三個組成部分)進行。磁盤控制器則 直接使磁頭部件步進到相應的柱面,選通相應的磁頭,等待要求的扇區移動到磁頭下。在扇區到來時,磁盤控制器讀出每個扇區的頭标,把這些頭标中的位址資訊與期待檢出的磁頭和柱面号做比較(即尋道),然後,尋找要求的扇區号。待磁盤控制器找到該扇區頭标時,根據其任務是寫扇區還是讀扇區,來決定是轉換寫電路, 還是讀出資料和尾部記錄。找到扇區後,磁盤控制器必須在繼續尋找下一個扇區之前對該扇區的資訊進行後處理。如果是讀資料,控制器計算此資料的ECC碼,然 後,把ECC碼與已記錄的ECC碼相比較。如果是寫資料,控制器計算出此資料的ECC碼,與資料一起存儲。在控制器對此扇區中的資料進行必要處理期間,磁 盤繼續旋轉。

5、局部性原理與磁盤預讀

  由于存儲媒體的特性,磁盤本身存取就比主存慢很多,再加上機械運動耗費,磁盤的存取速度往往是主存的幾百分分之一,是以為了提高效率,要盡量減少磁盤I/O。為了達到這個目的,磁盤往往不是嚴格按需讀取,而是每次都會預讀,即使隻需要一個位元組,磁盤也會從這個位置開始,順序向後讀取一定長度的資料放入記憶體。這樣做的理論依據是計算機科學中著名的局部性原理:

  當一個資料被用到時,其附近的資料也通常會馬上被使用。

  程式運作期間所需要的資料通常比較集中。

  由于磁盤順序讀取的效率很高(不需要尋道時間,隻需很少的旋轉時間),是以對于具有局部性的程式來說,預讀可以提高I/O效率。

  預讀的長度一般為頁(page)的整倍數。頁是計算機管理存儲器的邏輯塊,硬體及作業系統往往将主存和磁盤存儲區分割為連續的大小相等的塊,每個存儲塊稱為一頁(在許多作業系統中,頁得大小通常為4k),主存和磁盤以頁為機關交換資料。當程式要讀取的資料不在主存中時,會觸發一個缺頁異常,此時系統會向磁盤發出讀盤信号,磁盤會找到資料的起始位置并向後連續讀取一頁或幾頁載入記憶體中,然後異常傳回,程式繼續運作。

6、磁盤碎片的産生

俗話說一圖勝千言,先用一張ACSII碼圖來解釋為什麼會産生磁盤碎片。

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

上面的ASCII圖表示磁盤檔案系統,由于目前上面沒有任何資料檔案,是以我把他表示成0。

在圖的最上側和左側各有a-z 26個字母,這是用來定位每個資料位元組的具體位置,如第1行1列是aa,26行26列是zz。

我們建立一個新檔案,理所當然的,我們的檔案系統就産生了變化,現在是

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

          如圖所示:”内容表”(TOC)占據了前四行,在TOC裡存貯着每件檔案在系統裡所在的位置。

在上圖,TOC包括了一個名字叫hello.txt的檔案,其具體内容是”Hello, world”,在系統裡的位置是ae到le。

接下來再建立一個檔案

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

如圖,我們建立的檔案bye.txt緊貼着第一個檔案hello.txt。

其實這是最理想的系統結構,如果你将你的檔案都按照上圖所表示的那樣一個挨着一個,緊緊的貼放在一起的話,那麼讀取他們将會非常的容易和迅速,這是因為在硬碟裡動得最慢的(相對來說)就是傳動手臂,少位移一些,讀取檔案資料的時間就會快一些。

然而恰恰這就是問題的所在。現在我想在”Hello, World”後加上些感歎号來表達我強烈的感情,現在的問題是:在這樣的系統上,檔案所在的行就沒有地方讓我放這些感歎号了,因為bye.txt占據了剩下的位置。

現在有倆個方法可以選擇,但是沒有一個是完美的

1.我們從原位置删除檔案,重建立個檔案重新寫上”Hello, World!!”. –這就無意中延長了檔案系統的讀和寫的時間。

2.打碎檔案,就是在别的空的地方寫上感歎号,也就是”身首異處”–這個點子不錯,速度很快,而且友善,但是,這就同時意味着大大的減慢了讀取下一個新檔案的時間。

如果你對上面的文字沒概念,上圖

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

這裡所說的方法二就像是我們的windows系統的存儲方式,每個檔案都是緊挨着的,但如果其中某個檔案要更改的話,那麼就意味着接下來的資料将會被放在磁盤其他的空餘的地方。

如果這個檔案被删除了,那麼就會在系統中留下空格,久而久之,我們的檔案系統就會變得支離破碎,碎片就是這麼産生的。

試着簡單點,講給mm聽的硬碟讀寫原理簡化版

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

硬碟的結構就不多說了,我們平常電腦的資料都是存在磁道上的,大緻上和CD光牒差不多.讀取都是靠磁頭來進行.

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

我們都知道,我們的資料資料都是以資訊的方式存儲在盤面的扇區的磁道上,硬碟讀取是由搖臂控制磁頭從盤面的外側向内側進行讀寫的.是以外側的資料讀取速度會比内側的資料快很多.

硬碟的讀寫原理1、硬碟的組成 2、硬碟的工作原理3、盤面、磁道、柱面和扇區4、磁盤的讀寫原理5、局部性原理與磁盤預讀6、磁盤碎片的産生7、硬碟容量及分區大小的計算

其實我們的檔案大多數的時候都是破碎的,在檔案沒有破碎的時候,搖臂隻需要尋找1次磁道并由磁頭進行讀取,隻需要1次就可以成功讀取;但是如果檔案破碎成 11處,那麼搖臂要來回尋找11次磁道磁頭進行11次讀取才能完整的讀取這個檔案,讀取時間相對沒有破碎的時候就變得冗長.

是以,磁盤碎片往往也是拖慢系統的重要因素之一,Vista之家團隊也計劃在Vista優化大師後續版本内加入磁盤碎片整理功能,敬請期待。

7、硬碟容量及分區大小的計算

在linux系統,要計算硬碟容量及分區大小,我們先通過fdsik -l檢視硬碟資訊:

  Disk /dev/hda: 80.0 GB, 80026361856 bytes

  255 heads, 63 sectors/track, 9729 cylinders

  Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot Start End Blocks Id System

  /dev/hda1 * 1 765 6144831 7 HPFS/NTFS

  /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)

  /dev/hda3 2806 9729 55617030 5 Extended

  /dev/hda5 2806 3825 8193118+ 83 linux

  /dev/hda6 3826 5100 10241406 83 linux

  /dev/hda7 5101 5198 787153+ 82 linux swap / Solaris

  /dev/hda8 5199 6657 11719386 83 linux

  /dev/hda9 6658 7751 8787523+ 83 linux

  /dev/hda10 7752 9729 15888253+ 83 linux

   其中

    heads 是磁盤面;

    sectors 是扇區;

    cylinders 是柱面;

    每個扇區大小是 512byte,也就是0.5K;

  通過上面的例子,我們發現此硬碟有 255個磁盤面,有63個扇區,有9729個柱面;是以整個硬碟體積換算公式應該是:

  磁面個數 * 扇區個數 * 每個扇區的大小512 * 柱面個數 = 硬碟體積 (機關bytes)

  是以在本例中磁盤的大小應該計算如下:

  255 x 63 x 512 x 9729 = 80023749120 bytes

  提示:由于硬碟生産商和作業系統換算不太一樣,硬碟廠家以10進位的辦法來換算,而作業系統是以2進位制來換算,是以在換算成M或者G 時,不同的算法結果卻不一樣;是以我們的硬碟有時标出的是80G,在作業系統下看卻少幾M;

  上面例子中,硬碟廠家算法 和 作業系統算數比較:

  硬碟廠家: 80023749120 bytes = 80023749.120 K = 80023.749120 M (向大機關換算,每次除以1000)

  作業系統: 80023749120 bytes = 78148192.5 K = 76316.594238281 M (向大機關換算,每次除以1024)

  我們在檢視分區大小的時候,可以用生産廠家提供的算法來簡單推算分區的大小;把小數點向前移動六位就是以G表示的大小;比如 hda1 的大小約為 6.144831G ;