之前一直以為固態硬碟各方面都比機械硬碟性能高,所以首選固態硬碟,直到看了極客時間-深入淺出計算機組成原理中硬碟相關章節的內容,才發現固態硬碟原來是有缺點的,所以這里來做一個總結,
機械硬碟(HDD)
機械硬碟由以下幾個部分組成:
盤面:盤面(盤片)上有一層磁性涂層,資料就是存盤在這個磁性的涂層上,一個盤面在正反兩面都有磁性涂層,盤面中央有一個可以旋轉的主軸,主軸可以使盤片以固定的旋轉速率進行旋轉,我們看到磁盤標注的每分鐘多少轉(RPM , Revolution Per Minute)指的就是這個旋轉速率,比如7200轉,表示一分鐘可以旋轉7200下:

(注:圖片來自極客時間-深入淺出計算機組成原理)
一個盤面又可以劃為多個扇區和多個磁道,
磁道:一個盤片可以劃分為多個同心圓,每一個圓環就叫做磁道,可以理解為是盤片上的圓形環道:

扇區:每個磁道又可以分為一個個扇區,也就是磁道上的一個弧段:

柱面:上下平行的一個個盤面的相同扇區組成的部分,稱作一個柱面,

(注:圖片來自極客時間-深入淺出計算機組成原理)
磁頭:用于從盤面讀取資料傳輸到總線,一個盤面有正反兩面,正反兩面都會有一個磁頭,
傳動臂(懸臂):與磁頭相連接,通過沿著半徑軸前后移動傳動臂,可以將磁頭定位到每一個磁道上,讀取存盤的資料,
磁盤是由一個或者多個平行疊放在一起的盤片組成的,將它們封裝在一個密封的包裝內,整個裝置稱為磁盤驅動器,也就是我們常說的磁盤,
磁盤以扇區為大小進行資料讀寫,資料讀寫的耗時主要有以下幾部分:
- 尋道時間:首先傳動臂需要將磁頭定位到包含目標扇區的磁道上,移動傳動臂所需的時間稱為尋道時間,它依賴于磁頭當前所在的位置以及傳動臂在盤面上移動的速度,
- 旋轉時間:將磁頭定位到目標扇區所在的磁道后,需要等待目標扇區的第一個位旋轉到磁頭下,它依賴于磁盤的旋轉速率,
從資料讀取步驟當中可以看出,如果我們將資料進行順序存放,盡可能將資料放在同一個扇區或者是一個柱面,這樣只需旋轉一次盤面,進行一次尋道,即可讀取出內容,這也是順序讀寫比隨機讀寫性能高的原因,
固態硬碟(SSD)
固態硬碟是一種基于閃存的存盤技術,由半導體存盤器構成,沒有移動的部件,不需要像機械硬碟一樣進行尋道,所以在順序寫以及隨機寫的性能上相比機械硬碟都要高,但是它的耐用性缺比較差,接下來就看下SSD硬碟的耐用性為何差,
固態硬碟是有多個裸片疊在一起的:

(注:圖片來自極客時間-深入淺出計算機組成原理)
一張裸片上可以放多個平面(Plane),一個平面上又會劃分為多個塊(Block),一個塊的大小通常在幾百KB到幾MB,一個塊里會劃分為多個頁(Page),一個頁的大小通常是4KB:

(注:圖片來自極客時間-深入淺出計算機組成原理)
SSD硬碟寫入的基本單位為頁,按頁進行資料寫入,但是它不能像機械硬碟一樣直接通過覆寫進行寫入,如果某一頁已經寫入過資料,需要被擦除后才可以重新寫入資料,而且SSD硬碟是按塊進行擦除的,也就是說如果某個頁的資料被刪掉還不能直接對頁進行擦除,需要等待這個頁所在的塊整個被擦除才可以重新寫入資料,而每一個塊的擦除次數是有限的,當達到一定的擦除次數容易損壞,
舉個例子
假設白色代表這個頁未寫入過資料,綠色代表這個頁寫入了有效資料,紅色代表之前寫入了有效資料后來資料被洗掉:
-
首先在某些空白頁內寫入了一些資料,寫入資料的頁變為綠色:

-
洗掉一部分資料,由于SSD需要按塊擦除,所以某個塊內的頁如果既有有效資料又有洗掉資料,被洗掉的那部分資料會先標記為洗掉狀態此時資料并未真正洗掉:

-
當某個塊內的所有頁都被標記為已洗掉,此時這個塊就可以被擦除,這個塊內的頁就恢復成了白色:

-
假如洗掉的資料不連續,分散在各個塊內,由于紅色的頁在被擦除之前不能寫入資料,所以這些紅色的頁看起來類似磁盤碎片,既不能清理又不能寫入資料,到達一定程度時可能沒有合適的空白頁進行資料寫入,所以這時候需要做一次類似于磁盤碎片整理的作業,找一個紅色頁最多的塊,將里面綠色頁的資料移動到另外一個塊中,然后將整個紅色頁所在的塊進行擦除:

總結
機械硬碟可能更適合于寫多(順序寫)讀少的場景,固態硬碟更適合于讀多寫少的場景,不過也不能一概而論,最侄訓是要根據實際的應用場景來定,
參考
【極客時間-徐文浩】深入淺出計算機組成原理
《深入理解計算機系統》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549563.html
標籤:其他
上一篇:一天吃透計算機網路八股文
下一篇:Java 例外處理:使用和思考
