字體:小 中 大 | |
|
|
2020/11/23 09:58:17瀏覽1333|回應0|推薦0 | |
第九章學習目標 1. 認識作業系統中的檔案系統 2. 學習檔案系統的原理與方法 3. 認識檔案的結構與存取方法 4. 了解檔案系統的作業方式與應用系統 5. 學習檔案系統的實務 主要內容摘要 檔案的用途(檔案的類型、檔案的分享) 檔案的觀念(檔案的屬性、檔案的操作、檔案與目錄形成的架構) 檔案的結構與存取方法(結構化檔案、結構化序列檔案、索引循序檔案、倒轉檔案) 檔案系統的作業方式與應用系統(檔案系統的作業方式、各種應用系統使用的檔案系統) 檔案系統的實務(資料方塊的管理、透過程式語言進行實作、檔案系統的保護機制、檔案系統的掛載) 對於使用者來說,在跟作業系統接觸的過程中最常遇到的就是檔案(file) 檔案可以用來儲存程式與資料,通常作業系統都會含有一個檔案系統,主掌檔案與目錄(directory)的管理,例如微軟公司Windows作業系統中的[檔案總管]。 檔案的用途很多,使用者可以透過檔案來儲存資料,長時間保存的文件可以放在檔案中歸檔,程式語言則利用檔案來儲存可執行的程式碼,幾乎各種場合中都有用到檔案的機會。 檔案目錄結構是一種樹狀結構,作業系統中對於磁碟的管理。
從副檔名(file extension)可以判定檔案的類型,通常應用軟體會訂定所處理的檔案的副檔名,作業系統也可以將某種應用系統跟特定的副檔名關聯起來。
1. 多個使用者分享檔案:作業系統容許多個使用者同時登入就會衍生出檔案的分享、命名與保護的問題。因此,作業系統必須記錄更多的資料,例如檔案的擁有者(owner)、使用者群組(group),以及各檔案對於各使用者與群組的權限設定。 2. 透過遠端的檔案系統:檔案傳輸協定(FTP)可以透過網路來傳遞檔案,分散式的檔案系統(DFS, distributedfile system)可以讓遠端的檔案當成像是自己電腦上的檔案一樣使用。一般的Web瀏覽程式也支援檔案的傳遞。 3. 檔案分享的一致性問題:多人使用相同的檔案勢必會衍生出一致性(consistency)的問題,因為可能會有多個處理元要寫入資料到檔案中,關鍵在於資料更新的先後順序,有點類似處理元的同步問題。之前介紹的方法比較怕碰到檔案I/O與網路的情況,因為可能有延遲與資料傳送緩慢的情況。 LDAP是一種安全的分散式命名機制(secure distributed naming mechanism),一般的企業可以用一個LDAP目錄儲存企業內所有電腦的使用者與資源的相關資訊。對於使用者來說,只要登入一次就能使用企業內所有的資源,就是所謂的單一登入的安全機制 低階的檔案系統(low-level filesystem)提供block-stream的轉譯功能,我們可以把一個byte-stream的檔案看成是一連串的位元組(byte),每個位元組有一個索引(index) ,檔案的位置(即file pointer)加上索引可以找到檔案中的每個位元組。
1. 開啟檔案(檔案名稱): 以檔案名稱來開啟檔案,更新檔案描述中的資料,將檔案位置重設為0,並傳回檔案指定名稱(file identifier)。 2. 關閉檔案(檔案指定名稱) :以檔案指定名稱為參數,釋出檔案描述資料結構與其他相關的資源。 3. 讀取(檔案指定名稱,緩衝區,長度) : 將指定長度的檔案資料拷貝到緩衝區中,同時傳回完成讀取後的檔案位置(file position) 。 4. 寫入(檔案指定名稱,緩衝區,長度) : 將指定長度的資料拷貝從緩衝區寫入目前的檔案位置中,同時傳回完成寫入後的檔案位置(file position) 。 5. 搜尋(檔案指定名稱,檔案位置) : 將目前的檔案位置改成指定的檔案位置,隨後的讀寫操作從新的檔案位置開始。 UNIX檔案系統的檔案描述叫做inode,代表index node,檔案的inode與檔案儲存在一起,BSD UNIX的inode存有Mode、UID、Group ID、byte length、block length、reference count、block references等資料。
結構化檔案 應用程式使用的資料通常都具有某種結構,UNIX檔案屬於byte-stream的檔案,多數的UNIX程式可以把UNIX檔案當成ASCII字元檔案來處理,通常作業系統本身不會特別支援某種結構的檔案,要靠應用程式提供進一步的處理,結構化檔案裡可以容納的資訊五花八門。 圖9-4畫出不具結構與具有結構的檔案之間的差異,左邊的不具結構,右邊的則具有結構。在儲存媒體上,結構化檔案仍然是資料方塊的集合,不過結構化檔案描述(structured file descriptor)必須存有一些處理上需要的資訊: 1. 檔案的型式(file type) : 依據所儲存的資料種類來區分檔案的型式,例如影像檔案、文字檔案等。 2. 存取的方法(access method) : 由於檔案內的資料具有結構,需要有針對檔案結構存取資料的方法。 3. 其他相關的資訊: 例如該種檔案與其他種檔案的關係。
結構化序列檔案 結構化序列檔案(structured sequential file) 是邏輯記錄的集合,檔案的存取也是由檔案位置開始,不過索引指向檔案所儲存的記錄(record) ,而檔案的存取操作與byte-stream檔案不同: 1. 開啟檔案(檔案名稱) 。 2. 關閉檔案(檔案指定名稱) 。 3. 讀取記錄(檔案指定名稱,記錄) 。 4. 寫入記錄(檔案指定名稱記錄) 。 5. 搜尋(檔案指定名稱,檔案位置) 。 檔案中記錄的格式與方塊指定給記錄的方式有關,我們可以用某個數目的位元組來儲存記錄,然後再額外用幾個位元組來儲存記錄描述(record descriptor)資訊,至於如何擷取記錄中的欄位則由應用程式來負責。圖9-5說明了儲存層次之間存在的轉換問題。基本上,在使用者與應用系統的認知上,從檔案得到的就是資料紀錄,對於作業系統來說,檔案只是一連串的byte stream,而儲存磁碟有實際上採用的儲存方法與格式。這些不同的看法之間必須有適當的轉換與對應機制。
索引循序檔案 索引循序檔案(indexed sequential file)在「紀錄頭部資料(record header)」中加上一個索引欄位(index field),當檔案系統取用索引循序檔案中的紀錄時,可以不必循序地一一處理每筆記錄,可直接用索引來存取某筆紀錄,檔案的操作也有所差異: 1. 讀取紀錄(檔案指定名稱,索引) 2. 寫入紀錄(檔案指定名稱,紀錄) 假如要讓使用者用其他的欄位來引用某筆紀錄,則該欄位與索引之間必須有對照表格(lookup table)來記載對應的關係。例如銀行帳號與索引之間的對應的關係。索引循序檔案代表一種檔案的結構。 倒轉檔案(inverted file) 應用程式有時候必須搜尋索引欄位(index field)來取用所要的記錄,例如我們用客戶名稱來擷取帳號資訊,但是一個客戶可能有多個帳戶,這時候所有該客戶的帳戶都會被找出來,然後一一搜尋找出需要的某個帳戶。在這種情形下,與其抓出所有的紀錄,不如抓出索引,減少I/O的次數,因為索引占的儲存空間要比紀錄少得很多。因為當紀錄要存入檔案時,我們也可以把紀錄中的關鍵字(keyword)抓出來放到一個索引表格中,然後以指標指向含有該關鍵字的記錄,這種檔案也叫做倒轉檔案(inverted file) 。 檔案系統的作業方式
這些種類的檔案代表了一般程式在執行時幾乎都避免不了的工作:輸入、輸出與回報錯誤。 檔案系統在這種情況下就可以居間進行協調與轉換的工作,把位元組方塊變成應用程式可以用的資料結構。 檔案系統要提供多少轉譯的功能,一般都決定於作業系統本身的設計,通常可依此特徵將檔案系統分成兩大類 : 1. 低階(low-level)的檔案系統 : 只提供stream-block的轉譯功能,也就是把方塊串(block stream)轉成位元組串(byte stream)就好了。 2. 結構化(structured) 的檔案系統 : 也稱為高階(high-level)的檔案系統,提供record-stream的轉譯功能。 Windows NT和UNIX提供的屬於低階的檔案系統,IBM MVS則採用結構化的檔案系統,Macintosh提供部分的record-stream的轉譯功能,所以也可以歸類為高階的檔案系統。 各種應用系統使用的檔案系統
多媒體文件也是具有結構的檔案,裡頭包含的資訊種類很多,而且有時候儲存容量的需求非常大,通常多媒體文件使用的檔案會用變動長度的記錄(variable-sized record) ,造成以下幾項需求: 1. 使用多媒體的應用程式要有詳盡的轉換功能。 2. 檔案管理程式必須要能自應用程式取得多媒體檔案的存取方法。 作業系統支援檔案系統的細節可以從實作(implementation)中得到充分的了解,雖然每種作業系統的做法可能有些差異,但是基本原理十分類似。以開啟檔案與關閉檔案的作業來說,UNIX系統使用open與close的系統呼叫,Windows NT則有CreateFile與CloseHandle的功能。
資料方塊的管理(block management) 1. 當做儲存媒體上連續的方塊。 2. 當做用連結(link)彼此關聯的方塊。 3. 當做用檔案索引(file index)彼此關聯的方塊。
檔案系統的保護機制 電腦系統儲存的資訊必須受到適當的保護,這裡的「保護」有兩種涵義,一種是指避免讓檔案受到實體的破壞,例如硬碟泡水就是一種實體的破壞;另外一種涵義是指防止檔案受到不當的存取(access),作業系統所探討的檔案保護機制屬於後者。
存取控制(access control) 最簡單的存取控制方式是為每個檔案與目錄設定存取控制清單(ACLs,access control lists), 由這個清單來決定哪些使用者能使用清單關聯的檔案或目錄, 不過這種方法的問題是:要為所有的檔案與目錄設定這樣的清單是很繁雜的工作。 所以改善的做法是將使用者的類型分成檔案的擁有者(owner)、群組(group)與全部(universe)共三大類,不同類的使用者對於檔案的存取有預設的權限,這樣就不必為檔案一一地設定存取清單。 UNIX系統中的檔案權限(以Ubuntu版本為例)
檔案系統的掛載(mount) 檔案必須開啟(open)之後才能使用, 檔案系統則必須掛載(mounted)以後才能讓作業系統的處理元使用。 檔案系統本身形成了一個命名的空間(name space),被掛載的檔案系統必須融入到這個空間裡頭才能讓使用者透過作業系統來進行存取使用。
|
|
( 知識學習|隨堂筆記 ) |