計算機裝置之間差異很大,是以作業系統需要提供一組功能以便于應用程式控制這些裝置。作業系統的IO子系統的重要目的之一是為系統其它部分提供最簡單的接口。檔案接口是接口之一。
一、檔案概念
1、檔案屬性
名稱、辨別符(檔案系統内檔案的唯一标簽)、類型、位置(指向裝置和裝置上檔案位置的指針)、大小、保護、時間
2、檔案操作
1)建立。有兩個必要步驟:第一必須在檔案系統中為檔案找到空間,第二在目錄中為新檔案建立一個條目
2)寫
系統要為該檔案維護一個寫位置的指針。每當有寫操作必須更新寫指針。
3)讀
為了讀檔案,使用一個系統調用,并指明檔案名稱和要讀入檔案塊的記憶體位置。系統為該檔案維護一個讀位置指針。讀和寫使用同一指針。
4)檔案内重定位
設定目前檔案位置指針(讀寫指針)為給定值。不需要真正的IO,又稱為檔案尋址。
5)删除
6)截斷
以上是檔案的6個基本操作。
為提高性能,絕大多數OS要求使用檔案的時候,顯式打開。OS會維護一個全局的打開檔案表,以滿足各種檔案操作需要用到的搜尋、定位需求。每個打開檔案還有一個檔案計數器,以記錄多少程序打開了該檔案。總的來說,打開檔案有:
檔案指針,檔案打開計數器,檔案磁盤位置,通路權限
3、檔案類型
實作檔案類型的常用技術是在檔案名稱内包含類型,比如采用名稱 + 擴充名的方式,後者像UNIX,采用幻數(magic number),儲存在檔案的開始部分,但這些都不是必須的。真正确定檔案類型,或是否要使用該檔案,由應用程式開發者決定。檔案擴充名并非由作業系統所支援,隻用于給操作它們的應用程式以提示。
不過,像Mac OS X,每個檔案都有類型,建立時強制其建立者為相應的應用程式。
作業系統是否支援檔案類型是一件很糾結的事情。支援的檔案類型太少,會很不友善;太多又會讓作業系統過大。
4、檔案結構
磁盤系統通常具有明确的塊大小,而邏輯記錄則長度可變。常用解決辦法是先将若幹邏輯記錄打包,再放入實體記錄。檔案可當做一系列塊的組合。檔案最後一塊通常會有浪費,塊越大,内部碎片就越大。
二、通路方法
1、順序通路(錄音帶模型)
讀操作自動前移檔案指針,寫操作在檔案尾部增加内容,檔案指針移到新增資料後。當然指針也可重置到開始位置,或者向前向後跳過N個記錄。
順序通路适用于順序通路裝置,也适用于随機通路裝置。
2、直接通路(磁盤模型)
檔案由固定長度的邏輯記錄組成,按任意順序進行快速讀和寫。
操作之時,塊号作為參數傳入,可以迅速定位。通常,這個由使用者向作業系統提供的塊号是相對塊号,相對于檔案開始的索引。檔案系統由這個塊号做一定的運算,比如哈希運算,得到絕對塊号。
對支援直接通路的檔案,當然也很容易實作順序通路。
3、其他通路方式
其他通路方式可建立在直接通路方式之上,這些通路通常涉及建立檔案索引。索引包括各塊的指針。查找檔案中的記錄,首先搜尋索引,再根據指針直接通路檔案。
對于大檔案,索引會分級。
三、目錄結構
同一個作業系統可以存在若幹個檔案系統。這好了解,像我們的電腦中,一個盤是FAT32,另一個盤可能是NTFS。
1、存儲結構

