# File System Interface

檔案系統是一套實現了資料的儲存、分級組織、存取和取得等操作的抽象資料類型(Abstract data type)

檔案系統使用檔案和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理裝置使用資料塊的概念,用戶使用檔案系統來儲存資料不必關心資料實際儲存在硬碟(或者光碟)的位址為多少的資料塊上,只需要記住這個檔案的所屬目錄和檔案名

一個好的檔案系統須具有:

  • 良好的空間管理
  • 有效的資料存取
  • 好的容錯能力

完整的檔案系統包含三個部分:

  • 檔案
  • 目錄結構:檔案分門別類地儲存於硬碟
    系統通常會有兩個獨立的目錄結構,邏輯目錄可以指向實體目錄的項目
    1. 實體目錄(Physical Directory):每個實體設備皆有,以描述該設備上所有檔案的實體特性
      如:檔案位在哪裡、有多長、採用何種配置等
    2. 邏輯目錄(Logical Directory):設備中檔案的邏輯結構,專門記錄檔案的邏輯特性
      如:名稱、檔案型態、擁有者、保護存取代碼等
  • 分割:將一個實體硬碟分成數個邏輯上的硬碟

# 檔案屬性 (Metadata):檔案儲存於硬碟中,系統同時儲存跟檔案相關的資料稱為檔案屬性值

  • 檔案名稱:給人看
  • ID:給機器看
  • 型態:以辨識不同資料型態的檔案,包含目錄、裝置、普通檔案
  • 位置:指向硬碟實體儲存位置的指標
  • 大小:儲存於硬碟中的儲存空間
  • 保護:安全上的考量
  • 擁有者
  • 日期資訊:檔案建立、修改的日期時間

# File Operations

  • 建立檔案 (Create)
  • 寫入檔案 (Write): 必須更新寫入指標 (write pointer) 到檔案的位置
  • 讀取檔案 (Read): 必須更新讀出指標 (read pointer) 到檔案的位置
    目前檔案位置指標 (current-file-position pointer): 通常一個行程只會讀取或寫入一個檔案,因此讀和寫使用共同的指標,能減省目錄空間
  • 重置檔案 (Reposition within file): 搜尋目錄以找到相關的進入點,也稱為搜尋 (seek)
  • 刪除檔案 (Delete)
  • 縮減檔案 (Truncate): 將檔案長度重置,並將檔案空間釋放

# Open-File Tables

當檔案第一次被使用時,作業系統必須到磁碟的「Physical directory」找出檔案的配置資訊,接著將此資訊複製到作業系統的記憶體空間之中的一個表格稱為「Open file table」。將來對這個檔案進行任何操作之前,作業系統只需要到此表格搜尋取得檔案的配置資訊即可

由於「Open file table」中的檔案很少 (E.g., 20 個),搜尋的時間可以大幅降低,此表格位於記憶體中,所以可以節省可觀的 I/O time (次數)

因為檔案可以被多個 Process 共用,「Open file table 」分為:

# Per-process table

  • Tracking 所有被這個 process 打開的 files
  • Current file pointer for each opened file
  • 存取權限和 accounting information:CPU 數量,真實使用的時間,時間限制,帳戶數量,行程數量

# System-wide table

  • 每個在 per-process table 的 entry 指到這個 table
  • Process-independent information:disk location, access dates, file size
  • Open count
    • 有幾個 file pointer 指在上面意指現階段有多少讀寫者 access 到此檔案上
    • 都存取 a,資料一致性,避免 duplicate

# Open File Attributes

  • Open-file attributes (metadata)
    • File pointer (per-process)
      為程式讀寫檔的讀寫頭,落在讀寫檔結束的當下
    • File open count (system table)
    • Disk location (system table)
    • Access rights (per-process)
  • File types
    • .exe, .com, .obj, .cc, .mov, etc
    • Hint for OS to operate file in a reasonable way

# 存取方式 (Access Methods)

可看 programmer 需要哪種讀取,在看提供哪種 api,還有硬碟的讀取特性

# 循序存取 (Sequential Access)

  • 依照記錄次序一一存取區段,可以向前或向後 n 個紀錄
  • 因為磁頭的關係,若是 random,移動磁頭花時間
  • 邏輯上連續,但檔案儲存實體硬碟位置不一定要連續
  • Reset:重置 file pointer 到 file 的起始點

# 直接存取 (Direct Access)

  • 可以 access 在任意位置的 element
  • File operations 需要 block #作為參數
  • 檔案由多個大小固定的區塊所組成,可直接將檔案指標移動到某個特定的區塊並一次讀取整個區塊

