再來理解一下硬盤

一、我的磁盤參數

  我們知道硬盤裏面重要的幾個概念:磁頭(Head)、柱面(Cylinder)、扇區(Sector),下圖是我電腦的這幾項的數據,用DiskGenius查看的:

  共有60801個柱面,255個磁頭,每道扇區數63個,總扇區數:976773168,這裏說明兩點:

(1)磁頭數爲奇數:我們知道磁盤裏面一個盤面有兩面可以存儲數據,但是有的盤面只使用了一面,因此磁頭數可能出現奇數,這裏可以知道磁頭編號是從0~255。(沒有采用多磁頭技術)

(2)每道扇區數:我們知道對於一個盤面,越往外磁道周長越長,對於以前老式的磁盤,每個磁道的扇區數目是相同的,這樣就導致外面的磁道存儲數據密度太低,因此現代的磁盤都是外面磁道扇區數目多,裏面的扇區數目少,這裏的每道扇區數其實是經過折算後的,也就是用總扇區數除以磁頭數再除以柱面數得到的。

(3)柱面數:共有60801,所以可以知道柱面和磁道編號爲0~60800

(4)總扇區數:976773168,這個就是我的硬盤總共的扇區數,這些扇區可以存儲數據,其中每個扇區512Bytes,所以我的磁盤容量大概也就是:465GB

二、低級格式化  

  上面我們列舉了我的磁盤裏面柱面、扇區數目,這些數目是怎麼來的呢?一個空白的硬盤可以想象成一個“鐵磚頭”,並沒有這些所謂的磁道、柱面、扇區等參數,出廠前,硬盤廠家往往會進行格式化,確定硬盤的柱面、扇區等等物理參數,這就是所謂的“低級格式化”,這種格式化和操作系統是沒有關係的。

三、磁盤尋址

  磁盤經過低級格式化後,就有了扇區,我們就可以往裏面寫數據了,但是如何來確定我們的數據寫到哪個扇區呢?如果我們不告訴計算機,它是不知道的。因此我們應該找到我們需要寫入或讀出數據的扇區,也就用到了“磁盤尋址”。

  (1)找到一個具體的扇區,可以通過提供柱面號(Cylinder),磁頭號(Header)、扇區號(Sector),就能唯一確定那個扇區了,這種尋址方式稱爲CHS尋址方式。例如CHS爲0/0/1表示0號柱面、0號磁頭、1號扇區,也就是整塊磁盤的第一個扇區;60800/254/63,表示60800號柱面,255號磁頭,63號扇區,表示我的磁盤的最後一個扇區。

  (2)找到一個具體的扇區,還可以使用另外一種方式,那就是僅僅提供扇區號來確定,叫做LBA,邏輯尋址,或者線性尋址,例如0號柱面0號磁頭扇區數爲100個(這裏不是68個了,因爲外圈比內圈扇區數多),其對應的物理編號爲1~100,但是對應的LBA邏輯編號爲0~99(邏輯編號從0開始);0號柱面1號磁頭對應扇區物理編號爲1~100,但是對應的LBA邏輯標號爲100~199,以此類推,因此所有的扇區編號爲:0~976773167,相當於把一個一個的柱面展開,然後連接起來了。

四、磁盤分區

  看完了前面,一個物理參數已經確定的磁盤,如果我們要安裝操作系統,例如windows,那麼需要對磁盤進行分區,也就是說C盤佔用哪些扇區,D盤佔用哪些扇區等等,佔用的扇區由我們給他們分配的大小決定。下圖是我的分區所佔用的扇區:

  可以看到系統保留分區佔用的扇區,這裏CHS和LBA兩種尋址方式都可以看到:

(1)對於CHS尋址:系統保留分區從0柱面32磁頭的33號扇區開始,到12柱面,223磁頭的19扇區截止。

(2)對於LBA尋址:系統保留分區的起始扇區編號爲:32*63+33-1=2048,注意這裏的CHS中扇區編號從1開始,而LBA尋址裏面扇區編號從0開始。

  到這兒,也可以回答@金色海洋(jyk)陽光男孩 的第一個疑問,C盤到底在硬盤的哪裏:開始於12柱面223磁頭20號扇區,結束於7649號柱面13號磁頭44號扇區。而且操作系統一般存儲於磁盤靠外面的磁道,據說外道訪問速度比內道快,而操作系統文件又需要經常訪問到。

  再來看上面的圖,我們會發現幾個問題:

