[導(dǎo)讀]本文主要講解文件系統(tǒng)掛載核心邏輯,暫不涉及掛載命名空間和綁定掛載等內(nèi)容(后面的內(nèi)容可能會(huì)涉及),且以ext2磁盤文件系統(tǒng)為例講解掛載。
1.開(kāi)場(chǎng)白
-
環(huán)境:處理器架構(gòu):arm64內(nèi)核源碼:linux-5.11ubuntu版本:20.04.1代碼閱讀工具:vim ctags cscope
我們知道,Linux系統(tǒng)中我們經(jīng)常將一個(gè)塊設(shè)備上的文件系統(tǒng)掛載到某個(gè)目錄下才能訪問(wèn)這個(gè)文件系統(tǒng)下的文件,但是你有沒(méi)有思考過(guò):為什么塊設(shè)備掛載之后才能訪問(wèn)文件?掛載文件系統(tǒng)Linux內(nèi)核到底為我們做了哪些事情?是否可以不將文件系統(tǒng)掛載到具體的目錄下也能訪問(wèn)?下面,本文將詳細(xì)講解Linxu系統(tǒng)中,文件系統(tǒng)掛載的奧秘。
注:本文主要講解文件系統(tǒng)掛載核心邏輯,暫不涉及掛載命名空間和綁定掛載等內(nèi)容(后面的內(nèi)容可能會(huì)涉及),且以ext2磁盤文件系統(tǒng)為例講解掛載。本專題文章分為上下兩篇,上篇主要介紹掛載全貌以及具體文件系統(tǒng)的掛載方法,下篇介紹如何通過(guò)掛載實(shí)例關(guān)聯(lián)掛載點(diǎn)和超級(jí)塊。
2. vfs 幾個(gè)重要對(duì)象
在這里我們不介紹整個(gè)IO棧,只說(shuō)明和文件系統(tǒng)相關(guān)的vfs和具體文件系統(tǒng)層。我們知道在Linux中通過(guò)虛擬文件系統(tǒng)層VFS統(tǒng)一所有具體的文件系統(tǒng),提取所有具體文件系統(tǒng)的共性,屏蔽具體文件系統(tǒng)的差異。VFS既是向下的接口(所有文件系統(tǒng)都必須實(shí)現(xiàn)該接口),同時(shí)也是向上的接口(用戶進(jìn)程通過(guò)系統(tǒng)調(diào)用最終能夠訪問(wèn)文件系統(tǒng)功能)。
下面我們來(lái)看下,vfs中幾個(gè)比較重要的結(jié)構(gòu)體對(duì)象:
2.1 file_system_type
這個(gè)結(jié)構(gòu)來(lái)描述一種文件系統(tǒng)類型,一般具體文件系統(tǒng)會(huì)定義這個(gè)結(jié)構(gòu),然后注冊(cè)到系統(tǒng)中;定義了具體文件系統(tǒng)的掛載和卸載方法,文件系統(tǒng)掛載時(shí)調(diào)用其掛載方法構(gòu)建超級(jí)塊、跟dentry等實(shí)例。
文件系統(tǒng)分為以下幾種:
1)磁盤文件系統(tǒng)
文件在非易失性存儲(chǔ)介質(zhì)上(如硬盤,flash),掉電文件不丟失。
如ext2,ext4,xfs
2)內(nèi)存文件系統(tǒng)
文件在內(nèi)存上,掉電丟失。
如tmpfs
3)偽文件系統(tǒng)
是假的文件系統(tǒng),是利用虛擬文件系統(tǒng)的接口(可以對(duì)用戶可見(jiàn)如proc、sysfs,也可以對(duì)用戶不可見(jiàn)內(nèi)核可見(jiàn)如sockfs,bdev)。
如proc,sysfs,sockfs,bdev
4)網(wǎng)絡(luò)文件系統(tǒng)
這種文件系統(tǒng)允許訪問(wèn)另一臺(tái)計(jì)算機(jī)上的數(shù)據(jù),該計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)連接到本地計(jì)算機(jī)。
如nfs文件系統(tǒng)
結(jié)構(gòu)體定義源碼路徑:include/linux/fs.h 2226
2.2 super_block
超級(jí)塊,用于描述塊設(shè)備上的一個(gè)文件系統(tǒng)總體信息(如文件塊大小,最大文件大小,文件系統(tǒng)魔數(shù)等),一個(gè)塊設(shè)備上的文件系統(tǒng)可以被掛載多次,但是內(nèi)存中只能有個(gè)super_block來(lái)描述(至少對(duì)于磁盤文件系統(tǒng)來(lái)說(shuō))。
結(jié)構(gòu)體定義源碼路徑:include/linux/fs.h 1414
2.3 mount
掛載描述符,用于建立超級(jí)塊和掛載點(diǎn)等之間的聯(lián)系,描述文件系統(tǒng)的一次掛載,一個(gè)塊設(shè)備上的文件系統(tǒng)可以被掛載多次,每次掛載內(nèi)存中有一個(gè)mount對(duì)象描述。
結(jié)構(gòu)體定義源碼路徑:fs/mount.h 39
2.4 inode
索引節(jié)點(diǎn)對(duì)象,描述磁盤上的一個(gè)文件元數(shù)據(jù)(文件屬性、位置等),有些文件系統(tǒng)需要從塊設(shè)備上讀取磁盤上的索引節(jié)點(diǎn),然后在內(nèi)存中創(chuàng)建vfs的索引節(jié)點(diǎn)對(duì)象,一般在文件第一次打開(kāi)時(shí)創(chuàng)建。
結(jié)構(gòu)體定義源碼路徑:include/linux/fs.h 610
2.5 dentry
目錄項(xiàng)對(duì)象,用于描述文件的層次結(jié)構(gòu),從而構(gòu)建文件系統(tǒng)的目錄樹(shù),文件系統(tǒng)將目錄當(dāng)作文件,目錄的數(shù)據(jù)由目錄項(xiàng)組成,而每個(gè)目錄項(xiàng)存儲(chǔ)一個(gè)目錄或文件的名稱和索引節(jié)點(diǎn)號(hào)等內(nèi)容。每當(dāng)進(jìn)程訪問(wèn)一個(gè)目錄項(xiàng)就會(huì)在內(nèi)存中創(chuàng)建目錄項(xiàng)對(duì)象(如ext2路徑名查找中,通過(guò)查找父目錄數(shù)據(jù)塊的目錄項(xiàng),找到對(duì)應(yīng)文件/目錄的名稱,獲得inode號(hào)來(lái)找到對(duì)應(yīng)inode)。
結(jié)構(gòu)體定義源碼路徑:include/linux/dcache.h 90
2.6 file
文件對(duì)象,描述進(jìn)程打開(kāi)的文件,當(dāng)進(jìn)程打開(kāi)文件時(shí)會(huì)創(chuàng)建文件對(duì)象加入到進(jìn)程的文件打開(kāi)表,通過(guò)文件描述符來(lái)索引文件對(duì)象,后面讀寫等操作都通過(guò)文件描述符進(jìn)行(一個(gè)文件可以被多個(gè)進(jìn)程打開(kāi),會(huì)由多個(gè)文件對(duì)象加入到各個(gè)進(jìn)程的文件打開(kāi)表,但是inode只有一個(gè))。
結(jié)構(gòu)體定義源碼路徑:include/linux/fs.h 915
3. 掛載總體流程
3.1系統(tǒng)調(diào)用處理
用戶執(zhí)行掛載是通過(guò)系統(tǒng)調(diào)用路徑進(jìn)入內(nèi)核處理,拷貝用戶空間傳遞參數(shù)到內(nèi)核,掛載委托do_mount。
//fs/namespace.c
SYSCALL_DEFINE5(mount
參數(shù):
dev_name 要掛載的塊設(shè)備
dir_name 掛載點(diǎn)目錄
type 文件系統(tǒng)類型名
flags 掛載標(biāo)志
data 掛載選項(xiàng)
-> kernel_type = copy_mount_string(type); //拷貝文件系統(tǒng)類型名到內(nèi)核空間
-> kernel_dev = copy_mount_string(dev_name) //拷貝塊設(shè)備路徑名到內(nèi)核空間
-> options = copy_mount_options(data) //拷貝掛載選項(xiàng)到內(nèi)核空間
-> do_mount(kernel_dev, dir_name, kernel_type, flags, options) //掛載委托do_mount
3.2 掛載點(diǎn)路徑查找
掛載點(diǎn)路徑查找,掛載委托path_mount
do_mount
-> user_path_at(AT_FDCWD, dir_name, LOOKUP_FOLLOW,
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
驅(qū)動(dòng)電源
在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。
關(guān)鍵字:
工業(yè)電機(jī)
驅(qū)動(dòng)電源
LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...
關(guān)鍵字:
驅(qū)動(dòng)電源
照明系統(tǒng)
散熱
電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...
關(guān)鍵字:
電動(dòng)汽車
新能源
驅(qū)動(dòng)電源
在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...
關(guān)鍵字:
發(fā)光二極管
驅(qū)動(dòng)電源
LED
在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...
關(guān)鍵字:
LED照明技術(shù)
電磁干擾
驅(qū)動(dòng)電源
開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源
關(guān)鍵字:
LED
驅(qū)動(dòng)電源
開(kāi)關(guān)電源
LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
隧道燈
驅(qū)動(dòng)電源
LED驅(qū)動(dòng)電源在LED照明系統(tǒng)中扮演著至關(guān)重要的角色。由于LED具有節(jié)能、環(huán)保、長(zhǎng)壽命等優(yōu)點(diǎn),使得LED照明在各個(gè)領(lǐng)域得到廣泛應(yīng)用。然而,LED的電流、電壓特性需要特定的驅(qū)動(dòng)電源才能正常工作。本文將介紹常用的LED驅(qū)動(dòng)電...
關(guān)鍵字:
LED驅(qū)動(dòng)電源
led照明
LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電源轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
驅(qū)動(dòng)電源
高壓工頻交流
崧盛股份9日發(fā)布投資者關(guān)系活動(dòng)記錄表,就植物照明發(fā)展趨勢(shì)、行業(yè)壁壘等問(wèn)題進(jìn)行分享。植物照明未來(lái)市場(chǎng)需求廣闊崧盛股份指出,植物照明將會(huì)走向長(zhǎng)期產(chǎn)業(yè)領(lǐng)域。主要原因有三:第一,LED植物照明賦能終端種植更具有經(jīng)濟(jì)價(jià)值。由于LE...
關(guān)鍵字:
崧盛股份
驅(qū)動(dòng)電源
在當(dāng)今高度發(fā)展的技術(shù)中,電子產(chǎn)品的升級(jí)越來(lái)越快,LED燈技術(shù)也在不斷發(fā)展,這使我們的城市變得豐富多彩。 LED驅(qū)動(dòng)電源將電源轉(zhuǎn)換為特定的電壓和電流,以驅(qū)動(dòng)LED發(fā)光。通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流電(即...
關(guān)鍵字:
LED
驅(qū)動(dòng)電源
高壓直流
人類社會(huì)的進(jìn)步離不開(kāi)社會(huì)上各行各業(yè)的努力,各種各樣的電子產(chǎn)品的更新?lián)Q代離不開(kāi)我們的設(shè)計(jì)者的努力,其實(shí)很多人并不會(huì)去了解電子產(chǎn)品的組成,比如LED電源。
關(guān)鍵字:
LED
驅(qū)動(dòng)電源
低壓直流
隨著科學(xué)技術(shù)的發(fā)展,LED技術(shù)也在不斷發(fā)展,為我們的生活帶來(lái)各種便利,為我們提供各種各樣生活信息,造福著我們?nèi)祟?。LED驅(qū)動(dòng)電源實(shí)際上是一種電源,但是它是一種特定的電源,用于驅(qū)動(dòng)LED發(fā)射帶有電壓或電流的光。 因此,LE...
關(guān)鍵字:
LED
驅(qū)動(dòng)電源
電流
LED燈作為一種新型節(jié)能和無(wú)污染光源,由于其特有的發(fā)光照明特性,在現(xiàn)代照明應(yīng)用中發(fā)揮著革命性的作用。作為 LED 照明產(chǎn)業(yè)鏈中最為核心的部件之一,LED 驅(qū)動(dòng)電源的驅(qū)動(dòng)控制技術(shù)所存在的可靠性低、成本高等典型問(wèn)題一直制約著...
關(guān)鍵字:
多路
LED
驅(qū)動(dòng)電源
隨著社會(huì)的快速發(fā)展,LED技術(shù)也在飛速發(fā)展,為我們的城市的燈光煥發(fā)光彩,讓我們的生活越來(lái)越有趣,那么你知道LED需要LED驅(qū)動(dòng)電源嗎?那么你知道什么是LED驅(qū)動(dòng)電源嗎?
關(guān)鍵字:
LED
開(kāi)關(guān)電源
驅(qū)動(dòng)電源
早前有新聞稱,Cree在2018年開(kāi)始宣布轉(zhuǎn)型高科技半導(dǎo)體領(lǐng)域,并一邊逐漸脫離照明與LED相關(guān)業(yè)務(wù),一邊持續(xù)投資半導(dǎo)體。在今日,Cree宣布與SMART Global Holdings, Inc.達(dá)成最終協(xié)議,擬將LED...
關(guān)鍵字:
cree
led照明