前言:接觸Linux的同志們都聽(tīng)過(guò)一句話:“Linux下一切皆文件”疗琉。“一切皆是文件”是 Unix/Linux 的基本哲學(xué)之一歉铝,那么為什么Linux在一切皆文件呢盈简?
0.一切皆文件
首先,在windows中是文件的東西,它們?cè)趌inux中也是文件,其次一些在windows中不是文件的東西, 比如進(jìn)程, 磁盤, 也被抽象成了文件.柠贤。你可以使用訪問(wèn)文件的方法訪問(wèn)它們獲得信息香浩。甚至一些很離譜的東西,比如管道臼勉,也是文件邻吭。甚至類似于socket(套接字)這樣的東西, 使用的接口跟文件接口也是一致的。
這樣做最明顯的好處是宴霸,開(kāi)發(fā)者僅需要使用一套 API 和開(kāi)發(fā)工具即可調(diào)取 Linux 系統(tǒng)中絕大部分的資源囱晴。舉個(gè)簡(jiǎn)單的例子,Linux 中幾乎所有讀(讀文件瓢谢,讀系統(tǒng)狀態(tài)畸写,讀 socket,讀PIPE)的操作都可以用read函數(shù)來(lái)進(jìn)行氓扛;幾乎所有更改(更改文件枯芬,更改系統(tǒng)參數(shù),寫 socket采郎,寫 PIPE)的操作都可以用write函數(shù)來(lái)進(jìn)行千所。
不利之處在于,使用任何硬件設(shè)備都必須與根目錄下某一目錄執(zhí)行掛載操作蒜埋,否則無(wú)法使用淫痰。我們知道,本身Linux具有一個(gè)以根目錄為樹(shù)根的文件目錄結(jié)構(gòu)整份,每個(gè)設(shè)備也同樣如此黑界,它們是相互獨(dú)立的。如果我們想通過(guò)Linux上的根目錄找到設(shè)備文件的目錄結(jié)構(gòu)皂林,就必須將這兩個(gè)文件系統(tǒng)目錄合二為一朗鸠,這就是掛載的真正含義。
1.虛擬文件系統(tǒng)VFS
VFS是一種用于網(wǎng)絡(luò)環(huán)境的分布式文件系統(tǒng)础倍,是允許和操作系統(tǒng)使用不同的文件系統(tǒng)<1>實(shí)現(xiàn)的接口烛占。虛擬文件系統(tǒng)(VFS)是物理文件系統(tǒng)與服務(wù)之間的一個(gè)接口層,它對(duì)Linux的每個(gè)文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行抽象沟启,使得不同的文件系統(tǒng)在Linux核心以及系統(tǒng)中運(yùn)行的其他進(jìn)程看來(lái)忆家,都是相同的。嚴(yán)格說(shuō)來(lái)德迹,VFS并不是一種實(shí)際的文件系統(tǒng)芽卿。它只存在于內(nèi)存中,不存在于任何外存空間胳搞。VFS在系統(tǒng)啟動(dòng)時(shí)建立卸例,在系統(tǒng)關(guān)閉時(shí)消亡称杨。(cite from百度百科)
比較晦澀難懂是不是?那么換一種描述:虛擬文件系統(tǒng)使得Linux可以存在多個(gè)“實(shí)際的文件系統(tǒng)”筷转,比如分區(qū)1是ext2姑原,分區(qū)2是ext3,分區(qū)3是fat32呜舒。那么每個(gè)“實(shí)際的文件系統(tǒng)”的結(jié)構(gòu)和操作方式是不一樣的锭汛。如果是這樣的話用戶怎么去操作它們呢?總不能每種不同的文件系統(tǒng)都采用不同的方法吧袭蝗,那么這個(gè)時(shí)候就需要VFS作為中間層唤殴!用戶直接控制VFS,VFS再去控制各個(gè)文件系統(tǒng)到腥。
2.VFS存在的意義
可歸結(jié)為以下四點(diǎn):
對(duì)應(yīng)用層提供一個(gè)標(biāo)準(zhǔn)的文件操作接口朵逝;
對(duì)文件系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)的接口,以便其他操作系統(tǒng)的文件系統(tǒng)可以方便的移植到Linux上左电;
VFS內(nèi)部則通過(guò)一系列高效的管理機(jī)制廉侧,比如inode cache, dentry cache 以及文件系統(tǒng)的預(yù)讀等技術(shù)页响,使得底層文件系統(tǒng)不需沉溺到復(fù)雜的內(nèi)核操作篓足,即可獲得高性能;
此外VFS把一些復(fù)雜的操作盡量抽象到VFS內(nèi)部闰蚕,使得底層文件系統(tǒng)實(shí)現(xiàn)更簡(jiǎn)單栈拖。
標(biāo)注
<1>文件系統(tǒng)(一般可以分為以下幾類)
網(wǎng)絡(luò)文件系統(tǒng),如 nfs没陡、cifs涩哟、cdoa、afs等網(wǎng)絡(luò)文件系統(tǒng)
磁盤文件系統(tǒng)盼玄,如ext2/ext3/ext4文件系統(tǒng)贴彼;
特殊文件系統(tǒng),如 proc埃儿、sysfs器仗、ramfs、tmpfs童番、pipe文件系統(tǒng)等精钮。