(1)系統保留分區從2048扇區開始,那麼前面的0~2047個扇區,相當於1MB大小爲什麼沒有顯示出來,它們是幹什麼的用的?

(2)裏面看到了擴展分區下面掛載了E盤和F盤,當然前面系統保留分區、C盤、D盤就是主分區了,他們有什麼區別?

(3)擴展分區結束於60801柱面,47磁頭46扇區,那麼後面的扇區幹什麼用了?(備註:這裏60801應該爲60800,因爲柱面是從0開始編號的,因此可能是軟件的錯誤,這裏不就深究了)

  下面簡單說一說:

(1)對於問題(1),前面有2048個扇區,其中第一個扇區,也就是0號柱面0號磁頭1號扇區(CHS尋址)或者0號扇區(LBA尋址),也稱爲MBR區,共有512個字節,其中主引導記錄MBR佔用446個字節,用來引導操作系統啓動的,不詳細寫了,有機會再介紹;磁盤分區表(DPT)佔用64個字節,用來記錄各個分區的情況,例如C盤佔哪些扇區、D盤佔哪些扇區等等,我們發現它只有64個字節,可以分成4條記錄,一條記錄佔16個字節,用來記錄一個分區的情況,因此只能有4個分區了,也就是4個主分區,如果想分更多的區,可以把其中一個主分區當做擴展分區,再擴充出去幾個邏輯分區,幾個邏輯分區掛載在擴展分區上面,因此擴展分區也是主分區的一種,且只能有一個;最後兩個字節以55AA結尾;其他的2047個扇區一些空着,一些另做他用。(該部分內容不詳細寫了,要不文章又要太長了)

(2)對於問題(2)在上面文字中簡單說明了一下主分區和擴展分區的區別。

(3)對於問題(3)我也好奇怪,那些空間都去哪兒了?

備註:可以把磁盤按照扇區展開,依次編號爲0,1,2,……,然後分成幾部分:Part1,Part2,Part3,Part4,Part5,Part6,Part7其中Part2、Part3、Part4、Part5,Part6分別給了系統保留分區、C、D、E、F盤,Part1和Part7空出的空間另作他用,其中每一個Part裏面各個扇區又是有些什麼,裏面存儲了哪些信息,也是值得思考的。

五、寫入文件

  分區講完了,我們來看看寫入文件。往磁盤裏面寫入文件,是按照柱面、磁頭、扇區的順序來寫的,例如先寫第1個柱面、第1個磁頭、第1個扇區,然後寫第1個柱面、第1個磁頭、第2個扇區,寫完63個扇區後,再移動到下面一個磁頭來寫;當寫完一個柱面,再用後面的柱面。接下來假如往c盤寫兩個文件a.txt,b.txt,他們一個佔用了一個柱面,那麼它們的扇區地址是緊緊挨着的且a.txt在前,b.txt再後,但是接下來就要發生一些事情:

(1)如果a.txt裏面刪除內容,那麼佔用空間減少,但是佔用的空間還是1個柱面。

(2)如果a.txt裏面增加內容,那麼一個柱面佔不下了,而緊挨着它的柱面又被b.txt給佔了,那麼它會從其他柱面去找地方去放,然後在a.txt創建對新增內容所在扇區的引用。

從(1)(2)可知,隨着系統的運行,磁盤裏面的碎片會越來越多,因此操作系統提供了碎片整理工具就是把這些空間整合的(當然,對於SSD硬盤,因爲內部結構不同,不建議碎片整理,這裏就不解釋了。),可以看看我的D盤裏面空間利用,並不是連續的,如下圖:

備註:操作系統對文件的操作比這個要複雜些,例如刪除文件並不會實際從扇區裏面刪除,否則各種恢復就無法恢復文件了,具體的可以去看操作系統知識了。

  另外,我們平時有過這樣的體會:例如將D盤裏面的一個大文件剪切到D盤的其他文件夾,速度很快,而剪切到其他盤符,速度就比較慢了,就是因爲在同一盤符裏面,剪切文件,實際上只是改變了文件的引用地址,並沒有改變文件實際的扇區地址,因此速度很快。這也給我們一個提示:以後磁盤分區沒必要分那麼多了,分兩個就夠了,一個安裝系統,一個放一些數據文件,這樣移動文件速度也快,當然如果有別的用途,如安裝多操作系統等需要,就另當別論了。

  好了,就寫這麼多吧,從此再看到硬盤,是不是對它有了不一樣的認識,寫的有點兒亂,還請見諒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章