專利名稱:一種透明擴(kuò)充文件系統(tǒng)功能的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種增強(qiáng)文件系統(tǒng)功能的方法,特別是涉及一種能透明地擴(kuò)充文件系統(tǒng)功能的方法,所謂“透明”指的是用戶和用戶態(tài)程序無法干預(yù)。
背景技術(shù):
所有的計算機(jī)程序都要存儲信息和檢索信息。對于長期存儲的信息,有以下三個要求一是要有足夠的空間存儲信息。二是在使用信息的進(jìn)程終止時,信息必須保存下來。三是多個進(jìn)程可以并發(fā)存取信息。滿足以上三個要求的常用方法是把信息以一種稱之為“文件”的單元保存在磁盤或其他的外部存儲介質(zhì)上。文件是由操作系統(tǒng)來管理的。文件的命名、存儲空間的分配、文件的存取和使用等都是由操作系統(tǒng)中的“文件系統(tǒng)”管理單元來管理的。
文件系統(tǒng)可以被看成是一個多功能的管理器,它既是空間管理器、I/O管理器、目錄管理器,對于特殊的日志文件系統(tǒng)它還是事務(wù)管理器。一種操作系統(tǒng)可以支持多種不同的文件系統(tǒng),例如Linux操作系統(tǒng)可以支持的文件系統(tǒng)有ext2、ext3、jfs、Reiserfs、xfs等。為了支持各種不同的文件系統(tǒng),很多操作系統(tǒng)在設(shè)計之初就考慮到了兼容性,UFS就是UNIX的標(biāo)準(zhǔn)文件系統(tǒng)界面,只要符合這個標(biāo)準(zhǔn)的文件系統(tǒng)都可以在UNIX上運(yùn)行。這樣就誕生了一個內(nèi)核的子系統(tǒng)-VFS(Virtual File System)虛擬文件系統(tǒng)層,它作為一個轉(zhuǎn)換開關(guān)來支持各種不同的文件系統(tǒng)。VFS提供了一系列標(biāo)準(zhǔn)的操作集合來管理和操作文件,這些操作集合都是由相關(guān)的函數(shù)指針來定義的。操作系統(tǒng)將各種不同的對文件系統(tǒng)的請求通過系統(tǒng)調(diào)用接口提交到VFS層。VFS層經(jīng)過判斷,來決定這個請求由哪個底層文件系統(tǒng)來實(shí)現(xiàn),從而調(diào)用相應(yīng)文件系統(tǒng)的操作處理函數(shù)。
各種文件系統(tǒng)都有自己的特長,有的文件系統(tǒng)寫大文件的性能高;有些文件對小文件的處理能力強(qiáng);日志文件系統(tǒng)可以將改變文件系統(tǒng)的各個操作,記錄到日志中去,一旦系統(tǒng)崩潰,可以按照日志快速恢復(fù)文件系統(tǒng)的一致性。但是無論什么文件系統(tǒng),它提供給用戶的功能大體相同,無外乎對文件的存取和目錄的管理等。如果用戶希望文件系統(tǒng)提供額外的附加功能,通常的方法是修改具體文件系統(tǒng)的實(shí)現(xiàn)函數(shù),按照用戶的需求,添加對事務(wù)的處理。但是這種做法有兩個缺點(diǎn),其一就是如果用戶希望多種文件系統(tǒng)都提供它所需要的功能,就必須逐一修改具體文件系統(tǒng)的代碼,這樣做的結(jié)果既不利于原來文件系統(tǒng)代碼的完整性,同時兼容性也很差。有人提出了修改VFS層的建議來解決兼容性的問題,但是這樣做的代價就是破壞了VFS層的標(biāo)準(zhǔn),同時依然解決不了另外一個問題。另外一個問題就是,這樣對文件系統(tǒng)修改,滿足不了用戶隨時增加或撤銷對特殊事務(wù)處理的要求,靈活性很差。
發(fā)明內(nèi)容
本發(fā)明的目的在于,按照不同用戶的特殊需求,提供一種透明擴(kuò)充文件系統(tǒng)功能的方法。本發(fā)明還可以使用戶隨時根據(jù)需要啟動或者關(guān)閉對文件系統(tǒng)的特殊事務(wù)處理,而不影響原有的底層文件系統(tǒng)。
本發(fā)明所述的一種透明擴(kuò)充文件系統(tǒng)功能的方法,其文件系統(tǒng)包括虛擬文件系統(tǒng)VFS和底層文件系統(tǒng),在VFS層標(biāo)準(zhǔn)調(diào)用接口和底層文件系統(tǒng)接口之間,還包括一個夾層文件系統(tǒng)(Interlayer File System),當(dāng)一個應(yīng)用程序發(fā)出一個文件系統(tǒng)的請求時,系統(tǒng)調(diào)用接口先將該請求提交給VFS層處理函數(shù),VFS通過標(biāo)準(zhǔn)調(diào)用接口將請求提交給夾層文件系統(tǒng),由該夾層文件系統(tǒng)進(jìn)行特殊事務(wù)處理后,例如對數(shù)據(jù)加密,壓縮或者讀/寫的重定向等,再將事務(wù)提交給底層的具體文件系統(tǒng),最后,由底層文件系統(tǒng)來實(shí)現(xiàn)實(shí)際的數(shù)據(jù)存取或輸入輸出。
如上所述的一種透明的擴(kuò)充文件系統(tǒng)功能的方法,所述夾層文件系統(tǒng)為一個可隨時裝載或卸除裝載的模塊,當(dāng)模塊裝載后,夾層文件系統(tǒng)截獲VFS向下提交的請求;卸載模塊后,則恢復(fù)原來的操作流程,VFS層直接將請求提交底層文件系統(tǒng),由底層文件系統(tǒng)具體實(shí)現(xiàn)各種請求。
本發(fā)明所述方法可以在原有的已經(jīng)實(shí)現(xiàn)的多種文件系統(tǒng)基礎(chǔ)上,截獲文件系統(tǒng)的請求,封裝自己的處理,增強(qiáng)文件系統(tǒng)的功能,并且不破壞VFS層的標(biāo)準(zhǔn)接口和具體文件系統(tǒng)的代碼完整性,實(shí)現(xiàn)各種特殊的應(yīng)用。
圖1為夾層文件系統(tǒng)結(jié)構(gòu)圖;圖2為系統(tǒng)調(diào)用寫事務(wù)write的處理流程;圖3為夾層文件系統(tǒng)操作集合的數(shù)據(jù)結(jié)構(gòu)關(guān)系圖;圖4為夾層文件系統(tǒng)讀超級塊interlayer_read_super.的操作流程圖;圖5為創(chuàng)建內(nèi)存inode的操作函數(shù)interlayer_read_inode流程圖;圖6為夾層文件系統(tǒng)寫操作interlayer_write流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對本發(fā)明再作進(jìn)一步詳細(xì)的說明。
本發(fā)明提出的夾層文件系統(tǒng)的概念是受了VFS的啟發(fā),而VFS就是一個不可裝載的并且已經(jīng)成為標(biāo)準(zhǔn)的夾層文件系統(tǒng)。如果修改了VFS層的話,必將要求所有的文件系統(tǒng)都經(jīng)過特殊事務(wù)的處理,并且裝載的靈活性受到了限制。因此在VFS和具體文件系統(tǒng)(例如ext2,jfs,xfs等)的基礎(chǔ)上,本發(fā)明提出了夾層文件系統(tǒng)的概念。
如圖1所示,本發(fā)明并不是真正的實(shí)現(xiàn)一個具體的文件系統(tǒng),而是在VFS層和具體文件系統(tǒng)之間封裝的標(biāo)準(zhǔn)調(diào)用接口,以實(shí)現(xiàn)擴(kuò)展文件系統(tǒng)的功能。在裝載了夾層文件系統(tǒng)的情況下,當(dāng)一個應(yīng)用程序發(fā)出一個文件系統(tǒng)的請求時,系統(tǒng)調(diào)用接口將該請求先提交給VFS層處理函數(shù),VFS通過標(biāo)準(zhǔn)調(diào)用接口將請求提交給夾層文件系統(tǒng),由該夾層文件系統(tǒng)進(jìn)行特殊事務(wù)處理后,如對數(shù)據(jù)加密,壓縮或者讀/寫的重定向等,再將事務(wù)提交給底層的具體文件系統(tǒng),最后,由底層文件系統(tǒng)來實(shí)現(xiàn)實(shí)際的數(shù)據(jù)存取或I/O。
VFS層提供的標(biāo)準(zhǔn)調(diào)用接口,包括四個操作函數(shù)集合關(guān)于超級塊的操作集合(super_operations);關(guān)于i節(jié)點(diǎn)的操作集合(inode_operations);關(guān)于文件的操作合集(file_operations);關(guān)于地址空間的操作集合(address_space_operations)。其中inode_operations、file_operations和address_space_operations直接掛在文件系統(tǒng)的基本對象i節(jié)點(diǎn)上;而super_operations直接掛接在文件系統(tǒng)的超級塊上;同時i節(jié)點(diǎn)上保存有超級塊的指針,因此通過i節(jié)點(diǎn)可以間接訪問到per_operations。這四個操作集合都是由不同的函數(shù)指針組成的結(jié)構(gòu),而這些函數(shù)指針則指向了具體的文件系統(tǒng)所實(shí)現(xiàn)的操作函數(shù)。VFS層就是將各種文件系統(tǒng)的請求通過這四個操作集的調(diào)用提交給具體文件系統(tǒng)的。因此,只需要實(shí)現(xiàn)這四個操作集合,并且將自己實(shí)現(xiàn)的操作集合覆蓋到i節(jié)點(diǎn)和超級塊上的函數(shù)指針,就可以截獲VFS向下提交的請求了。
另外,為了增加系統(tǒng)的靈活性,根據(jù)操作系統(tǒng)提供的可裝載模塊的實(shí)現(xiàn)規(guī)則,通過將夾層文件系統(tǒng)實(shí)現(xiàn)為可裝載模塊,隨時可以根據(jù)用戶的需求動態(tài)的裝載和卸載夾層文件系統(tǒng)到操作系統(tǒng)的內(nèi)核中,來實(shí)現(xiàn)啟動和關(guān)閉對文件系統(tǒng)的特殊事務(wù)的處理過程。
圖2用系統(tǒng)調(diào)用寫操作的處理流程來進(jìn)一步說明上述的體系結(jié)構(gòu)。首先當(dāng)應(yīng)用程序請求寫操作時,操作系統(tǒng)將寫請求通過系統(tǒng)調(diào)用接口傳遞給虛擬文件系統(tǒng)的處理函數(shù),虛擬文件系統(tǒng)轉(zhuǎn)發(fā)寫請求給夾層文件系統(tǒng),夾層文件系統(tǒng)再通過對寫請求的數(shù)據(jù)塊壓縮/加密后重新組織寫磁盤的數(shù)據(jù)內(nèi)容,最后將新的數(shù)據(jù)內(nèi)容作為參數(shù)提交給底層文件系統(tǒng)JFS(日志文件系統(tǒng))進(jìn)行真正寫事務(wù)處理。
下面具體地以本發(fā)明應(yīng)用于壓縮文件系統(tǒng)和加密文件系統(tǒng)為例,說明基于JFS(Journal File System)日志文件系統(tǒng),是如何利用夾層文件系統(tǒng)實(shí)現(xiàn)文件系統(tǒng)數(shù)據(jù)加密和數(shù)據(jù)壓縮的。
加密/壓縮文件系統(tǒng)的實(shí)現(xiàn)原理在于創(chuàng)建一個夾層文件系統(tǒng),并封裝文件系統(tǒng)的讀和寫請求。通常情況下,當(dāng)應(yīng)用程序發(fā)出對文件系統(tǒng)的寫文件請求時,寫系統(tǒng)調(diào)用將此請求提交給VFS層,VFS再通過調(diào)用底層文件系統(tǒng)的函數(shù)實(shí)現(xiàn)寫操作;但是如果用戶請求對數(shù)據(jù)進(jìn)行壓縮或者加密,即掛接了加密/壓縮夾層文件系統(tǒng)后,用戶的寫請求將會在VFS向底層文件系統(tǒng)提交時被截獲,先通過加密/壓縮夾層文件系統(tǒng)對寫數(shù)據(jù)緩沖區(qū)的內(nèi)容壓縮/加密,然后再調(diào)用底層文件系統(tǒng)的函數(shù)實(shí)現(xiàn)真正的寫文件操作。這就要求夾層文件系統(tǒng)的操作函數(shù)集合inode_operations、file_operations、super_operations和address_space_operations要覆蓋掉原有inode下掛接的JFS對應(yīng)的操作函數(shù)集合。如何將文件系統(tǒng)調(diào)用接口的實(shí)現(xiàn)函數(shù)指針指向帶有加密/壓縮功能的操作函數(shù)集是實(shí)現(xiàn)壓縮/加密文件系統(tǒng)的第一步。
考慮到inode是內(nèi)存中結(jié)構(gòu),其下的屬性i_op和i_fop和i_mapping的成員a_ops分別指向文件系統(tǒng)的inode_operations、file_operations和address_space_operations,而這三個的屬性值是在讀磁盤i節(jié)點(diǎn)創(chuàng)建內(nèi)存inode的過程中被賦值的,因此需要改寫創(chuàng)建內(nèi)存inode的過程,好讓inode的i_op和i_fop等指向夾層文件系統(tǒng)的操作函數(shù)。在創(chuàng)建內(nèi)存inode的過程中,不但需要調(diào)用真正底層文件系統(tǒng)的函數(shù)讀出磁盤i節(jié)點(diǎn),創(chuàng)建內(nèi)存inode的各種屬性,同時還要求重定向inode的各個操作集合,即覆蓋操作集函數(shù)指針,詳見附圖5說明。
但是,創(chuàng)建inode的操作本身也屬于操作集合super_operations,因此為了覆蓋i_op和i_fop和i_mapping的成員操作集合a_ops,應(yīng)該首先覆蓋超級塊的super_operations。而這個操作集合是在文件系統(tǒng)被掛接的時候被安裝的,即在read_super時安裝的,所以應(yīng)該首先改寫read_super函數(shù),詳見附圖4說明。
附圖3是夾層文件系統(tǒng)的主要操作集合和數(shù)據(jù)結(jié)構(gòu)的關(guān)系圖。從圖3中可以得知夾層文件系統(tǒng)的主要數(shù)據(jù)結(jié)構(gòu)interlayer_fs包括了四個操作函數(shù)集合。其中o_fops是夾層文件系統(tǒng)的對象(文件、目錄和連接)各自的inode_operations、file_operations和super_operations組成的結(jié)構(gòu)。而這些操作集合最終將要調(diào)用具體的底層文件系統(tǒng)的實(shí)現(xiàn)函數(shù),因此interlayer_fs中的o_caops保存了原來底層文件系統(tǒng)對象(文件、目錄和連接)的各自的inode_operations、file_operations和super_operations。如果需要的話可以加入日志的操作集合o_jrops和實(shí)現(xiàn)附加功能的操作集合o_addops,例如數(shù)據(jù)加密/解密,數(shù)據(jù)壓縮/解壓。
附圖4是夾層文件系統(tǒng)讀超級塊interlayer_read_super.的操作流程圖。如上所述,讀超級塊是為了在掛接文件系統(tǒng)時,覆蓋底層文件系統(tǒng)的super_operations。
第一步,分析掛接文件系統(tǒng)操作傳入的參數(shù)并且判斷底層文件系統(tǒng)的類型;初始化一個全局變量interlayer_cache為夾層文件系統(tǒng)超級塊內(nèi)存結(jié)構(gòu),在這個結(jié)構(gòu)中保存底層文件系統(tǒng)的真正的超級塊指針和夾層文件系統(tǒng)操作結(jié)構(gòu)interlayer_fs。由于夾層文件系統(tǒng)并不是真正的文件系統(tǒng),因此要保存真正文件系統(tǒng)的超級塊,以供后面真正的系統(tǒng)調(diào)用實(shí)現(xiàn)使用。
第二步,調(diào)用真正底層文件系統(tǒng)的read_super函數(shù),讀出超級塊的內(nèi)容并且獲取底層文件系統(tǒng)的super_operations。
第三步,安裝夾層文件系統(tǒng)的super_operations。具體的實(shí)現(xiàn)方法是首先將底層文件系統(tǒng)的super_operations拷貝到夾層文件系統(tǒng)的超級塊的操作集屬性,然后判斷是否需要改變super_operations的某個操作,如果夾層文件系統(tǒng)的某個操作改變了原來的操作,就修改該操作的函數(shù)指針,令它指向的新的操作函數(shù)。這樣就保證了操作集合的完整性。如果夾層文件系統(tǒng)不需要改變的操作,就使用默認(rèn)原來的底層文件系統(tǒng)操作函數(shù)。
第四步,安裝根目錄節(jié)點(diǎn)(掛接點(diǎn))的inode_operations,file_operations和address_space_operations,令根目錄的各個操作集合指向新的操作函數(shù)。
第五步,函數(shù)返回。
附圖5是創(chuàng)建內(nèi)存inode的操作函數(shù)interlayer_read_inode流程圖。如上所述,重寫讀inode的操作是為了在創(chuàng)建內(nèi)存inode的同時,重定向inode的各個操作集合。
第一步,取出夾層文件系統(tǒng)的超級塊內(nèi)存結(jié)構(gòu),也就是在read_super時讀出的全局變量interlayer_cache,通過它可以獲得底層文件系統(tǒng)的超級塊和各種操作集合。
第二步,調(diào)用底層文件系統(tǒng)的讀inode函數(shù),根據(jù)磁盤inode在內(nèi)存中創(chuàng)建一個內(nèi)存inode結(jié)構(gòu),并且給inode結(jié)構(gòu)的各種屬性賦值。
第三步,判斷inode的類型(目錄、文件還是鏈接)。分別為內(nèi)存inode安裝inode_operations,file_operations和address_space_operations。安裝操作集合的方法與安裝super_operations一樣。
第四步,函數(shù)返回。
附圖6是寫操作interlayer_write流程圖。從圖6中可以看到是如何封裝數(shù)據(jù)加密/壓縮操作的。通過圖6,可以清晰的看到夾層文件系統(tǒng)是如何在事務(wù)處理的過程中發(fā)揮作用的。
第一步,取出底層文件系統(tǒng)的file_opertions函數(shù)指針。
第二步,對write請求傳遞的參數(shù)數(shù)據(jù)緩沖區(qū)進(jìn)行特殊處理。如對于壓縮文件系統(tǒng)在此可以利用壓縮算法,壓縮緩沖區(qū)的數(shù)據(jù);對于加密文件系統(tǒng)可以利用加密算法對緩沖區(qū)中的數(shù)據(jù)進(jìn)行加密。
第三步,調(diào)用具體的底層文件系統(tǒng)的write函數(shù),將處理過的緩沖區(qū)中的數(shù)據(jù)真正的提交到I/O設(shè)備驅(qū)動,完成磁盤寫操作。
第四步,函數(shù)返回。
同樣,如果需要封裝該夾層文件系統(tǒng)的讀操作,具體的是編寫夾層文件系統(tǒng)的read函數(shù),在讀出數(shù)據(jù)后,利用解壓縮算法將壓縮后的數(shù)據(jù)返回給用戶;或者利用解密算法對讀出的數(shù)據(jù)解密后,再拷貝返回給用戶。
通過上面的描述可以看出,僅僅通過對讀/寫操作的封裝,就可以實(shí)現(xiàn)透明的擴(kuò)充文件系統(tǒng)的功能,使文件系統(tǒng)具有加密/解密和壓縮/解壓的功能。其實(shí)夾層文件系統(tǒng)的應(yīng)用還遠(yuǎn)遠(yuǎn)不止這些,利用對夾層文件系統(tǒng)讀/寫操作的封裝,還可以做到對讀/寫操作的重定向。同樣,可以控制的遠(yuǎn)遠(yuǎn)不僅僅局限于讀/寫操作的封裝,通過封裝inode_operations、file_operations和address_space_operations中任意函數(shù),夾層文件系統(tǒng)還可以實(shí)現(xiàn)更多的其他功能。
為了使夾層文件系統(tǒng)更加靈活,將夾層文件系統(tǒng)實(shí)現(xiàn)為一個可安裝模塊,在不必對內(nèi)核重新編譯連接的條件下,將可安裝模塊動態(tài)地插入運(yùn)行中的內(nèi)核中,使之成為內(nèi)核的一個有機(jī)組成部分,便可使文件系統(tǒng)增加特殊的功能;或者從內(nèi)核中移走已經(jīng)安裝的模塊,從而取消文件系統(tǒng)對特殊事務(wù)的處理。例如,在Linux中,其具體實(shí)現(xiàn)方式是通過調(diào)用module_init(初始化夾層文件系統(tǒng))和module_exit(退出夾層文件系統(tǒng))來實(shí)現(xiàn)的。在初始化夾層文件系統(tǒng)的時候,注冊夾層文件系統(tǒng);而在退出夾層文件系統(tǒng)的函數(shù)里,取消已注冊的夾層文件系統(tǒng)。
最后所應(yīng)說明的是以上實(shí)施例僅用以說明而非限制本發(fā)明的技術(shù)方案,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對本發(fā)明進(jìn)行修改或者等同替換,對于不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種透明擴(kuò)充文件系統(tǒng)功能的方法,其文件系統(tǒng)包括虛擬文件系統(tǒng)VFS和底層文件系統(tǒng),其特征在于,在VFS層標(biāo)準(zhǔn)調(diào)用接口和底層文件系統(tǒng)接口之間,還設(shè)置一個夾層文件系統(tǒng)(Interlayer File System),當(dāng)一個應(yīng)用程序發(fā)出一個文件系統(tǒng)的請求時,系統(tǒng)調(diào)用接口先將該請求提交給VFS層處理函數(shù);VFS通過標(biāo)準(zhǔn)調(diào)用接口將請求提交給所述夾層文件系統(tǒng);由該夾層文件系統(tǒng)進(jìn)行特殊事務(wù)處理后,再將事務(wù)提交給底層的具體文件系統(tǒng);最后,由底層文件系統(tǒng)來實(shí)現(xiàn)實(shí)際的數(shù)據(jù)存取或輸入輸出。
2.根據(jù)權(quán)利要求1所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,通過重定向文件系統(tǒng)的操作集合實(shí)現(xiàn)特殊事務(wù)的處理,步驟包括步驟21,通過夾層文件系統(tǒng)讀超級塊interlayer_read_super的操作,覆蓋底層文件系統(tǒng)的超級操作集合super_operations;步驟22,在創(chuàng)建內(nèi)存i節(jié)點(diǎn)的同時,重定向i節(jié)點(diǎn)的三種操作集合;步驟23,在夾層文件系統(tǒng)實(shí)現(xiàn)i節(jié)點(diǎn)的各種操作集合函數(shù),完成特殊事務(wù)的處理。
3.根據(jù)權(quán)利要求2所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述步驟21進(jìn)一步包括分析掛接文件系統(tǒng)操作傳入的參數(shù)并且判斷底層文件系統(tǒng)的類型;初始化一個全局變量interlayer_cache為夾層文件系統(tǒng)超級塊內(nèi)存結(jié)構(gòu),在這個結(jié)構(gòu)中保存底層文件系統(tǒng)的真正的超級塊指針和夾層文件系統(tǒng)操作結(jié)構(gòu)interlayer_fs;調(diào)用真正底層文件系統(tǒng)的讀超級塊read_super函數(shù),讀出該超級塊的內(nèi)容并且獲取底層文件系統(tǒng)的超級操作super_operations;安裝夾層文件系統(tǒng)的超級操作super_operations;安裝根目錄節(jié)點(diǎn)(掛接點(diǎn))的inode_operations,file_operations和address_space_operations,令根目錄的各個操作集合指向新的操作函數(shù);函數(shù)返回。
4.根據(jù)權(quán)利要求3所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述安裝夾層文件系統(tǒng)的超級操作super_operations具體包括首先,將底層文件系統(tǒng)的超級操作super_operations拷貝到夾層文件系統(tǒng)的超級塊的操作集屬性;然后,判斷是否需要改變超級操作super_operations的某個操作,如果夾層文件系統(tǒng)的某個操作改變了原來的操作,就修改該操作的函數(shù)指針,令它指向新的操作函數(shù);如果夾層文件系統(tǒng)不需要改變操作,就使用默認(rèn)原來的底層文件系統(tǒng)操作函數(shù)。
5.根據(jù)權(quán)利要求3所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述步驟22進(jìn)一步包括取出夾層文件系統(tǒng)的超級塊內(nèi)存結(jié)構(gòu);調(diào)用底層文件系統(tǒng)的讀inode函數(shù),根據(jù)磁盤inode在內(nèi)存中創(chuàng)建一個內(nèi)存inode結(jié)構(gòu),并且給inode結(jié)構(gòu)的各種屬性賦值;判斷inode的類型屬于目錄、文件還是鏈接,分別為內(nèi)存inode安裝i節(jié)點(diǎn)操作inode_operations,文件操作file_operations和地址空間操作address_space_operations;函數(shù)返回。
6.根據(jù)權(quán)利要求3所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述步驟23進(jìn)一步包括取出底層文件系統(tǒng)的文件操作file_opertions或i節(jié)點(diǎn)操作inode_operations或地址空間操作address_space_operations的函數(shù)指針;對需要擴(kuò)充功能的對應(yīng)函數(shù)進(jìn)行特殊處理。
7.根據(jù)權(quán)利要求1-6任一所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述夾層文件系統(tǒng)為一個可隨時裝載或卸除裝載的模塊,當(dāng)模塊裝載后,夾層文件系統(tǒng)截獲VFS向下提交的請求;卸載模塊后,則恢復(fù)原來的操作流程,VFS層直接將請求提交底層文件系統(tǒng),由底層文件系統(tǒng)具體實(shí)現(xiàn)各種請求。
8.根據(jù)權(quán)利要求7所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述模塊裝載是通過調(diào)用初始化夾層文件系統(tǒng)(module_init)來注冊夾層文件系統(tǒng)。
9.根據(jù)權(quán)利要求8所述的透明擴(kuò)充文件系統(tǒng)功能的方法,其特征在于,所述模塊卸載是通過調(diào)用退出夾層文件系統(tǒng)(module_exit)來取消已注冊的夾層文件系統(tǒng)。
全文摘要
本發(fā)明公開了一種透明擴(kuò)充文件系統(tǒng)功能的方法,其文件系統(tǒng)包括虛擬文件系統(tǒng)VFS和底層文件系統(tǒng),在VFS層標(biāo)準(zhǔn)調(diào)用接口和底層文件系統(tǒng)接口之間,還設(shè)置一個夾層文件系統(tǒng),當(dāng)應(yīng)用程序發(fā)出一個文件系統(tǒng)的請求時,系統(tǒng)調(diào)用接口先將該請求提交給VFS層處理函數(shù);VFS通過標(biāo)準(zhǔn)調(diào)用接口將請求提交給所述夾層文件系統(tǒng);由該夾層文件系統(tǒng)進(jìn)行特殊事務(wù)處理后,再將事務(wù)提交給底層的具體文件系統(tǒng);最后由底層文件系統(tǒng)來實(shí)現(xiàn)實(shí)際的數(shù)據(jù)存取或輸入輸出。本發(fā)明可以在原有的已經(jīng)實(shí)現(xiàn)的多種文件系統(tǒng)基礎(chǔ)上,截獲文件系統(tǒng)的請求,封裝自己的處理,增強(qiáng)文件系統(tǒng)的功能,并且不破壞VFS層的標(biāo)準(zhǔn)接口和具體文件系統(tǒng)的代碼完整性,實(shí)現(xiàn)各種特殊的應(yīng)用。
文檔編號G06F9/46GK1553325SQ0313812
公開日2004年12月8日 申請日期2003年6月5日 優(yōu)先權(quán)日2003年6月5日
發(fā)明者吳江, 唐杰, 李麗虹, 吳 江 申請人:聯(lián)想(北京)有限公司