讀書筆記—linux vfs

來源:互聯網
上載者:User

無圖無真相,先:

 

每個進程在PCB中都儲存著一份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有一個指向已開啟檔案的指標,已開啟的檔案在核心中用file結構體表示,

檔案描述符表中的指標指向file結構體。在file結構體中維護File Status Flag(file結構體的成員f_flags)和當前讀寫位置(file結體的成員f_pos)。

在中,進程1和進程2都開啟同一檔案,但是對應不同的file結構體,因此可以有不同的File Status Flag和讀寫位置。file結構體中比較重要的成員

還有f_count,表示引用計數(Reference Count),dup、fork等系統調用會導致多個檔案描述

符指向同一個file結構體,例如有fd1和fd2都引用同一個file結構體,那麼它的引用計數就

是2,當close(fd1)時並不會釋放file結構體,而只是把引用計數減到1,如果再close(fd2),
引用計數就會減到0同時釋放file結構體,這才真的關閉了檔案。
每個file結構體都指向一個file_operations結構體,這個結構體的成員都是函數指標,指向實
現各種檔案操作的核心功能。比如在使用者程式中read一個檔案描述符,read通過系統調用進入
核心,然後找到這個檔案描述符所指向的file結構體,找到file結構體所指向
的file_operations結構體,調用它的read成員所指向的核心功能以完成使用者請求。在使用者程式
中調用lseek、read、write、ioctl、open等函數,最終都由核心調用file_operations的各成員
所指向的核心功能完成使用者請求。file_operations結構體中的release成員用於完成使用者程式
的close請求,之所以叫release而不叫close是因為它不一定真的關閉檔案,而是減少引用計
數,只有引用計數減到0才關閉檔案。對於同一個檔案系統上開啟的常規檔案來
說,read、write等檔案操作的步驟和方法應該是一樣的,調用的函數應該是相同的,所以圖中
的三個開啟檔案的file結構體指向同一個file_operations結構體。如果開啟一個字元裝置文
件,那麼它的read、write操作肯定和常規檔案不一樣,不是讀寫磁碟的資料區塊而是讀寫硬體設
備,所以file結構體應該指向不同的file_operations結構體,其中的各種檔案操作函數由該設
備的驅動程式實現。
每個file結構體都有一個指向dentry結構體的指標,“dentry”是directory entry(目錄項)的縮
寫。我們傳給open、stat等函數的參數的是一個路徑,例如/home/akaedu/a,需要根據路徑找到
檔案的inode。為了減少讀盤次數,核心緩衝了目錄的樹狀結構,稱為dentry cache,其中每個
節點是一個dentry結構體,只要沿著路徑各部分的dentry搜尋即可,從根目錄/找到home目錄,
然後找到akaedu目錄,然後找到檔案a。dentry cache只儲存最近訪問過的目錄項,如果要找的
目錄項在cache中沒有,就要從磁碟讀到記憶體中。
每個dentry結構體都有一個指標指向inode結構體。inode結構體儲存著從磁碟inode讀上來的信
息。在的例子中,有兩個dentry,分別表示/home/akaedu/a和/home/akaedu/b,它們都指向
同一個inode,說明這兩個檔案互為永久連結。inode結構體中儲存著從磁碟分割的inode讀上來信
息,例如所有者、檔案大小、檔案類型和許可權位等。每個inode結構體都有一個指
向inode_operations結構體的指標,後者也是一組函數指標指向一些完成檔案目錄操作的核心函
數。和file_operations不同,inode_operations所指向的不是針對某一個檔案進行操作的函
數,而是影響檔案和目錄布局的函數,例如添加刪除檔案和目錄、跟蹤符號連結等等,屬於同
一檔案系統的各inode結構體可以指向同一個inode_operations結構體。
inode結構體有一個指向super_block結構體的指標。super_block結構體儲存著從磁碟分割的超
級塊讀上來的資訊,例如檔案系統類型、塊大小等。super_block結構體的s_root成員是一個指
向dentry的指標,表示這個檔案系統的根目錄被mount到哪裡,在的例子中這個分區
被mount到/home目錄下。
file、dentry、inode、super_block這幾個結構體組成了VFS的核心概念。

以上內容摘自《linux平台上學C語言》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.