操作系統---文件管理


文件的簡介

一個文件的屬性

  • 文件名
  • 標識符
  • 類型
  • 位置
  • 大小
  • 創建時間, 上次修改時間
  • 文件所有者信息
  • 保護信息

文件的分類

無結構文件 ( 流式文件)

如文本文件, 由一些二進制或字符流組成

有結構文件 ( 記錄式文件 )

如數據庫表, 由一組相似的記錄組成, 又稱 "記錄式文件"

記錄 : 一組相關數據項的集合

操作系統應該向上提供的功能

  • 創建文件---create系統調用

  • 讀文件---read系統調用

  • 刪除文件---delete系統調用

  • 寫文件---write系統調用

  • 打開文件---open系統調用

  • 關閉文件---close系統調用

文件的邏輯結構

graph LR A[文件的邏輯結構]---B[有結構文件] A---C[無結構文件] B---b1[順序文件] B---b2[索引文件] B---b3[索引順序文件]

這里重點討論有結構文件

有結構文件

有結構文件由一組相似的記錄組成, 又稱記錄式文件 . 每條記錄又由若干個數據項組成, 如數據庫表文件. 一般來說, 每條記錄有一個數據項可作為關鍵字. 根據各條記錄的長度是否相等, 可分為定長記錄可變長記錄兩種.

順序文件

文件中的記錄一個接一個地順序排列( 邏輯上 ) , 記錄可以是定長的或可變長的. 各個記錄在物理上可以順序存儲或鏈式存儲.

1592122217458

索引文件

1592122470209

索引順序文件

索引順序文件是索引文件和順序文件思想的結合. 索引順序文件中, 同樣會為文件建立一張索引表, 但不同的是, 並不是每個記錄都對應一個索引表, 而是一組記錄對應一個索引表項

  • 當記錄過多的時候可以建立多級索引表

文件目錄

1592122925118

文件控制塊FCB

1592123193134

單級目錄結構

早期的操作系統並不支持多級目錄, 整個系統只建立一張目錄表, 每個文件占一個目錄項

單級目錄實現了"按名存取", 但是不允許文件重名

單級目錄不支持多用戶操作系統

兩級目錄結構

早期的多用戶操作系統采用兩級目錄結構, 分為主文件目錄用戶文件目錄.

1592123503540

多級目錄結構 ( 樹形目錄結構 )

1592123608962

  • 理解 : 相對目錄可以減少磁盤I/O操作次數

無環圖目錄結構

1592123832891

索引結點 ( FCB的改進 )

1592124636813

將fcb除了文件名之外的所有信息放入索引結點存在外存, 只有找到對應的目錄項時才將索引節點調入內存.

文件的物理結構

1592125183506

文件塊和磁盤塊

在內存管理中, 進程的邏輯地址空間被分為一個個的頁面

同樣的, 在外存管理中, 為了方便對文件數據的管理, 文件的邏輯地址空間也被分為了一個個的文件塊

於是文件的邏輯地址也可以表示為 (邏輯塊號, 塊內地址)的形式

文件分配方式---連續分配

連續分配方式要求每個文件在磁盤上占有一組連續的塊

操作系統可以直接算出邏輯塊號對應的物理塊號, 因此連續分配支持順序訪問和直接訪問( 隨機訪問 )

優點 :

連續分配的文件在順序讀/寫時速度最快

缺點 :

采用連續分配的文件不方便拓展

存儲利用率低, 會產生難以利用的磁盤碎片. ( 可以采用緊湊的方法來處理碎片, 但是需要耗費很大的時間代價 )

文件分配方式---鏈接分配

隱式鏈接

1592126012800

采用隱式鏈接的鏈接分配方式, 很方便文件拓展 , 另外, 所有的空閑磁盤塊都可以被利用, 不會有碎片問題, 外存利用率高

顯式鏈接

1592126249939

文件分配方式---索引分配

文件離散地分配在各個磁盤塊中, 系統為每個文件建立一張索引表, 索引表中記錄了文件的各個邏輯塊對應的物理塊. 索引表存放的磁盤塊稱為索引塊, 文件數據存放的磁盤塊稱為數據塊 .

1592381688188

  • 索引分配方式可以支持隨機訪問, 文件拓展也很容易實現, 但是索引表需要占用一定的存儲空間

多層索引

1592382455189

  • K層索引訪問一個數據塊需要K+1次讀磁盤操作

  • 多層索引的各層索引大小不能超過一個磁盤塊

  • 會計算文件的長度

混合索引

混合索引是多種分配方式的結合

e.g.

一個文件的頂級索引表中既包含直接地址索引 , 又包含一級間接索引 ,還包含兩級間接索引 ...

好處 : 對於小文件來說只需要很少的讀磁盤操作

文件存儲空間管理

1592383125175

空閑表法

空閑表記錄空閑盤塊號的起始地址和空閑塊數

1592383589940

  • 要求 : 連續的存儲空間

  • 如何分配磁盤塊 : 與內存管理的動態分區類似, 為一個文件分配連續的存儲空間. 同樣可以采用首次適應 , 最佳適應 , 最壞適應等算法.

  • 如何回收磁盤塊 :

1592383782922

空閑鏈表法

  1. 空閑盤塊鏈

1592383903894

  1. 空閑盤區鏈

1592384003994

位示圖法

1592384113344

成組鏈接法

UNIX系統采用了成組鏈接法對空閑塊進行管理

講的很好的一篇圖文結合博客

1592384420517

文件的基本操作

創建文件

使用 "create系統調用"

  1. 在外存中找到文件所需的時間
  2. 根據文件的存放路徑的信息找到該目錄對應的目錄文件, 在目錄中創建該文件對應的目錄項 ( 目錄項中包含了文件名, 文件在外存中的存放位置等信息 )

刪除文件

使用 "delete系統調用"

1592388102822

打開文件

1592388197329

  • 打開文件表

    • 讀寫指針 :讀 / 寫操作進行到的位置記錄
    • 訪問權限 : 只讀 / 只寫 / 可讀可寫....

    打開文件時不會把文件的數據直接讀入內存 ( 讀文件時才讀入內存 )

1592390588458

關閉文件

1592390729674

讀文件, 寫文件

1592390998669

1592391023676

文件共享

多個用戶共享同一個文件, 意味着系統中只有 "一份" 文件數據 . 並且只要某個用戶改了該文件的數據, 其他用戶也可以看到文件數據的變化.

基於索引結點的共享方式 ( 硬鏈接 )

1592439297724

刪除 :

1592439390965

基於符號鏈的共享方式 ( 軟連接 )

1592439637452

e.g.

windows下的快捷方式

1592439661362

文件保護

  1. 口令保護 ( 口令放在系統中, 不太安全 )

  2. 加密保護 ( 安全性高, 但加密 / 解密 需要耗費一定的時間

  3. 訪問控制

1592440297696

文件系統的層次結構

1592441201502

e.g.

1592441433091


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM