我們無時(shí)無刻不在使用文件系統(tǒng),進(jìn)行開發(fā)得時(shí)候在使用文件系統(tǒng),瀏覽網(wǎng)頁得時(shí)候在使用文件系統(tǒng),玩手機(jī)得時(shí)候也在使用文件系統(tǒng)。
對(duì)于非可以人士來說,專家根本不知道文件系統(tǒng)為何物。因?yàn)?,通常來說,我們?cè)谑褂梦募到y(tǒng)得時(shí)候一般不會(huì)感知到文件系統(tǒng)得存在。即使對(duì)于程序開發(fā)人員,很多人對(duì)于文件系統(tǒng)也是一知半解。
雖然文件系統(tǒng)經(jīng)常不被感知,但是文件系統(tǒng)卻是非常重要得。在Linux操作系統(tǒng)系統(tǒng)中文件系統(tǒng)是Linux內(nèi)核得四大子系統(tǒng)之一;而在Windows之前,微軟得DOS系統(tǒng),其全稱是DiskOperatingSystem,也就是磁盤管理系統(tǒng),說白了就是一個(gè)文件系統(tǒng)。
刨根問底文件系統(tǒng)想要更加深入得理解文件系統(tǒng),首先要弄明白什嗎是文件系統(tǒng)。業(yè)界并沒有給文件系統(tǒng)下一個(gè)明確得定義,感謝作者分享翻閱《操作系統(tǒng)概念》和《現(xiàn)代操作系統(tǒng)》@比較著名得操作系統(tǒng)書籍,并沒有找到關(guān)于文件系統(tǒng)得明確定義。在維基百科發(fā)現(xiàn)了對(duì)文件系統(tǒng)得如下描述:
In computing, a file system or filesystem (often abbreviated to fs) controls how data is stored and retrieved.
另外一個(gè)對(duì)文件系統(tǒng)概念進(jìn)行描述得地方是Definitions,這是一個(gè)可以提供各種定義得網(wǎng)站,給出了如下解釋:
In computing, a file system is a type of data store which can be used to store, retrieve and update a set of files.
雖然我們沒有找到明確得定義,但從前面找到得對(duì)文件系統(tǒng)得描述專業(yè)知道文件系統(tǒng)是一個(gè)控制數(shù)據(jù)存取得系統(tǒng)。而通常我們所說得文件系統(tǒng)是構(gòu)建在磁盤(含SSD盤和SD卡@)之上得。因此,我們通常所說得文件系統(tǒng)其實(shí)就是一個(gè)對(duì)磁盤空間進(jìn)行管理,實(shí)現(xiàn)數(shù)據(jù)存取得系統(tǒng)。
狹義得理解文件系統(tǒng)實(shí)現(xiàn)對(duì)磁盤、軟盤或者光盤@塊設(shè)備得數(shù)據(jù)進(jìn)行存取,而廣義來說,文件系統(tǒng)未必需要構(gòu)建在磁盤之上,它還專業(yè)構(gòu)建在網(wǎng)絡(luò)或者內(nèi)存之上。無論構(gòu)建在那種設(shè)備上,最為核心得是實(shí)現(xiàn)對(duì)數(shù)據(jù)得存取。
除了實(shí)現(xiàn)對(duì)數(shù)據(jù)得存取之外,文件系統(tǒng)更重要得一個(gè)功能是文件系統(tǒng)抽象了一個(gè)更加容易訪問存儲(chǔ)空間得接口。這里得接口包括用于程序開發(fā)得API接口和普通用戶得操作接口。猥瑣便于理解,我們專業(yè)將文件系統(tǒng)對(duì)磁盤空間得管理用圖1表示。
圖1 從磁盤到文件系統(tǒng)
對(duì)于上圖,我們簡(jiǎn)單得解釋一下。最底層是硬件設(shè)備,我們這里以硬磁盤為例。磁盤驅(qū)動(dòng)器和操作系統(tǒng)對(duì)硬磁盤做了頂級(jí)得抽象,它們將復(fù)雜得硬磁盤抽象為一個(gè)連續(xù)得線性空間。最后是文件系統(tǒng),將線性空間進(jìn)行管理和抽象,呈現(xiàn)給用戶一個(gè)層級(jí)結(jié)構(gòu)。這里得層級(jí)結(jié)構(gòu)就是我們平??吹降媚夸?,子目錄和文件@元素得集合,如圖2所示。
圖2 文件系統(tǒng)實(shí)例
通過上面這張圖專家并不能很清楚得了解文件系統(tǒng)得層級(jí)結(jié)構(gòu)。我們給出Linux操作系統(tǒng)中文件系統(tǒng)得一個(gè)概圖,如圖3所示。通過該圖專業(yè)看出,文件系統(tǒng)中得數(shù)據(jù)呈現(xiàn)為一個(gè)樹形結(jié)構(gòu)。各個(gè)目錄與子目錄之間呈層級(jí)得結(jié)構(gòu)。
圖3 樹形結(jié)構(gòu)得文件系統(tǒng)
文件系統(tǒng)得數(shù)據(jù)管理文件系統(tǒng)最核心得特性自然是數(shù)據(jù)管理了。這里得數(shù)據(jù)管理包括對(duì)整個(gè)磁盤得數(shù)據(jù)管理和對(duì)文件得數(shù)據(jù)管理兩部分。
對(duì)磁盤得管理主要是將磁盤劃分為不同得功能區(qū),最為簡(jiǎn)單得畫法就是分為元數(shù)據(jù)區(qū)和數(shù)據(jù)區(qū)。實(shí)際文件系統(tǒng)得處理要復(fù)雜一些,以Ext2為例,其將磁盤空間劃分為@大小得塊組,然后再對(duì)每個(gè)塊組進(jìn)行管理。
圖4 Ext2磁盤空間管理
在一個(gè)塊組中,最基礎(chǔ)得信息包含數(shù)據(jù)位圖,inode表位圖,inode表和數(shù)據(jù)區(qū)。對(duì)于磁盤空間得管理其實(shí)就是通過位圖來管理得,位圖用來標(biāo)志某塊數(shù)據(jù)是否已經(jīng)被使用得。當(dāng)然,不同得文件系統(tǒng)得管理略有不同,但原理大同小異。
另外一個(gè)比較重要得地方就是對(duì)文件數(shù)據(jù)得管理了。對(duì)于普通用戶來說文件就是一個(gè)線性得數(shù)據(jù)空間,好比一個(gè)大數(shù)組。但是磁盤上專家無法提供這嗎大得空間。因此文件系統(tǒng)在管理文件得時(shí)候是將文件切割為一定大小得邏輯塊得。這樣,文件系統(tǒng)得做法是將文件得邏輯塊與磁盤得物理塊建立對(duì)應(yīng)關(guān)系。這樣,當(dāng)我們?cè)L問文件某個(gè)位置得數(shù)據(jù)得時(shí)候就專業(yè)在磁盤上找到了。
經(jīng)過上述介紹,相信大家對(duì)文件系統(tǒng)有了一個(gè)概要得認(rèn)識(shí)。如果大家想更加深入得了解文件系統(tǒng)得細(xì)節(jié),專業(yè)進(jìn)一步閱讀本號(hào)得相關(guān)專欄。