專利名稱:用于提供原地執(zhí)行功能的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及操作系統(tǒng),并且具體地涉及提供用于實現(xiàn)原地執(zhí)行(execute-in-place)功能的系統(tǒng)和方法的操作系統(tǒng)。
背景技術(shù):
現(xiàn)有技術(shù)的計算機系統(tǒng)包含非易失大容量存儲設(shè)備(例如硬盤驅(qū)動器)以保持程序和數(shù)據(jù)文件。這些文件的內(nèi)容必須被裝入RAM(“隨機訪問存儲器”)類的系統(tǒng)存儲器內(nèi)以便被CPU(“中央處理單元”)訪問或執(zhí)行。此操作通常由操作系統(tǒng)代表應(yīng)用程序執(zhí)行。現(xiàn)有技術(shù)的計算機系統(tǒng)和操作系統(tǒng)支持虛擬存儲器和按需調(diào)頁(demand paging)。應(yīng)用不直接使用系統(tǒng)存儲器地址指定它們使用的代碼和數(shù)據(jù);而是它們使用“虛擬地址”指定存儲器位置,由CPU電路實現(xiàn)的且被操作系統(tǒng)控制的調(diào)頁機制將該存儲器位置翻譯成系統(tǒng)存儲器地址。這使得操作系統(tǒng)可避免必須將全部程序和數(shù)據(jù)文件裝入RAM內(nèi)。而是系統(tǒng)存儲器被分為特定大小的塊(被稱為“頁”),并且僅在訪問該特定頁時,操作系統(tǒng)將文件內(nèi)容的相應(yīng)塊裝入各個存儲器頁內(nèi)。此過程通常稱為“按需調(diào)頁”。
這種方法的一個缺點是需要RAM以保持程序和數(shù)據(jù)文件內(nèi)容,減少了可用于其它用途的RAM的量。另外,通常需要一些時間將內(nèi)容下載到RAM內(nèi)。因此,一些現(xiàn)有技術(shù)的計算機系統(tǒng)提供了不同類型的非易失存儲設(shè)備,CPU可用與訪問RAM相同的方式直接訪問這些不同類型的非易失存儲設(shè)備(“存儲器尋址設(shè)備”)。存儲器尋址設(shè)備的一個現(xiàn)有技術(shù)的實施例是快閃存儲器卡。存儲器尋址設(shè)備允許CPU執(zhí)行該設(shè)備上存儲的代碼和訪問該設(shè)備上存儲的數(shù)據(jù)而不用首先將內(nèi)容下載到RAM內(nèi)。這種直接執(zhí)行駐留在存儲器尋址設(shè)備上的代碼的方法被稱為“原地執(zhí)行”。為了給在支持虛擬存儲器的操作系統(tǒng)上運行的應(yīng)用提供原地執(zhí)行功能,該操作系統(tǒng)必須控制調(diào)頁機制,以便將應(yīng)用的地址空間的某些虛擬地址映射到該存儲器尋址設(shè)備支持的地址范圍內(nèi)的系統(tǒng)存儲器地址。
其它現(xiàn)有技術(shù)的計算機系統(tǒng)提供了虛擬化能力。由通常被稱為“管理程序”的運行于單個計算機系統(tǒng)上,但是允許多個“客戶”操作系統(tǒng)同時運行的(每個操作系統(tǒng)在一個單獨的“虛擬機”內(nèi))軟件程序?qū)崿F(xiàn)虛擬化。對于運行在其內(nèi)的操作系統(tǒng)來說,每個虛擬機自身看起來好像是包括CPU、RAM和I/O設(shè)備的真實的計算機系統(tǒng)。由管理程序攔截對這些虛擬組件的訪問并且將其翻譯成對實際組件的訪問。這允許在多個客戶操作系統(tǒng)之間共享計算機系統(tǒng)的資源,以提供對系統(tǒng)資源的提高的總的利用率。
一些現(xiàn)有技術(shù)的虛擬化計算機系統(tǒng)的一個缺點是如果運行在同一管理程序下的多個客戶同時訪問相同的程序或數(shù)據(jù),則每個客戶操作系統(tǒng)將分別分配虛擬RAM以保持這些內(nèi)容,因此管理程序必須在物理RAM內(nèi)分配所述內(nèi)容的多個相同的拷貝。這意味著有較少的存儲器可用于其它用途,限制了能夠同時有效地運行的客戶的數(shù)量。因此,一些現(xiàn)有技術(shù)的管理程序提供了可從多個客戶同時訪問的物理存儲器的段(“共享存儲器段”)。通過將程序或數(shù)據(jù)文件存儲在共享存儲器段內(nèi),多個客戶可同時訪問所述文件而不用首先將內(nèi)容下載到虛擬RAM內(nèi)。所述共享段在客戶操作系統(tǒng)看來就好像是物理存儲器尋址設(shè)備。
數(shù)據(jù)和程序文件通常被使用標(biāo)準(zhǔn)文件系統(tǒng)布局存儲在設(shè)備上;一些操作系統(tǒng)能夠使用針對不同使用情況而優(yōu)化的多種不同的文件系統(tǒng)布局。為此,現(xiàn)有技術(shù)操作系統(tǒng)通常被構(gòu)造為多個組件。在一些操作系統(tǒng)內(nèi),存在中央文件和存儲器管理組件,多個文件系統(tǒng)驅(qū)動器和多個I/O設(shè)備驅(qū)動器。因此,通過結(jié)合中央文件和存儲器管理組件使用合適的文件系統(tǒng)驅(qū)動器和I/O設(shè)備驅(qū)動器對,操作系統(tǒng)允許在任何一個支持的I/O設(shè)備上使用任何一種支持的文件系統(tǒng)布局。但是,現(xiàn)有技術(shù)的操作系統(tǒng)不能使用已有的文件系統(tǒng)驅(qū)動器以允許原地執(zhí)行的方式訪問存儲器尋址設(shè)備。以整體方式實現(xiàn)支持原地執(zhí)行訪問存儲器尋址設(shè)備。
實際上,一些現(xiàn)有技術(shù)的操作系統(tǒng)的實現(xiàn)根本不允許使用標(biāo)準(zhǔn)文件系統(tǒng)布局將數(shù)據(jù)存儲在存儲器尋址設(shè)備上;而是它們需要以設(shè)備專用的方式將數(shù)據(jù)布置在這種設(shè)備上。該布置具有許多缺點,對于使用I/O設(shè)備和存儲器尋址設(shè)備的計算機系統(tǒng)尤其如此。支持不同文件系統(tǒng)布局可使得系統(tǒng)管理更加困難??赡苄枰煌墓ぞ邅砀袷交?、管理、備份和恢復(fù)不同布局。從I/O設(shè)備將一組已有文件移植到存儲器尋址設(shè)備可能更加困難,反之亦然。存儲器尋址設(shè)備所需的特定布局可能不提供標(biāo)準(zhǔn)文件系統(tǒng)布局所具有的所有特征(例如,實現(xiàn)復(fù)雜的訪問控制和特權(quán)檢查)。
另一種現(xiàn)有技術(shù)的實現(xiàn)(zSeries上用于Linux的XIP2FS文件系統(tǒng))提供使用第二擴展文件系統(tǒng)(“ext2”)格式一Linux操作系統(tǒng)提供的一種標(biāo)準(zhǔn)文件系統(tǒng)格式一將程序和數(shù)據(jù)存儲在虛擬存儲器尋址設(shè)備(由z/VM管理程序提供的共享存儲器段)上的支持。但是,此方法仍具有大部分前面段落內(nèi)所述的缺點不能使用其它的標(biāo)準(zhǔn)Linux文件系統(tǒng)格式,并且另外XIP2FS不能提供ext2的所有特征(例如XIP2FS不支持寫訪問)。
XIP2FS的另一個缺點是其不能被集成到操作系統(tǒng)的上述組件結(jié)構(gòu)內(nèi);盡管XIP2FS使用ext2文件系統(tǒng)布局訪問文件,XIP2FS不使用Linux ext2文件系統(tǒng)驅(qū)動器這樣做,而是重新實現(xiàn)訪問ext2文件系統(tǒng)布局所需的訪問邏輯。這再次使得XIP2FS不支持ext2的所有特征,因為只有整個ext2邏輯的子集被重新實現(xiàn)。作為另一個缺點,隨著時間的過去Linux操作系統(tǒng)的標(biāo)準(zhǔn)ext2文件系統(tǒng)組件不斷被發(fā)展并且添加新特征;例如由Linux內(nèi)核版本2.6提供的ext2文件系統(tǒng)驅(qū)動器版本增加了對更快地訪問非常大的目錄結(jié)構(gòu)以及更復(fù)雜的訪問控制機制的支持。XIP2FS不能自動地受益于對ext2驅(qū)動器的這種改進;所有所需的特征需要在XIP2FS代碼內(nèi)被重新實現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種由避免上述現(xiàn)有技術(shù)的缺點的操作系統(tǒng)提供原地執(zhí)行功能的方法。
本發(fā)明公開了一種提供了用于實現(xiàn)原地執(zhí)行功能的新系統(tǒng)和方法的操作系統(tǒng)。
本發(fā)明基于其上的現(xiàn)有技術(shù)的操作系統(tǒng)包括具有與應(yīng)用程序的接口的存儲器/文件管理器,至少一個文件系統(tǒng)驅(qū)動器,其具有與存儲器/文件管理器的文件系統(tǒng)I/O接口,至少一個設(shè)備驅(qū)動器,其具有與文件系統(tǒng)驅(qū)動器的設(shè)備I/O接口,其中所述至少一個設(shè)備驅(qū)動器提供到至少一個基于I/O的設(shè)備的訪問,至少一個設(shè)備驅(qū)動器,其具有與文件系統(tǒng)驅(qū)動器的設(shè)備I/O接口,其中所述至少一個設(shè)備驅(qū)動器提供到至少一個存儲器尋址設(shè)備的訪問,其中所述操作系統(tǒng)提供原地執(zhí)行功能以訪問至少一個存儲器尋址設(shè)備。
以下面的新的和發(fā)明性的功能擴展現(xiàn)有技術(shù)的操作系統(tǒng)以實現(xiàn)原地執(zhí)行功能存儲器/文件管理器和至少一個文件系統(tǒng)驅(qū)動器之間的文件系統(tǒng)直接訪問接口,其中該文件系統(tǒng)直接訪問接口提供了檢索特定文件在特定偏移量處的內(nèi)容的系統(tǒng)存儲器地址的功能,其中該文件駐留在所述存儲器尋址設(shè)備上,至少一個文件系統(tǒng)驅(qū)動器和提供到所述至少一個存儲器尋址設(shè)備的訪問的至少一個設(shè)備驅(qū)動器之間的設(shè)備直接訪問接口,其中該設(shè)備直接訪問接口提供了檢索至少一個存儲器尋址設(shè)備的特定塊的系統(tǒng)存儲器地址的功能,其中通過使用文件系統(tǒng)直接訪問接口和設(shè)備直接訪問接口,由存儲器/文件管理器、至少一個文件系統(tǒng)驅(qū)動器和提供到至少一個存儲器尋址設(shè)備的訪問的至少一個設(shè)備驅(qū)動器實現(xiàn)原地執(zhí)行功能。
從下面的詳細說明中可清楚地了解本發(fā)明的上述以及另外的目的、特征和優(yōu)點。
在所附權(quán)利要求中提出了本發(fā)明的新穎特征。但是,當(dāng)結(jié)合附圖閱讀時通過參考下文對說明性實施例的詳細說明,可以最好地理解本發(fā)明本身以及其優(yōu)選使用模式、另外的目的和其優(yōu)點,其中圖1A示出實現(xiàn)本發(fā)明所需的計算機系統(tǒng)的框圖;圖1B示出在本發(fā)明的一些實施例中容納有圖1A所示的計算機系統(tǒng)作為客戶的虛擬機環(huán)境;圖1C示出現(xiàn)有技術(shù)的操作系統(tǒng)提供的虛擬存儲器和按需調(diào)頁功能;圖1D示出現(xiàn)有技術(shù)的操作系統(tǒng)提供的原地執(zhí)行功能;圖1E示出實現(xiàn)原地執(zhí)行的現(xiàn)有技術(shù)操作系統(tǒng)的組件結(jié)構(gòu);圖2A示出使用本發(fā)明實現(xiàn)原地執(zhí)行的操作系統(tǒng)的組件結(jié)構(gòu);圖2B示出根據(jù)本發(fā)明用于訪問基于I/O的設(shè)備的圖2A的操作系統(tǒng)組件中的控制流;圖2C示出根據(jù)本發(fā)明用于執(zhí)行對存儲器尋址設(shè)備的原地執(zhí)行訪問的圖2A的操作系統(tǒng)組件中的控制流;圖2D是用于選擇使用圖2B和2C所示的兩個控制流中的哪一個的圖2A的操作系統(tǒng)的判定邏輯;圖3A示出現(xiàn)有技術(shù)的Linux操作系統(tǒng)內(nèi)實現(xiàn)的設(shè)備抽象;圖3B示出對實現(xiàn)本發(fā)明的Linux操作系統(tǒng)內(nèi)的設(shè)備驅(qū)動層進行的擴展;圖3C示出通用文件系統(tǒng)如何服務(wù)于地址空間操作以便從/向現(xiàn)有技術(shù)的Linux操作系統(tǒng)內(nèi)的設(shè)備讀/寫一個或多個頁;圖3D示出對實現(xiàn)本發(fā)明的Linux操作系統(tǒng)內(nèi)的文件系統(tǒng)的地址空間操作進行的擴展;圖3E示出在現(xiàn)有技術(shù)的Linux操作系統(tǒng)中文件系統(tǒng)庫函數(shù)如何執(zhí)行通用文件系統(tǒng)的讀類型文件操作;圖3F示出對用于實現(xiàn)本發(fā)明的Linux操作系統(tǒng)內(nèi)的讀類型操作的文件系統(tǒng)庫函數(shù)進行的擴展;圖3G示出在現(xiàn)有技術(shù)的Linux操作系統(tǒng)中文件系統(tǒng)庫函數(shù)如何執(zhí)行通用文件系統(tǒng)的寫類型文件操作;
圖3H示出對用于實現(xiàn)本發(fā)明的Linux操作系統(tǒng)內(nèi)的寫類型操作的文件系統(tǒng)庫函數(shù)進行的擴展;以及圖3I示出對用于實現(xiàn)本發(fā)明的Linux操作系統(tǒng)內(nèi)的文件存儲器映射的文件系統(tǒng)庫函數(shù)進行的擴展。
具體實施例方式
圖1A示出計算機系統(tǒng)10的框圖。計算機系統(tǒng)10可以是個人計算機、大型計算機或任何其它類型的計算機或數(shù)據(jù)處理系統(tǒng);如下文所述,計算機系統(tǒng)10還可以是由另一計算機系統(tǒng)上運行的管理程序提供的虛擬機。計算機系統(tǒng)10包括中央處理單元(“CPU”)11、隨機訪問存儲器(“RAM”)12、存儲器尋址設(shè)備13和基于I/O的設(shè)備14。在一個實施例中,存儲器尋址設(shè)備13可以是閃速存儲器卡。在另一個實施例中,存儲器尋址設(shè)備13可以是CPU 11可直接訪問以進行存儲器操作的任何設(shè)備。在一個實施例中,基于I/O的設(shè)備14可以是硬盤驅(qū)動器。在其它實施例中,基于I/O的設(shè)備14可以是允許使用I/O操作向和從RAM 12拷貝數(shù)據(jù)的任何設(shè)備。計算機系統(tǒng)10還可包括存儲器尋址設(shè)備13和/或基于I/O的設(shè)備14的多個實例。CPU 11、RAM 12以及設(shè)備13和14可連接到系統(tǒng)總線15。CPU11可直接訪問RAM 12和存儲器尋址設(shè)備13以進行存儲器操作。CPU 11不能直接訪問基于I/O的設(shè)備14以進行存儲器操作,但是可使用I/O操作將數(shù)據(jù)從設(shè)備14拷貝到RAM 12,反之亦然。計算機系統(tǒng)10運行允許運行一個或多個應(yīng)用程序的操作系統(tǒng)(下文將更詳細地說明);該操作系統(tǒng)管理和調(diào)節(jié)應(yīng)用程序?qū)τ嬎銠C系統(tǒng)10的各種資源(CPU 11、RAM 12、設(shè)備13和14)的訪問。
在一些實施例中,計算機系統(tǒng)10可以是在另一個計算機系統(tǒng)上運行的管理程序仿真的虛擬機。圖1B示出了這樣的實施例,其中計算機系統(tǒng)10包含虛擬CPU 11、虛擬RAM 12以及虛擬設(shè)備13和14。由管理程序21提供所有虛擬組件,該管理程序是在本身包含CPU、RAM和設(shè)備的另一個計算機系統(tǒng)20上運行的軟件程序。管理程序21或是完全用軟件或是通過使用計算機系統(tǒng)20提供的虛擬化硬件輔助功能提供虛擬組件10-14。除了虛擬機10之外,可在計算機系統(tǒng)20上的管理程序21下同時運行其它虛擬機22。在一個實施例中,管理程序21可以是運行在IBM eServerzSeries大型計算機上的IBM公司制造和銷售的z/VM軟件程序。在此實施例內(nèi),計算機系統(tǒng)10可以是z/VM提供的虛擬機,并且存儲器尋址設(shè)備13可以是定義于z/VM之下并且虛擬機可用的不連續(xù)保存分段(“DCSS”)。DCSS是同時可被一個或多個虛擬機使用的由z/VM管理的存儲器段;即使得DCSS同時可被多個虛擬機使用,z/VM通常僅在計算機系統(tǒng)20的真實RAM內(nèi)保持DCSS內(nèi)容的單個拷貝。
如圖1C所示,CPU 11可直接訪問以進行存儲器操作的所有組件構(gòu)成計算機系統(tǒng)10的系統(tǒng)存儲器地址空間30。RAM 12和存儲器尋址設(shè)備13是系統(tǒng)存儲器地址空間30的一部分;另外,其它組件(未示出)例如只讀存儲器(“ROM”)或視頻卡幀緩沖器也可以是系統(tǒng)存儲器地址空間30的一部分。在發(fā)生執(zhí)行時,CPU 11執(zhí)行的每個程序指令和CPU 11執(zhí)行的指令所訪問的所有存儲器數(shù)據(jù)必須出現(xiàn)在系統(tǒng)存儲器地址空間30內(nèi)。為了增加可用存儲器表面上的大小,并且防止同時運行在相同計算機系統(tǒng)上的不同應(yīng)用程序意外地修改彼此的存儲器,操作系統(tǒng)為每個應(yīng)用程序提供“虛擬地址空間”,并且在該虛擬地址空間內(nèi)提供對系統(tǒng)存儲器地址空間的所選擇部分的訪問。當(dāng)CPU 11執(zhí)行應(yīng)用代碼時,可以僅訪問出現(xiàn)在應(yīng)用的虛擬地址空間內(nèi)的存儲器。為了在虛擬地址空間和系統(tǒng)存儲器地址空間之間轉(zhuǎn)換,將虛擬地址空間和系統(tǒng)存儲器地址空間兩者分成相等大小的塊,該塊通常被稱為“頁”。
圖1C示出了計算機系統(tǒng)10的系統(tǒng)存儲器地址空間30。另外示出了應(yīng)用程序的虛擬地址空間31。對于可在虛擬地址空間31內(nèi)尋址的每個頁,必須存在描述頁的實際狀態(tài)的頁描述符。在任何時刻該頁可存在于或不存在于系統(tǒng)存儲器地址空間30內(nèi)。如果頁存在于系統(tǒng)存儲器地址空間30內(nèi),頁描述符將指出該事實并且將指出頁在系統(tǒng)存儲器地址空間30內(nèi)的位置。如果頁不存在于系統(tǒng)存儲器地址空間30內(nèi),則頁描述符將指出該事實并且將包含附加信息,該附加信息允許操作系統(tǒng)定位應(yīng)用程序希望通過該頁訪問的內(nèi)容。用于虛擬地址空間的所有頁描述符的集合稱為頁表。由操作系統(tǒng)保持用于虛擬地址空間的頁表。
當(dāng)CPU 11執(zhí)行虛擬地址空間31內(nèi)的應(yīng)用代碼時,使用用于虛擬地址空間31的頁表將CPU 11訪問的每個存儲器地址從虛擬地址空間31內(nèi)的虛擬地址轉(zhuǎn)換到系統(tǒng)存儲器地址空間30的系統(tǒng)存儲器地址。由調(diào)頁機制執(zhí)行該轉(zhuǎn)換,調(diào)頁機制可以是硬件或軟件實現(xiàn)或者是兩者的組合。對于一些實施例,由存在于CPU 11內(nèi)的調(diào)頁單元實現(xiàn)調(diào)頁機制。當(dāng)CPU 11訪問目前在系統(tǒng)存儲器地址空間30內(nèi)不具對應(yīng)頁的虛擬地址空間31內(nèi)的頁時,該調(diào)頁機制使CPU 11產(chǎn)生頁錯誤中斷。該中斷使被稱為“頁錯誤處理器”的操作系統(tǒng)代碼將所需的內(nèi)容放入系統(tǒng)存儲器地址空間30內(nèi)的某頁內(nèi)并更新頁表,以便將該虛擬頁映射到系統(tǒng)存儲器地址空間30內(nèi)的該頁。然后應(yīng)用可以繼續(xù)運行并訪問該頁。此過程通常被稱為“按需調(diào)頁”。
在圖1C所示的示例情況下,虛擬地址空間31同時保持四個頁。三個頁(32a-32c)包含目前執(zhí)行的應(yīng)用代碼,一個頁(32d)包含該應(yīng)用訪問的數(shù)據(jù)。從駐留在基于I/O的設(shè)備14上的塊34a-34c內(nèi)的應(yīng)用程序文件裝入頁32a-32c內(nèi)包含的應(yīng)用代碼。實際上應(yīng)用代碼頁32a和32b目前存在于系統(tǒng)存儲器地址空間30內(nèi),并駐留在RAM 12的頁33a和33b內(nèi);類似的,數(shù)據(jù)頁32d存在于系統(tǒng)存儲器地址空間內(nèi),并駐留在RAM 12的頁33d內(nèi)。應(yīng)用代碼頁32c目前不存在于系統(tǒng)存儲器地址空間30內(nèi)。一旦應(yīng)用訪問頁32c,操作系統(tǒng)的頁錯誤處理器將在RAM 12內(nèi)分配新頁33c(未示出),執(zhí)行I/O操作以便將塊34c的內(nèi)容拷貝到頁33c內(nèi),并更新頁表以便將虛擬地址空間31的頁32c映射到系統(tǒng)存儲器地址空間30的頁33c。對于頁32a和32b,在圖1C所示的時刻此過程已經(jīng)完成。數(shù)據(jù)頁32d/33d保持應(yīng)用在運行時產(chǎn)生的內(nèi)容,它不被從基于I/O的設(shè)備14裝入。
如圖1C中可見,當(dāng)CPU 11執(zhí)行駐留在基于I/O的設(shè)備14上的應(yīng)用程序時,需要RAM 12的頁以便在執(zhí)行應(yīng)用程序代碼時保持該應(yīng)用程序代碼。但是,如果應(yīng)用程序駐留在存儲器尋址設(shè)備上,這是不需要的,使得更多的RAM 12頁可用于其它用途(或者可選擇地,允許計算機系統(tǒng)10以較少的RAM總量完成其預(yù)期任務(wù))。此過程通常被稱為“原地執(zhí)行”。如同圖1C,圖1D示出了運行在虛擬地址空間內(nèi)的相同的應(yīng)用,但是應(yīng)用現(xiàn)在駐留在存儲器尋址設(shè)備13上而不是基于I/O的設(shè)備14上并且被原地執(zhí)行。如圖1D中所示,來自應(yīng)用文件的應(yīng)用代碼駐留在存儲器尋址設(shè)備13的塊35a-c內(nèi)。因為存儲器尋址設(shè)備13存在于系統(tǒng)存儲器地址空間30內(nèi),可分別將塊35a和35b直接映射到虛擬地址空間31的頁32a和32b。類似地,一旦應(yīng)用訪問頁32c,操作系統(tǒng)的頁錯誤處理器將簡單地在虛擬地址空間31的頁32c和系統(tǒng)存儲器地址空間30的頁35c之間建立另一個映射;操作系統(tǒng)不需要在RAM 12內(nèi)分配任何頁。但是應(yīng)指出,如在圖1C內(nèi)所示的,數(shù)據(jù)頁32被映射到RAM 12的頁33d。
圖1E設(shè)想了不包含本發(fā)明的現(xiàn)有技術(shù)的操作系統(tǒng)40的組件結(jié)構(gòu)。僅示出了實現(xiàn)圖1C和1D內(nèi)所示的按需調(diào)頁和原地執(zhí)行功能所需的那些組件。操作系統(tǒng)40包含存儲器/文件管理器41,該管理器處理通過接口48來自應(yīng)用程序49的請求以訪問駐留在基于I/O的設(shè)備14上或存儲器尋址設(shè)備13上的文件。為了訪問基于I/O的設(shè)備14上的文件,存儲器/文件管理器41通過文件系統(tǒng)I/O接口45與文件系統(tǒng)驅(qū)動器43交互,文件系統(tǒng)驅(qū)動器43繼而通過設(shè)備I/O接口46與設(shè)備驅(qū)動器44交互。操作系統(tǒng)40可包含多個版本的文件系統(tǒng)驅(qū)動器,每個驅(qū)動器負責(zé)處理特定的文件系統(tǒng)類型;每個文件系統(tǒng)驅(qū)動器實現(xiàn)相同的文件系統(tǒng)I/O接口45。類似的,操作系統(tǒng)40可包含多個版本的設(shè)備驅(qū)動器,每個設(shè)備驅(qū)動器負責(zé)處理特定的設(shè)備類型;每個設(shè)備驅(qū)動器實現(xiàn)相同的設(shè)備I/O接口46。
在如圖1E所示的操作系統(tǒng)40的組件結(jié)構(gòu)內(nèi),設(shè)備驅(qū)動器44(以及所有設(shè)備驅(qū)動器)的職責(zé)是將數(shù)據(jù)從基于I/O的設(shè)備上的特定位置拷貝到RAM內(nèi),反之亦然。該設(shè)備驅(qū)動器不具有關(guān)于設(shè)備內(nèi)容或者這些內(nèi)容的組織方式的任何知識。通常將駐留在設(shè)備上的數(shù)據(jù)分成被稱為“塊”的塊,以“塊號”標(biāo)識每個塊。設(shè)備I/O接口46允許設(shè)備驅(qū)動器請求將數(shù)據(jù)從以塊號B標(biāo)識的塊拷貝到以地址A開始的RAM的塊內(nèi),反之亦然。
為了允許實現(xiàn)數(shù)據(jù)在設(shè)備上的結(jié)構(gòu)化存儲,操作系統(tǒng)40提供文件系統(tǒng)驅(qū)動器。文件系統(tǒng)驅(qū)動器允許訪問作為“文件”的集合存儲在設(shè)備上的數(shù)據(jù),每個文件提供有序字節(jié)序列的抽象。由文件系統(tǒng)提供的一些方法標(biāo)識每個文件,通常是“文件名”。文件系統(tǒng)跟蹤每個文件的哪些字節(jié)存儲在底層設(shè)備的哪些塊內(nèi)。執(zhí)行該記錄保持所需的信息通常被稱為“文件系統(tǒng)元數(shù)據(jù)”,并且其本身被存儲在底層設(shè)備上。文件系統(tǒng)元數(shù)據(jù)的特定布局因文件系統(tǒng)不同而不同。在如圖1E內(nèi)所示的操作系統(tǒng)40的組件結(jié)構(gòu)內(nèi),文件系統(tǒng)驅(qū)動器43(以及所有文件系統(tǒng)驅(qū)動器)職責(zé)是實現(xiàn)所有必要的邏輯以處理文件系統(tǒng)元數(shù)據(jù)布局。文件系統(tǒng)I/O接口45允許文件系統(tǒng)驅(qū)動器請求將數(shù)據(jù)從以某個文件名標(biāo)識的文件F從文件F內(nèi)的特定偏移量O開始拷貝到以地址A開始的RAM的塊,反之亦然。為了處理這樣的請求,文件系統(tǒng)驅(qū)動器將參考文件系統(tǒng)元數(shù)據(jù)以確定底層設(shè)備的哪個塊B保持有對應(yīng)于文件F內(nèi)的偏移量O的數(shù)據(jù),并使用處理底層設(shè)備的設(shè)備驅(qū)動器的設(shè)備I/O接口46在所述設(shè)備的塊B和存儲器的特定塊之間拷貝數(shù)據(jù)。
在如圖1E所示的操作系統(tǒng)40的組件結(jié)構(gòu)內(nèi),圖1C內(nèi)示出的按需調(diào)頁功能被如下實現(xiàn)當(dāng)應(yīng)用訪問目前不存在于系統(tǒng)存儲器地址空間內(nèi)的頁時,操作系統(tǒng)的頁錯誤處理器(通常是存儲器/文件管理器41的一部分)將從頁描述符確定該應(yīng)用希望該頁具有的內(nèi)容。通過指出發(fā)現(xiàn)所述內(nèi)容的文件F和文件F內(nèi)的偏移量O,頁描述符標(biāo)識所述內(nèi)容。然后存儲器/文件管理器41將在RAM 12內(nèi)分配新頁,并通過文件系統(tǒng)I/O接口45請求文件系統(tǒng)驅(qū)動器43將數(shù)據(jù)從文件F內(nèi)的偏移量O拷貝到所述新頁內(nèi)。如上所述,文件系統(tǒng)驅(qū)動器43將參考文件系統(tǒng)元數(shù)據(jù)確定底層設(shè)備(在此情況下為基于I/O的設(shè)備14)的哪個塊B保持該數(shù)據(jù),并且然后使用設(shè)備驅(qū)動器44的設(shè)備I/O接口46將該數(shù)據(jù)拷貝到所述新頁內(nèi)。一旦I/O操作完成,存儲器/文件管理器41將相應(yīng)地更新頁表。
但是,不能使用文件系統(tǒng)驅(qū)動器43對駐留在存儲器尋址設(shè)備13上的文件執(zhí)行原地執(zhí)行訪問,這是因為現(xiàn)有技術(shù)的文件系統(tǒng)I/O接口45不適合于該目的。而是在如圖1E所示的操作系統(tǒng)40的組件結(jié)構(gòu)內(nèi),由XIP管理器42處理原地執(zhí)行訪問,XIP管理器42緊密地集成在存儲器/文件管理器41內(nèi),并直接訪問存儲器尋址設(shè)備13。因此XIP管理器42負責(zé)實際訪問存儲器尋址設(shè)備13和處理存儲在所述設(shè)備上的數(shù)據(jù)的文件系統(tǒng)布局。不能使用XIP管理器42所支持的那些文件系統(tǒng)布局之外的任何其它文件系統(tǒng)布局訪問存儲器尋址設(shè)備13上的數(shù)據(jù),即使操作系統(tǒng)40另外為這樣的文件系統(tǒng)提供文件系統(tǒng)驅(qū)動器也是如此。
本發(fā)明除去了此限制。圖2A示出了包含本發(fā)明的實現(xiàn)了對存儲器尋址設(shè)備13的原地執(zhí)行訪問的操作系統(tǒng)50的組件結(jié)構(gòu)。與圖1E中所示的現(xiàn)有技術(shù)的操作系統(tǒng)40相比,操作系統(tǒng)50保持了到計算機系統(tǒng)10的所有硬件組件(RAM 12、基于I/O的設(shè)備14、存儲器尋址設(shè)備13)的相同接口。其還使用到應(yīng)用程序49的相同接口48。存儲器/文件管理器51是現(xiàn)有技術(shù)提供的存儲器/文件管理器41(見圖1E)的修改版本,并且文件系統(tǒng)驅(qū)動器52是現(xiàn)有技術(shù)提供的文件系統(tǒng)驅(qū)動器43(見圖1E)的修改版本。操作系統(tǒng)50還提供了訪問存儲器尋址設(shè)備13的設(shè)備驅(qū)動器53。應(yīng)指出,操作系統(tǒng)40的某些現(xiàn)有技術(shù)的版本也提供類似的訪問存儲器尋址設(shè)備13的設(shè)備驅(qū)動器,但是這種驅(qū)動器僅實現(xiàn)了設(shè)備I/O接口46(見圖1E),并且不能提供原地執(zhí)行功能。此功能由XIP管理器42實現(xiàn),但是該管理器直接訪問存儲器尋址設(shè)備13而不使用任何設(shè)備驅(qū)動器。如圖2A中所示,本發(fā)明不再需要XIP管理器組件。而是現(xiàn)在將原地執(zhí)行功能集成在現(xiàn)有的組件存儲器/文件管理器51、文件系統(tǒng)驅(qū)動器52和設(shè)備驅(qū)動器53內(nèi)。這可通過使用兩個新的接口來實現(xiàn)由文件系統(tǒng)驅(qū)動器52提供的文件系統(tǒng)直接訪問接口54,和由設(shè)備驅(qū)動器53提供的設(shè)備直接訪問接口55。設(shè)備直接訪問接口55的核心特征是提供檢索存在于系統(tǒng)存儲器地址空間內(nèi)的存儲器尋址設(shè)備的塊B的系統(tǒng)存儲器地址A的方法。類似的,文件系統(tǒng)直接訪問接口54的核心特征是提供檢索文件F在偏移量O處的內(nèi)容的系統(tǒng)存儲器地址A的方法,其中文件F駐留在存在于系統(tǒng)存儲器地址空間內(nèi)的存儲器尋址設(shè)備上。下面將更詳細地描述這些直接訪問接口的使用。
如圖2A所示,操作系統(tǒng)50通過接口48與應(yīng)用程序49交互。接口48的一部分包含由應(yīng)用程序49觸發(fā)的按需調(diào)頁請求,應(yīng)用程序49訪問目前沒有被映射到系統(tǒng)存儲器地址空間30的頁的其虛擬地址空間31的頁(應(yīng)指出,虛擬地址空間31和系統(tǒng)存儲器地址空間30如圖1C和1D中所示,其中虛擬地址空間31對應(yīng)于應(yīng)用49的虛擬地址空間)。接口48的其它部分包含應(yīng)用程序49對操作系統(tǒng)50的請求(“系統(tǒng)調(diào)用”)以便讀、寫或訪問駐留在基于I/O的設(shè)備14或存儲器尋址設(shè)備13上的文件的內(nèi)容。存儲器/文件管理器51是操作系統(tǒng)50的處理應(yīng)用程序49通過接口48發(fā)出的請求的組件。為了訪問駐留在基于I/O的設(shè)備14或存儲器尋址設(shè)備13上的文件的內(nèi)容,存儲器/文件管理器51通過文件系統(tǒng)I/O接口45和/或文件系統(tǒng)直接訪問接口54與文件系統(tǒng)驅(qū)動器52交互。操作系統(tǒng)50可包含多個版本的文件系統(tǒng)驅(qū)動器,每個版本負責(zé)處理特定的文件系統(tǒng)布局。所有文件系統(tǒng)驅(qū)動器實現(xiàn)相同的文件系統(tǒng)I/O接口45,并且一些文件系統(tǒng)驅(qū)動器實現(xiàn)附加的文件系統(tǒng)直接存儲接口54,其適合于對駐留在存儲器尋址設(shè)備上的文件執(zhí)行原地執(zhí)行訪問。文件系統(tǒng)驅(qū)動器52通過設(shè)備I/O接口46和/或設(shè)備直接訪問接口55與設(shè)備驅(qū)動器44和53交互。操作系統(tǒng)50還可包含多個版本的設(shè)備驅(qū)動器,每個驅(qū)動器負責(zé)處理特定類型的設(shè)備。所有設(shè)備驅(qū)動器實現(xiàn)相同的設(shè)備I/O接口46,并且用于存儲器尋址設(shè)備13的設(shè)備驅(qū)動器還附加地實現(xiàn)設(shè)備直接訪問接口55,其適于對駐留在存儲器尋址設(shè)備13上的文件執(zhí)行原地執(zhí)行訪問。
對于提供I/O接口45和直接訪問接口54兩者的文件系統(tǒng)驅(qū)動器,存儲器/文件管理器51能夠?qū)τ蛇@種文件系統(tǒng)驅(qū)動器處理的文件執(zhí)行常規(guī)訪問和原地執(zhí)行訪問。圖2B和2C分別更詳細地示出執(zhí)行常規(guī)和原地執(zhí)行訪問所需的控制流。圖2D將詳細地示出對于任何特定的文件訪問選擇使用兩種方法中的哪一種所需的判定邏輯。
圖2B示出了當(dāng)操作系統(tǒng)50處理訪問駐留在基于I/O的設(shè)備14上的文件的請求時的控制流。應(yīng)指出,此控制流等同于現(xiàn)有技術(shù)的操作系統(tǒng)40為相應(yīng)的訪問所使用的控制流。依次用動作60a-f表示該控制流的步驟。在應(yīng)用49已試圖訪問虛擬地址空間31的頁32c之后,這里示出的特定動作相應(yīng)于圖1C所示的情況。由于該頁目前沒有被映射到系統(tǒng)存儲器地址空間30的任何頁,所以由操作系統(tǒng)50的存儲器/文件管理51組件產(chǎn)生并且處理頁錯誤中斷。在圖2B中這被以動作60a表示。存儲器/文件管理器51從頁32c的頁描述符讀出該應(yīng)用希望其內(nèi)容相應(yīng)于文件F在偏移量O處的內(nèi)容。其確定文件F駐留在由文件系統(tǒng)驅(qū)動器52處理的文件系統(tǒng)上。其還確定文件F不支持原地執(zhí)行(這將在下文更詳細地說明)。然后其在RAM 13分配空閑頁33c并確定其系統(tǒng)存儲器地址A,并且通過文件系統(tǒng)驅(qū)動器52的文件系統(tǒng)I/O接口45請求將文件F在偏移量O處的內(nèi)容拷貝到系統(tǒng)存儲器地址A處的頁(動作60b)。文件系統(tǒng)驅(qū)動器52確定文件F在偏移量O處的數(shù)據(jù)駐留在基于I/O的設(shè)備14的塊B上,并且設(shè)備驅(qū)動器44負責(zé)訪問基于I/O的設(shè)備14。然后通過設(shè)備驅(qū)動器44的設(shè)備I/O接口46請求將基于I/O的設(shè)備14的塊B拷貝到系統(tǒng)存儲器地址A處的頁(動作60c)。設(shè)備驅(qū)動器44在基于I/O的設(shè)備44上實現(xiàn)I/O操作61以執(zhí)行該拷貝。一旦I/O操作61已完成,設(shè)備驅(qū)動器44通過設(shè)備I/O接口46將完成報告給文件系統(tǒng)驅(qū)動器52(動作60d),其類似地通過文件系統(tǒng)I/O接口45將完成報告給存儲器/文件管理器51(動作60e)。存儲器/文件管理器51最終建立虛擬地址空間31的頁32c到系統(tǒng)存儲器地址空間30的地址A處的頁33c的映射,頁33c現(xiàn)在保持所請求的內(nèi)容(動作60f)。
圖2C類似地示出了當(dāng)操作系統(tǒng)50處理請求以便對駐留在存儲器尋址設(shè)備13上的文件執(zhí)行原地執(zhí)行訪問時的控制流。應(yīng)指出,此流程不同于現(xiàn)有技術(shù)操作系統(tǒng)40為相應(yīng)的訪問所使用的流程,并且使用本發(fā)明所描述的新的直接訪問接口。還應(yīng)注意,對基于存儲器的設(shè)備13上的文件的某些訪問可能不適合于原地執(zhí)行訪問;在這樣的情況下取而代之使用上面描述的如圖2B給出等同的控制流執(zhí)行對該文件的常規(guī)I/O訪問。由于設(shè)備驅(qū)動器53像設(shè)備驅(qū)動器44那樣也實現(xiàn)了設(shè)備I/O接口46,所以這是可能的。
由動作70a-f依次表示圖2C中所示的控制流的步驟。在應(yīng)用49已試圖訪問虛擬地址空間31的頁32c之后,這里所示的特定動作相應(yīng)于圖1D所示的情況。如圖2B,由存儲器/文件管理器51產(chǎn)生和處理頁錯誤中斷(動作70a),存儲器/文件管理器51再次從頁32c的頁描述符讀出該應(yīng)用希望其內(nèi)容應(yīng)相應(yīng)于文件F在偏移量O處的內(nèi)容。其再次確定文件F駐留在由文件系統(tǒng)驅(qū)動器52處理的文件系統(tǒng)上。其還確定文件F支持原地執(zhí)行(這將在下文更詳細地說明)?,F(xiàn)在它通過文件系統(tǒng)驅(qū)動器52的文件系統(tǒng)直接訪問接口請求檢索文件F在偏移量O處的內(nèi)容的系統(tǒng)存儲器地址(動作70b)。文件系統(tǒng)驅(qū)動器52確定文件F在偏移量O處的內(nèi)容駐留在存儲器尋址設(shè)備13的塊B上,并且設(shè)備驅(qū)動器53負責(zé)訪問存儲器尋址設(shè)備13。然后它通過設(shè)備驅(qū)動器53的設(shè)備直接訪問接口55請求檢索存儲器尋址設(shè)備13的塊B的系統(tǒng)存儲器地址(動作70c)。設(shè)備驅(qū)動器53確定存儲器尋址設(shè)備13的塊B相應(yīng)于系統(tǒng)存儲器地址空間30的頁35c,并通過設(shè)備直接訪問接口55將其地址A返回文件系統(tǒng)驅(qū)動器52(動作70d),文件系統(tǒng)驅(qū)動器52類似地通過文件系統(tǒng)直接訪問接口54將地址A返回存儲器/文件管理器51(動作70e)。存儲器/文件管理器51最終建立虛擬地址空間31的頁32c到系統(tǒng)存儲器地址空間30的地址A處的頁35c的映射(動作70f)。
圖2D示出了當(dāng)確定使用文件系統(tǒng)I/O接口還是使用文件系統(tǒng)直接訪問接口訪問文件F時操作系統(tǒng)50(圖2A)內(nèi)的控制流。操作系統(tǒng)首先確定哪個文件系統(tǒng)驅(qū)動器負責(zé)用于保持著文件F的文件系統(tǒng)FS。如果該文件系統(tǒng)驅(qū)動器根本不支持文件系統(tǒng)直接訪問接口,則使用文件系統(tǒng)I/O接口。否則,操作系統(tǒng)確定哪個設(shè)備驅(qū)動器負責(zé)用于文件系統(tǒng)FS的底層設(shè)備D。如果該設(shè)備驅(qū)動器根本不支持設(shè)備直接訪問接口,則也使用文件系統(tǒng)I/O系統(tǒng)接口。否則,操作系統(tǒng)確定文件系統(tǒng)FS是否被用戶配置為對文件F進行原地執(zhí)行訪問。如果是,則使用文件系統(tǒng)直接訪問接口,否則使用文件系統(tǒng)I/O接口。在一些實施例中,用戶僅可以選擇允許對FS上的所有文件進行原地執(zhí)行訪問或是對所有文件都不進行原地執(zhí)行訪問。在其它實施例中,用戶可對每個單獨的文件分別進行選擇。另外,在一些實施例中,如果其它可配置的文件系統(tǒng)參數(shù)已被用戶設(shè)置為與原地執(zhí)行相兼容的值,才可以允許原地執(zhí)行訪問;例如必須將文件系統(tǒng)塊的大小配置成等于或者是系統(tǒng)存儲器頁大小的數(shù)倍的值。
注意操作系統(tǒng)不必為對文件F的每一個訪問執(zhí)行圖2D所示的整個判定邏輯。而是當(dāng)?shù)谝淮卧L問文件F時進行一次選擇,并且在與文件F相關(guān)聯(lián)的操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)內(nèi)加以記憶;隨后的訪問將重新使用在所述數(shù)據(jù)結(jié)構(gòu)內(nèi)存儲的該判定的結(jié)果。
圖3A-I更詳細地示出了Linux操作系統(tǒng)內(nèi)的本發(fā)明的一個實施例。通過擴展標(biāo)準(zhǔn)操作系統(tǒng)I/O組件結(jié)構(gòu)的接口而不是整個替換它,本發(fā)明將原地執(zhí)行功能集成在標(biāo)準(zhǔn)操作系統(tǒng)I/O組件結(jié)構(gòu)內(nèi)。Linux提供了下述與執(zhí)行I/O操作有關(guān)的組件層設(shè)備驅(qū)動層,其允許訪問背后的存儲設(shè)備而不需要所涉及的特定硬件的知識,文件系統(tǒng)層,其允許使用邏輯文件視圖訪問背后的存儲設(shè)備而不需要關(guān)于背后的存儲設(shè)備的知識,存儲器管理層,其允許執(zhí)行應(yīng)用而不需要該應(yīng)用了解操作系統(tǒng)使用的虛擬存儲器和動態(tài)地址轉(zhuǎn)換技術(shù)。
圖3A示出了在許多現(xiàn)代操作系統(tǒng)內(nèi)實現(xiàn)的設(shè)備抽象。該例子示出了Linux內(nèi)的設(shè)備驅(qū)動器。調(diào)用make_request函數(shù)以便提交從/向該設(shè)備讀/寫數(shù)據(jù)的請求。request_queue和do_request函數(shù)是Linux內(nèi)的優(yōu)化的一部分。設(shè)備驅(qū)動器將按循環(huán)“發(fā)送請求→處理請求→中斷處理器→發(fā)送請求”運行,直到提交給它的所有工作被完成為止。
設(shè)備驅(qū)動層允許提交讀或?qū)懻埱?。該層的頻繁的用戶是文件系統(tǒng)的讀頁(多個)/寫頁(多個)操作,它們從/向文件傳輸數(shù)據(jù)。為了對所述數(shù)據(jù)尋址,使用物理塊號。
如圖3B內(nèi)所示,本發(fā)明提供了對設(shè)備驅(qū)動器層的接口的擴展。在保持現(xiàn)有接口不動的同時,該擴展提供了可用于得到設(shè)備上的數(shù)據(jù)的直接引用的功能??墒褂么艘迷L問設(shè)備上的數(shù)據(jù)而不需要提交請求并等待它們的完成。此擴展可選擇地可由訪問存儲器尋址設(shè)備的設(shè)備驅(qū)動器實現(xiàn)。新的操作direct_access獲得與make_request類似的塊號,但是不傳輸任何數(shù)據(jù)。而是返回對數(shù)據(jù)的引用。在此后的任何時間可使用此引用向該物理塊讀或?qū)懭魏螖?shù)據(jù)直到再次關(guān)閉/卸載該設(shè)備而不需要與設(shè)備驅(qū)動層進行其它交互。新接口的使用是可選的,對于不支持新接口的用戶例如原始設(shè)備驅(qū)動器,傳統(tǒng)的make_request接口保持不動。對于支持通用的文件系統(tǒng),傳統(tǒng)接口是重要的,通用的文件系統(tǒng)使用傳統(tǒng)接口傳輸文件系統(tǒng)元數(shù)據(jù)(i節(jié)點、目錄項等)。
圖3C示出了Linux內(nèi)的通用的文件系統(tǒng)如何可以使用設(shè)備驅(qū)動器的make_request函數(shù)實現(xiàn)地址空間操作。readpage(s)/writepage(s)函數(shù)使用get_block函數(shù)[在處理多個頁時重復(fù)執(zhí)行]標(biāo)識與目的頁(多個)相關(guān)聯(lián)的設(shè)備上的物理塊號(多個)。如圖3A所示的make_request函數(shù)用于訪問數(shù)據(jù)。在Linux內(nèi),文件系統(tǒng)通常與文件系統(tǒng)庫函數(shù)一起使用地址空間操作以執(zhí)行文件操作例如sys_read()和sys_write()。這些地址空間操作和庫函數(shù)的使用是可選擇的,但是大部分通用文件系統(tǒng)使用它們。地址空間操作readpage()、readpages()、writepage()和writepages()被用來從/向設(shè)備驅(qū)動器讀/寫一個或多個存儲器頁的數(shù)據(jù)。為了尋址存儲器頁,使用邏輯文件句柄和偏移量。該尋址被文件系統(tǒng)轉(zhuǎn)換成物理塊號。
如圖3D所示,本發(fā)明以名為“get_xip_page”的函數(shù)提供了對地址空間操作接口的擴展,get_xip_age函數(shù)允許檢索對給定存儲器頁之后的存儲的引用。該函數(shù)使用文件句柄和偏移量以便進行尋址,通過調(diào)用get_block函數(shù)將其轉(zhuǎn)換成物理塊號,并從設(shè)備驅(qū)動器層的direct_access函數(shù)檢索對該物理塊之后的存儲的引用(如圖3B所示)。此后的任何時間可使用此引用向該物理塊讀或?qū)懭魏螖?shù)據(jù),直到該文件被刪簡或文件系統(tǒng)被卸載而不需要與文件系統(tǒng)或設(shè)備驅(qū)動器層的其它交互。當(dāng)被支持時新接口的使用是強制性的,出于數(shù)據(jù)完整性的原因,對于一個文件或是支持傳統(tǒng)的readpage(s)/wirtepage(s)接口或是新的get_xip_page接口。文件系統(tǒng)可基于每個文件自由選擇。
readpage(s)/wirtepage(s)函數(shù)的主要用戶是文件系統(tǒng)庫函數(shù)。圖3E示出了在Linux內(nèi)文件系統(tǒng)庫函數(shù)如何為通用文件系統(tǒng)執(zhí)行讀類型的文件操作。
Generic_file_read函數(shù)執(zhí)行與sys_read()系統(tǒng)調(diào)用相關(guān)聯(lián)的文件操作。
Generic_file_readv函數(shù)執(zhí)行與sys_readv()系統(tǒng)調(diào)用相關(guān)聯(lián)的文件操作。
Generic_file_aio_read函數(shù)執(zhí)行與異步IO系統(tǒng)調(diào)用相關(guān)聯(lián)的讀操作。
Generic_file_sendfile文件操作執(zhí)行與sys_sendfile()系統(tǒng)調(diào)用相關(guān)聯(lián)的文件操作。
所有這些函數(shù)間接地調(diào)用generic_mapping_read,generic_mapping_read使用readpage(s)函數(shù)(如圖3C內(nèi)所示)從設(shè)備讀一個或多個頁。雖然對于文件系統(tǒng)這些函數(shù)的使用是可選擇的,但是大多數(shù)通用文件系統(tǒng)使用它們而不是自己實現(xiàn)文件操作。
圖3G示出了在Linux內(nèi)文件系統(tǒng)庫函數(shù)如何為通用文件系統(tǒng)執(zhí)行寫類型的文件操作。
Generic_file_write函數(shù)執(zhí)行與sys_write()系統(tǒng)調(diào)用相關(guān)聯(lián)的文件操作。
Generic_file_writev函數(shù)執(zhí)行與sys_writev()系統(tǒng)調(diào)用相關(guān)聯(lián)的文件操作。
Generic_file_aio_write函數(shù)執(zhí)行與異步IO系統(tǒng)調(diào)用相關(guān)聯(lián)的寫操作。
所有這些函數(shù)間接地調(diào)用generic_file_direct_write(當(dāng)使用選項O_DIRECT打開目標(biāo)文件時)或generic_file_buffered_write。這兩個函數(shù)使用writepage(s)函數(shù)向設(shè)備寫一個或多個頁。
本發(fā)明提供了對這些庫函數(shù)的擴展以便使得它們在被支持時能夠使用get_xip_page接口。圖3F示出了對讀類型操作的文件系統(tǒng)庫函數(shù)的擴展。根據(jù)是否出現(xiàn)get_xip_page地址空間操作,使用generic_mapping_read函數(shù)或新的do_xip_mapping_read函數(shù)執(zhí)行該操作。do_xip_mapping_read函數(shù)使用get_xip_page地址空間操作以檢索該設(shè)備上的目標(biāo)數(shù)據(jù)的引用。對于數(shù)據(jù)傳輸,直接使用此引用而不需執(zhí)行I/O操作。圖3H示出了對寫類型操作的文件系統(tǒng)庫函數(shù)的擴展。根據(jù)是否出現(xiàn)get_xip_page地址空間操作,使用generic_file_buffered_write/generic_file_direct_write函數(shù)或新的generic_file_xip_write函數(shù)執(zhí)行該操作。generic_file_xip_write函數(shù)使用get_xip_page地址空間操作以檢索該設(shè)備上的目標(biāo)數(shù)據(jù)的引用。對于數(shù)據(jù)傳輸,直接使用此引用而不需執(zhí)行I/O操作。
實現(xiàn)get_xip_page地址空間操作的所有文件系統(tǒng)不需要其它的代碼改變以便以由庫函數(shù)實現(xiàn)的所有文件操作執(zhí)行原地執(zhí)行訪問。圖3F、3H和3I示出了擴展的庫函數(shù)如何根據(jù)是否實現(xiàn)了get_xip_page地址空間操作實行它們的功能。當(dāng)實現(xiàn)了get_xip_page時,所有庫函數(shù)使用從get_xip_page檢索到的引用直接執(zhí)行到該存儲設(shè)備的所有數(shù)據(jù)傳輸。圖3I示出了對用于文件存儲器映射的文件系統(tǒng)庫函數(shù)進行的擴展。應(yīng)用對其虛擬地址空間的目前未出現(xiàn)的一部分進行訪問。使用Linux的標(biāo)準(zhǔn)的依賴體系結(jié)構(gòu)的和核心存儲器管理函數(shù)來處理引起的頁錯誤。與常規(guī)處理不同,該文件系統(tǒng)已安裝了用于與目標(biāo)頁相關(guān)聯(lián)的文件的filemap_xip_nopage處理器。此處理器使用get_xip_page檢索該設(shè)備上的目標(biāo)數(shù)據(jù)的引用。將此引用返回do_no_page函數(shù),該函數(shù)在應(yīng)用的虛擬地址空間頁表內(nèi)創(chuàng)建頁表表項,以允許應(yīng)用直接使用該設(shè)備上的數(shù)據(jù)而不需與操作系統(tǒng)的其它牽連。當(dāng)文件映象被選擇為是私有的時(標(biāo)準(zhǔn)機制應(yīng)用),頁表表項稍后可經(jīng)歷寫時拷貝機制。
因為應(yīng)用二進制文件和共享庫函數(shù)在Linux內(nèi)經(jīng)歷文件映射,并且從而經(jīng)歷上述的頁錯誤機制,所以實現(xiàn)了原地執(zhí)行的效果。上述擴展保持Linux操作系統(tǒng)的與I/O相關(guān)的組件內(nèi)的整個結(jié)構(gòu)和層隔離不動設(shè)備驅(qū)動器層將物理塊號映射到設(shè)備,但是不對文件或其它邏輯對象起作用。文件系統(tǒng)執(zhí)行邏輯文件和物理塊號尋址之間的映射,但是不對設(shè)備的內(nèi)部結(jié)構(gòu)起作用。在另一方面,數(shù)據(jù)傳輸本身被倒轉(zhuǎn)當(dāng)使用新擴展時設(shè)備驅(qū)動器不傳輸任何數(shù)據(jù)。在文件操作庫函數(shù)中直接傳輸數(shù)據(jù)。此解決方法的優(yōu)點包括對設(shè)備驅(qū)動器層和通用文件系統(tǒng)的非常小的并且僅僅是非插入的改變。任何通用文件系統(tǒng)可容易地受益于原地執(zhí)行機制,例如減小的存儲器消耗和增加的性能。
權(quán)利要求
1.系統(tǒng)(50),包括具有與應(yīng)用程序(49)的接口(48)的存儲器/文件管理器(51),至少一個文件系統(tǒng)驅(qū)動器(52),其具有與所述存儲器/文件管理器(51)的文件系統(tǒng)I/O接口(45),至少一個設(shè)備驅(qū)動器(44),其具有到所述文件系統(tǒng)驅(qū)動器(52)的設(shè)備I/O接口(46),其中所述至少一個設(shè)備驅(qū)動器(44)提供對至少一個基于I/O的設(shè)備(14)的訪問,至少一個設(shè)備驅(qū)動器(53),其具有到所述文件系統(tǒng)驅(qū)動器(52)的設(shè)備I/O接口(46),其中所述至少一個設(shè)備驅(qū)動器(53)提供對至少一個存儲器尋址設(shè)備(13)的訪問,其中所述操作系統(tǒng)提供原地執(zhí)行功能以訪問至少一個存儲器尋址設(shè)備(13),其特征在于,所述存儲器/文件管理器(51)和所述至少一個文件系統(tǒng)驅(qū)動器(52)之間的文件系統(tǒng)直接訪問接口(54),其中所述文件系統(tǒng)直接訪問接口(54)提供檢索特定文件在特定偏移量處的內(nèi)容的系統(tǒng)存儲器地址的功能,其中所述文件駐留在所述存儲器尋址設(shè)備(13)上,所述至少一個文件系統(tǒng)驅(qū)動器(52)和提供對所述至少一個存儲器尋址設(shè)備(13)的訪問的所述至少一個設(shè)備驅(qū)動器(53)之間的設(shè)備直接訪問接口(55),其中所述設(shè)備直接訪問接口(55)提供檢索至少一個存儲器尋址設(shè)備(13)的特定塊的系統(tǒng)存儲器地址的功能,其中通過使用所述文件系統(tǒng)直接訪問接口(54)和所述設(shè)備直接訪問接口(55),由所述存儲器/文件管理器(51)、所述至少一個文件系統(tǒng)驅(qū)動器(52)和提供對所述至少一個存儲器尋址設(shè)備(13)的訪問的所述至少一個設(shè)備驅(qū)動器(53)提供所述原地執(zhí)行功能。
2.根據(jù)權(quán)利要求1的系統(tǒng),其中所述系統(tǒng)是操作系統(tǒng)的一部分或者由所述操作系統(tǒng)提供。
3.根據(jù)權(quán)利要求1的系統(tǒng),其中所述存儲器/文件管理器(51)或是使用所述文件系統(tǒng)直接訪問接口(54)或是使用所述文件系統(tǒng)I/O接口(45)提供對由所述文件系統(tǒng)驅(qū)動器(52)管理的文件的訪問。
4.根據(jù)權(quán)利要求1的系統(tǒng),其中所述文件系統(tǒng)驅(qū)動器(52)通過檢索特定文件在特定偏移量處的內(nèi)容的系統(tǒng)存儲器地址實現(xiàn)所述文件系統(tǒng)直接訪問接口(54),其中所述內(nèi)容駐留在所述存儲器尋址設(shè)備(13)的某個塊上,通過使用由所述設(shè)備驅(qū)動器提供的所述設(shè)備直接訪問接口以便檢索所述塊的系統(tǒng)存儲器地址,由所述設(shè)備驅(qū)動器提供對該內(nèi)容的訪問。
5.根據(jù)權(quán)利要求1的系統(tǒng),其中通過使用由所述文件系統(tǒng)驅(qū)動器(52)提供的所述文件系統(tǒng)直接訪問接口(54)檢索所述文件在所述偏移量處的內(nèi)容并使用所述地址原地執(zhí)行所述內(nèi)容,所述存儲器/文件管理器(51)實現(xiàn)對特定文件在特定偏移量處的原地執(zhí)行訪問,其中所述文件駐留在由所述文件系統(tǒng)驅(qū)動器(52)處理的文件系統(tǒng)上,并且所述文件系統(tǒng)駐留在所述存儲器尋址設(shè)備(13)上。
6.計算機系統(tǒng),其具有根據(jù)權(quán)利要求1-5的系統(tǒng)。
7.根據(jù)權(quán)利要求6的計算機系統(tǒng),該計算機系統(tǒng)具有控制著一個或多個虛擬機的管理程序,其中至少一個虛擬機運行根據(jù)權(quán)利要求1-5的系統(tǒng)。
8.根據(jù)權(quán)利要求7的計算機系統(tǒng),其中以由所述管理程序給一個或多個所述虛擬機提供的共享存儲器段體現(xiàn)所述存儲器尋址設(shè)備(13)。
9.用于由根據(jù)權(quán)利要求1-5的系統(tǒng)自動提供原地執(zhí)行功能的方法,其中所述系統(tǒng)接受應(yīng)用程序訪問文件的請求,并判定是否使用原地執(zhí)行功能來訪問所述文件,其中所述方法包括以下步驟確定保持所述文件的文件系統(tǒng),確定管理所述文件系統(tǒng)的文件系統(tǒng)驅(qū)動器(52)是否提供所述文件系統(tǒng)直接訪問接口(54),如果所述文件系統(tǒng)驅(qū)動器(52)不提供所述文件系統(tǒng)直接訪問接口(54),則不使用原地執(zhí)行,如果所述文件系統(tǒng)驅(qū)動器提供所述文件系統(tǒng)直接訪問接口(54),則確定所述文件駐留在其上的設(shè)備,確定管理所述設(shè)備(13)的設(shè)備驅(qū)動器(53)是否提供所述設(shè)備直接訪問接口(55),如果所述設(shè)備驅(qū)動器不提供所述設(shè)備直接訪問接口(55),則不使用原地執(zhí)行,確定所述文件系統(tǒng)是否配置成允許原地執(zhí)行功能,以及使用所述文件系統(tǒng)直接訪問接口(55)提供原地執(zhí)行功能。
10.存儲在數(shù)字計算機的內(nèi)部存儲器內(nèi)的計算機程序產(chǎn)品,該產(chǎn)品包含軟件代碼部分,如果在計算機上運行該產(chǎn)品則執(zhí)行根據(jù)權(quán)利要求9的方法。
全文摘要
本發(fā)明公開了一種操作系統(tǒng),該操作系統(tǒng)提供了用于實現(xiàn)原地執(zhí)行功能的新的和發(fā)明性的系統(tǒng)和方法。該操作系統(tǒng)提供了用于實現(xiàn)原地執(zhí)行功能的下面的新的和發(fā)明性的功能組件存儲器/文件管理器和至少一個文件系統(tǒng)驅(qū)動器之間的文件系統(tǒng)直接訪問接口,其中該文件系統(tǒng)直接訪問接口提供檢索特定文件在特定偏移量處的內(nèi)容的系統(tǒng)存儲器地址的功能,其中文件位于所述存儲器尋址設(shè)備上;至少一個文件系統(tǒng)驅(qū)動器和提供對所述至少一個存儲器尋址設(shè)備的訪問的至少一個設(shè)備驅(qū)動器之間的設(shè)備直接訪問接口,其中該設(shè)備直接訪問接口提供檢索至少一個存儲器尋址設(shè)備的特定塊的系統(tǒng)存儲器地址的功能;其中通過使用文件系統(tǒng)直接訪問接口和設(shè)備直接訪問接口由該存儲器/文件管理器、至少一個文件系統(tǒng)驅(qū)動器和提供對至少一個存儲器尋址設(shè)備的訪問的至少一個設(shè)備驅(qū)動器實現(xiàn)該原地執(zhí)行功能。
文檔編號G06F9/455GK1848082SQ20061006705
公開日2006年10月18日 申請日期2006年3月31日 優(yōu)先權(quán)日2005年4月5日
發(fā)明者C·奧特, U·魏甘德 申請人:國際商業(yè)機器公司