1. 程式人生 > >現代作業系統之檔案系統(上)

現代作業系統之檔案系統(上)

程序執行時,可以在他自己的地址空間記憶體儲一定量的資訊,但儲存容量受虛擬地址空間大小的限制。

程序上儲存空間的第二個問題是——當程序終止時,他儲存的資訊也隨之消失。

第三個問題是:經常需要多個程序同事都去同一個資訊(或部分資訊)

檔案鎖程序建立的資訊邏輯單元。一個磁碟一般含有幾千甚至幾百萬個檔案,每個檔案是獨立於其他檔案的。

程序可以讀取已經存在的檔案,並在需要時建立新的檔案。儲存在檔案中的資訊必須是持久的,也就是說,不會因為程序的建立終止而受損,一個檔案應該只在其所有者明確刪除它的情況下才會消失。

檔案

檔案命名

檔案是一種抽象機制,它提供了一種在磁碟上保留資訊而方便以後讀取的方法。 檔案的具體命名規則在不同系統中是不相同的,不過所有的現代作業系統都允許用1個到8個字母組成的字串作為合法的檔名。 在某些系統中,副檔名只是一種約定,作業系統並不強迫採用它。 相反,windows對副檔名賦予含義,使用者(或程序)在作業系統中註冊副檔名,並且規定哪個程式擁有該副檔名。當用戶雙擊某檔名時,“擁有”該副檔名的程式就騎寵並執行該檔案。

檔案結構

1.無結構位元組序列:作業系統不知道也不關心檔案內容是什麼,作業系統所見到的是位元組,其任何含義只在使用者程式中解釋。在UNIX和Windows中都採用這種方法。 2.檔案是具有固定長度記錄的序列,每個記錄都有其內部結構。把檔案作為記錄序列的中心思想是:讀操作返回一個記錄,而寫操作重寫或追加一個記錄。 3.檔案由一顆記錄樹構成,每個記錄並不具有同樣的長度,而記錄的固定位置上有一個“鍵”欄位。這棵樹按“鍵”欄位進行排序,從而可以對特定“鍵“進行快速查詢。(在這種檔案中向檔案新增紀錄的位置是由作業系統決定的,而不是使用者決定的)


檔案型別

普通檔案中含有使用者資訊。 目錄是管理檔案系統結構的系統檔案。 字元特殊檔案和輸入/輸出有關,用於序列IO裝置。 塊特殊檔案使用者磁碟類裝置。 普通檔案氛圍ASCII檔案和二進位制檔案。
ASCII檔案的最大優勢是可以顯示和列印,還可以用任何文字編輯器進行編輯。另外,很多程式都把ASCII檔案進行輸入輸出,因此可以當作管道使用。 打印出來的二進位制檔案無法被理解,二進位制檔案具有一定的結果,使用該檔案的程式才瞭解這種結構。 所有作業系統必須能過識別他們自己的可執行檔案的檔案型別,其中有些作業系統還可識別更多的資訊。

檔案存取

順序存取:在儲存介質是磁帶而不是磁碟時,順序存取檔案是很方便的。 當用磁碟來儲存檔案時,我們可以不按順序地讀取檔案中的位元組或記錄,或者按照關鍵字而不是位置存取記錄。這種可以以任何次序讀取檔案成為隨機存取檔案。 有兩種方法可以只是從何處開始讀取檔案。一種是每次read操作都給出開始讀檔案的位置。另一種是用一個特殊的seek操作設定當前位置,seek之後從該位置順序讀取額外你就。(UNIX和WINDOWS採取後一種)

檔案屬性

檔案都有檔名和資料。另外,所有的作業系統還會保留其它與檔案相關的資訊,如果檔案建立的時間等,這些資訊成為檔案屬性,有些人稱之為元資料。 記錄長度\鍵的位置和鍵的長度等欄位只能出現現在用關鍵字查詢記錄的檔案裡,他們提供了查詢關鍵字所需的資訊。

檔案操作

使用檔案的目的是儲存資訊並方便以後的檢索。對於儲存和檢索,不同系統提供不同的操作 P148


目錄

一級目錄系統

層次目錄系統

路徑名

指明檔名常用的方法有兩種,第一種:每一個檔案都賦予一個絕對路徑名,它由根目錄到到檔案的路徑組成。 若路徑名第一個字元就是分隔符,則這個路徑就是絕對路徑。 另外一種方法是相對路徑名,它和工作目錄有關。 若一個陳旭需要存取某個特定的檔案,而不論當前目錄是什麼。這時,都應該使用絕對路徑名。 每個程序都有自己的工作目錄,這樣在程序改變工作目錄並退出後,其他程序不會受到影響。 對程序而言,切換工作目錄是安全的。但如果改變了庫過程的工作目錄,且工作完畢之後沒有該回去,則其它程式有可能無法正常執行。

目錄操作

開啟和讀取目錄與檔案相同,讀取之前必須開啟。 link連結技術允許多個目錄出現同一個檔案。(兩個檔名指向了同一個內部資料結構) unlink時若只出現在一個目錄中,則刪除檔案。 與連線檔案的一種不同思路是符號連線。當時用第一個檔案時,錄入開啟,作業系統沿著路徑找到末端的名字。然後它使用該新名字啟動查詢程序。符號連線的有點礙於他能跨越磁碟界限,甚至可以命名遠端計算機上的檔案,不過符號連結的實現不像硬連結那樣有效率。