檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性、安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux上有ext系列,windows上有fat和ntfs。如圖為乙個linux下檔案系統的結構。
其中vfs(virtual file system)是linux kernel檔案系統的乙個模組,簡單看就是乙個adapter,對下遮蔽了下層不同檔案系統之間的差異,對上為作業系統提供了統一的介面.
中間部分為各個不同檔案系統的實現。
再往下是buffer cache和driver。
檔案系統的結構
各種檔案系統實現方式不同,因此效能、管理性、可靠性等也有所不同。下面為linux ext2(ext3)的乙個大致檔案系統的結構。
boot block存放了引導程式。
super block存放了整個檔案系統的一些全域性引數,如:卷名、狀態、塊大小、塊總數。他在檔案系統被mount時讀入記憶體,在umount時被釋放。
上圖描述了ext2檔案系統中很重要的三個資料結構和他們之間的關係。
inode:inode是檔案系統中最重要的乙個結構。如圖,他裡面記錄了檔案相關的所有資訊,也就是我們常說的meta資訊。包括:檔案型別、許可權、所有者、大小、atime等。inode裡面也儲存了指向實際檔案內容資訊的索引。其中這種索引分幾類:
如圖:directory代表了檔案系統中的目錄,包括了當前目錄中的所有inode資訊。其中每行只有兩個資訊,乙個是檔名,乙個是其對應的inode。需要注意,directory不是檔案系統中的乙個特殊結構,他實際上也是乙個檔案,有自己的inode,而它的檔案內容資訊裡面,包括了上面看到的那些檔名和inode的對應關係。如下圖:
data block即存放檔案的時間內容塊。data block大小必須為磁碟的資料塊大小的整數倍,磁碟一般為512位元組,因此data block一般為1k、2k、4k。
buffer cache
buffer & cache
雖然buffer和cache放在一起了,但是在實際過程中buffer和cache是完全不同了。buffer一般對於寫而言,也叫「緩衝區」,緩衝使得多個小的資料塊能夠合併成乙個大資料塊,一次性寫入;cache一般對於讀而且,也叫「快取」,避免頻繁的磁碟讀取。如圖為linux的free命令,其中也是把buffer和cache進行區分,這兩部分都算在了free的記憶體。
buffer cache
buffer cache中的快取,本質與所有的快取都是一樣,資料結構也是類似,下圖為vxsf的乙個buffer cache結構。
這個資料結構與memcached和oracle sga的buffer何等相似。左側的hash chain完成資料塊的定址,上方的的鍊錶記錄了資料塊的狀態。
buffer vs direct i/o
檔案系統的buffer和cache在某些情況下確實提高了速度,但是反之也會帶來一些負面影響。一方面檔案系統增加了乙個中間層,另外一方面,當cache使用不當、配置不好或者有些業務無法獲取cache帶來的好處時,cache則成為了一種負擔。
適合cache的業務:序列的大資料量業務,如:nfs、ftp。
不適合cache的業務:隨機io的業務。如:oracle,小檔案讀取。
塊裝置、字元裝置、裸裝置
這幾個東西看得很暈,找了一些資料也沒有找到很準確的說明。
從硬體裝置的角度來看,
從作業系統的角度看(對應作業系統的裝置檔案型別的b和c),
# ls -l /dev/*lv
brw------- 1 root system 22, 2 may 15 2007 lv
crw------- 2 root system 22, 2 may 15 2007 rlv
如上,相比之下,字元裝置在使用更為直接,而塊裝置更為靈活。檔案系統一般建立在塊裝置上,而為了追求高效能,使用字元裝置則是更好的選擇,如oracle的裸裝置使用。
裸裝置
裸裝置也叫裸分割槽,就是沒有經過格式化、沒有檔案系統的一塊儲存空間。可以寫入二進位制內容,但是內容的格式、其中資訊的組織等問題,需要使用它的人來完成。檔案系統就是建立在裸裝置之上,並完成裸裝置空間的管理。
cio
cio即並行io(concurrent io)。在檔案系統中,當某個檔案被多個程序同時訪問時,就出現了inode競爭的問題。一般地,讀操作使用的共享鎖,即:多個讀操作可以併發進行,而寫操作使用排他鎖。當鎖被寫程序占用時,其他所有操作均阻塞。因此,當這樣的情況出現時,整個應用的效能將會大大降低。如圖:
cio就是為了解決這個問題。而且cio帶來的效能提高直逼裸裝置。當檔案系統支援cio並開啟cio時,cio缺省會開啟檔案系統的direct io,即:讓io操作不經過buffer直接進行底層資料操作。由於不經過資料buffer,在檔案系統層面就無需考慮資料一致性的問題,因此,讀寫操作可以並行執行。
在最終進行資料儲存的時候,所有操作都會序列執行,cio把這個事情交個了底層的driver。
說說IO(四) 檔案系統
檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux 上有 ext 系列,windows 上有 fat 和 ntfs 如圖為乙個 linux 下檔案系統的結構。其中 vfs virtual file system...
說說IO(四) 檔案系統
linux cache 資料結構 檔案系統各有不同,其最主要的目標就是解決磁碟空間的管理問題,同時提供高效性 安全性。如果在分布式環境下,則有相應的分布式檔案系統。linux上有ext系列,windows上有fat和ntfs。如圖為乙個linux下檔案系統的結構。其中vfs virtual file...
實驗四 檔案系統
實驗四 檔案系統 一 實驗目的 1 熟悉linux檔案系統的檔案和目錄結構,掌握linux檔案系統的基本特徵 2 模擬實現linux檔案系統的簡單i o流操作 備份檔案。二 實驗內容 1 瀏覽linux系統根目錄下的子目錄,熟悉每個目錄的檔案和功能 2 設計程式模擬實現linux檔案系統的簡單i o...