再來理解一下硬碟

2021-08-28 16:50:46 字數 4148 閱讀 2970

====正文開始====

一、我的磁碟引數

我們知道硬碟裡面重要的幾個概念:磁頭(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盤裡面空間利用,並不是連續的,如下圖:

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

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

(完)

理解一下char p char p

一開始學的時候,char p就是指標的指標 那時候沒用過 而且也沒見過char p 就忽略了學習這個東西 char p char p 這兩個p 都是字串首位址 char p char p 也都是乙個p指向乙個指標 首位址 栗子 char p 5 就是5個 字串 每乙個p i 是乙個字串 char p...

再來學習一下「八榮八恥」

女人版八榮八恥 以做飯洗衣為榮,以多吃多睡為恥 以按時回家為榮,以徹夜不歸為恥 以工資上繳為榮,以存私房錢為恥 以照顧小孩為榮,以照顧情人為恥 以聽老公話為榮,以指揮老公為恥 以溫柔體貼為榮,以潑辣刁蠻為恥 以精打細算為榮,以鋪張浪費為恥 以自然美白為榮,以漂白抽脂為恥 美女 版八榮八恥 以每餐少吃...

再來學習一下「八榮八恥」

女人版八榮八恥 以做飯洗衣為榮,以多吃多睡為恥 以按時回家為榮,以徹夜不歸為恥 以工資上繳為榮,以存私房錢為恥 以照顧小孩為榮,以照顧情人為恥 以聽老公話為榮,以指揮老公為恥 以溫柔體貼為榮,以潑辣刁蠻為恥 以精打細算為榮,以鋪張浪費為恥 以自然美白為榮,以漂白抽脂為恥 美女 版八榮八恥 以每餐少吃...