濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理

Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理

熱門標(biāo)簽:涪陵商都400電話開通辦理 外呼系統(tǒng)不彈窗 云會(huì)外呼系統(tǒng) 申請(qǐng)400電話價(jià)格多少 柳州市機(jī)器人外呼系統(tǒng)報(bào)價(jià) 廈門營銷外呼系統(tǒng)平臺(tái) 智能電話機(jī)器人坐席 安陽ai電銷機(jī)器人軟件 外呼系統(tǒng)的經(jīng)營范圍
/********************
 * 虛擬文件系統(tǒng)VFS
 ********************/

(1)VFS介紹

虛擬文件系統(tǒng)VFS作為內(nèi)核的子系統(tǒng),為用戶空間程序提供了文件系統(tǒng)的相關(guān)接口。

VFS使得用戶可以直接使用open()等系統(tǒng)調(diào)用而無需考慮具體文件系統(tǒng)和實(shí)際物理介質(zhì)。

VFS提供了一個(gè)通用的文件系統(tǒng)模型,該模型囊括了我們所能想到的文件系統(tǒng)的常用功能和行為。通過這個(gè)抽象層,就可以實(shí)現(xiàn)利用通用接口對(duì)所有類新的文件系統(tǒng)進(jìn)行操作。

a.調(diào)用模型

write(): 用戶空間 -->

sys_write(): VFS -->

文件系統(tǒng)的寫方法: 文件系統(tǒng) -->

物理介質(zhì)

(2)VFS采用的主要對(duì)象

VFS采用了面向?qū)ο蟮乃悸罚捎靡唤M數(shù)據(jù)結(jié)構(gòu)來代表通用的文件對(duì)象。

這些結(jié)構(gòu)體在包含數(shù)據(jù)的同時(shí)也包含了操作這些數(shù)據(jù)的指針。

VFS中包括了四個(gè)主要的對(duì)象類型。

a.超級(jí)塊對(duì)象super_block

所有文件系統(tǒng)都必須實(shí)現(xiàn)超級(jí)塊,該對(duì)象用于存儲(chǔ)特定文件系統(tǒng)的信息,通常存儲(chǔ)在磁盤的特定扇區(qū)中,每個(gè)文件系統(tǒng)只有一個(gè)超級(jí)塊。

對(duì)于不基于磁盤的文件系統(tǒng),比如基于內(nèi)存的文件系統(tǒng)sysfs,linux會(huì)在使用現(xiàn)場(chǎng)創(chuàng)建超級(jí)塊并將其保存到內(nèi)存中。

超級(jí)塊的結(jié)構(gòu)體為super_block,定義在<linux/fs.h>。

超級(jí)塊的操作方法結(jié)構(gòu)體為super_operations,也定義在fs.h中。

創(chuàng)建、管理和銷毀超級(jí)塊對(duì)象的代碼位于/fs/super.c。

在文件系統(tǒng)安裝時(shí),內(nèi)核會(huì)調(diào)用alloc_super()函數(shù)從磁盤讀取文件系統(tǒng)超級(jí)塊,并將其信息填充到內(nèi)存中的超級(jí)塊對(duì)象中。

b.索引節(jié)點(diǎn)對(duì)象inode

索引節(jié)點(diǎn)對(duì)象包含了內(nèi)核在操作文件或目錄是需要的全部信息,如文件的訪問控制權(quán)限,大小,擁有者,創(chuàng)建時(shí)間等。

系統(tǒng)把這些信息存儲(chǔ)在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中,稱為索引節(jié)點(diǎn)。

一個(gè)文件在內(nèi)存中只有一個(gè)索引節(jié)點(diǎn)對(duì)象,特殊文件(比如管道和設(shè)備文件)也有其對(duì)應(yīng)的索引節(jié)點(diǎn)。

inode結(jié)構(gòu)體定義在<linux/fs.h>,其對(duì)應(yīng)的操作函數(shù)結(jié)構(gòu)體為inode_operations

c.目錄項(xiàng)對(duì)象dentry

每個(gè)目錄項(xiàng)對(duì)象代表一個(gè)路徑中的特定部分,比如路徑/bin/vi,/、bin和vi都屬于目錄項(xiàng)對(duì)象。

目錄項(xiàng)對(duì)象沒有對(duì)應(yīng)的磁盤結(jié)構(gòu),VFS根據(jù)字符串形式的路徑名現(xiàn)場(chǎng)創(chuàng)建。每個(gè)文件只對(duì)應(yīng)一個(gè)dentry對(duì)象。

dentry結(jié)構(gòu)體定義在<linux/dcache.h>中,對(duì)應(yīng)的目錄項(xiàng)操作函數(shù)結(jié)構(gòu)體dentry_operations也定義在<linux/dcache.h>中。

d.文件對(duì)象file

文件對(duì)象表示進(jìn)程已經(jīng)打開的文件。這個(gè)對(duì)象在open的時(shí)候創(chuàng)建,在close的時(shí)候銷毀。

因?yàn)槎鄠€(gè)進(jìn)程可以同時(shí)打開和操作一個(gè)文件,所以一個(gè)文件可能在內(nèi)存中有多個(gè)file對(duì)象。

文件對(duì)象由file結(jié)構(gòu)體表示,定義在<linux/fs.h>中。file對(duì)象的操作函數(shù)結(jié)構(gòu)體為file_operations,定義在<linux/fs.h>中。

這個(gè)函數(shù)集非常重要,其中包括了對(duì)文件的實(shí)際操作函數(shù),用戶空間調(diào)用write,最終會(huì)調(diào)用到file_operations里的write。

我們要實(shí)現(xiàn)一個(gè)char類型的字符設(shè)備,也就是要實(shí)現(xiàn)file_operations中支持的函數(shù)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

標(biāo)簽:孝感 綏化 巴中 蕪湖 福州 晉城 南充 撫順

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理》,本文關(guān)鍵詞  Linux,內(nèi)核,設(shè)備驅(qū)動(dòng),之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    景德镇市| 桂阳县| 禄丰县| 通江县| 竹北市| 富锦市| 苏尼特右旗| 黔东| 玛曲县| 祥云县| 上林县| 建湖县| 葫芦岛市| 鄯善县| 梧州市| 泰兴市| 银川市| 建宁县| 江孜县| 浏阳市| 荃湾区| 铁岭市| 富裕县| 虞城县| 石家庄市| 五华县| 资阳市| 江源县| 永和县| 锡林郭勒盟| 沙洋县| 丹巴县| 师宗县| 太保市| 科尔| 清远市| 盐亭县| 永嘉县| 武威市| 东乌珠穆沁旗| 阿克苏市|