卷:硬碟上的存儲區域。驅動器使用一種檔案系統(如 FAT 或 NTFS)格式化卷,并給它指派一個驅動器号。單擊“Windows 資料總管”或“我的電腦”中相應的圖示可以檢視驅動器的内容。一個硬碟包括好多卷,一卷也可以跨越許多磁盤
2、目錄概述
目錄可看做符号表,能将檔案名稱轉換成目錄條目。目錄有多種操作:
搜尋檔案、建立檔案、删除檔案、周遊目錄、重命名檔案、跟蹤檔案系統。所謂跟蹤檔案是指掌握整個檔案系統的細節,有哪些目錄和檔案,使用情況如何,等等。
3、單層結構目錄
所有檔案都在同一目錄中,濟濟一堂,熱鬧。便于了解和支援。但多使用者時,會有嚴格限制。比如檔案名唯一問題。
4、雙層結構目錄
每個使用者都有自己的使用者檔案目錄。每個使用者的檔案目錄結構都一樣。當使用者引用特定檔案時,隻需搜尋他自己的目錄。再也不用擔心自己的檔案名與其他使用者的重名了。
這種結構,如果使用者完全獨立是優點,但如果之間需要合作互動就是缺點。這種情況下,檔案路徑需要帶上使用者名(感覺類似資料庫裡面的schema)。檔案系統中的不同分區可看成是不同的使用者。
有一個特例是系統檔案。系統檔案作為公用,如果隻能在使用者自己檔案目錄内搜尋的話,那麼每個使用者目錄都應該有一份,太浪費。解決辦法是定義一個特殊使用者目錄,所有系統檔案置于其中。當需要搜尋時,先搜使用者檔案夾,找不到就搜這個特殊目錄。
5、樹狀結構目錄
二層結構擴充而來。允許使用者建立自己的子目錄。
6、無環圖目錄
樹狀結構目錄擴充。允許共享目錄和檔案,即同一檔案可分屬多個不同的目錄。
UNIX中,共享目錄或檔案處理為連結。
7.通用圖目錄
無環圖目錄有時容易出現環,比如連結中,出現了自我引用的情況。存在環可能會導緻周遊目錄時死循環。應避免出現環,或者出現之後要消除,比如增加垃圾回收,消除哪些沒有引用或自引用的連結。或者改變周遊算法,周遊目錄時避開連結。
四、檔案系統安裝
檔案系統要正确使用,必須安裝
五、檔案共享
1、多使用者
2、遠端檔案系統
NFS:網絡檔案系統
DFS:分布式檔案系統
1)客戶機-伺服器模型
2)分布式資訊系統
為了便于管理客戶機-伺服器服務,提供用于遠端計算所需資訊的統一通路
3)故障模式
遠端檔案系統很容易出現各種故障,比如掉線等。當故障出現時,客戶機系統并不将此作為本地檔案系統故障那樣進行處理,但會終止對故障伺服器的所有操作,或者等候直至伺服器再次可用。這種故障語義由遠端檔案系統協定所定義和實作。通常,終止操作代價較大,絕大多數分布式檔案系統在故障出現時,選擇等候。
那麼故障恢複時,客戶機和伺服器之間可能需要一定的狀态資訊。NFS采用了一種簡單的方法實作了無狀态的DFS,但它不夠安全。
3、一緻性語義
多使用者操作情況下,如何保持檔案一緻性。
1)UNIX語義
使用者的寫操作,可以被其他所見
允許使用者共享檔案指針位置,移動檔案指針會影響其他使用者
采用UNIX語義,一個檔案與單個實體映射關聯,互斥通路。
2)會話語義
使用者寫操作不能立即被打開同一檔案的其他使用者所見
檔案關閉後,修改隻能被新打開的會話所見,已經打開的使用者看不到
采用這種語義,一個檔案可以對多個實體映射進行關聯,并發性很好。
3)不可修改共享檔案語義
既然是共享檔案,就不能修改,隻讀。
在分布式系統中實作這種語義最簡單。
六、保護
檔案的保護包括可靠性保護和防止非法通路。可靠性通常由檔案備份提供;這裡說的保護是指防止非法通路。
1、通路類型
通過限制可進行的檔案通路類型,比如說:
讀、寫、執行、添加、删除、清單清單