# ch10 File System ## 文件概念: Contiguous logical address space連續邏輯位址空間 ### 文件架構: * None: words sequence, bytes。 * Simple record struture: Lines, Fixed length, Variable length。 * Complex Structures: Formatted document, Relocatable load file。 可以使用CR,LF等控制字元來用None模擬後兩種。由OS和程式決定。 ### 文件屬性: 名稱, ID, 長度, 上次更新時間, 上次存取時間, 位置, 種類, 保護, 時間 這些會保存在文件夾架構中。 ## 文件操作: 新增、寫、讀、刪除、文件重定位、中止。 Open(),Close()。控制文件內容在disk和memory間的IO。 ### Open() 管理開啟的文件需要幾個資料: * 檔案指標:指向開啟檔案的每個進程的最後讀/寫位置的指標 * 檔案開啟計數:檔案開啟次數的計數器 - 允許在最後一個行程關閉開啟檔案表時從開啟檔案表中刪除數據 * 檔案的磁碟位置:資料存取資訊的快取 * 存取權限:每個進程的存取模式訊息 #### Open File Locking Shared Lock: 多個進程可以同時取得鎖(如讀取器鎖) Exclusive Lock: 一次只有一個程序可以取得這樣的鎖(如寫入器鎖) 強制Mandatory或建議Advisory檔案鎖定機制: 強制 - 一旦進程取得排它鎖,作業系統將阻止任何其他進程存取鎖定的檔案。 (Windows) 建議 – 作業系統不會阻止進程取得鎖定檔案的存取權限。相反,必須編寫該進程,以便在存取檔案之前手動取得鎖定。 (UNIX) ## Access Methods 1. Sequential Access read next, write next, reset ![image](https://hackmd.io/_uploads/S1pLIA2rA.png) ![image](https://hackmd.io/_uploads/SJswIA3S0.png) 2. Direct Access read n, write n, position to n: read/write next, rewrite n 3. Index and Relative Files ![image](https://hackmd.io/_uploads/BkcKLRnBA.png) ## Directory Structure 包含所有檔案資訊的節點集合 ![image](https://hackmd.io/_uploads/BJe3U0nrC.png) 目錄結構和檔案都駐留在磁碟上,這兩種結構的備份保存在磁帶上。 ## Disk Structure 磁碟可以細分為分割區,可以透過 RAID 保護磁碟或分割區免受故障影響,可以原始使用 – 沒有檔案系統,或使用檔案系統格式化。分割區也稱為迷你磁碟、切片。每個包含檔案系統的磁碟區也會在裝置目錄device directory或volume table of contents磁碟區目錄中追蹤該檔案系統的信息。 除了通用檔案系統之外,還有許多專用檔案系統,通常都在同一台作業系統或電腦 (Solaris) 中。 ### Directory 操作 查找文件、新增文件、刪除文件、列出文件夾、重命名文件、遍歷文件系統。 ### (邏輯地)組織目錄獲取 效率——快速定位文件 命名-方便用戶: 兩個使用者可以對不同的檔案使用相同的名稱,同一檔案可以有多個不同的名稱。 分組 – 依屬性對檔案進行邏輯分組, 1. 單級目錄: ![image](https://hackmd.io/_uploads/S1HW_ChB0.png) Naming Problem,Grouping problem。 2. 雙級目錄: 按照用戶分割 ![image](https://hackmd.io/_uploads/HkZSdChHC.png) 沒有分組能力 3. 樹結構目錄: ![image](https://hackmd.io/_uploads/B1rOO02BR.png) 刪除目錄時,會刪除所有子文件和子目錄。 4. 非循環圖目錄: ![image](https://hackmd.io/_uploads/r1UC_03SA.png) 允許目錄共享子目錄和檔案。相同的檔案或子目錄可能在兩個不同的目錄中共用檔案和子目錄可以透過多種方式實現。 建立一個新的目錄條目 - Link 連結 - 指向另一個檔案或子目錄的指標。連結可以被實作為絕對或相對路徑名。 解析連結 - 使用該路徑名來定位真實檔案。連結很容易透過目錄條目中的格式來識別,並且是有效的間接指標。 5. 通用圖目錄: 使用非循環圖結構的一個嚴重問題是確保沒有循環。然而,當我們添加連結時,樹結構被破壞,從而產生簡單的圖結構。 ![image](https://hackmd.io/_uploads/BJTosChrC.png) 目錄中是否允許存在循環。無限循環不斷地搜尋循環。什麼時候可以刪除檔案? 垃圾收集方案用於確定何時刪除最後一個引用以及何時可以重新分配磁碟空間。 每次新增連結時使用循環檢測演算法來判斷是否OK。 ### 檔案系統掛載 檔案系統必須先掛載才能存取,未掛載的檔案系統在掛載點掛載 ![image](https://hackmd.io/_uploads/r1jb3A3HC.png) ![image](https://hackmd.io/_uploads/r1QX2R2H0.png) ## 文件共享 在多用戶系統上共用檔案是可取的,共用可以透過保護方案來完成,在分散式系統上,檔案可以透過網路共用,網路檔案系統 (NFS) 是一種常見的分散式檔案共用方法。 檔案共享– 多個用戶用戶ID: * 識別用戶,允許針對每個用戶進行權限和保護群組ID * 允許用戶分組,允許群組存取權限 使用網路允許系統之間的檔案系統存取: 透過FTP 等程式手動。進行自動無縫地使用分散式檔案系統。透過 WWW 半自動。 ### 檔案共享 – 遠端檔案系統 客戶端-伺服器模型允許客戶端從伺服器掛載遠端檔案系統。 伺服器可以服務多個客戶端。 客戶端和客戶端上的使用者識別不安全或複雜。 NFS 是標準UNIX 用戶端-伺服器檔案共用協定。 CIFS(通用Internet 檔案系統)是標準Windows。 協定標準作業系統檔案呼叫被轉換為遠程調用。 LDAP(輕量級目錄存取協定)、DNS、NIS、Active Directory(Windows XP 和 Windows 2000)等分散式資訊系統(分散式命名服務)實現對遠端運算所需資訊的統一存取 ### 檔案共享 – 故障模式 遠端檔案系統新增的故障模式,由於網路故障、伺服器故障 從故障中恢復可能涉及有關每個遠端請求狀態的狀態訊息 無狀態協定(例如 NFS)包含每個請求中的所有信息,允許輕鬆恢復,但安全性較低 ### 檔案共享——一致性語義 一致性語意指定多個使用者如何同時存取共用文件。AFS 具有會話語義,寫入僅對檔案關閉後啟動的會話可見。 ### Protection Access Lists and Groups ![image](https://hackmd.io/_uploads/SyXA6R3HA.png) 要求管理者建立一個群組(唯一名稱),例如 G,並在該群組中添加一些使用者。對於特定檔案(例如遊戲)或子目錄,定義適當的存取權限。 chgrp G game ![image](https://hackmd.io/_uploads/S1sBCChHR.png)