文件目錄結構


與文件管理系統和文件集合相關聯的是文件目錄,它包含有關文件的信息,包括屬性、 位置和所有權等,這些信息主要是由操作系統進行管理。為實現目錄管理,操作系統中引入了文件控制塊的數據結構。

1) 文件控制塊。

文件控制塊(FCB)是用來存放控制文件需要的各種信息的數據結構,以實現“按名存取”。FCB的有序集合稱為文件目錄,一個FCB就是一個文件目錄項。為了創建一個新文件,系統將分配一個FCB並存放在文件目錄中,成為目錄項。

FCB主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置、文件的邏輯結構、文件的物理結構等。
  • 存取控制信息,如文件存取權限等。
  • 使用信息,如文件建立時間、修改時間等。

2) 索引結點。

在檢索目錄文件的過程中,只用到了文件名,僅當找到一個目錄項(查找文件名與目錄項中文件名匹配)時,才需要從該目錄項中讀出該文件的物理地址。也就是說,在檢索目錄時,文件的其他描述信息不會用到,也不需調入內存。因此,有的系統(如UNIX,見表4-1)釆用了文件名和文件描述信息分開的方法,文件描述信息單獨形成一個稱為索引結點的數據結構,簡稱為 i 結點。在文件目錄中的每個目錄項僅由文件名和指向該文件所對應的i結點的指針構成。

目錄結構

在理解一個文件系統的需求前,我們首先來考慮在目錄這個層次上所需要執行的操作,這有助於后面文件系統的整體理解。

  • 搜索:當用戶使用一個文件時,需要搜索目錄,以找到該文件的對應目錄項。
  • 創建文件:當創建一個新文件時,需要在目錄中增加一個目錄項。
  • 刪除文件:當刪除一個文件時,需要在目錄中刪除相應的目錄項。
  • 顯示目錄:用戶可以請求顯示目錄的內容,如顯示該用戶目錄中的所有文件及屬性。
  • 修改目錄:某些文件屬性保存在目錄中,因而這些屬性的變化需要改變相應的目錄項。


操作時,考慮以下幾種目錄結構:

1) 單級目錄結構。

在整個文件系統中只建立一張目錄表,每個文件占一個目錄項,如下圖所示。


圖 單級目錄結構


當訪問一個文件時,先按文件名在該目錄中查找到相應的FCB,經合法性檢查后執行相應的操作。當建立一個新文件時,必須先檢索所有目錄項以確保沒有“重名”的情況,然后在該目錄中增設一項,把FCB的全部信息保存在該項中。當刪除一個文件時,先從該目錄中找到該文件的目錄項,回收該文件所占用的存儲空間,然后再清除該目錄項。

2) 兩級目錄結構。

單級目錄很容易造成文件名稱的混淆,可以考慮釆用兩級方案,將文件目錄分成主文件目錄(Master File Directory, MFD)和用戶文件目錄(User File Directory, UFD)兩級,如圖所示。


圖 兩級目錄結構


主文件目錄項記錄用戶名及相應用戶文件目錄所在的存儲位置。用戶文件目錄項記錄該用戶文件的FCB信息。當某用戶欲對其文件進行訪問時,只需搜索該用戶對應的UFD,這既解決了不同用戶文件的“重名”問題,也在一定程度上保證了文件的安全。

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

將兩級目錄結構的層次關系加以推廣,就形成了多級目錄結構,即樹形目錄結構,如圖所示。

用戶要訪問某個文件時用文件的路徑名標識文件,文件路徑名是個字符串,由從根目錄出發到所找文件的通路上的所有目錄名與數據文件名用分隔符鏈接起來而成。從根目錄出發的路徑稱絕對路徑。當層次較多時,每次從根目錄查詢浪費時間,於是加入了當前目錄,進程對各文件的訪問都是相對於當前目錄進行的。當用戶要訪問某個文件時,使用相對路徑標識文件,相對路徑由從當前目錄出發到所找文件通路上所有目錄名與數據文件名用分隔符“/”鏈接而成。


圖 樹形目錄結枸


上圖是Linux操作系統的目錄結構,“/dev/hda”就是一個絕對路徑。若當前目錄為 “/bin”,則“./ls”就是一個相對路徑,其中符號表示當前工作目錄。

通常,每個用戶都有各自的“當前目錄”,登錄后自動進入該用戶的“當前目錄”。操作系統提供一條專門的系統調用,供用戶隨時改變“當前目錄”。例如,UNIX系統中, “/etc/passwd”文件就包含有用戶登錄時默認的“當前目錄”,可用cd命令改變“當前目錄”。

樹形目錄結構可以很方便地對文件進行分類,層次結構清晰,也能夠更有效地進行文件的管理和保護。但是,在樹形目錄中查找一個文件,需要按路徑名逐級訪問中間結點,這就增加了磁盤訪問次數,無疑將影響查詢速度。


免責聲明!

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



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