Linux文件IO-例会笔记总结
上周日實驗室例會主要涉及linux文件操作的內核實現。主要討論了linux下對文件進行操作時,系統內部調用了那些函數以及它們是怎么相互配合的。
? ?linux系統是怎樣對不同介質和不同的文件系統提供統一的文件操作接口呢?答案是:VFS。系統中所有文件系統不但依賴VFS(虛擬文件系統),而且也靠它來協同工作,我們來認識一下系統虛擬文件系統中的幾個成員吧。在見識它們廬山真面目前,先看下用戶調用了系統調用write()后的過程,首先被一個通用的系統調用sys_write處理,該函數找到文件描述符所在的文件系統實際給出的寫操作,然后執行操作。實際文件系統的寫方法是文件系統實現的一部分,數據最終通過該操作寫入介質。如下圖:
一超級塊
存儲一個已經安裝的文件系統的控制信息,代表一個已經安裝的文件系統;每次一個實際的文件系統被安裝時,內核會從磁盤的特定位置讀取一些控制信息填充超級塊對象。一個安裝實例和一個超級塊對象一一對應。超級塊中的s_type記錄文件系統類型。
?
二索引節點(inode)
代表一個文件,包含了內核在操作文件或目錄時需要的全部信息,僅當文件被訪問時才在內存建立
三目錄項對象(dentry)
代表一個目錄項,是路徑的組成部分,可以是文件和目錄,為了方便查找路徑和解析引入的。沒有對應的磁盤結構,VFS根據字符串路徑現場創建它,不存在于磁盤上。目錄項有被使用、未被使用和負狀態。負狀態是d_inode指向NULL,理論上沒有存在必要,其實還是可以快速查找的,此外目錄項有緩存,加快查找
四文件對象
文件對象是進程打開的文件,進程之間處理的是文件,文件對象是已經打開的文件在內存中的表示,由open創建由close銷毀,多個進程可以打開操作同一個文件,同一個文件可能存在多個文件對象,它僅僅在進程的觀點上代表打開的文件,文件對象指向目錄項對象,目錄項才和實際的文件一一對應,也和索引節點一一對應。
它們之間的關系如下:
其中task_struct為進程結構體。
轉載于:https://www.cnblogs.com/phoenixlaozhu/archive/2011/11/08/2241833.html
總結
以上是生活随笔為你收集整理的Linux文件IO-例会笔记总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript与 HTML表单的交
- 下一篇: 使用select一个表更新另一个表(批量