文件系統(tǒng)作用:
- 能夠存儲大量信息
- 使用信息的進(jìn)程終止時桐玻,信息仍然存在
- 必須能使多個進(jìn)程并發(fā)存取有關(guān)信息
文件
文件一種抽象機(jī)制篙挽,提供了一種在磁盤上保留信息而且以后方便讀取的方法。
-
文件命名
文件具體的命名規(guī)則在各個系統(tǒng)中是不同的镊靴,不過所有的現(xiàn)代操作系統(tǒng)都允許用1至8個字母組成的字符串作為合法文件名铣卡。通常文件名中也允許有數(shù)字和一些特殊字符链韭。許多文件系統(tǒng)支持長達(dá)255個字符的文件名。
有的文件系統(tǒng)區(qū)分文件名大小寫煮落,有的不區(qū)分敞峭。UNIX是前一類,MS-DOS是后一類蝉仇。
文件擴(kuò)展名用于表示文件的某些信息旋讹。在某些操作系統(tǒng)(如UNIX)只是有一種約定,不限制使用轿衔;在某些操作系統(tǒng)(如windows)則賦予擴(kuò)展名含義沉迹,可以在操作系統(tǒng)中注冊擴(kuò)展名。
-
文件結(jié)構(gòu)
-
字節(jié)序列
- 操作系統(tǒng)所見的就是字節(jié)害驹,任何含義只在用戶程序中解釋鞭呕。
- Unix和Winodws都是用這種方式。
-
記錄序列
- 約定固定字節(jié)為一記錄
- 讀寫以記錄為單位
- 現(xiàn)在已不使用
-
樹
-
類似B樹
image
-
-
-
文件類型
- 塊特殊文件
- 用于磁盤設(shè)備
- 字符特殊文件
- 用于串行I/O設(shè)備宛官,如打印機(jī)葫松,網(wǎng)絡(luò)等等
- 目錄
- 用于管理文件系統(tǒng)結(jié)構(gòu)的系統(tǒng)文件
- 普通文件
- ASCII文件
- 由多行正文組成
- 每行由回車符或換行符結(jié)束(取決于操作系統(tǒng))
- 優(yōu)勢:可以顯示和打印
- 使用公認(rèn)的標(biāo)準(zhǔn)(ASCII碼),可以更易于實現(xiàn)進(jìn)程間通信
- 二進(jìn)制文件
- 單純的二進(jìn)制序列
- 內(nèi)部結(jié)構(gòu)由使用該文件的用戶程序來解釋
- 例子如下:
- ASCII文件
- 塊特殊文件
-
文件存取
- 順序存取
- 從頭開始按順序讀取文件的全部字節(jié)
- 隨機(jī)存取
- 用seek操作設(shè)定當(dāng)前位置后在進(jìn)行順序讀取底洗。
- 順序存取
-
文件屬性
image
目錄
-
層次目錄系統(tǒng)
-
幾乎所有現(xiàn)代文件系統(tǒng)都是用這個方式組織的
image
-
-
路徑名
- 絕對路徑
- 以分割符開頭
- 相對路徑
- 從工作目錄開始
-
"."代表當(dāng)前目錄腋么,".."代表父目錄。
image
- 絕對路徑
文件系統(tǒng)實現(xiàn)
- 文件系統(tǒng)布局
文件系統(tǒng)存在于磁盤枷恕。磁盤劃分為一個或多個分區(qū)党晋,每個分區(qū)都有一個獨立的文件系統(tǒng)。
磁盤的0號扇區(qū)是主引導(dǎo)記錄(Master Boot Record徐块,MBR)未玻;MBR之后是分區(qū)表,記錄每個分區(qū)的起始和結(jié)束地址胡控。
-
在計算機(jī)被引導(dǎo)的時候
- BIOS讀入并執(zhí)行MBR扳剿。
- MBR做的第一件事是確定活動分區(qū),讀入它的第一個塊昼激,叫做引導(dǎo)塊(boot block)庇绽,并執(zhí)行之。
- 引導(dǎo)塊中的程序?qū)⒀b載該分區(qū)中的操作系統(tǒng)橙困。
- 為了統(tǒng)一起見瞧掺,所有分區(qū)的開始都是引導(dǎo)塊,即使沒有操作系統(tǒng)凡傅。
文件的實現(xiàn)
記錄各個文件分別用到了哪些磁盤塊
- 連續(xù)分配
把文件作為連續(xù)的數(shù)據(jù)塊記錄在磁盤上
優(yōu)點:實現(xiàn)簡單辟狈,只需記錄文件的磁盤地址和文件的塊數(shù);讀操作性能好,因為數(shù)據(jù)塊連續(xù)分配哼转,只有一次尋道和旋轉(zhuǎn)延遲明未。
-
缺點:易產(chǎn)生磁盤碎片。
解決方法:- 磁盤壓縮壹蔓;代價太大
- 維護(hù)一個空閑塊鏈表趟妥;需要知道文件的最終大小
image
-
鏈表分配
使用鏈表記錄磁盤塊
優(yōu)點:可以充分利用磁盤塊,不會產(chǎn)生磁盤碎片
-
缺點:隨機(jī)讀取慢,需要遍歷整個鏈表
image
-
內(nèi)存中采用鏈表分配
將鏈表的指針取出來佣蓉,組成一個數(shù)組(文件分配表披摄,F(xiàn)AT),放在內(nèi)存偏螺。
優(yōu)點:遍歷鏈表無需產(chǎn)生磁盤I/O行疏,隨機(jī)讀取更快。
-
缺點:表放在內(nèi)存,占用太多空間朝墩,不適合大磁盤嫂伞。
image)F.png
-
i節(jié)點
給每個文件分配一個i節(jié)點,其中列出了文件屬性和文件塊的磁盤地址板熊。
只有對應(yīng)文件打開,i節(jié)點才在內(nèi)存。
-
FAT大小取決于磁盤塊的數(shù)量柳譬,而i節(jié)點的大小僅僅取決于文件所占磁盤塊的數(shù)量,所以占內(nèi)存大小大大減小了续镇。
image
目錄的實現(xiàn)
-
打開文件時美澳,操作系統(tǒng)根據(jù)用戶給出的路徑名找到相應(yīng)的目錄項,目錄項提供了查找文件磁盤塊所需要的信息摸航。
該信息可能是整個文件的磁盤地址制跟,或i節(jié)點。
如下圖:
image -
現(xiàn)代操作系統(tǒng)大多支持可變的可變長度的長文件名酱虎,實現(xiàn)方法有下面三種:
- 最簡單的固定一個255字節(jié)的文件名雨膨,很浪費空間不考慮。
- 保存每個文件名的長度读串。如下圖a
-
在堆中存儲文件名聊记,目錄項保留指向文件名的指針。如下圖b
image
-
查找文件名
- 使用散列表
- 查找速度快
- 需要維護(hù)散列表恢暖,管理復(fù)雜排监,所以只有在文件數(shù)量大的目錄項才使用
- 使用高速緩存
- 只有訪問集中在少量的文件才有效。
- 使用散列表
共享文件
-
硬鏈接
目錄指向i節(jié)點,并計數(shù)
只有當(dāng)計數(shù)被置為0的時候杰捂,才真正被刪除舆床。
-
軟連接(符號連接)
- 創(chuàng)建一個類型為LINK的文件,并把該文件放在B下琼娘。
- 里面存儲了實際的 連接文件位置
- 訪問文件峭弟,需要額外的開銷
- 創(chuàng)建一個類型為LINK的文件,并把該文件放在B下琼娘。
日志文件結(jié)構(gòu)系統(tǒng)
- 因為高速緩存的存在附鸽,對磁盤的讀操作比較少,寫操作比較多瞒瘸。
- 磁盤的寫操作耗時大坷备,存在尋道和旋轉(zhuǎn)延遲。
- 對磁盤的寫操作大多是零散的情臭。
由于上面的三個原因省撑,發(fā)展出了日志文件結(jié)構(gòu)系統(tǒng),將零散的寫操作記錄在日志中俯在,每隔一段時間再統(tǒng)一進(jìn)行磁盤寫操作竟秫,節(jié)省尋道和旋轉(zhuǎn)延遲。
日志文件系統(tǒng)
- 將磁盤操作寫入日志中跷乐,當(dāng)系統(tǒng)崩潰再啟動時肥败,根據(jù)日志運行所有未完成的操作。
- 寫入磁盤的操作必須是冪等的愕提,即無論重復(fù)多少次馒稍,結(jié)果都不會變。
虛擬文件系統(tǒng)
- 使用虛擬文件系統(tǒng)(VFS)將多個文件系統(tǒng)整合到一起浅侨。
- 只要一個文件系統(tǒng)提供了VFS的功能調(diào)用接口纽谒,就可以整合到VFS。