檔案目錄(MOOC)
1.知識總覽
2.檔案控制塊 (FCB file control block)
FCB的有序集合稱為“檔案目錄”,一個FCB就是一個檔案目錄項。
FCB中包含了檔案的基本資訊(檔名、實體地址、邏輯結構、物理結構等),存取控制資訊(是否可讀/可寫、使用者訪問許可權等),使用資訊(如檔案的建立時間、修改時間等)。
最重要最基本的是檔名,檔案存放的實體地址。
FCB實現了檔名和檔案之間的對映。使使用者(使用者程式)可以實現“按名存取”。
3.目錄操作
搜尋:當使用者要使用一個檔案時,系統要根據檔名搜尋目錄,找到該檔案對應的目錄項。
建立檔案:建立一個新檔案時,需要在其所屬的目錄中增加一個目錄項。
刪除檔案:當刪除一個檔案時,需要在目錄中刪除相應的目錄項。
顯示目錄:使用者可以請求顯示目錄的內容,如顯示該目錄中的所有檔案及相應屬性。
修改目錄:某些檔案屬性儲存在目錄中,因此這些屬性變化時需要修改相應的目錄項(如:檔案重新命名)。
4.目錄結構
-
4.1單級目錄結構
早期的作業系統並不支援多級目錄,整個系統中只建立一張目錄表,每個檔案佔一個目錄項。
- 單級目錄實現了按名存取,但是不允許檔案重名。在建立一個新檔案時,需要先檢查目錄表中有沒有重名檔案,確定不重名後才能允許建立檔案,並將新檔案對應的目錄項插入目錄表中。單級目錄結構不適用於多使用者作業系統。
-
4.2兩級目錄結構
早期的多使用者作業系統,採用兩級目錄。分為主檔案目錄(MFD,Master File Directory)和使用者檔案目錄(UFD,User File Directory)。
- 兩級目錄結構允許不同使用者的檔案重名,也可以在目錄上實現訪問限制(檢查此時登陸的使用者名稱是否匹配)。但是兩級目錄結構依然缺乏靈活性,使用者不能對自己的檔案進行分類。
-
4.3多級目錄結構(樹形目錄結構)
使用者或使用者程式要訪問某個檔案時要用檔案路徑名識別符號檔案,檔案路徑名是個字串。各級目錄之間用“/”隔開。從根目錄出發的路徑稱為絕對路徑。
系統會根據絕對路徑一層層地找到下一級目錄。
很多時候,使用者會連續訪問同一目錄內地多個檔案。如果每次都從根目錄開始查詢,則效率很低下。可以設定一個“當前目錄”。比如,當前開啟了“照片”的目錄檔案,即“照片”目錄表已調入記憶體,則可以把其設定為“當前目錄”。當使用者想要訪問當前目錄下的某個檔案時,即可以使用從當前目錄出發的相對路徑。
在Linux中,“.”表示當前目錄。
-
4.4無環圖目錄
樹形目錄可以很方便地對檔案進行分類,層次結構清晰,也能夠更有效地進行檔案地管理和保護。但是,樹形結構不便於實現檔案共享。為此,進一步提出了無環圖目錄結構。
在樹形目錄結構地基礎上,增加一些指向同一節點的有向邊,使整個目錄成為一個有向無環圖。可以更方便地實現多個使用者間的檔案共享。
可以用不同的檔名指向同一個檔案,甚至指向同一個目錄(共享同一目錄下的所有內容)。需要為每個共享結點設定一個共享計數器,用於記錄此時有多少個地方在共享該結點。使用者提出刪除結點的請求時,只是刪除該使用者的FCB、並使共享計數器減1,並不會直接刪除共享節點。
注意:共享檔案不同於複製檔案。在共享檔案中,由於各使用者指向的是同一個檔案,因此只要其中一個使用者修改了檔案資料,那麼所有的使用者都可以看到檔案資料的變化。
5.索引節點(FCB的改進)
索引節點包含了檔名之外的檔案描述資訊。
當找到檔名對應的目錄項時,才需要將索引節點調入記憶體,索引節點中記錄了檔案的各種資訊,包括檔案在外存中存放的位置。
存放在外村中的索引節點稱為磁碟索引節點,當索引節點放入記憶體後稱為記憶體索引節點。記憶體索引節點需要增加一些資訊,例如檔案是否被修改,此時有幾個程式正在訪問該檔案等。
6.總結
相關文章
- 檔案目錄配置
- Redhat:檔案目錄管理Redhat
- 檔案管理 檔案目錄概念
- 檔案目錄許可權操作
- idea訪問resources檔案目錄Idea
- DedeCMS模板目錄的檔案目錄結構
- 檔案的邏輯結構、檔案目錄
- iOS沙盒檔案目錄介紹iOS
- linux的部分檔案目錄操作語句Linux
- Linux中操作工作目錄和檔案目錄Linux
- Spark輸出自定義檔案目錄踩坑(Java)SparkJava
- linux檔案目錄結構彙總!Linux學習Linux
- 如何在idea下的Java檔案目錄下建立jsp檔案IdeaJavaJS
- 鴻蒙前端開發1-檔案目錄結構鴻蒙前端
- Linux基礎學習系列——Linux檔案目錄操作命令Linux
- Linux學習之linux檔案目錄結構彙總Linux
- 自動化檔案目錄結構生成工具——filemap.jsJS
- vue 路由自動化[讀取vue檔案目錄][支援children]Vue路由
- Mac使用tree命令生成檔案目錄結構,超簡單!Mac
- Angular4學習(初始檔案目錄結構解讀)Angular
- vue專案目錄結構Vue
- Geth命令用法-引數詳解 and 以太坊原始碼檔案目錄原始碼
- php一句話獲取獲取檔案目錄的方法PHP
- C++ 專案目錄結構C++
- Angular專案目錄結構詳解Angular
- 比Linux grep更快的作業系統檔案目錄搜尋工具:ripgrepLinux作業系統
- Oracle Linux 7使用cron來管理Oracle ASM審計檔案目錄的增長OracleLinuxASM
- Android Studio專案目錄結構簡介Android
- Docker和宿主機作業系統檔案目錄互相隔離的實現原理Docker作業系統
- umask如何計算檔案目錄許可權?怎麼學linux運維工程師Linux運維工程師
- ionic3 angular專案目錄結構解析Angular
- 關於靜態檔案目錄與模板引用和Nginx location塊的適配設定Nginx
- 如何在Rust程式專案中安全地使用外部或是專案目錄下的檔案?Rust
- JavaWeb專案目錄+SpringMVC靜態資源+Tomcat測試htmlJavaWebSpringMVCTomcatHTML
- 《笨方法學python3》習題46.2 建立骨架專案目錄Python
- 非專案目錄下命令列執行go程式遇到的問題命令列Go
- Go基礎學習記錄 – 編寫Web應用程式 – 重新調整專案目錄結構(一)GoWeb
- 專案目標管理技巧