# 索引存取 (Index Access)

  • Index:包含 pointers to blocks of a file
  • To find a record in a file:
    • 搜尋 index file -> 找到 pointer
    • 使用 pointer 去直接存取 record
  • 若是一個 large file -> index 可能會變很大

# 目錄和磁碟結構 (Disk Structure and Directory Structure)

  • 磁碟可被分割成多個檔案系統
    • 卷 (volume): 每個包含一個檔案系統的實體
    • 每個檔案系統將系統中的檔案資訊存放在裝置目錄 (device directory) 或卷表內容 (volume table of content)
  • 目錄概觀
    • 目錄可視為把檔名轉換成目錄進入點的符號表
    • 目錄操作
      • 搜尋
      • 建檔
      • 刪除
      • 列出目錄
      • 更改檔名
      • 追蹤檔案系統

# 單層目錄 (Single-Level Directory)

  • 所有的 file 都在同一個 directory,是最簡單的目錄結構
  • 當檔案增加,追蹤變得困難
  • 檔案名稱必須要唯一(不同使用者也是)

# 雙層目錄 (Two-Level Directory)

  • directory 被分給每個使用者
  • path = user name + file name
  • single-level dir 的問題依然存在在每個使用者
  • 缺點:不同使用者不能共享檔案與目錄

# 樹狀目錄

  • 現用目錄 (currrent directory): 包含使用者目前最感興趣的大部分檔案
  • 如果要指定一個檔案,以上圖 first 來說
    • 絕對路徑名稱 (absolute path name):root/spell/mail/ptr/first(從 root 開始
    • 相對路徑名稱 (relative path name):/ptr/first (目前目錄為 root/spell/mail)(從 directory 開始

# 非循環圖形目錄 (Acyclic-Graph Directories)

  • 使用 links(指向其他檔案或目錄的指標) 去分享 files 或 directories
  • 允許共用的子目錄或檔案共享
  • 不會有循環,但要避免循環的代價高

# 一般圖形目錄 (General Graph Directory)

  • 會有循環,可能導致搜尋時無限迴圈(解決:限制目錄被存取的次數)
  • 廢置空間收集法 (garbage collection):判斷資料何時被刪除及磁碟空間可否重新分配

# 檔案系統安裝 (File System Mounting)


檔案系統必須先安裝才可以被系統的行程取得

  • 安裝點 (mount point):系統和連結上此檔案系統的檔案結構中的位置

# 檔案分享 (File Sharing)

  • 多位使用者 每個 user:(userID, groupID)
    • 一個 user 可以屬於多個 group
    • 系統必須對分享製作保護
    • 檔案或目錄的
      • 擁有者 (owner)/ 使用者 (user): 可以更改屬性、授予存取權利、最大控制權的使用者
      • 群組 (group): 可以分享檔案的一小組使用者
  • 遠端檔案系統
    遠端檔案分享的方法:
    • 使用檔案傳輸協定 (FTP,File Transfer Protocol):在機器間傳輸
    • 分散式的檔案系統 (DFS,distributed file system):讓遠端的目錄在本地端能被發現
    • 全球資訊網 (World Wide Web):網頁瀏覽器用來取得遠端檔案的存取權
  • 匿名存取 (anonymous access): 允許使用者在遠端系統上沒有帳號就可以傳輸
  • 客戶 - 伺服器模型 (Client-server model)
    • 客戶端 (client):包含檔案
    • 伺服器 (server):希望存取檔案
    • 認證客戶較難,辨識符號 (IP 等等) 可以偽造

# Protection

  • File 的擁有者或是創檔者必須能去控制
    • 哪些事能被做
    • 被誰做
    • Access control list(ACL)
  • Files should be kept from
    • 物理損壞(reliability): i.e. RAID
    • 不正確的存取(protection): i.e. password
  • RAID(Redundant Array of Independent Disks,獨立磁碟備援陣列)
    • RAID 在實體上是多顆硬碟,在系統中被當作一顆硬碟使用,而在作業系統底下,也還是可以將它分割為單一或多個分割區。因此建立好的 RAID,使用起來跟單一硬碟是完全相同的,只是依組成方式的不同
    • RAID 可以提供更大的容量、更高的讀寫效能,或是額外的「安全性」
      (這裡所說的「安全性」,是指硬碟損毀之後資料重建、回復的能力,與加密防駭等功能無關)

# Ref Notes

  • Kipper’s Note
  • Chang-Chia-Chi’s Note
  • 陳品媛的筆記
  • Mr. Opengate. OS - Ch10
  • WillyWangkaa’s Note