linux文件系統的系統分析--(一)vfs和數據結構

  linux的虛擬文件系統層的特點在於把很多不同種類文件系統的共同信息放入內核;可以通過vfs的轉換來利用linux所支持掛載的實際文件系統。實際上,因爲有了vfs,也可以較爲方便的按照vfs的一些接口將文件系統移植過來,比如win下的ntfs和fat32就是如此。在open read等系統調用之後就是到vfs_read 等式樣的函數,在vfs層做些處理後,再根據當前操作的路徑所掛載在哪個文件系統下,再轉換爲相應文件系統的read等操作。所以從這一點上來說:vfs稱爲虛擬文件系統轉換(virtual filesystem switch)更恰當。

     vfs所支持的文件系統主要分爲3類:

     1、磁盤文件系統:比如ext2、ntfs。以前分析過的omfs也屬於這類,當時看這個omfs介紹,好像用在日本一家公司的mp3中。

     2、網絡文件系統:比如nfs。平常肯定會用到的,太方便了。

     3、特殊文件系統。比如sysfs和proc。sysfs是專門爲設備管理寫的文件系統,而proc文件系統可以監控內核或部分操作改變某些內核功能或狀態。

     當然這些文件系統都是掛載在根文件系統之下的(rootfs),rootfs是如何加載的,“/”是如何建立的?這個是個重點。

     在分析“/”之前,需要對下面四個最基本的數據結構做了說明:

     這四個對象都是存在與內存中的,但是在創建這些對象的時候,有些對象的部分值是從物理介質中獲取的。

     超級塊對象(superblock object)

             存放已安裝文件系統的有關信息。對於基於磁盤的文件系統,這類對象通常存在於物理介質的最開頭部分:文件系統控制塊(filesystem control block)。

     索引節點對象(inode object)

             存放關於具體文件的一般信息。對基於磁盤的文件系統,這類對象通常對應於存放在磁盤上的文件控制塊。每個索引節點對象都有一個索引節點號,這個節點號唯一的標識      文件系統中的文件。比如在omfs文件系統中,就有omfs_inode結構體。會從物理介質中讀取信息填充omfs_inode,然後再創建inode對象。

     文件對象(file object)

              存放打開文件與進程之間進行交互的有關信息。這類信息僅存放於內核內存中。

      目錄項對象(dentry object)

                存放目錄項與對應文件進行鏈接的有關信息。每個磁盤文件系統都以自己特有的方式將該類信息存在磁盤上。比如omfs文件系統,在介質最開始存放的是super block         的一些信息,然後是一個bitmap,用來標識哪些空間是空閒的,哪些空間被佔用了;然後就是存目錄項的位置,最後絕大部分空間就是存具體文件。當然,每個文件系統以        自己特有的方式來存,比如omfs就用hash,btrfs就用btree。

       

      與上面幾個對象相關的數據結構:

            與superblock相關的方法就是struct super_operations *s_op

            這個結構體中包括刪除文件或安裝磁盤等操作,也包括分配撤銷索引節點,讀寫索引節點等操作。

            與inode 相關的方法就是struct inode_operations *i_op

             這個結構體中包括create、symlink、mkdir、rmdir、mknod等與索引節點相關的操作。

            與file 相關的方法就是struct file_operations *f_op

            這個結構體我們最熟悉了,因爲做設備驅動,很多工作就是構造這個結構體中的方法:read write llseek poll open poll等操作。           

            與dentry相關的方法就是struct dentry_operations *d_op

     

     vfs相關的數據結構結構先介紹到這裏,vfs中的數據結構很多,關聯很複雜。在後面的分析中我們再一步步展開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章