文件之間的組織結構清晰易於查找。ide
目錄文件自己就是一種有結構文件,由一條條記錄組成。每條記錄對應一個在該放在該目錄下的文件。操作系統
咱們雙擊照片後,操做系統會在這個目錄表中找到關鍵字照片對應的目錄項(也就是記錄),而後從外存中將照片目錄的信息讀入內存,因而照片目錄的內容就能夠顯示出來了指針
目錄文件中的一條記錄就是一個文件控制塊(FCB).blog
FCB有序集合稱爲「文件目錄」,一個FCB就是一個文件目錄項。FCB中包含了文件的基本信息(文件名,物理地址,邏輯結構,物理結構等),存取控制信息(是否可讀/可寫,禁止訪問的用戶名單等,使用信息(如文件的創建時間,修改時間等)最重要,最基本的仍是文件名,文件存放的物理地址。索引
FCB存在最重要的做用實現文件名和文件之間的映射。使用戶(用戶程序)能夠實現‘’按名存取「進程
搜索:當用戶使用一個文件時,系統要根據文件名搜索目錄,找改文件對應的目錄項內存
建立文件:建立一個新文件時=,須要在目錄中刪除相應的目錄項字符串
刪除文件:當刪除一個文件時,須要在目錄中刪除相應的目錄項it
顯示目錄:用戶能夠請求顯示目錄的內容,如顯示該目路中的全部文件及相應屬性ast
修改目錄:某些文件屬性保存在目錄中,所以這些屬性變化時,須要修改相應的目錄項(如:文件重命名)
早起操做系統並不支持目錄,整個系統中只創建一張目錄表,每一個文件佔一個目錄項
缺點:單級目錄實現了」按名存取「,可是不容許文件重名
在建立一個文件時,須要檢查目錄表中有沒有重名文件,肯定不重名後才能容許創建文件,並將新文件對應的目錄項插入到目錄表中。
顯然。單級目錄結構不適用於多用戶操做系統
早期的多用戶操做系統,採用兩級目錄結構,分爲主文件目錄(MFD,Master File Directory)和用戶文件目錄(UFD,User File Directory)
主文件目錄用於記錄用戶名及相應用戶文件目錄存放的位置
用戶文件目錄由該用戶的文件FCB組成
容許不一樣用戶的文件重名。文件名雖然相同可是對應的實際上是不一樣的文件
兩級目錄結構容許實現不一樣用戶的文件重名,也能夠在目錄上實現訪問限制(檢查此時登陸的用戶名是否匹配)。可是兩級目錄結構依然缺少靈活性,用戶不能對本身的文件進行分類。
又稱爲樹形目錄結構
不一樣目錄下的文件能夠重名
用戶(或用戶進程要訪問某個文件時要用文件路徑名標識文件,文件路徑名是個字符串。各級目錄之間用「/隔開」。從根目錄發出的路徑稱爲絕對路徑)
系統根據絕對路徑一層一層地找到下一級目錄。剛開始從外存讀入根目錄的目錄表;找到「照片」目錄的存放位置後,從外存讀入對應的目錄表;再找到「2015-08」目錄的存放位置,再從外存讀入對應目錄表;最後才找到文件‘自拍.jpg’整個過程須要3次讀磁盤I/O操做。
不少時候,用戶會從根目錄開始查找,效率比較低,所以能夠設置一個「當前目錄」,當用戶想訪問某個文件時,可使用從當前目錄出發的「相對路徑」。
在Linux中,「.」表示當前目錄,所以若是「照片」是當前目錄,則「自拍.jpg」的相對路徑爲:「./2015-08/自拍.jpg」。從當前路徑出發們只須要查詢內存中的「照片」目錄表,便可知道「2015-08」目錄表的存放位置,從外存調入該目錄,便可知道「自拍.jpg」存放的位置了。
可見,引入當前目錄,和相對路徑後,磁盤的I/O的次數減小了,這就提高了訪問文件的效率。
樹形目錄結構能夠很方便的對文件進行分類,層次結構清晰,也可以更有效的進行文件的管理和保護。可是,樹形結構不便於實現文件的共享。爲此,提出了「無環圖目錄結構」
在樹形目錄的結構基礎上,增長了一些指向同一節點的有向邊,使整個目錄成爲一個有向無環圖,能夠更方便地實現多個用戶間的文件共享。
能夠用不一樣的文件名指向同一個文件,甚至能夠指向用一個目錄(共享同一目錄下的全部內容)
須要爲每一個共享節點設置一個共享計數器,用戶記錄此時有多少個地方在共享該節點。用戶提出刪除節點的請求時,只是刪除該用戶的FCB,並使用計數器減1,並不會直接刪除共享節點。只有共享計數器爲0的時候才能真正刪除節點。
注意:共享文件不一樣於複製文件,在共享文件中,因爲各用戶指向的是同一個文件,所以只要其中一個用戶修改了文件數據,那麼全部用戶均可以看到文件數據的變化。
其實在查找各級目錄的過程當中只須要用到「文件名」這個信息,只有文件名匹配時,才須要獨處文件的其餘信息。所以能夠考慮讓目錄表」瘦身「來提升效率。
索引節點:除了文件名以外的描述信息都放到這裏來
思考有何好處?
假設一個FCB是64B,磁盤塊的大小爲1KB,則每一個盤塊中只能存放16個FCB。若一個文件目錄中共有640個目錄項,則共須要佔用640/16=40個盤塊。所以按照某個文件名檢索該目錄,平均須要查詢320個目錄項,平均須要啓動磁盤20次。(每次磁盤I/O讀入這一塊)
若使用索引節點機制,文件名佔14B,索引節點指針站2B,則每一個盤塊可放64個目錄項,那麼按文件名檢索目錄平均只須要讀入320/64=5個磁盤塊。顯然,這將大大提高文件檢索速度。
當找到文件名對應的目錄項時,才須要將索引節點調入內存,索引節點中記錄了文件的各類信息,包括文件在外存中的存放位置,根據「存放位置」便可找到文件。
存放在外存中的索引節點稱爲「磁盤索引節點」,當索引節點放入內存後稱爲內存索引節點
相比之下內存索引節點中須要增長一些信息,好比文件是否被修改,此時有幾個進程正在訪問改文件等。