国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

Linux內核設備驅動之虛擬文件系統筆記整理

2024-09-05 23:05:27
字體:
來源:轉載
供稿:網友
/******************** * 虛擬文件系統VFS ********************/

(1)VFS介紹

虛擬文件系統VFS作為內核的子系統,為用戶空間程序提供了文件系統的相關接口。

VFS使得用戶可以直接使用open()等系統調用而無需考慮具體文件系統和實際物理介質。

VFS提供了一個通用的文件系統模型,該模型囊括了我們所能想到的文件系統的常用功能和行為。通過這個抽象層,就可以實現利用通用接口對所有類新的文件系統進行操作。

a.調用模型

write(): 用戶空間 -->

sys_write(): VFS -->

文件系統的寫方法: 文件系統 -->

物理介質

(2)VFS采用的主要對象

VFS采用了面向對象的思路,采用一組數據結構來代表通用的文件對象。

這些結構體在包含數據的同時也包含了操作這些數據的指針。

VFS中包括了四個主要的對象類型。

a.超級塊對象super_block

所有文件系統都必須實現超級塊,該對象用于存儲特定文件系統的信息,通常存儲在磁盤的特定扇區中,每個文件系統只有一個超級塊。

對于不基于磁盤的文件系統,比如基于內存的文件系統sysfs,linux會在使用現場創建超級塊并將其保存到內存中。

超級塊的結構體為super_block,定義在<linux/fs.h>。

超級塊的操作方法結構體為super_operations,也定義在fs.h中。

創建、管理和銷毀超級塊對象的代碼位于/fs/super.c。

在文件系統安裝時,內核會調用alloc_super()函數從磁盤讀取文件系統超級塊,并將其信息填充到內存中的超級塊對象中。

b.索引節點對象inode

索引節點對象包含了內核在操作文件或目錄是需要的全部信息,如文件的訪問控制權限,大小,擁有者,創建時間等。

系統把這些信息存儲在一個單獨的數據結構中,稱為索引節點。

一個文件在內存中只有一個索引節點對象,特殊文件(比如管道和設備文件)也有其對應的索引節點。

inode結構體定義在<linux/fs.h>,其對應的操作函數結構體為inode_operations

c.目錄項對象dentry

每個目錄項對象代表一個路徑中的特定部分,比如路徑/bin/vi,/、bin和vi都屬于目錄項對象。

目錄項對象沒有對應的磁盤結構,VFS根據字符串形式的路徑名現場創建。每個文件只對應一個dentry對象。

dentry結構體定義在<linux/dcache.h>中,對應的目錄項操作函數結構體dentry_operations也定義在<linux/dcache.h>中。

d.文件對象file

文件對象表示進程已經打開的文件。這個對象在open的時候創建,在close的時候銷毀。

因為多個進程可以同時打開和操作一個文件,所以一個文件可能在內存中有多個file對象。

文件對象由file結構體表示,定義在<linux/fs.h>中。file對象的操作函數結構體為file_operations,定義在<linux/fs.h>中。

這個函數集非常重要,其中包括了對文件的實際操作函數,用戶空間調用write,最終會調用到file_operations里的write。

我們要實現一個char類型的字符設備,也就是要實現file_operations中支持的函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 恭城| 鲜城| 通山县| 渭源县| 达拉特旗| 盱眙县| 天台县| 保康县| 若羌县| 响水县| 连云港市| 沈阳市| 富阳市| 弥渡县| 建宁县| 林口县| 灵武市| 永定县| 海原县| 孝义市| 长宁区| 江安县| 无极县| 永修县| 东源县| 札达县| 高雄市| 临泽县| 永靖县| 新田县| 淮北市| 浦东新区| 邯郸市| 名山县| 如皋市| 易门县| 剑阁县| 鹤庆县| 盐边县| 福安市| 芮城县|