瞭解硬碟的原理對於程式設計,做資料優化(比如磁碟i/0瓶頸,機械硬碟慢的原因)都是有好處的。
以前總覺得不太需要了解這些,但是越是做到後面,發現,瞭解計算機各個元件的原理,其實才能理解更加深入的知識,否則永遠只是一個敲程式碼的工人。
<資料庫系統的實現>裡面之所以開闢一個專門的章節講解磁碟的原理,是理解到磁碟在資料庫優化中的重要地位。
總結知識點(包含我的疑問,以後補充):
碟片。一個碟片有兩個盤面:上盤面和下盤面。
每個盤面都要配置一個磁頭來讀取裡面的資料。
我疑問在於:
磁碟的控制器竟然能夠做到這麼精準,能夠識別出盤面的某個點已經旋轉到我這裡來了,馬上讀取資料。
是不是這樣子,碟片就的主軸就是負責旋轉就可以了,不停的旋轉,磁碟控制器控制磁頭讀取碟片上的資料。
我表示非常感嘆,吃驚。竟然能夠這麼精準得做到控制。
一個1tb的和500g的磁碟,是碟片數量的增加,還是碟片體積增加呢。
我看到3.5寸的磁碟,以前也是350g的。而2.5寸的磁碟,能夠做到500g。這樣說明與體積無關。
那是如何計算硬碟的容量大小的呢。
先看有多少個盤面。假設是4個盤面(我的筆記本硬碟壞了,我拆開看)
然後計算每個盤面的容量大小,那麼就把4個盤面的大小加起來。
要想知道一個盤面的容量大小。先求出這個盤面有多少個磁軌(即同心園)。一般是65536的磁軌的(2的16次方個)。
每個磁軌里面儲存資料的地方實際上是扇區。是把磁軌劃分為相同大小空間的扇區。扇區之間有一點點間隙,這個間隙沒有被磁化為0和1標識。
一個磁軌,大概含有256個扇區。
一個扇區的大小是4096個位元組(大部分磁碟使用512位元組的扇區)
於是大小就出來了:
4*(65536*256*4096)=274877906944位元組。
262144M。轉換成g單位,就是256g?
奇怪了,那麼筆記本的磁碟500g看來是錯誤了。是哪裡錯誤了,磁軌數錯誤了嗎?
硬碟控制器其實也有一個快取的,網上是這麼介紹:
快取(Cache memory)是硬碟控制器上的一塊記憶體晶片,具有極快的存取速度,它是硬碟內部儲存和外界介面之間的緩衝器。
看到一篇參考文章:http://blog.chinaunix.net/uid-27575921-id-3480555.html
totalstorge=讀寫頭數量(其實可以認為是磁碟碟數量)*每個讀寫頭負責的磁柱數量*每個磁柱所含的磁區數量*512Bytes(一個磁區的容量)
《現代作業系統》中也提到過:
磁碟格式化後會比沒有格式化之前,容量減少20%。減少的量通常取決於前導碼、扇區之間的間隙和ecc大小、保留的備用扇區的數目。
現在也明白了。為什麼16g的u盤,按照軟體識別的1kb等於1024個位元組的計算辦法,不是15.2g。而是14.5g,其實就是因為格式化後,實際上可用容量沒有那麼15.2g的。
這就好像記憶體,實際上有4g,但是放到32位的作業系統來識別,可用的只能是3g。
影響磁碟讀取資料的三個因素
1、尋道時間:讓磁頭抵達哪個磁軌去
2、旋轉延遲:到達了磁軌後,讓磁頭定位到這個磁軌的某個扇區上讀取資料。因為資料最終存放在扇區上,要旋轉才能抵達扇區。旋轉的延遲時間就是這個。
2、傳輸資料時間:資料讀到後,傳到記憶體中,需要的時間。
佔據主導的是尋道時間。其次才是旋轉延遲。傳輸資料其實是很快的。
有多少個碟片就需要多少個磁頭。
關於磁碟控制器的快取與作業系統的快取磁碟塊機制:
磁碟控制器是與作業系統獨立的。它有自己的快取記憶體,一般4m。會劃分成兩部分空間。一部分用來快取讀的資料,一部分快取寫的資料。
它的快取與作業系統(實際上是檔案系統)的快取不同點:
控制器快取周圍扇區的資料,還沒讀過的資料。
作業系統快取已經讀過的磁碟塊。