文件的簡介
一個文件的屬性
- 文件名
- 標識符
- 類型
- 位置
- 大小
- 創建時間, 上次修改時間
- 文件所有者信息
- 保護信息
文件的分類
無結構文件 ( 流式文件)
如文本文件, 由一些二進制或字符流組成
有結構文件 ( 記錄式文件 )
如數據庫表, 由一組相似的記錄組成, 又稱 "記錄式文件"
記錄 : 一組相關數據項的集合
操作系統應該向上提供的功能
-
創建文件---create系統調用
-
讀文件---read系統調用
-
刪除文件---delete系統調用
-
寫文件---write系統調用
-
打開文件---open系統調用
-
關閉文件---close系統調用
文件的邏輯結構
這里重點討論有結構文件
有結構文件
有結構文件由一組相似的記錄組成, 又稱記錄式文件 . 每條記錄又由若干個數據項組成, 如數據庫表文件. 一般來說, 每條記錄有一個數據項可作為關鍵字. 根據各條記錄的長度是否相等, 可分為定長記錄和可變長記錄兩種.
順序文件
文件中的記錄一個接一個地順序排列( 邏輯上 ) , 記錄可以是定長的或可變長的. 各個記錄在物理上可以順序存儲或鏈式存儲.
索引文件
索引順序文件
索引順序文件是索引文件和順序文件思想的結合. 索引順序文件中, 同樣會為文件建立一張索引表, 但不同的是, 並不是每個記錄都對應一個索引表, 而是一組記錄對應一個索引表項
- 當記錄過多的時候可以建立多級索引表
文件目錄
文件控制塊FCB
單級目錄結構
早期的操作系統並不支持多級目錄, 整個系統只建立一張目錄表, 每個文件占一個目錄項
單級目錄實現了"按名存取", 但是不允許文件重名
單級目錄不支持多用戶操作系統
兩級目錄結構
早期的多用戶操作系統采用兩級目錄結構, 分為主文件目錄和用戶文件目錄.
多級目錄結構 ( 樹形目錄結構 )
- 理解 : 相對目錄可以減少磁盤I/O操作次數
無環圖目錄結構
索引結點 ( FCB的改進 )
將fcb除了文件名之外的所有信息放入索引結點存在外存, 只有找到對應的目錄項時才將索引節點調入內存.
文件的物理結構
文件塊和磁盤塊
在內存管理中, 進程的邏輯地址空間被分為一個個的頁面
同樣的, 在外存管理中, 為了方便對文件數據的管理, 文件的邏輯地址空間也被分為了一個個的文件塊
於是文件的邏輯地址也可以表示為 (邏輯塊號, 塊內地址)的形式
文件分配方式---連續分配
連續分配方式要求每個文件在磁盤上占有一組連續的塊
操作系統可以直接算出邏輯塊號對應的物理塊號, 因此連續分配支持順序訪問和直接訪問( 隨機訪問 )
優點 :
連續分配的文件在順序讀/寫時速度最快
缺點 :
采用連續分配的文件不方便拓展
存儲利用率低, 會產生難以利用的磁盤碎片. ( 可以采用緊湊的方法來處理碎片, 但是需要耗費很大的時間代價 )
文件分配方式---鏈接分配
隱式鏈接
采用隱式鏈接的鏈接分配方式, 很方便文件拓展 , 另外, 所有的空閑磁盤塊都可以被利用, 不會有碎片問題, 外存利用率高
顯式鏈接
文件分配方式---索引分配
文件離散地分配在各個磁盤塊中, 系統為每個文件建立一張索引表, 索引表中記錄了文件的各個邏輯塊對應的物理塊. 索引表存放的磁盤塊稱為索引塊, 文件數據存放的磁盤塊稱為數據塊 .
- 索引分配方式可以支持隨機訪問, 文件拓展也很容易實現, 但是索引表需要占用一定的存儲空間
多層索引
-
K層索引訪問一個數據塊需要K+1次讀磁盤操作
-
多層索引的各層索引大小不能超過一個磁盤塊
-
會計算文件的長度
混合索引
混合索引是多種分配方式的結合
e.g.
一個文件的頂級索引表中既包含直接地址索引 , 又包含一級間接索引 ,還包含兩級間接索引 ...
好處 : 對於小文件來說只需要很少的讀磁盤操作
文件存儲空間管理
空閑表法
空閑表記錄空閑盤塊號的起始地址和空閑塊數
-
要求 : 連續的存儲空間
-
如何分配磁盤塊 : 與內存管理的動態分區類似, 為一個文件分配連續的存儲空間. 同樣可以采用首次適應 , 最佳適應 , 最壞適應等算法.
-
如何回收磁盤塊 :
空閑鏈表法
- 空閑盤塊鏈
- 空閑盤區鏈
位示圖法
成組鏈接法
UNIX系統采用了成組鏈接法對空閑塊進行管理
文件的基本操作
創建文件
使用 "create系統調用"
- 在外存中找到文件所需的時間
- 根據文件的存放路徑的信息找到該目錄對應的目錄文件, 在目錄中創建該文件對應的目錄項 ( 目錄項中包含了文件名, 文件在外存中的存放位置等信息 )
刪除文件
使用 "delete系統調用"
打開文件
-
打開文件表
- 讀寫指針 :讀 / 寫操作進行到的位置記錄
- 訪問權限 : 只讀 / 只寫 / 可讀可寫....
打開文件時不會把文件的數據直接讀入內存 ( 讀文件時才讀入內存 )
關閉文件
讀文件, 寫文件
文件共享
多個用戶共享同一個文件, 意味着系統中只有 "一份" 文件數據 . 並且只要某個用戶改了該文件的數據, 其他用戶也可以看到文件數據的變化.
基於索引結點的共享方式 ( 硬鏈接 )
刪除 :
基於符號鏈的共享方式 ( 軟連接 )
e.g.
windows下的快捷方式
文件保護
-
口令保護 ( 口令放在系統中, 不太安全 )
-
加密保護 ( 安全性高, 但加密 / 解密 需要耗費一定的時間
-
訪問控制
文件系統的層次結構
e.g.