作業系統 檔案系統

2021-07-25 15:54:59 字數 2590 閱讀 1431

5.2開啟檔案

在作業系統中就是確定程序操作哪個檔案。這個確定過程由兩個事件構成:

1.將使用者程序task_struct中的*filp[20]與核心中的file_table[64]進行掛接。

2.將使用者程序需要開啟的檔案對應的i節點在file_table[64]中進行登記。

*filp[20]:掌控乙個程序可以開啟的檔案,既可以開啟多個不同的檔案,也可以同乙個檔案多次開啟,每開啟一次檔案(不論是否是同乙個),就要在*filp[20]中占用乙個項記錄指標。乙個程序可以同時開啟的檔案次數不能超過20次。

file_table[64]是管理所有程序開啟檔案的資料結構,不但記錄了不同的程序開啟不同的檔案,也記錄了不同的程序開啟同乙個檔案,還記錄了同乙個程序多次開啟同乙個檔案。與*filp[20]類似,只要開啟一次檔案,就要在file_able[64]中記錄.(所以乙個程序最多開啟20次檔案,但所有程序開啟檔案的總和不能超過64?)

檔案的i節點:是記載檔案屬性的最關鍵的資料結構。在作業系統中i節點和檔案是一一對應的,找到i節點就能唯一確定檔案。

inode_table[32]:核心通過inode_table[32]掌控正在使用的檔案i節點數,每個被使用的檔案i節點都要記錄在其中。

開啟檔案的本質就是要建立*filp[20],file_table[64],inode_table[32]三者之間的關係。

建立關係的這個過程分為三個步驟:

1.將使用者程序task_struct中的*filp[20]與核心中的file_table進行掛接。

2.以使用者給定的路徑名「/mnt/user/user1/user2/hello.txt」為線索,找到hello.txt檔案的i節點。

3.將hello.txt對應的i節點在file_table[64]中進行登記。

具體的操作是在程序中呼叫open()函式實現開啟檔案,該函式最終對映到sys_open()系統呼叫函式執行。對映過程以及sys_open()函式的基本執**況已經在4.4.1節。

5.2.1將程序的*filp[20]與file_table[64]掛接

5.2.2獲取檔案i節點

5.2.3將檔案i節點與file_table[64]掛接

5.3讀檔案

讀檔案就是從使用者程序開啟的檔案中讀取資料,讀檔案由read函式完成。

5.3.1確定資料塊在外設中的位置

5.3.2將資料塊讀入緩衝塊

5.3.3將緩衝塊中的資料複製到程序空間

5.4新建檔案

新建檔案就是根據使用者程序要求,建立乙個檔案系統中不存在的檔案。新建檔案由creat()函式實現。

5.4.1 查詢檔案

5.4.2 新建檔案i節點

新建hello.txt 檔案 i 節點,將會在user2目錄檔案(作出目錄檔案的示意圖)中寫入hello.txt檔案對應的新目錄項資訊。

5.4.3 新建檔案目錄項

只要在user2目錄檔案中尋找到空閒項,就在此位置載入新目錄項,如果缺失找不到空閒項,就在外設上建立新的資料塊來載入(此過程示意圖類似p234所示)。

5.5 寫檔案

作業系統對寫檔案操作的規定是:程序空間的資料先要寫入緩衝區中,然後作業系統在適當條件下,將緩衝區中的資料同步到外設上。而且,作業系統只能以資料塊(1 kb)為單位,將緩衝區中的緩衝塊(1 kb) 的資料同步到外設上。這就需要在同步之前,緩衝塊與外設上要寫入的邏輯塊進行一對一繫結,確定外設上的寫入位置,以此保證使用者空間寫入緩衝塊的資料能夠準確地同步到指定邏輯塊中。

首先介紹如何確定繫結關係

5.5.1 確定檔案的寫入位置

5.5.2 申請緩衝塊

5.5.3 將指定的資料從程序空間複製到緩衝塊

5.5.4 資料同步到外設的兩種方法

5.6 修改檔案

5.6.1 重定位檔案的當前操作指標

5.6.2 修改檔案

5.7 關閉檔案

關閉檔案對應的是開啟檔案,是在close()函式中完成的。

5.7.1 當前程序的filp與file_table[64]脫鉤

5.7.2 檔案i節點被釋放

5.8 刪除檔案

刪除檔案對應的是新建檔案。刪除檔案與關閉檔案有所不同:關閉檔案只是解除當前程序與hello.txt檔案在file_table[64]中指定掛接點的關係,而刪除操作的效果表現為所有程序都無法訪問到hello.txt這個檔案。

5.8.1 對檔案的刪除條件進行檢查

5.8.2 進行具體的刪除工作

5.9 本章小節

作業系統對檔案的一切操作,都可以分為兩個方面:對super_block,d_super_block,m_inode,d_inode,i節點位圖,邏輯塊點陣圖這類檔案管理資訊的操作以及對檔案資料內容的操作。新建,開啟,關閉,刪除檔案屬於對檔案管理資訊的操作。讀檔案,寫檔案和修改檔案則主要是操作檔案資料內容。

作業系統管理資訊就是建立或解除程序與檔案的關係鏈條,鏈條的主幹為task_struct中的*filp[20]——file_table[64]——inode_table[32].程序就可以沿著關係鏈條,依託緩衝區與硬碟進行資料互動。當關係鏈條解除後,程序則不再具備操作指定檔案的能力。如果檔案管理被更改,則作業系統要將此更改落實在硬碟上,以免失去對檔案資料內容的控制。

作業系統 檔案系統

通過設計乙個基於索引結構的檔案系統,了解檔案系統設計以及物理塊分配的基本概念。硬體環境 計算機一台,區域網環境 軟體環境 windows 作業系統 visual studio2019 1 設計乙個檔案系統的索引結構,描述邏輯結構與物理索引結構之間的關係 2 檔案建立等基本功能 段 問1 這個標頭檔案...

作業系統 虛擬檔案系統

乙個系統中應當可以支援多個檔案系統。但是由於每乙個檔案系統底層機制不同,作業系統如何相容各個檔案系統?這就是虛擬檔案系統vfs的功能了。vfs是作業系統檔案模組的乙個軟體層,對上面的使用者空間提供統一的操作介面,同時也對下層提供了一套必須實現的介面。這個思想其實在軟體工程中很常用,雖然檔案系統底層實...

作業系統之檔案系統簡介

作業系統是怎麼幫助找到乙個檔案的準確位置的呢?使用者是根據自己作業系統建立的根目錄 此電腦 和使用者自己建立的資料夾找到的,這些資料夾又在磁碟中充當什麼角色呢?每個檔案有乙個自己的元資料,元資料記錄了對應檔案的相關資訊,比如,檔案的起始塊的位置,記錄了檔案的最後一次修改時間,記錄了檔案的大小等等。超...