棧式文件系統和方法
2023-09-21 10:26:35 1
專利名稱:棧式文件系統和方法
技術領域:
本發明涉及棧式文件系統和方法。
背景技術:
文件系統堆棧是用於文件系統模塊開發的已經具有良好文檔定義的技術。文件系統棧包括採用使操作流程能夠通過整個棧的方式組織的代碼模塊。模塊棧通常按順序執行以完成操作。例如,文件系統棧的底部模塊可負責管理文件,文件系統棧上的另一模塊可專用於加密。在操作中,例如寫操作中,先進行數據加密,然後將加密數據傳送到下一層直至底部,底部將加密數據存儲在文件中。因此,文件系統棧上的每一層執行它的指定操作,然後將數據向下傳送到下一層。
文件系統堆棧在工業中未充分利用。一個可能的原因是棧可能難以管理,通常是因為系統中內在的問題,即系統允許用戶將軟體模塊組合成未預計的配置。其它問題涉及在模塊之間實施相關性存在困難,而事實是通常以臨時方式建立模塊棧而沒有為棧再用作準備。因為這些和其它問題,棧可能包含不兼容模塊,這可能引入或加劇系統不穩定性。
發明內容
棧式文件系統的一個實施例包括一種棧式文件系統,所述棧式文件系統包括具有棧的存儲器以及邏輯,棧包括第一模塊和第二模塊,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼,邏輯被配置為建立包括關於棧的信息的棧模板。
棧式文件方法的一個實施例包括提供對應於包括第一模塊和第二模塊的棧的文本文件,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;並提供包括關於棧的信息的棧模板。
棧式文件系統的一個實施例包括用於存儲包括第一模塊和第二模塊的棧的裝置,第一模塊和第二模塊包括可執行代碼;以及用於提供包括關於棧的信息的棧模板的裝置。
用於建立存儲在計算機可讀介質上的棧模板的電腦程式的實施例包括邏輯,邏輯被配置為建立對應於棧中配置的第一模塊和第二模塊的文本文件,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;邏輯被配置為建立包括棧信息的棧模板。
計算機的一個實施例包括存儲器,其中包括含有第一模塊和第二模塊的棧,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;作業系統,其中包括配置為建立包括關於棧的信息的棧模板的邏輯;以及被配置為執行邏輯和可執行代碼的處理器。
棧式文件系統的一個實施例包括具有棧的存儲器以及邏輯,棧包括第一模塊和第二模塊,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼,邏輯被配置為確定棧是否有效,如果有效,則建立包括關於有效棧的信息的棧模板。
圖中的組件不一定按比例繪製,重點在於清楚地說明所公開系統和方法的原理。而且,在圖中,相同的參考標號指示若干圖中對應的部分。
圖1是說明棧式文件系統實施例的實例實現的框圖。
圖2是圖1所示的棧式文件系統的內核堆棧基礎結構的實施例的框圖。
圖3A是流程圖,說明在圖1所示的棧式文件系統中創建棧模板的方法實施例。
圖3B是程序設計圖,說明可由用戶輸入的用於調用圖3A說明的方法的實例命令行。
圖3C是程序設計圖,說明由圖3A說明的方法創建的棧模板的實施例。
圖4是程序設計圖,說明用於圖1所示的棧式文件系統的模塊的模塊定義文件的實施例。
圖5是流程圖,說明驗證圖1所示的棧式文件系統中的棧的方法實施例。
具體實施例方式
本文所公開的是棧式文件系統和方法的各種實施例,為了簡潔起見,本文稱為棧式文件系統。一般來說,棧式文件系統包括使用稱為棧模板(也稱為棧模板文件)的文件結構來建立、驗證和管理棧的功能性。對於棧式文件系統,一個或多個棧模板使用戶能夠將軟體特徵組成安全、正確、可靠和可再用的棧,並且能夠將關於那些棧的信息以及它們對應的數據直接存儲在盤上。又可將這些棧視為全新的棧式文件系統類型,由終端用戶通過將現用的可堆棧模塊組合成功能棧來完整地建立和定義。例如,棧式文件系統可包括少數現成的棧模板以及使用戶能夠通過將提供感興趣特徵的模塊組合來建立他們自己的棧模板的功能性。從用戶角度看,棧模板可視為在一個或多個盤或其它存儲介質上容易再用的「喜愛的」棧的描述。
本文使用的模塊通常指執行服務(例如模塊提供的特徵或選項)或一個或多個特定功能的一段代碼。雖然在模塊(該模塊執行某些特定文件系統功能性並將其餘操作傳到棧中它之下的模塊)的上下文中描述了棧式文件系統,但是所公開的系統和方法可應用到一般的應用和/或服務。例如,在JAVA應用的情況中,棧可以由應用、JAVA和支持JAVA的作業系統(例如,WINDOWS)構成。不是將三段代碼分別安裝,而是可以創建包括三段代碼的棧,使得能夠進行單次安裝並使得在便攜盤上能夠存儲相應的棧模板。
棧式文件系統的一個特徵是在利用安裝命令、例如在UNIX系統中使用的mountsyscall創建任何棧之前先確定文件系統棧的有效性。具體地說,mount操作不是用於建立棧,而是例示其結構已知為安全、正確和可靠的棧。例如,在惠普的作業系統HP-UX中,mount操作會取基本文件系統的名稱和棧模板的名稱以例示棧。注意,本文引用基本文件系統要理解為包括引用較低級內核碼和內核碼的較高級用戶空間表示。在mount操作的內核碼內,使用基本文件系統(來自mount操作的變元)上面的模板建立棧,並且整個棧式文件系統代碼被安裝和初始化。雖然在UNIX或UNIX類型系統的上下文中進行了描述,但是可應用由其它類型作業系統執行的類似的操作。例如,可在使用WINDOWS的操作中發現與mountsyscall類似的操作,例如當插入CD或插入USB密鑰以便能夠訪問CD或連接裝置上的文件時。而且,所公開的棧式文件系統的原理可應用於不同的作業系統安裝操作。例如,在LINUX中,三層棧使用三個分離的mount調用,每個調用將新層推到棧上。使用棧模板,可讀取棧模板,然後將其轉換為對安裝的多個調用(棧模板中的每層對應一個調用)。
棧式文件系統的另一個特徵是,棧結構的「藍圖」存儲在稱為棧模板的對象資料庫中。棧模板描述棧上的模塊,包括用於每個模塊的任何示例特定的選項。在棧式文件系統中,棧模板是存儲關於棧建立之前和建立之後的藍圖信息的機構。而且,棧式文件系統的堆棧模塊包括關於它們的使用的約束的信息,使棧能夠被驗證。
圖1和2分別說明了棧式文件系統的實現和棧式文件系統的實施例,隨後在圖3A說明建立棧模板的方法實施例。圖3B和3C分別說明使用戶能夠調用棧模板建立的命令行實例和棧模板的實施例。圖4說明通過為每個模塊結合模塊定義文件實現棧的驗證。圖5說明驗證方法的實施例。
本文所用的流程圖中的任何過程描述或框應當理解為表示包括用於實現過程中特定邏輯功能或步驟的一個或多個可執行指令的代碼的模塊、段或部分,並且備選實現包括在公開範圍內,其中可以不按照所示或所討論的順序執行這些功能,包括基本並行或顛倒次序,取決於涉及的功能性。
圖1是表示棧式文件系統100的實施例的實例實現的框圖。可在計算機120或類似計算機的裝置中全部或部分實現棧式文件系統100。棧式文件系統100包括棧管理器102、一個或多個棧模板104以及一個或多個對應的棧106。棧管理器102包括安裝模塊140、模板建立模塊142、驗證模塊144,安裝模塊140包括將基本文件系統安裝到棧模板(和/或將棧模板與其它棧模板安裝在一起)並且將對應於基本文件系統的代碼安裝到棧模板所表示的棧的功能性,模板建立模塊142包括建立棧模板的功能性,驗證模塊144包括(通過驗證提出的棧模板)驗證提出的棧的功能性。棧式文件系統100可包括計算機120中示出的更少的或另外的組件。通常,就硬體體系結構來說,計算機100包括處理器160、存儲器158和通過本機接口180在通信上耦合的一個或多個輸入和/或輸出(I/O)裝置170(或外圍設備)。本機接口180可以為例如但不限於一個或多個總線或其它有線或無線連接。本機接口180可具有附加元件(為了簡單而省略了這些元件),例如控制器、緩衝器(高速緩存)、驅動器、轉發器和接收器,以便使通信能夠進行。而且,本機接口180可包括在上述組件之間使適當的通信能夠進行的地址、控制和/或數據連接。
處理器160是用於執行軟體(特別是存儲在存儲器158中的軟體)的硬體裝置。處理器160可以是任何用戶定製或可買到的處理器、中央處理器(CPU)、與計算機120相關聯的若干處理器中的輔助處理器、基於半導體的微處理器(採用微晶片或晶片組的形式)、宏處理器或通常用於執行軟體指令的任何裝置。
存儲器158可包括易失性存儲元件(例如,隨機存取存儲器(RAM,例如DRAM、SRAM、SDRAM等))和非易失性存儲元件(例如,只讀存儲器(ROM))中的任一個或組合。存儲器158通過本機接口180連同其它接口(未示出)一起合作,以便與可配置為硬碟驅動器、CDROM等的持久存儲裝置130通信。在一些實施例中,存儲器158可結合電、磁、光和/或其它類型的存儲介質。注意,存儲器158可具有分布式體系結構,其中各種組件相互遠離,但是能由處理器160訪問。
存儲器158中的軟體可包括一個或多個分離的程序,每一個程序包括用於實現邏輯功能的可執行指令的有序列表。在圖1的實例中,存儲器158中的軟體包括適合的作業系統(O/S)156和一個或多個面向對象的資料庫或配置為棧模板104的數據結構。棧模板104包括對應於棧106的一個或多個模塊(此處所示包括作為示範說明的三個模塊109、111和113)的模塊數據(模塊109數據103、模塊111數據105、模塊113數據107)。作業系統156包括棧管理器102,用來建立、驗證和管理(例如,安裝)棧模板。通常,作業系統156基本上控制其它電腦程式的執行,並提供調度、輸入輸出控制、文件和數據管理、存儲器管理、通信控制和相關服務。
棧管理器102是源程序、可執行程序(目標代碼)、腳本或包括待執行的一組指令的任何其它實體。可將棧管理器102實現為具有棧管理、建立和驗證功能性的單個模塊,或實現為相似功能性的模塊的分布式網絡。當棧管理器102是源程序時,則經由編譯器、彙編器、解釋器(可能或者也許不包括在存儲器158中)等來轉換程序,以便結合O/S 156適當地操作。
I/O裝置170可包括輸入裝置,例如但不限於鍵盤、滑鼠、掃描儀、麥克風等。而且,I/O裝置170也可包括輸出裝置,例如但不限於印表機、顯示器等。最後,I/O裝置170還可包括傳遞輸入和輸出的裝置,例如但不限於,調製器/解調器(數據機;用於訪問另一個裝置、系統或網絡)、射頻(RF)或其它收發器、電話接口、橋接器、路由器等。
當計算機120工作時,配置處理器160以執行存儲在存儲器158中的軟體,以便向存儲器158或者從存儲器158傳遞數據,並一般根據軟體來控制計算機120的操作。例如,由處理器160全部或部分讀取棧管理器102,或許在處理器160中緩衝,然後執行。
如圖1所示,當至少部分以軟體實現棧式文件系統100時,應當注意,棧式文件系統100的一個或多個組件可存儲在任何計算機可讀介質上,供任何計算機相關系統或方法使用或與任何計算機相關系統或方法結合。在此文檔的上下文中,計算機可讀介質是可包含或存儲由計算機相關系統或方法使用或與計算機相關系統或方法結合的電腦程式的電、磁、光或其它物理裝置或部件。棧式文件系統100的一個或多個組件可包含在任何計算機可讀介質中,供指令執行系統、設備或裝置、諸如基於計算機的系統、包含處理器的系統、或者能從指令執行系統、設備或裝置中提取指令並執行指令的其它系統使用或與這些系統結合。計算機可讀介質可為可攜式的,例如光碟(例如,CD)。
在一個實施例中,可將棧式文件系統100在概念上理解為包括功能性的兩個廣義方面用戶空間基礎結構和內核堆棧基礎結構。用戶空間基礎結構包括使用戶能夠定義可建立什麼棧的功能性,並包括如下所述的棧模板、操作它們的命令和模塊定義文件。圖2示出了內核堆棧基礎結構的實施例。為了表示棧,棧管理器102可包括指針陣列108(表示為標有0-2的塊)。指針陣列108中的每一塊(0-2)指向棧106的相應結構(分別為模塊113、111和109)。在一個實現中,棧的最低層(在該情況下,模塊113)用作句柄以表示整個棧106。換句話說,所有查找操作和非文件系統代碼模塊嚴格涉及模塊113,不知道堆棧模塊111和109存在。對於模塊性,堆棧模塊111和109可能不知道它們確切地位於棧106的哪一層,並且它們可能不能直接訪問指針陣列108。堆棧模塊109和111能使用堆棧模塊應用編程接口(API)中的存取函數找到它們的數據結構。「當前執行棧層」的概念將一直由棧管理器102維護。在一些實施例中,其它機制可用於跟蹤模塊和它們在棧中的次序。例如,棧的模塊可一起連結在鍊表結構中。
棧式文件系統100(圖1)的用戶空間基礎結構使用戶能夠在建立棧模板時交互,並包括一組用戶空間命令,這些命令由棧管理器102(圖1)利用以維護棧模板資料庫並防止用戶建立不正確或不穩定的棧的模板。在一個實施例中,僅在驗證用戶提出的棧模板之後,該模板才可實際用於mount調用。通過將棧驗證與mount操作分離,將棧驗證移到用戶空間,這可優化mount操作的速度和/或減少內核基礎結構代碼的複雜性。繼續參考圖1,圖3A是說明與用戶合作由棧管理器102的模板建立模塊142執行的用於棧模板建立的方法實施例142a的流程圖。在一個實現中,建立(302)文本文件並給文件命名(304)。換句話說,用戶通過首先寫包括關於棧的棧式文件系統模塊(和安裝選項)的信息(例如數據)的文件來建立棧模板。文本文件的內容可為棧模板的「用戶可見」內容。換句話說,「用戶可見」內容包括用戶可能需要或想要了解的棧模板的一些部分。例如,對於模塊109、111和113,所有用戶可能需要或想要了解的是那三個模塊在棧上。在內部,棧模板104可包括更多信息(例如,整體上提供給模板或模板需要的服務)以便後來允許與其它模板組合。棧模板104也可包括其它信息,例如它已建立的數據。通常,用戶不關心該信息(即,他或她可能只關心棧模板104包括關於模塊109、111和113的信息)。文本文件可包括關於執行期望功能性的一個或多個模塊的信息。然後使用文本文件建立棧模板(306)。
一般來說,除了棧模板提供機制以存儲在文本文件中的相同信息以及下面描述的附加信息(例如,建立的數據,提供的服務等)之外,上述方法建立的棧模板提供了有些類似於用戶觀察到的文本文件的數據結構。棧模板可包括經過驗證的內容,並可以被安全地存儲,使得在mount操作期間可信任其內容。換句話說,不是信任用戶的文本文件,文本文件可經歷驗證過程並存儲在稱為棧模板資料庫(未示出)的受信任位置(例如,用戶不能直接訪問的位置)。可將棧模板資料庫實現為在用戶未知的目錄中的一組文本文件或者作為實際關係資料庫。
圖3B說明使用戶能夠在建立棧模板時交互的命令行308的實例。在一些實施例中,命令行308可由實現相似功能性的GUI來替代,所述GUI可解釋模型定義文件並指導用戶進行棧建立過程。具有命名的文本文件作為變元的調用「fst_create」建立包括關於文本文件中標識的每個模塊的信息的棧模板。注意,該命令和其它命令行符號的使用是用於說明性目的,也可使用其它語法。在命令行中可使用各種選項,包括「-o」選項,其可用於覆寫(例如編輯)相同名稱的現有棧模板。另一個選項包括「-n」選項,可用於指定棧模板的名稱。若沒有「-n」選項,棧模板的名稱可採用文本文件的名稱。而且,棧模板的全部用戶可見內容可包括在命令行中而不是在分離的文件中(例如,「fst_create-n name包括模塊113數據107、模塊113數據_選項、模塊111數據105、模塊111數據_選項、模塊109數據103、模塊109數據_選項」)。
圖3C說明由圖3A說明的方法142a建立的棧模板104a的實施例。棧模板104a包括關於命名的文本文件的每個模塊的信息以及一些附加信息、例如棧模板版本號和關於基本文件系統需要是什麼的信息(例如,待安裝到基本文件系統的棧模板104a施加的約束)。在一些實施例中,棧模板104a可以不包括基本文件系統約束,其中基本文件系統和關於模塊的信息自含在棧模板中。包括在棧模板104a中的信息也可包括用於允許與其它模板一起安裝(對應於棧疊棧)的約束。棧模板104a由內核堆棧基礎結構(例如,棧管理器102的安裝模塊140,圖2)在安裝時間讀取。可採用類似於上述「用戶可見」模板數據的格式的ASCII面向行的格式來配置棧模板104a。棧模板104a包括版本號行312、棧要求約束行314、不支持的文件系統約束行316和對應於模塊數據103、105、107的行318、320、322,它們分別從方法142a中建立。注意,為了簡潔,未示出各行的變元。
雖然採用三個模塊的數據(103、105和107)示出,但是可利用更少或更多的模塊數據來配置棧模板。
版本號行312是版本字符串,允許將來格式中的變化而不會產生不兼容性。棧要求約束行314和不支持的文件系統約束行316都用所需特徵和不支持的基本文件系統的明確列表來指明關於要與對應於該棧模板的棧一起使用的基本文件系統的約束。例如,在棧管理器102(圖2)分析了文件系統棧並決定棧在基本文件系統上施加的約束之後,由棧管理器102(圖1)響應「fst_create」命令而寫入行314和316。注意,在確定與基本文件系統的兼容性之前,棧管理器102通過「fst_create」已經檢查了棧內的約束,並且棧管理器102通過讀相關堆棧模塊定義文件(如下所述)知道了所有這些約束。
棧要求約束行314(「stack_requires」)列出不是所有基本文件系統會實現的特定特徵,例如特定輸入/輸出控制、命名的流等。在一個實現中,可將這些特徵定義為用於模板文件名的字符串以及作為用於基本文件系統結構的位或版本號。例如,棧管理器102(圖1)的內核安裝代碼讀取棧要求約束行314並檢查在基本文件結構的版本欄位中設置所有對應特徵位。如果內核安裝代碼在棧要求約束行314中發現任何未知特徵,則它會使涉及該棧模板(例如,其中棧模板對應於棧的頂部模塊並且在安裝時間指定基本文件系統)的所有安裝失敗。
不支持的文件系統約束行316(「basefs_unsupported」)可包括文件系統列表,可用於快速檢查上述特徵。如果在模板建立時間知道給定的文件系統與棧上的模塊不兼容(例如,導致一個或多個模塊失效、破壞數據等),則可將其在此列出(316)以防止利用具有那個特定文件系統的那個棧。
棧模板104a的這些首行(312-316)的一個目標是棧管理器102(圖1)的內核安裝代碼容易讀取這些行並快速確定模板的模塊棧是否與基本文件系統兼容。棧模板104a在模板建立時間可經過驗證,但是在其上「安裝」棧模板的基本文件系統在安裝時間之前可能是未知的。
棧模板104a的其餘行(318、320和322)為棧上的所有模塊(例如模塊103、105和107)提供棧式模塊文件系統類型和安裝選項字符串。
棧模板存儲關於文件系統棧的信息,例如在棧中的文件系統模塊的類型和它們的安裝選項。通過僅允許用戶建立有效和所支持的文件系統棧的棧模板命令可實現棧模板的修改。棧管理器102(圖1)知道什麼棧是有效的和在所有棧模塊中包括的模塊定義文件所支持的。換句話說,會要求所有的棧式文件系統模塊向棧管理器102發送模塊定義文件以及他們的可執行對象。模塊定義文件描述模塊、其所支持的安裝選項和對其使用的約束。模塊定義文件也可(可選地)包含它們能夠或不能夠良好配合工作的基本文件系統或堆棧模塊的特例列表。而且,模塊定義文件也可向管理圖形用戶界面(GUI)提供關於棧式文件系統的信息。通過模塊定義文件的使用,可將新堆棧模塊動態地添加到系統,而不用改變或重編譯棧模板命令或任何相關的GUI。模塊定義文件也使棧模板(從而棧)能夠在模板建立時間驗證,使性能改善,因為安裝代碼不需要實現棧驗證。
圖4是說明模塊定義文件400的實施例的程序設計圖。示出的包括關於單個模塊(例如圖1的模塊109)的信息的模塊定義文件400可包括關於不止一個模塊的信息。而且,雖然示出了具有它相關的模塊的名稱,但是模塊定義文件400可採用其它名稱。如在前面實例中,為了簡潔,省略每一行(除402)的變元。行402包括模塊語句,這包括關於模塊的所有信息。在模塊語句中,在模塊關鍵字(「module」)之後指定模塊名稱(例如,模塊109)。模塊語句可包括如下所述類型的一系列的語句。
棧約束可在約束語句404內定義。約束語句404包括提供聲明406、要求聲明408和basefs_unsupported聲明410。提供聲明406包括該模塊提供的服務的列表(未示出)。服務名稱可以為ASCII字符串,不一定具有附加於它們的用於分析的任何意義。因此,可由模塊作者定義服務名稱以便符合他或她的需要,因為文件系統棧相關性和協議隨時間發展。
要求聲明408包括該模塊要求的服務列表(即,必須由棧上低於它的模塊或基本文件系統提供的服務)。在模板建立期間,沿整個棧(例如,通過從頂部到底部遍歷棧)檢查由要求聲明408定義的服務相關性。當棧頂部的模塊所要求的服務由棧上較低層模塊提供時,會認為那些服務約束得到滿足。當達到棧的底部時,任何未滿足的服務會添加到存儲在模板本身中的「stack_requires」服務的列表中。可在安裝時間檢查該最終列表,內核(例如,安裝模塊140,圖1)將僅允許模板與提供所有所需服務的基本文件系統一起使用。
basefs_unsupported聲明410包括不能與模塊一起使用的基本文件系統的列表(或列出模塊知道不能與之良好配合工作的基本文件系統)。可列出模塊或基本文件系統,因為知道它與給定模塊不兼容,它不能被測試且符合要求,或者由於其它原因。例如,對於指定由於限定成本而不是特定服務要求而產生的約束,「basefs_unsupported」聲明410可能是有用的。例如,模塊A和模塊B(都未示出)相互之間可能沒有相關性,但是有可能具有模塊B上的模塊A的棧在釋放之前不可能合格。為防止未測試的棧排列,模塊A可能在其「basefs_unsupported」列表中簡單地包括模塊B。這些列表也可用於簡化棧驗證(如下所述)的某些部分。在模板建立之後,完整的棧模板可包括描述關於整個棧的所支持和不支持的文件系統的類似行。通過使用例如「用於整個棧的basefilesystem_unsupported列表將是用於棧上每個模塊的所有basefilesystem_unsupported列表的併集」的邏輯通過fst_create確定用於整個棧的值。例如,如果模塊A指定basefs_unsupported=文件系統1,文件系統2,模塊B指定basefs_unsupported=文件系統3,那麼如果將每個列表當作一個集合,則這些集合的併集是文件系統1,文件系統2,文件系統3。該併集是那個提出的棧模板不支持的所有模塊的列表。所以,試圖在諸如文件系統1或文件系統2的文件系統上使用該棧模板會失敗。
約束語句404也可包括附加聲明。例如,約束語句404可包括也可由在每一個文件棧的頂部更有效的模塊使用的「must_be_top」聲明(未示出)。例如,對於遞交安全認證服務以保證這種模塊是第一個截取(和可能防止)任何文件系統操作的模塊,「must_be_top」聲明可能是有用的。
模塊定義文件400也可包括一個或多個安裝選項,例如在選項語句412中得到的那些。利用選項語句412定義模塊支持的安裝選項。每個模塊可定義所需數量的選項。可由棧管理器102(圖1)響應「fst_create」命令來使用選項語句412,以驗證在棧模板中使用的安裝選項。為使這種驗證更有用,選項語句412可包括關於選項在聲明中可採用的值類型的信息。選項語句412中可能的聲明其中包括描述414、值416、值類型418、約束420、最小值(min)422和最大值(max)424。描述414包括選項的文本描述,這對於填充GUI是有用的。值416包括允許作為該選項的值的特定ASCII字符串。值類型418包括允許的值的類型,包括整數類型或ASCII。約束420其中包括對整數值的約束,例如2的冪。最小值422包括允許用於該選項的最小整數值,最大值424包括允許用於該選項的最大整數值。如果棧式文件系統(例如,還沒包括基本文件系統的可堆棧模塊)不想在安裝選項值上有任何約束,則它可僅將該安裝選項定義為「值類型=ascii」,而沒有其它聲明。約束420、最小值422和最大值424聲明與「值類型=整數」一起使用。
雖然在模板建立期間選項經過驗證,但是這些選項語句412也可允許GUI知道什麼選項是可能的。例如,假設模塊A(未示出)支持兩個選項特徵X=on或特徵X=off。如果模塊A在模塊定義文件中定義這些,則GUI可讀取並分析那個文件並知道這些是選項。模塊A然後可產生具有複選框或用戶能夠在兩個選項間選擇的某種方式的窗口。若沒有這種類型的文件,只要創造新選項,通常就必須重寫或重新編譯GUI。利用模板定義文件,GUI可僅讀取新定義文件。選項語句412用作文件系統的安裝選項的機器可讀文件。
驗證棧的過程將主要取決於包括關於對它們使用的約束的信息的可堆棧模塊。響應「fst_create」命令的棧管理器102(圖2)的驗證模塊144會使用那些模塊定義文件中的信息,以便在模板建立時間驗證新棧模板。在高層,驗證過程涉及遍歷提出的棧並且檢查它不違背在諸如模塊定義文件400(圖4)的模塊定義文件中指定的任何要求。
圖5是說明用於驗證棧的圖2所示的棧管理器102的驗證模塊144的方法實施例144a的流程圖。在一個實施例中,響應「fst_create」命令來實現方法144a。驗證包括從頂部模塊到底部模塊向下遍歷提出的棧(502)。注意,在棧模板包括基本文件系統的實施例中,遍歷可發生在相反方向。然而,對於其中在安裝時間之前未指定基本文件系統的棧模板,通常實現從上向下的遍歷。讀取並分析提出的棧的每個模塊的模塊定義文件。棧驗證方法144a檢查接受調查的給定模塊提供的服務和需要的服務(504),通過在那一層添加所需服務(506)並移除提供的服務(508)在每層更新所需服務的列表。可如下實現所需服務stack_rquired=Union(stack_requires,requires for module)。可如下實現所提供的服務stack_requires=stack_requires-(provides forthis module),其中移除由該模塊滿足的較高層要求。檢查(504)可包括確定在提出的棧模板中的安裝選項對於那個模塊是否合法,以及是否存在對那個模塊的任何棧排序約束。例如,檢查可包括讀取模塊定義文件的各種聲明,包括任何「must_be_top」聲明和basefs_unsupported聲明(例如,模塊的列表是否與已經迭代的模塊不兼容),以及其它聲明。可如下實現basefs_unsupportedbasefs_unsupported=Union(basefs_unsupported,basefs_unsupported forthis module)。
確定是否存在其它待檢查的模塊(510),如果存在,則讀取剛檢查模塊下面的下一模塊(512),並對下一模塊重複處理504-508。當已經到達提出的棧的底部時,如果所需服務列表是非空的(514),則提出的棧的驗證失效(516),因此不為它建立棧模板。如果列表為空,則棧是可用和安全的,關於棧結構的信息被保存在棧模板中(518)。換句話說,當成功時,棧已經被驗證有效,stack_requires和basefs_unsupported聲明現在包括施加到整個棧模板的要求。然後可將棧模板與其它棧模板一起存儲。也可採用類似方式普通檢查「basefs_unsupported」約束。換句話說,向下遍歷棧包括跟蹤上面所有模塊的basefs_unsupported列表。如果遇到的模板是上面指定為不支持的模塊,則驗證失敗,因為剛遇到的模塊是不支持的。
在某些實施例中,不是嚴格禁止不合格的棧,棧驗證方法144a可警告(例如,經由GUI)正在建立不合格的棧,使用戶能有機會強迫建立不支持的模板或放棄他或她的努力。
棧式文件系統100(圖1)是易擴展後期發布(post-release),支持堆棧模塊的容易修補(例如,錯誤查找、小的新特徵等等),而不用內核修改或系統重啟。例如,棧驗證方法144a可實施的約束空間主要由模塊定義文件400(圖4)的內容定義,而不是由驗證算法本身定義。這意味著,當建立或增補新模塊(並且遞交新模塊定義文件)時,棧式文件系統100可隨著新約束髮展而無需對基本系統工具進行改變。
另外,因為棧模板可存儲在盤上,所以可移動介質可包含用於記錄模塊棧數據的模塊棧的可攜式描述。這使文件系統功能性(例如利用UNIX實現的)能夠實現,不只是通過一整塊代碼實現,而是通過不一定自身可用的小模塊來實現。
而且,上面描述棧模板的實現是在假設棧模板已經建立、然後存儲在供已經安裝模塊的機器(例如計算機)使用的盤上的情況下。然而,在一些實施例中,可為每個模塊以及棧模板存儲用於每個模塊的可執行代碼。例如,可在諸如JAVA的可移植語言中配置模塊,這使得能夠在棧模板中包含每個模塊的代碼,因此整個代碼棧可被讀取並組裝在以前沒有安裝那些模塊中的任一個的新機器中。這種實現的一個結果是盤不僅包括它們存儲的數據,而且包括讀取該數據需要的文件系統的可執行代碼,以及用於將可執行代碼組裝成模塊棧的指令。例如,考慮USB密鑰驅動器。對這些類型驅動器的一個關注是在驅動器上的數據的安全性。也就是說,因為驅動器易誤放,所以發現它的人能讀取其上的數據。如果加密,允許這種加密特徵的現有產品通常要求用戶在其機器上安裝專用驅動程序,然後USB密鑰僅在已安裝驅動程序的一臺或多臺機器上可讀。因為這種約束,使用USB密鑰通過很多機器安全地傳送數據往往是困難的。如果將作業系統配置為從USB密鑰自動加載可堆棧文件系統以用於從密鑰讀取數據,則USB密鑰可包括用於實現加密的可堆棧文件系統模塊的代碼。然後,可在提供作業系統的任何機器上使用USB密鑰,而無需先安裝加密文件系統。
權利要求
1.一種棧式文件系統,包括包括棧的存儲器,所述棧包括第一模塊和第二模塊,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;以及邏輯,配置為建立包括關於所述棧的信息的棧模板。
2.如權利要求1所述的系統,其特徵在於,所述信息包括關於第一模塊和第二模塊的信息、允許與所述棧安裝在一起所需的基本文件系統特徵、對於使所述棧與對應於第二棧模板的第二棧能夠堆棧的約束、版本字符串、對要與所述棧模板配合使用的基本文件系統的約束、第一模塊和第二模塊的文件系統類型、第一模塊和第二模塊的安裝選項字符串以及在對應於所述棧模板的安裝操作中要排除的基本文件系統的列表其中至少一項。
3.如權利要求1所述的系統,其特徵在於,所述邏輯被配置為在計算機可讀介質上存儲所述棧模板,所述計算機可讀介質包括便攜盤和非便攜盤其中至少一種。
4.如權利要求1所述的系統,其特徵在於,所述邏輯被配置為在建立所述棧模板之前驗證所述棧。
5.如權利要求4所述的系統,其特徵在於,所述邏輯被配置為在建立所述棧模板之前確定所述棧的第一模塊和第二模塊之間的兼容性,其中所述邏輯被配置為通過確定第一模塊提供的服務和第二模塊提供的服務並通過確定第一模塊所需的服務和第二模塊所需的服務來確定兼容性,其中所述邏輯被配置為添加第一模塊和第二模塊中的至少一個所需的服務並移除第一模塊和第二模塊中的至少一個所提供的服務,其中所述邏輯被配置為如果沒有提供所需的服務,則使所述棧不能作為棧模板。
6.如權利要求1所述的系統,其特徵在於,關於所述棧的信息包括第一模塊數據和第二模塊數據,其中第一模塊數據和第二模塊數據均包括模塊定義文件,其中所述模塊定義文件包括所述模塊的描述、所述模塊支持的安裝選項、對所述模塊的使用的約束、不兼容模塊的列表以及不兼容文件系統的列表其中至少一項。
7.一種棧式文件方法,包括提供對應於包括第一模塊和第二模塊的棧的文本文件,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;以及提供包括關於所述棧的信息的棧模板。
8.如權利要求7所述的方法,其特徵在於,提供包括信息的棧模板包括提供關於第一模塊和第二模塊的信息、允許與對應於所述棧模板的所述棧安裝在一起所需的基本文件系統特徵、對於允許與對應於第二棧模板的第二棧進行堆棧的約束、版本字符串、對要與所述棧模板配合使用的基本文件系統的約束、第一模塊和第二模塊的文件系統類型、用於第一模塊和第二模塊的安裝選項字符串以及在對應於所述棧模板的安裝操作中要排除的基本文件系統的列表其中至少一項。
9.如權利要求7所述的方法,其特徵在於,還包括給所述文本文件命名。
10.如權利要求7所述的方法,其特徵在於,還包括在建立所述棧模板之前驗證所述棧。
全文摘要
公開了棧式文件系統和方法的實施例。一個系統實施例包括存儲器,存儲器包括棧,棧包括第一模塊和第二模塊,第一模塊包括具有與第二模塊的可執行代碼不同的功能性的可執行代碼;以及邏輯,被配置為建立包括關於棧的信息的棧模板。
文檔編號G06F17/30GK1776679SQ20051012518
公開日2006年5月24日 申請日期2005年11月18日 優先權日2004年11月19日
發明者J·德拉佩德拉亞, M·溫策爾 申請人:惠普開發有限公司