1. 程式人生 > 其它 >03-檔案系統 學習心得

03-檔案系統 學習心得

 

  邏輯盤,有一個問題,就是一旦劃分好就無法改變,要改變也只能把資料全部抹掉,重新配置;

 

  基於此問題,就產生了 虛擬化邏輯磁碟的概念;

 

  RAID控制器是硬體底層實現RAID,實現邏輯盤,所以操作起來不靈活;

  OS層會把RAID控制器提交上來的邏輯盤,認成是不折不扣的物理磁碟; 如果在OS層,再把RAID控制器提交上來的邏輯盤加以組織、再分配(也就是虛擬化),因為OS層上執行的都是軟體,完全靠CPU,這樣就會變得非常靈活 ;   基於這種思想下開發的產品,統稱為 卷管理器,Volume Manager,VM;

  

  知名的卷管理器,Volume Manager,VM有:

  微軟:  LDM,邏輯磁碟管理;

  vertas:     用於自己產品的VxVM,Veritas Volume Manager;   用於linux、AIX,HPUS的 LVM,logical volume manager;  用於sun solaris的 Disk Suite;

 

  LVM是應用最廣泛的;包括 PV,VG,PP,LP,LV;

分割槽的地位;

  分割槽管理,可以看作是最簡單的卷管理方式,他比LVM要低階一些;

  如果把一塊磁碟比作一個倉庫,分割槽就是把倉庫分成具體的一庫區,二庫區; 因為一個大倉庫對使用者來說很不方便;

  對於低階VM的分割槽管理來說, 必須有一個東西記錄分割槽資訊,比如 一庫區裡是整個倉庫的哪些房間,這個資訊表是儲存在倉庫本身的一個房間,這個房間就叫做MBR; 也就是分割槽資訊儲存在分割槽表,分割槽表存放在一個固定的扇區,LBA1,這個扇區叫做MBR,主引導記錄;

 

檔案系統的管理進化史

  把磁碟比作一個大倉庫;磁碟驅動器驅動軟體,比作是庫管員; 

1、檔案系統的誕生----倉庫理貨員  

  早期沒有檔案系統,應用程式都自己管理磁碟,隨便往倉庫裡面存放資料,容易造成資料浪費,資料之間容易衝突、覆蓋,極為混亂;

  所以要找一個倉庫理貨員,來記錄所有應用程式存放的記錄,存放什麼糧食,存放了哪些房間;

2、簇的誕生

  理貨員給每個倉庫準備了一個記錄表; 理貨員不需要關係具體房間在倉庫的位置,怎麼把糧食存放到倉庫,這些庫管員會來處理; 

  理貨員只需要知道,送過來了什麼貨物,存放的房間號;

  比如,程式1來存放白菜,理貨員就記錄:”白菜 512斤 房間號3“

       程式2來存放糧食,理貨員就記錄: ”大米 1000斤 房間號4-1024“ ,但是如果大米存放的很多,有上萬斤,那麼房間號記錄會變得很長;

  由此,就引出,將多個房間號劃分為一個邏輯空間,叫做”簇“ ; 比如8個房間為一個簇,這樣空間的記錄,就只有1/8 了;

3、連結串列概念的產生

  因為不斷的存入和取出;導致倉庫的存放零零散散; 如果按照順序將每個人糧食存放到各個簇,他以下取走,簇就空了,如果其他人來存糧食,如果存不下,還得額外找連續簇;所以這裡的解決方案只能是,不一定非得連續存放在倉庫。

  因為現在 存放資料最小單位以簇來計算,那麼就可以記錄為:  ” 冬瓜  1000斤 簇2、6、9“;表示存放的時候時,是按順序存放到倉庫的2號簇、6號簇、9號簇;

  當然取出的時候,也是按順序去除,先取2號簇,然後是6號簇,9號簇; 

  這樣取貨慢一點,但是沒有空間浪費;

4、儲存空間管理——位示圖法

  雖然按照之前的方法記錄解決了空間問題,但是因為每個人存放的貨物數量不一樣,記錄的長短也就不一樣;

  而且存放多了之後,記錄增到後就很難查詢;

  還一個重要問題,就是要找到一個空閒的簇,就需要把所有佔用的簇都站出來才行,然後再去選擇一個沒有被佔用的簇,這個過程非常耗時;

 

  要解決記錄長度不一的問題,由此產生了 連結串列的方法; 就是參考路標的方式,我只需要描述貨物佔用的第一個簇,在簇中記錄下一個標記,寫明下一個簇的號碼,然後到下一個簇取貨;比如記錄:“冬瓜 1000斤 簇1”,然後簇1中記錄下一個標籤“簇10”;

  但是沒解決尋找空閒簇的問題,那就換一種資料格式記錄;

  把整個倉庫的簇都畫出來,從第一個簇到最後一個簇,都用一個方格標識; 然後參照:“冬瓜 1000斤 簇1” ,如果下一個簇是簇10, 那麼在簇1上記錄簇10; 如果簇10的下一個是簇90,那麼在簇10上記錄簇90;

  這樣所有的關係都記錄好了,而且空閒塊也可以很容易就找到了;

 

  這個圖表,其實有點類似  “位示圖法”,只不過位示圖:每個二進位制位對應一個盤塊。如“0”代表盤塊空閒,“1”代表盤塊已分配。

  

 

  記錄空閒簇,還有一種“空閒i連結串列法”,以盤塊為單位組成一條空閒鏈,每個空閒盤塊中儲存著下一個空閒盤塊的指標。適合連續檔案;

        

 

 

5、房間變多

  簇是系統可以識別的最小單位。也就是對於檔案,佔用的簇數量都是整數,也就是不會有兩個檔案佔用一個簇的情況發生。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是作業系統所使用的邏輯概念,而非磁碟的物理特性。

  隨著現在貨物越來越多,動則幾千上萬斤,簇的號碼也越來越大;以前的格子中,用於記錄號碼的位數就不夠了;  所以記錄簇號碼的標記位由原來的 2Byte,變成了現在的4Byte;

 

 6、優化

  隨著倉庫效能的不斷提升,倉庫硬體方面的效率速度提升很快;那麼倉庫管理的軟體演算法,也要持續更新,才能適應不斷優化的硬體;

  經過觀察,貨物即使存放在不連續的簇中,這些簇也有區域性是連續的;那存放貨物時,如果不是一個簇一個簇的去找路標,而是一段一段的去找,那麼就會節約很多時間;

  微軟將這些記錄資訊,叫做 metedata,元資料;  也就是用來描述其他資料是怎麼組織存放的一種資料; 如果記錄丟失,雖然倉庫中的貨物完好,但是也無法取出,因為已經不知道貨物的組織結構了;

  微軟總共由3中倉庫運作的管理模式,分表叫做: FAT16,FAT32,NTFS;

 

  取貨時,只需要告訴檔案系統(理貨員),檔名稱,所要取出的長度和一些其他選項,理貨員就可以在倉庫中取出這些資料了;