用於在子上下文之間控制存儲器訪問的裝置、系統和方法
2023-07-06 22:53:16 1
專利名稱:用於在子上下文之間控制存儲器訪問的裝置、系統和方法
技術領域:
本發明涉及計算設備中的存儲器保護,並尤其涉及依照當前的代碼執行點來保護存儲器。
背景技術:
在早期的計算設備中,在計算機上一次只運行一個程序。運行的程序完全控制了機器中的硬體,其中這些硬體包括邏輯設備、處理器、存儲器、輸入設備以及輸出設備。運行的程序中的程序缺陷可導致該運行程序工作不正常或終止。然而,由於一次僅僅運行一個程序,因此其他程序是不受影響的。
隨著計算機變得更為複雜,在單個計算機上運行了多個程序。多任務處理核心採用了不同方式來調整處理器訪問。在常規的多任務處理的實現方式中,該核心在很短的時間片中調度計算機上運行的每一個程序。在每一個時間片期間運行一個程序。在每一個時間片末端,該核心保存當前運行的程序的狀態,然後恢復掛起(suspended)程序的狀態,並且允許掛起程序在新的時間片期間運行。通過毫秒級別的時間片,計算機能夠連續運行多個程序,同時給出同時運行多個程序的效果。
在早期的多任務環境中,每一個程序在其時間片期間會完全控制計算機。當前運行的程序控制了處理器、存儲器、輸入設備以及輸出設備。當前運行的程序有能力影響分配給掛起程序的存儲器。字處理程序有能力修改分配給統計程序的存儲器。儘管軟體程式設計師嘗試避免這些錯誤,但是這些錯誤還是會發生,並且這些錯誤導致很多問題。一個程序對分配給另一個程序的存儲器執行的存儲器訪問是普遍的,並且是很難檢測的。
響應於這些問題,計算機體系結構和軟體的設計人員共同工作而設計了基於進程的受保護的存儲器系統。在基於進程的受保護的存儲器系統中,核心是運行進程中的程序。並且核心基於進程而將存儲器分配給程序。
舉例來說,核心啟動進程中的程序。該核心調度進程來運行和分配運行進程的時間片。當該程序是當前運行的進程時,該程序從核心請求存儲器塊。然後,核心分配存儲器塊,並且會將該存儲器塊與特定的進程相關聯。
核心結合了專用硬體來監視運行進程進行的存儲器訪問。運行進程對當前分配給該運行進程的存儲器所進行的訪問是得到許可的。然而,運行進程對未分配給它的存儲器所進行的訪問創建出異常。核心處理該異常,並且阻止對未分配給當前進程的存儲器的訪問。
基於進程的受保護存儲器系統實現了其目的——防止同時運行的程序影響到分配給其他程序的計算機資源。然而,它是以很高的代價來實現其目的的。首先,從一個進程切換到另一個進程所需要的時間量會增長。其次,進程切換必須更頻繁的進行,以便處理進程間的通信(IPC)。第三,核心對計算機資源的請求必須通過進程切換或通過系統中斷來調整,這創建了切換開銷並且佔用了關鍵的核心資源。
核心必須了解分配給每一個進程的存儲器塊以及權限。通常,核心使用了用於每個進程的頁表來存儲該信息。該頁表保持了運行進程所用虛擬地址與物理存儲器位置的映射。此外,該頁表還追蹤哪個存儲器被交換到磁碟。用於單個進程的頁表可以是非常大的。很多計算機系統都使用了轉換後備緩衝器(TLB)來緩存該頁表,以便加速地址轉換。
進程切換是耗時的過程。在由核心調度進程的時候,該核心會轉儲清除(flush)TLB,並且會設置指向新頁表的指針。該頁表的某些部分必須被加載到存儲器中,並且與包括了代碼頁以及數據頁的進程相關聯的附加存儲器頁必須被加載到存儲器中。通過採用這種方式來將存儲器分配給進程,核心能夠限制進程間的存儲器訪問。然而,即使是從一個進程到另一個進程的最簡單的調用也會導致進程切換開銷。
在基於進程的受保護的存儲器系統中存在異常,以便允許核心以及高度可信的程序訪問計算機中的所有存儲器。舉例來說,核心通常是以特許模式運行的,該模式允許核心訪問任何存儲器地址而不會導致異常。此外,某些設備驅動器和其享庫同樣可以在特許等級上運行。這些異常減少所需要的進程切換的數量,但也降低了系統的穩定性。
目前已經提出了很多建議,以便減小核心代碼的大小以及將儘可能多的系統級服務推送到非核心應用中。這種系統有時被稱為微核心。基於微核心的作業系統從核心中分離出了很多系統功能。這些被分離的系統功能可以存在於系統代碼段中,也可以存在於獨立的進程中。
如果被分離的系統功能是作為系統代碼段而存在的,那麼它們必定會由不可信的進程所調用。在基於進程的存儲器保護體系結構中,這種設計將會允許不可信的程序直接調用系統代碼,由此繞過存儲器保護標準。作為選擇,系統功能可以作為獨立進程來實施,該進程會為來自不可信進程的請求提供服務。然而,通過創建附加進程來執行系統功能將會產生與進程切換相關聯的很高的開銷成本。
從以上論述中可知,目前明顯需要一種裝置、系統和方法,其允許計算設備上運行的應用直接調用系統功能,而不會產生進程切換開銷,同時維持存儲器保護標準來防止不可信的應用不恰當地訪問系統資源。非常有益的是,這種裝置、系統和方法將會提升系統的穩定性,同時減少調用系統功能所需要的時間。這種裝置、系統和方法還將減少與進程間的通信相關聯的開銷。
發明內容
本發明是響應於本領域的當前狀況而被開發的,特別地,本發明是響應於本領域中尚未被當前可用的存儲器保護系統完全解決的需要和問題而被開發的。相應地,通過開發本發明,可以提供一種用於實現受保護的虛擬存儲器子上下文(subcontext)的裝置、系統和方法,其中所述虛擬存儲器子上下文克服了眾多或所有的如上所述的本領域內的缺陷。
用於實現受保護的虛擬存儲器子上下文的裝置提供有包含多個模塊的邏輯單元,這些模塊被配置成在功能上執行以下的必要步驟將存儲器塊分配給特定子上下文,在子上下文映射模塊中存儲所述分配,在子上下文映射模塊中存儲子上下文間的存儲器訪問權限,追蹤當前子上下文的身份,追蹤當前子上下文所執行的子上下文間存儲器訪問,以及阻攔那些並未得到子上下文映射模塊中存儲的子上下文間存儲器訪問權限許可的存儲器訪問。
在一實施例中,該裝置被配置成阻攔被禁止的子上下文存儲器讀寫。
在一實施例中,該裝置還被配置成保持子上下文入口點以及相關權限的表格,並且阻攔沒有正確使用已註冊子上下文入口點或沒有正確權限進行此類調用的子上下文間的程序調用。
在另一實施例中,該裝置可以被配置成使得進程間的通信更便利。
還提供了本發明的一種用於實現受保護的虛擬存儲器子上下文的系統。該系統可以包括中央處理單元、隨機存取存儲器、子上下文映射模塊以及控制模塊,其中該控制模塊被配置成阻止沒有被子上下文映射模塊中存儲的權限所許可的子上下文間的存儲器訪問。特別地,在一實施例中,該系統還包括入口點表格,該表格被配置成保持子上下文入口點與子上下文間的權限的列表,並且被配置成阻攔沒有使用具有恰當權限的已註冊子上下文入口點的子上下文間的程序調用。
還提供了一種用於服務和安裝本發明的方法,以便實現受保護的虛擬存儲器子上下文。在所公開的實施例中的方法基本上包括了安裝和服務本發明所必需的步驟。在一實施例中,該方法包括將算計可讀代碼集成到計算系統中,其中所述代碼與計算系統相結合而將存儲器塊分配給子上下文,在子上下文映射模塊中存儲子上下文間的訪問權限,追蹤當前子上下文的身份,追蹤當前子上下文所執行的子上下文間存儲器訪問,以及阻攔那些沒有子上下文映射模塊中存儲的匹配權限的存儲器訪問。該方法還可以包括保持子上下文入口點模塊,並且阻攔沒有在子上下文入口點模塊中註冊的子上下文間的程序調用。該方法還可以阻攔沒有在子上下文入口點模塊中存儲匹配權限的調用。
在全部的本說明書中,對特徵、優點的引用或相似的語言並不意味著所有這些可以藉助本發明實現的特徵和優點都應該處於或處於本發明的單個實施例中。與此相反,涉及這些特徵和優點的語言被理解成是指結合實施例所描述的特定特徵、優點或特性被包括在本發明的至少一實施例中。因此,在全部的本說明書中,關於特徵及優點的討論以及相似的語言可以是指同一實施例,但這並不是必需的。
此外,在一個或多個實施例中,所描述的本發明的特徵、優點及特性可以採用任何一種適當的方式來組合。本領域技術人員將會了解,本發明可以在沒有特定實施例中的一個或多個特定特徵或優點的情況下來實施。在其他實例中,在某些實施例中可以認識到附加的特徵和優點,而這些特徵和優點並未在本發明的所有實施例中呈現出。
從後續的描述以及權利要求中可以更全面地清楚理解本發明的這些特徵和優點,或者這些特徵和優點可以通過實施下文所述的本發明來加以了解。
為使本發明的優點易於理解,將參考附圖中描述的特定實施例來對上文簡述的發明進行更為具體的描述。應該理解的是,這些附圖僅僅描述的是本發明的典型實施例,由此不應將其視為是對本發明的範圍進行限制,將會通過使用附圖並且結合附加的特徵和細節來對本發明進行描述和說明,在附圖中圖1是例示現有技術中基於進程的存儲器保護體系結構的示意框圖;圖2是例示依照本發明控制計算設備中的子上下文間的存儲器訪問的裝置的一實施例的示意框圖;圖3是例示本發明一實施例中的某些模塊的框圖;圖4例示了可在本發明一實施例中使用的兩個表格;圖5是例示依照本發明的用於存儲器保護的方法的一實施例的示意流程圖;
圖6是例示本發明一實施例中的進程與子上下文之間的關係的框圖;以及圖7a和7b是例示結合本發明的兩種可能的線程實現的框圖。
具體實施例方式
本說明書中描述的眾多功能單元都已被標記成模塊,以便更為特別地強調其實現方式的獨立性。舉例來說,模塊可以作為硬體電路來實現,其中該硬體電路包括定製的VLSI電路或門陣列、諸如邏輯晶片之類的現有半導體、電晶體或其他分離組件,模塊也可以在可編程的硬體設備中實現,其中該硬體設備諸如現場可編程門陣列、可編程陣列邏輯、可編程邏輯設備等等。
模塊也可以採用用於由多種類型的處理器所執行的軟體的形式來實現。舉例來說,經過識別的可執行代碼模塊包括一個或多個物理或邏輯的計算機指令塊,這些計算機指令塊例如可以被組織成對象、過程或功能。然而,經過識別的模塊的可執行代碼未必在物理上是同處一地的,而是可以包括存儲在不同位置的分離指令,當在邏輯上將這些指令連接在一起的時候,這些指令包括該模塊並且實現該模塊的所述功能。
實際上,可執行代碼模塊可以是單個指令,也可以是多個指令,甚至可以分布到若干個不同代碼段、不同程序中以及若干個存儲器設備中。同樣,在這裡可以在模塊內標識和例示工作數據,也可以採用任何適當形式來包含工作數據,還可以用任何適當類型的數據結構來組織工作數據。工作數據可以作為單個數據集來收集,或者可以分布在包括不同存儲設備在內的不同位置,並且可以至少部分地只作為系統或網絡上的電子信號而存在。
在全部的本說明書中,關於「一實施例」、「實施例」的引用或類似的語言指的是將結合該實施例所描述的特定特徵、結構或特性包括在本發明的至少一實施例中。因此,在全部的本說明書中,所出現的短語「在一實施例中」、「在實施例中」以及相似的語言可以全都指同一實施例,但這並不是必需的。
對信號承載媒體的引用可以採用能夠生成信號、使得信號生成或是使得機器可讀指令程序在數字處理裝置上運行的任何形式。信號承載媒體可以包括傳輸線、緊緻光碟、數字視頻盤、磁帶、貝努裡驅動器、磁碟、穿孔卡、閃速存儲器、集成電路或其他數字處理裝置的存儲設備。
此外,在一個或多個實施例中,所描述的本發明的特徵、結構或特性可以採用任何適當的形式來組合。在後續描述中,提供了眾多的特定細節,以便提供關於本發明實施例的精確理解,這些細節例如編程、軟體模塊、用戶選擇、網絡事務、資料庫查詢、資料庫結構、硬體模塊、硬體電路、硬體晶片等等。然而,本領域技術人員將了解,本發明是可以在沒有一個或多個特定細節的情況下實施的,此外,本發明也可以藉助其他的方法、組件、材料等等來實施。在其他實例中,並未詳細顯示或描述那些眾所周知的結構、材料或操作,以免與本發明的方面相混淆。
圖1描述了傳統的基於進程的受保護存儲器計算設備100的一實施例,其中顯示的是將存儲器塊分配給進程。傳統的計算系統實現了在偽並行環境中運行多個進程的多任務處理作業系統。存儲器則是由系統單獨分配給每一個進程的。
在計算設備100中,進程A是在獨立於進程B的情況下運行的。存儲器塊104、106以及108被分配給了進程A。圖中將進程與存儲器塊相連的正交線例示的是在邏輯上將特定存儲器塊分配給特定進程。存儲器塊116、118以及120被分配給進程B。存儲器塊102在進程A與進程B中間共享。
存儲器塊可以是從隨機存取存儲器(RAM)或其他存儲媒體分配的。如所示,存儲器塊可以包含數據或代碼。傳統的系統往往創建的是類似102的共享只讀存儲器塊,以便保持可以被多個進程調用的可重入庫服務代碼。
在計算設備100中,系統阻攔某些存儲器訪問,同時允許其他的存儲器訪問。存儲器訪問可以是讀取存儲器的請求、訪問存儲器的請求、或是在特定存儲器位置執行代碼的請求。在附圖中,對角實線代表存儲器訪問。進程對分配給該進程的存儲器的存儲器訪問通常是允許的。由於進程A的存儲器訪問針對的是分配給進程A的存儲器塊208,因此存儲器訪問110是允許的。
作為選擇,由於存儲器塊116並未分配給進程A,而是僅僅分配給了進程B,因此,進程A對存儲器塊116的存儲器訪問112被阻攔。由於存儲器塊102被分配給了進程A和進程B,因此,任何一個進程都可以訪問共享存儲器塊102中的存儲器。
這種存儲器保護方法是基於將存儲器塊分配給特定進程以及防止一個進程訪問並非分配給該進程的存儲器塊的,該方法被稱為基於進程的存儲器保護。基於進程的存儲器保護可以由專用的處理器、總線、寄存器以及表格來提供援助,以便減少用於實現基於進程的存儲器保護的開銷。
每一個進程以及與之關聯的存儲器都是上下文(context)。當計算設備掛起一個進程並且激活第二個進程的時候,進行上下文切換。上下文切換會導致某些耗時的開銷成本,這些開銷成本關聯於清洗緩衝器、增加的高速緩存缺失、將頁存入次級存儲裝置、從次級存儲裝置中恢復頁面以及類似的活動。
圖2是例示依照本發明控制計算設備中的存儲器訪問的裝置的一實施例的示意框圖。圖2描述的是計算設備200。進程A和進程B正在多任務處理環境中在計算設備200上運行。存儲器塊204、206以及208分配給了進程A,而存儲器塊210、212和214被分配給了進程B。存儲器塊202是在進程A與B之間共享的。
圖2還描述了本發明的關鍵組件之一——子上下文。子上下文是存儲器的邏輯群組。子上下文可以包括一個或多個存儲器塊。然而,任何特定的存儲器位置只可以被包括在一個子上下文中。對角虛線例示了將存儲器塊分配給子上下文。如虛線所示,子上下文220包括存儲器塊202。即使在進程A與B之間共享該存儲器塊202,但該存儲器塊202並未與任何其他子上下文共享。子上下文222包括存儲器塊204和206。子上下文224包括存儲器塊208和214。
在當前的代碼執行點指向處於與子上下文相關聯的存儲器塊內部的存儲器地址之時,給定子上下文是有效的。舉例來說,如果計算設備當前正在執行存儲塊204中存儲的代碼,那麼有效子上下文230是子上下文222。在代碼執行點的線程移動到另一個並非分配給所述有效子上下文的存儲器塊之時,那麼該有效子上下文改變為與包含當前代碼執行點的存儲器塊相關聯的子上下文。舉例來說,如果處理器啟動位於存儲器塊208中的代碼的處理,那么子上下文224將會成為有效子上下文。
雖然這種基於進程的存儲器保護方案可以與本發明並行或者作為本發明的一部分而繼續工作,但是本發明引入了由計算設備強制執行的附加存儲器保護規則。一般來說,藉助本發明可以阻止有效子上下文訪問不與所述有效子上下文相關聯的存儲器。舉例來說,由於有效子上下文222正訪問的是其自身子上下文內部的存儲器,因此本發明允許存儲器訪問234。
然而,由於沒有將存儲器塊202分配給有效子上下文222,因此本發明阻止有效子上下文222對存儲器塊202的存儲器訪問232。與此相反,所述存儲器塊202被分配給子上下文220。
該圖例示了將基於進程的存儲器保護與基於子上下文的存儲器保護的結合。在所示的示例中,如果有效進程A在執行存儲器訪問234時是有效進程,那麼基於進程的存儲器保護將會允許該訪問。然而,如果進程B在執行存儲器訪問234時是有效的,那麼基於進程的保護將會阻攔存儲器訪問234。通過將其結合使用,這兩種存儲器保護方案可以阻攔存儲器訪問。
本發明包括覆蓋處理,以便允許有效子上下文訪問第二子上下文中的存儲器。目標子上下文或是經特許的子上下文可以創建權限映射,以便允許訪問方(accessor)的子上下文訪問分配給目標子上下文的存儲器。舉例來說,子上下文220可以創建映射,由此允許子上下文222對子上下文220進行讀取訪問。這種權限映射將被存儲在子上下文映射模塊308中(參見圖3)。通過恰當地執行這種權限映射,將允許存儲器訪問232用於只讀。
可以創建用於讀取、寫入和執行權限的權限映射。讀取權限映射將允許訪問方子上下文讀取與目標子上下文相關聯的數據。同樣,寫入權限映射將允許訪問方子上下文寫入與目標子上下文相關聯的數據。執行權限映射將允許訪問方子上下文在目標子上下文中執行代碼。當然,由於代碼執行點將會移動到目標子上下文,因此,代碼在目標子上下文中的執行將會導致有效子上下文切換到目標子上下文。在下文中將會參考圖3來描述另一種用於控制子上下文間的程序調用的方式。
此外,在某些實施例中,權限映射可以是可遷移的(transitive)。如果存在允許子上下文A訪問子上下文B的映射並且還存在允許子上下文B訪問子上下文C的映射,那么子上下文A訪問子上下文C的隱性映射是允許的。然而,並非意味著相反的權限映射。在沒有明確映射的情況下,從A到B的權限映射並不意味著從B到A的映射是得到許可的。
圖3描述的是本發明的裝置實施例300的主要組件的邏輯表示。裝置300包括控制模塊302、子上下文存儲器關聯模塊306以及子上下文映射模塊308。子上下文映射模塊308的某些部分可以作為子上下文入口點模塊310來實現。
子上下文存儲器關聯模塊306提供了一種用於追蹤哪些存儲器塊與給定子上下文相關聯的工具。這可以採用多種方式實現。該工具可以作為列舉了計算設備中的所有子上下文以及相關聯的存儲器塊的表格來實現。該工具也可以通過在每一個頁表條目中創建附加欄位來實現。所述附加欄位將標識相關聯頁面所屬的子上下文。如這兩個示例所示,子上下文存儲器關聯模塊可以作為緊密集成的對象或是作為鬆散耦合的機制來實現。
子上下文映射模塊308保持了權限映射列表。如上所述,權限映射規定了哪些子上下文可以訪問與目標子上下文相關聯的存儲器。舉例來說,權限映射存儲映射到目標子上下文T的訪問方子上下文A,其中所述子上下文A具有相關聯的權限掩碼M(A,T,M)。這種條目允許子上下文A依照權限掩碼M所規定的權限來訪問子上下文T中的存儲器。
存儲器訪問包括讀取、寫入和執行訪問。通常,權限映射是由目標在子上下文映射模塊中註冊的。然而,由作業系統進行註冊或者由特殊的經特許子上下文進行註冊也是允許的。
此外,子上下文映射表的執行映射部分可以作為子模塊來實現,所述子模塊被顯示為子上下文入口點模塊310。子上下文入口點模塊310保持了用於子上下文之間的代碼執行的權限映射列表。
在一實施例中,子上下文入口點模塊為每一個子上下文保持了入口點列表。入口點條目存儲訪問方子上下文A、目標子上下文T以及入口點地址X(A->T,X)。條目(A->T,X)允許訪問方子上下文A在目標子上下文T中在地址X處執行入口點。入口點地址X可以作為單個入口點地址來規定,或者作為地址的範圍來規定。然而,將入口點限制成單個地址可以提供更高的安全級別。與其他權限映射一樣,只有目標子上下文或經特許的子上下文才可以在該表中為給定的目標子上下文創建條目。
控制模塊302監視存儲器訪問以及子上下文間的代碼執行,並且強制實施基於子上下文的存儲器保護。在某些實施例中,控制模塊可以包括當前的子上下文引用320,並且可以包括先前的子上下文引用322。
控制模塊可以通過檢測子上下文失效來監視存儲器訪問。與頁失效相同,子上下文失效是在當前子上下文嘗試訪問當前子上下文之外的存儲器的時候出現的。這可以採用硬體或軟體形式來實現。
在本發明的一實施例中,子上下文實現檢測是以軟體形式實現的。控制模塊為當前子上下文中未包括的所有頁修改頁權限,由此將為對當前子上下文之外的頁的訪問生成頁失效。對不與當前子上下文相關聯的頁的存儲器訪問導致頁失效,所述頁失效由控制模塊處理。然後,該控制模塊檢查子上下文映射模塊以及子上下文入口點模塊中的條目,以便確定是否應該忽略失效。如果訪問被允許,那麼控制模塊將執行過程傳遞到頁失效處理器,以確保基於進程的存儲器保護同樣允許所述訪問。如果訪問被拒絕,則阻止所述子上下文訪問所請求的存儲器。
在本發明的另一實施例中,通過向CPU添加附加寄存器,並且修改存儲器保護邏輯來包括對於子上下文間的訪問的檢查,而以硬體方式來實現控制模塊。子上下文存儲器關聯模塊306是作為頁表的各個條目中的新欄位來實現的,其中所述欄位與每一個存儲器頁相關聯。存儲器頁被分配給子上下文,而子上下文關聯被記錄在頁表中。
本領域技術人員將會了解,依照本領域中當前已知的技術,控制模塊302、子上下文存儲器關聯模塊306以及子上下文映射模塊308可以用硬體、軟體或兩者相結合而實現。同樣,子上下文間的執行保護可以作為子上下文映射模塊308的讀取或寫入訪問保護的一部分來實現,或者可以作為子上下文入口點模塊310來實現,還可以作為子上下文映射模塊310的子模塊來實現。
在某些傳統的系統中,虛擬存儲器地址由頁表或轉換後備緩衝器轉換成物理地址。某些系統將與當前頁相關聯的進程的進程ID存儲為頁表的相應記錄中的欄位。在對存儲器的請求期間,地址轉換邏輯將當前進程ID與所請求頁的頁表條目中存儲的進程ID相比較。如果進程ID不匹配,則生成異常。
同樣,依照本發明的一實施例,地址轉換邏輯將頁表中的子上下文ID與有效子上下文中的子上下文ID相比較。如果這二者不匹配,並且在子上下文映射模塊中不存在權限映射,則生成子上下文存儲器異常,由此阻止對被請求的存儲器進行訪問。
控制模塊邏輯可以用軟體、硬體或是這兩者相結合而實現。同樣,子上下文存儲器關聯模塊306、子上下文映射模塊308以及子上下文入口點模塊310也可以用軟體、硬體或是這兩者相集合而實現。
圖4描述在子上下文映射模塊308以及子上下文入口點模塊310中存儲的欄位的一實施例的更詳細的邏輯表示。所示的子上下文映射模塊具有三列,分別是目標子上下文、訪問方子上下文以及權限掩碼。對子上下文間的存儲器訪問而言,控制模塊302(參見圖3)檢查子上下文映射模塊,以便確定是否存在用於目標-訪問方對的條目。在所描述的表格中的第一個條目允許子上下文A對子上下文T進行讀取和寫入的訪問。第二個條目允許子上下文B對子上下文T進行讀取、寫入和執行操作的訪問。而第三個條目允許子上下文C對子上下文A1進行只讀的訪問。最後,第四個條目允許子上下文A1對子上下文T1進行只讀訪問。
注意,在本發明的某些實施例中,子上下文的權限可以是可遷移的。因此,在目標和訪問方列中同時出現了一個子上下文的基礎上,可以允許可遷移的訪問。在所示的示例中,C可以訪問A1,並且A1可以訪問T1。由於這兩個條目都允許只讀訪問,因此C將同樣能夠對T1進行只讀訪問。
同樣,子上下文入口點模塊310描述入口點模塊310的一實施例。顯示了三列目標子上下文、訪問方子上下文以及入口點地址或地址的範圍。第一個條目允許子上下文A調用子上下文T中的單個地址0×FA00002B。第二個條目允許子上下文B調用子上下文T中的地址的範圍。第三個條目允許子上下文C調用子上下文A1中的單個的入口點,而第四個條目允許子上下文A1調用子上下文T1中的任何地址。
注意,子上下文A1作為目標子上下文而被列舉在一個條目中,並且作為訪問方子上下文被列舉在另一個條目中。由於某些子上下文實現方式的可遷移特性,子上下文C將同樣能夠執行子上下文T1中的任何代碼位置。在某些實現方式中,如果在子上下文映射模塊308中配置了類似的可遷移權限,那麼相同的情況對數據訪問而言也是適用的。
這些附圖僅僅用於說明目的。對本領域技術人員來說,用於合併條目以及優化表格中的搜索的各種優化處理都將是顯而易見的。
後續的示意流程圖主要是作為邏輯流程圖來闡述的。同樣,所描述的順序和所標記的步驟表示的是所給出的方法的一實施例。還可以設想其他的步驟和方法,這些步驟和方法在功能、邏輯或效果方面與所述方法中的一個或多個步驟或是其某些部分是等同的。此外,所使用的格式和符號被提供用於說明方法的邏輯步驟,並且不應該被理解成是對本方法的範圍進行限制。雖然在流程圖中可以使用各種箭頭類型和線條類型,但是這些箭頭類型和線條類型不應該被理解成是對相應方法的範圍進行限制。實際上,某些箭頭或其他連接符可以用於僅僅指示本發明的邏輯流程。舉例來說,箭頭可以表示處於所述方法中被列舉的步驟之間的未規定持續時間的等待或監視周期。另外,產生特定方法的順序可以嚴格符合所顯示的相應步驟的順序,也可以不符合。
圖5是描述用於實現受保護的存儲器虛擬子上下文的方法500的流程圖。在一實施例中,方法500是作為遵循信號承載媒體中包含的指令的結果來執行的,其中所述信號承載媒體有形地包含機器可讀指令的程序。操作集合500包括開始502、將存儲器塊與子上下文相關聯504、存儲訪問權限506、追蹤有效子上下文508、追蹤存儲器訪問510、確定是否允許存儲器訪問512、阻攔或允許訪問516和514、返回504518以及結束520。
關聯存儲器塊504可以作為計算設備初始化的一部分來啟動,並在新程序啟動和終止的時候繼續進行。通常,可以執行新程序的有效子上下文從計算設備請求存儲器資源,並且將這些存儲器資源分配給特定的子上下文。而參考圖3所描述的子上下文存儲器關聯模塊306可以作為單個表格來實現,或者可以作為引用來實現,其中所述引用作為頁表中各個條目的欄位而被存儲。同樣,所述關聯可以採用不同的方式來實現,這對本領域技術人員而言是顯而易見的。
將存儲器與子上下文相關聯的處理可以由計算設備或是有效子上下文來控制。然而,有效子上下文通常將無權對先前分配給其他子上下文的存儲器的關聯進行修改。
存儲訪問權限506會在圖3的子上下文映射模塊308中創建條目。每一個條目都會為子上下文間的存儲器訪問創建覆蓋選項。通常,有效子上下文會將自身作為目標子上下文而在表格中創建條目,這樣允許另一個子上下文充當訪問方子上下文。此外,經特許的子上下文可以為其他的目標子上下文分配權限。
追蹤有效子上下文508是由控制模塊執行的一個功能。在實際的實現方式中,控制模塊的這個功能可以作為硬體寄存器或軟體模塊來實現。通過識別當前執行線程以及通過隨後確定哪個子上下文與包含了當前正被執行的代碼的存儲器塊相關聯,可以確定有效子上下文。
追蹤存儲器訪問510包括對所有的子上下文間的存儲器訪問進行監視。這可以採用軟體或硬體的方式來實現。在某些實現方式中,可以包括安裝異常處理器,所述異常處理器會在任何時間運行不與所訪問的有效子上下文相關聯的存儲器頁。在另一實現方式中,訪問控制可以由專用硬體來處理。
確定是否允許子上下文間的存儲器訪問512包括在子上下文模塊中定位與有效子上下文、目標子上下文以及存儲器訪問類型相對應的條目。如果存在用於當前存儲器訪問的條目,則允許所述存儲器訪問514。如果不存在用於當前存儲器訪問請求的條目,則阻攔所述存儲器訪問516。
最後,該處理通過返回(518)到504而繼續進行。在實際的實現方式中,這些操作可以並行執行,也可以取決於計算設備的體系結構而以不同於這裡所示的順序執行。
圖6描述服務子上下文訪問的一實施例中的進程與子上下文的邏輯關係600。所述邏輯關係600包括三個進程進程A、進程B以及進程C。關係600還包括子上下文620。包含了可執行代碼的存儲器塊624與子上下文620相關聯。沒有其他的子上下文或進程與子上下文620相關聯。
此外,邏輯關係600還包括子上下文入口點模塊610。入口點模塊610包含入口點條目,該入口點條目的目標子上下文與子上下文620相對應。所述入口點還包括代碼入口點以及設置成星號「*」的訪問方子上下文。由於該入口點進行了編碼,因此該入口點允許任何其他子上下文調用子上下文620中的入口點記錄中所列舉的入口點地址。
所述邏輯關係600例示了一種可使用本發明來實現可以由不可信代碼訪問的服務庫的方法。進程A可以調用存儲器塊624中存儲的系統級代碼。本發明允許進程A僅僅調用入口點模塊610中註冊的經過證實的代碼入口點。由於執行線程是在進程A中繼續進行的,因此不需要上下文切換,這節省了通常與對系統庫的調用相關聯的上下文切換開銷。
進程B和進程C還可以在同一個入口點上調用服務庫例程。如果服務子上下文代碼是以可重入方式寫入的,那麼不需要包括信號量(semaphore)或其他阻攔邏輯。然而,如果以不可重入的方式寫入服務子上下文代碼,那麼可以使用阻攔機制來防止一個以上的進程同時使用所述代碼。
此外,位於存儲器塊624中的服務子上下文代碼可以被配置成對從中調用該服務上下文代碼的子上下文進行訪問。舉例來說,與在進程A中運行的有效子上下文相關聯的代碼及數據段可以為子上下文620所訪問。通常,執行調用的子上下文的代碼和數據段是可以被目標子上下文訪問的,但是並不總是這樣。這樣允許存儲器塊624中的系統庫代碼更新執行調用的子上下文中的數據結構,而不會產生上下文切換。這樣,在使用本發明來實現系統服務調用時,避免了兩次上下文切換。同樣,執行調用的代碼可以是不可信的用戶應用。在某些情況下,軟體設計人員可能希望對目標子上下文進行限制,以免其訪問執行調用的子上下文中的數據或代碼。本發明允許軟體設計人員做出這種決定。
圖6例示了本發明的另一個方面。在圖6中,進程A、進程B以及進程C各自引用了與子上下文620相關聯的共享存儲器段。通常,每一個進程都可以使用不同的虛擬地址來引用共享存儲器段中的相同位置。然而在本發明的一實施例中,用於訪問與特定子上下文相關聯的某些存儲器段的虛擬地址必需是相同的。因此,進程A、進程B以及進程C將使用相同的虛擬地址來訪問存儲器塊624中的相同存儲器位置。
由於某些計算機體系結構中的可尋址存儲器數量有限,因此有必要重複使用虛擬地址。使用相同的虛擬地址來定址不同存儲器位置的兩個子上下文被稱為「重疊」子上下文。在缺少可用地址空間的很多實現方式中將需要所述重疊子上下文;其他的實現方式有可能具有足夠大但並不需要的地址空間。例如,32位和64位體系結構分別是典型地缺少地址空間以及地址空間富裕的當前實現方式示例。
本領域技術人員將會理解,系統設計人員通常分配了一部分將使用非重疊虛擬地址來進行訪問的存儲器。無論哪一個進程使用虛擬地址,來自這個非重疊地址組的同一個虛擬地址都會映射到同一個物理地址。通常,系統設計人員會為系統代碼分配非重疊存儲器,並且會為應用代碼分配重疊存儲器地址。
再次參考圖6,通過分配來自非重疊存儲器的服務上下文,能夠確保來自應用進程(例如進程A、進程B和進程C)的調用將全部使用相同虛擬地址來訪問存儲器塊624。這樣一來,用於轉換虛擬地址的頁表沒有必要被更新來適應子上下文間的服務調用。
此外,存儲器塊624可以用於進程間的通信。存儲器塊624可以是從虛擬地址空間的非重疊部分分配的。子上下文620可以映射到進程A、進程B和進程C。這樣一來,每一個進程都將能夠使用相同的虛擬地址來訪問存儲器塊624。這三個進程可以使用存儲器塊624來傳遞進程間的通信。
相同的進程間通信可以藉助重疊地址來實現,但是非重疊地址將會極大地減少用於在兩個進程之間傳遞數據的開銷。在具有充足的可用虛擬地址可用的計算機體系結構中,理想地是分配所有來自非重疊地址空間的存儲器。
圖7a和7b描述使用了本發明的兩種可能的實現方式。在圖7a中,三個線程730、732和734中的每個都是在一個子上下文中運行的。如果說線程在子上下文中運行意味著包含了用於該線程的可執行代碼的代碼段與這個子上下文相關聯。在這個代碼正被執行的時候,所述子上下文是有效子上下文,並且所述線程在這個子上下文中運行。在圖7a中,用於每一個線程的代碼與子上下文D相關聯,並且每一個線程都是在進程720的時間片中運行的。由於每一個線程都是在同一個子上下文中運行的,因此不會有子上下文存儲器保護來阻止線程730訪問任何一個數據塊736、737或738。
與之相反,圖7b描述三個子上下文E、F和G。線程740、742和744是在其相應的子上下文E、F和G中運行的。由於數據塊746與線程740的子上下文相關聯,因此線程740可以訪問數據塊746。然而,由於數據塊747和748不與線程740的子上下文相關聯,因此線程740被阻止訪問數據塊747和748。
在沒有存儲器保護的情況下,線程通常被稱為輕量進程。在本發明的這個實施例中,為線程提供了受保護的存儲器,同時不會產生進程切換的開銷。每一個線程都是在進程750的進程控制下運行的。在未顯示的另一實施例中,運行在相同子上下文中的線程也可以在不同進程之中運行。
本發明也可以採用其他的特定形式來實現,而不脫離本發明的實質或是其基本特性。所描述的實施例在所有方面都被視為僅僅是描述性而不是限制性的。因此,本發明的範圍是由權利要求而不是先前的說明書所指示的。處於權利要求的等價物的含義和範圍以內的所有變化都將被包含在其範圍以內。
權利要求
1.一種用於在計算設備中控制子上下文之間的存儲器訪問的裝置,該裝置包括子上下文存儲器關聯模塊,被配置對存儲器塊到子上下文分配進行管理;子上下文映射模塊,被配置保持子上下文間的存儲器訪問權限;以及控制模塊,被配置阻止與一子上下文相關聯的計算機代碼對分配給另一子上下文的存儲器塊的存儲器訪問,除非所述子上下文間的存儲器訪問權限允許所述存儲器訪問。
2.如權利要求1所述的裝置,其中所述存儲器訪問是從包括存儲器讀取、存儲器寫入以及指令加載的組中選出的。
3.如權利要求1所述的裝置,其中所述子上下文映射模塊還包括子上下文入口點模塊,該模塊被配置保持用於子上下文的已註冊入口點以及子上下文間的入口點權限,所述控制模塊進一步被配置阻止未使用已註冊子上下文入口點的子上下文間的代碼調用,其中所述已註冊子上下文入口點的權限允許當前的子上下文調用已註冊入口點的子上下文。
4.如權利要求3所述的裝置,其中所述計算設備以硬體形式實現用於所述子上下文映射模塊的高速緩存、用於入口點表的硬體高速緩存、以及用於與當前代碼執行點相關聯的子上下文的寄存器。
5.如權利要求1所述的裝置,還包括頁表,該頁表被配置分配來自隨機存取存儲器的存儲器頁,其中所述控制模塊還阻止進程對並未分配給該進程的存儲器位置的存儲器訪問。
6.如權利要求1所述的裝置,其中所述子上下文存儲器關聯模塊還被配置將多個進程可以訪問的存儲器塊與子上下文相關聯。
7.如權利要求6所述的裝置,其中單個虛擬地址被配置允許多個進程訪問所述存儲器塊。
8.如權利要求6所述的裝置,其中所述子上下文映射模塊中的存儲器訪問權限還被配置允許使用所述存儲器塊的多個進程之間的進程間通信。
9.如權利要求6所述的裝置,其中所述子上下文映射模塊中的存儲器訪問權限還被配置允許在多個進程中運行的多個線程訪問單個子上下文中的存儲器。
10.如權利要求6所述的裝置,其中所述子上下文存儲器映射模塊中的存儲器訪問權限還被配置允許一子上下文中的應用直接調用系統級別庫子上下文中,由此不需要進行上下文切換。
11.一種用於控制子上下文之間的存儲器訪問的系統,該系統包括計算設備,包括中央處理單元;以及可以被所述中央處理單元訪問的隨機存取存儲器;子上下文存儲器關聯模塊,被配置保持存儲器塊到子上下文的分配;子上下文映射模塊,被配置保持子上下文間的存儲器訪問權限;以及控制模塊,被配置阻止與一子上下文相關聯的計算機代碼對分配給另一子上下文的存儲器塊的存儲器訪問,除非所述子上下文間的存儲器訪問權限允許所述存儲器訪問。
12.如權利要求11所述的系統,其中受到所述控制模塊阻止的存儲器訪問是從包括存儲器讀取、存儲器寫入以及指令加載的組中選出的。
13.如權利要求11所述的系統,所述子上下文映射模塊還包括子上下文入口點模塊,該模塊被配置保持用於子上下文的已註冊入口點以及子上下文間的入口點權限,所述控制模塊進一步被配置阻止未使用已註冊子上下文入口點的子上下文間的代碼調用,其中所述已註冊子上下文入口點的權限允許與一子上下文調用代碼相關聯的代碼,所述一子上下文調用代碼與第二子上下文相關聯。
14.一種信號承載媒體,該媒體有形地包含了機器可讀指令程序,所述機器可讀指令程序可由數字處理裝置執行,以便執行一組操作來控制子上下文之間的存儲器訪問,所述操作包括將存儲器塊分配給特定的子上下文;追蹤關聯於第一子上下文的計算機代碼對關聯於第二子上下文的存儲器塊所進行的存儲器訪問;以及依照子上下文映射模塊中存儲的子上下文間存儲器訪問權限來阻止所述存儲器訪問。
15.如權利要求14所述的信號承載媒體,其中阻攔存儲器訪問阻攔的是從包括存儲器讀取、存儲器寫入以及指令加載的組中選出的訪問。
16.如權利要求14所述的信號承載媒體,其中所述操作還包括存儲用於子上下文的已註冊入口點以及子上下文間的入口點權限;以及阻止執行未使用已註冊子上下文入口點的子上下文間的代碼調用,其中所述已註冊子上下文入口點的權限允許與第一子上下文相關聯的代碼調用與第二子上下文相關聯的代碼。
17.如權利要求14所述的信號承載媒體,其中所有所述操作都用軟體實現。
18.如權利要求14所述的信號承載媒體,其中所述子上下文映射模塊被集成在數字處理裝置的中央處理單元中。
19.一種部署計算基礎設施的方法,包括將計算機可讀代碼集成到計算系統中,其中所述代碼結合所述計算系統能夠執行以下操作將存儲器塊分配給特定的子上下文,並將所述分配存儲在子上下文存儲器關聯模塊中;將子上下文間的存儲器訪問權限存儲在子上下文映射模塊中;追蹤關聯於第一子上下文的代碼對關聯於第二子上下文的存儲器塊所進行的存儲器訪問;以及依照所述子上下文間存儲器訪問權限來阻止所述存儲器訪問。
20.如權利要求19所述的方法,其中所述代碼結合所述計算系統還能夠執行以下操作保持用於每個子上下文的一組已註冊入口點以及相關聯的子上下文間的入口點權限;以及阻止關聯於一子上下文的計算機代碼對關聯於另一子上下文的計算機代碼的代碼調用。
全文摘要
一種用於在計算設備中控制子上下文之間的存儲器訪問的裝置、系統和方法。所述裝置、系統和方法實現了關聯存儲器塊組的子上下文。所述裝置、系統和方法保持用於子上下文間的存儲器訪問的權限映射。控制模塊監視所有的子上下文間的存儲器訪問,並且阻止那些不存在權限映射的訪問。
文檔編號G06F9/46GK1924815SQ200610121998
公開日2007年3月7日 申請日期2006年8月30日 優先權日2005年8月31日
發明者R·L·路易斯 申請人:國際商業機器公司