////前言////

這一章節一樣是沿續前面的概念出發,有不清楚的部份請往前翻閱

這次的內容暫時脫離coding,談談使用電腦必定需要的裝置~硬碟~

////////////

1_3_1  

首先,介紹一下"傳統硬碟(HDD)"與近幾年的新寵兒"固態硬碟(SSD)"的差異

最根本的差異,就是兩者的儲存裝置完全不同

HDD可以想成很久以前的播放設備"唱盤",資料儲存在碟片上,需要由讀寫頭存取資料

優點在技術發展已久,目前市面上普遍都是TB以上,少說也有500GB

SSD可以想成是隨身碟(快閃記憶體)的高階版,資料是存在一顆顆IC元件上,存取都靠電路進行,沒有需移動的機械裝置

優點為存取速度快,2006年開發出來的寫入為傳統的1.5倍,讀取更是到3倍之多,而發展至今的優化,相信差異更為明顯

但每個資料欄位寫入的次數是有上限的,當到達上限時,該欄位便只能讀取

1_3_2

兩者各有適合的用途,伺服器、資料備份等,需要大容量的存放空間時,以成本考量還是以HDD為主

因為SSD沒有機械裝置,不會像HDD會因震動而造成讀取頭損傷碟片,並且較為省電,空間需求也較小,所以目前的平版電腦、行動裝置也多使用SSD

而桌機也開始流行將作業系統(OS)與軟體等安裝在SSD,而一般的資料存放在另一顆HDD中,能明顯的提升開機、執行程式的效率

那麼,硬體裝置的簡介就到此,更詳細的請拜估狗大神 m(_ _)m

1_3_3

回到存取的概念,在前面的章節介紹了如何借由"地址"與"型別",去解讀儲存的資料內容

但是,這個二進位的"地址"對使用者來說,在實際解讀前,無法預先知道這筆資料與何有關

因此,便需要多一層的轉換,這邊有個常用的詞"Mapping",威利習慣中文翻成"映射"

舉例來說,ASCII表也是在做"Mapping"的處理,讓英文字母"Y"可以映射為數字"89"

而這邊,就需要把這難懂的"地址",Mapping成使用者可以簡單了解的狀況,方便操作使用

來個簡單的例子,圖中的"A0~C7"記錄著"Yes",而在作業系統中所看到的"D:\\yes.txt",便是被Mapping到這個"地址"上

所以"D:\\Yes.txt"就等於是這本書的"索引",而"索引"經過Mapping得到"地址"與"型別"後,便可以解讀對應的資料

這就是硬碟的存取概念囉,當然實際運作是更為複雜的XD

1_3_4

接著就來說說資料的操作吧,對一個現有的資料可以進行複製、剪下與刪除

首先,複製照字意來說,就是必需同時複製一份新的"索引"與"資料",儲存於原本不相同的位置

1_3_5

剪下,則表示"資料"仍然只有一份,只是表示的"索引"更換了,因此若是移動前後都在相同的"根目錄"下(即"C:\移動到C:\sub\"或是"D:\移動到D:\level1\level2")

那麼記錄在"A0"的資料就不需要搬動,而只要更新顯示的"索引"(或可稱為路徑),就可以完成剪下的操作

這就是為什麼在同一個根目錄下,就算移動數GB的單一檔案,也不需到一秒的時間就可完成

(單一檔案的感覺特別明顯,因為更新"索引"也是需要花費時間的,如果是數千甚至數萬的檔案,也是要略花時間的)

1_3_6

但是若移動前後是跨不同的"根目錄"的話(即"C:\移動到D:\"),就類似於複製的操作,只是複製一份新的"索引"與"資料"後,還要把原本的刪除

因此,有C:\與D:\的"根目錄"就可想成兩本封面各為"C:\"與"D:\"的書本,而彼此的"索引"與"資料"都是各自獨立的,如此思考是否就清楚多了呢?

1_3_7

再來就講到威利覺得很有趣的刪除了,一般的概念中,刪除應該是清空,即把假想的書本中的表格裡,指定"地址"的所有"0"與"1"都清空對吧?

但事實上並非如此,因為在實際的硬碟上,不存在著"空白"的狀況,而歸零也沒有太大意義,況且每個欄位的更動,在物理上來說都有可能導致該欄位的損傷,尤其是對有明確寫入次數的SSD,歸零更是不必要的寫入操作

那麼刪除到底是做了什麼事呢?事實上,刪除並不會去更動記錄"資料"的部份,而只是把"索引"給移除了,除此之外,再把這個"資料"的記錄區段"A0~C7"加到可寫入的清單中

因為沒了"索引",也就無從得知這份資料的起始到結束的位置以及解讀資料的方法,那麼這筆檔案就形同是被刪除了,因為以平常的操作便無法再獲得該檔案了

1_3_8

那麼,假設目前已經把"D:\\Yes.txt"給刪除了,接著新增了"D:\\No.txt"的檔案,此時便會詢問可使用的表格位置,因為只需要"No"兩個char型別的空間,因此便會從"A0"開始記錄

1_3_9

發現到了嗎?因為新增了"D:\\No.txt"的檔案,所以才實際把"D:\\Yes.txt"的"Ye"改成了"No",而"s"實際上還記在書本中呢!!

而這個刪除特性,使被刪除的資料仍有救回的機會,但是切計不要再進行任何寫入的操作,因為可能把想救援的檔案給覆寫掉

1_3_10

最後,來說明一下磁碟重組在做什麼,首先因為以下的操作,可能導致可寫入的記錄區段呈現分散的情形

1_3_11

此時如果要寫入一個3*char的資料,會如何處理呢?答案是這個資料會被拆散到各個分散的區段,當然在讀取時會自動的連接起來

而這種分散的區段隨著檔案的操作,便會不斷產生,而這種分散的儲存情形當然會影響到讀取的速度,而磁碟重組便是整理讓同一筆資料記錄在同一區段

(威利在找相關資料時,就看到有網友說,從買硬碟後就沒重組過,發現到一個1.xGB大小的壓縮檔,被分散儲存在1500多個區間上,夠誇張吧XD)

不過現在硬碟常用的格式"NTFS"似乎不需要太頻繁的重組,可以先檢查一下檔案的分散程度,再決定是否進行(以"磁碟重組"拜估狗大神就可以囉)

1_3_12

想不到硬碟也講了這麼"落落等"的篇幅,不過都是威利覺得很有趣的知識囉

下一章就要回到C++ Coding的主題了,將以"變數的生死"為出發,預計會提到"heap & stack"、"動態與靜態變數"等

敬請期待囉

1_3_13

 ////To be continued////

 

 

arrow
arrow
    文章標籤
    coding pointer 儲存 硬碟
    全站熱搜

    WillieChuang 發表在 痞客邦 留言(0) 人氣()