欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

面向目標的主機系統(tǒng)的制作方法

文檔序號:6408450閱讀:250來源:國知局

專利名稱::面向目標的主機系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及面向目標的計算環(huán)境,尤其涉及為包括主機支持的過程操作系統(tǒng)提供面向目標的界面的系統(tǒng)和方法。本發(fā)明的部分內(nèi)容受版權(quán)保護。版權(quán)擁有者允許該部分內(nèi)容在專利局的文檔案卷中出現(xiàn)但保留其他權(quán)利。面向目標的技術(shù)(OOT)通常包括面向目標的分析(OOA),面向目標的設計(OOD),以及面向目標的編程(OOP),該技術(shù)在軟件開發(fā)過程中作為最重要的新興技術(shù)之一而贏得了一席之地。OOT已經(jīng)開始證明其有能力在編程及程序維護中導致巨大產(chǎn)出和增長,通過產(chǎn)生一個把數(shù)據(jù)以及操作在數(shù)據(jù)上的過程相結(jié)合而生成的目標的環(huán)境,并采用命令目標與另一目標僅通過完善定義的信息通路進行通信的法則,面向目標的技術(shù)去除了大量復雜的傳統(tǒng)的面向過程的編程。以下的段落表達了OOT某些更重要方面的簡述。有關(guān)OOT的詳細敘述在許多公開發(fā)行的文章中均有記載,這些文章包括GradyBooch所著的“面向目標的應用設計(Ob-ject—OrientedDesignwithApplications)”,該書由本杰明/酷明出版公可(Benjamin/CummingsPublishingCompany)在1991年出版,以及由DonaldG.Firesmith所著的“面向目標的要求分析以及邏輯設計(Object—OrientedRequire-mentsAnalysisandLogicalDesign)”,該書由JohnWiley&Sons公司在1993年出版。OOT的基本部件為目標。一個目標包括(且其特征在于)一組數(shù)據(jù)(也稱為屬性)以及一組操作(亦稱為方法),該組操作可在數(shù)據(jù)上進行操作。通常,一個目標的數(shù)據(jù)只可經(jīng)由該目標的方法的操作而予改變。通過把一信息傳送給目標(該過程稱為信息傳送)的方式便可調(diào)用在一個目標中的方法。該信息指定一個方法名以及自變量表。當目標接收到該信息時,與所命名方法相關(guān)的碼便和與自變量表中的對應值關(guān)聯(lián)的方法的形式參數(shù)一起被執(zhí)行。在OOT中的信息傳遞以及方法與面向過程的軟件環(huán)境中的過程和過程調(diào)用類似。但是,過程操作是修改并返回傳送的參數(shù),方法操作則是修改相關(guān)目標的內(nèi)部狀態(tài)(通過修改包含于其中的數(shù)據(jù))。在目標中的方法和數(shù)據(jù)的結(jié)合稱之為封裝。封裝的最大好處之一在于任何目標的狀態(tài)僅由已完善定義并與該目標相關(guān)的方法予以修改。當目標的行為限于這種完善定義區(qū)域及界面時,目標中的改變(即碼修改)對系統(tǒng)中的其他目標和單元的影響是最小的。面向目標設計和編程良好封裝的第二個好處則在于所得到的碼較之常規(guī)技術(shù)生成的碼更模塊化并更易于維護。對目標封裝這一事實所產(chǎn)生的另一重要好處是數(shù)據(jù)抽象。抽象是一種處理。通過抽象,行為被結(jié)合而細節(jié)被去除,從而使復雜概念及結(jié)構(gòu)易于理解。從軟件觀點來看,抽象在許多方面與硬編碼相反,試想一個軟件視窗若一個圖形用戶界面(GUI)程序的每個視窗的每個細節(jié)都出現(xiàn)在用戶的屏幕上并且必須將其所有狀態(tài)和行為硬編碼成一程序,則該程序以及包含該程序的視窗會失去幾乎所有的靈活性。通過把視窗的概念抽象成為一個視窗目標,面向目標的系統(tǒng)使得程序員只考慮生成一個唯一特定視窗的那些特定方面。由所有視窗共享的行為例如被拖曳和移動的能力,可由所有視窗目標所共享。這導致了OOT的另一基本部件,即類別。一個類別包括一組數(shù)據(jù)屬性及一組可在數(shù)據(jù)屬性上進行的操作(即方法)。每個目標是某些類別的一個實例。作為封裝和抽象的一個自然結(jié)果,OOT支持繼承。一個類別(稱為子類別)可從另一類別(稱為主類別,母類別等等)中衍生而來。其中,子類別繼承了主類別的數(shù)據(jù)屬性和方法。通過加入置換主類別的數(shù)據(jù)和/或方法或加入新數(shù)據(jù)屬性和方法的編碼的方式,該子類別可以限定該主類別,如此繼承表達了一種操作,當子類別為更高級的限定而生成時,這種操作可使抽象更為具體。繼承是對OOP提供的高效編程的主要貢獻之一。繼承使開發(fā)者得以將其用于生成應用程序的新編碼數(shù)量減至最小。通過提供一個特定任務所需的大部分功能性,在繼承層級中的類別為程序員的程序設計和生成提供了一個高起點。面向目標的環(huán)境的一個潛在缺陷是目標增生,其必須展示類似的行為以及哪個目標會用作一個單獨信息名以說明。例如,考慮一個面向目標的圖形環(huán)境若一個Draw信息送到一個Rectangle目標,則該Rectangle目標通過繪制四邊形而予以響應。另一方面,一個Triangle目標的響應則是繪制一個三邊形。理想地,送出Draw信息的目標應并不意識信息所尋址的目標類型,也不管接收信息的目標將如果響應以繪制出其本身。若可達到這一理想狀況,則在稍后加入新的形狀類型(如六邊形)然后編碼送出完全不變的Draw信息就相當簡單的了。通常,面向過程的語言會導致混亂。在OOT環(huán)境中,多形性(Polymorphism),是指在面向目標的編程中,通過繼承而關(guān)聯(lián)的不同類別的目標唯一地響應相同成員功能調(diào)用的操作處理)的概念可使其完滿解決而無損害。作為一個結(jié)果,方法可被編寫只是概括地告知其他目標做某些事情而無需要求送出任何關(guān)于接收目標理解該信息的方式的知識。無論是面向目標,面向過程,及基于規(guī)則等的軟件程序,它們幾乎總是與操作系統(tǒng)交互以訪問操作系統(tǒng)提供的服務。例如,一個軟件程序可與操作系統(tǒng)交互以便對存儲器中的數(shù)據(jù)進行存取,接收與處理器故障相關(guān)的信息,與其他處理通信,或調(diào)度處理的執(zhí)行。大部分常規(guī)操作系統(tǒng)是面向過程的且包括本機過程界面。結(jié)果,這些操作系統(tǒng)所提供的服務只可用它們各自的過程界面定義的過程所訪問。若一個程序需要訪問過程操作系統(tǒng)之一提供的一個服務,則程序必須包括一個語句以進行適當?shù)牟僮飨到y(tǒng)過程調(diào)用。這與軟件程序為面向目標,面向過程,或基于規(guī)則等無關(guān)。如此,常規(guī)操作系統(tǒng)提供了面向過程的環(huán)境,其中要進行軟件開發(fā)和執(zhí)行。某些OOT的優(yōu)點在面向目標的程序在面向過程的環(huán)境中進行開發(fā)和執(zhí)行時會失掉。這是由于所有對過程操作系統(tǒng)的訪問都必須用操作系統(tǒng)的本機過程界面所定義的過程調(diào)用來實施。結(jié)果,由于不能充分利用類別、目標、以及其他OOT特性,與面向目標的程序關(guān)聯(lián)的某些模塊特性、可維護特性以及自使用特性便會失去。對該問題的一個解決方法是開發(fā)具有本機面向目標的界面的面向目標的操作系統(tǒng)。雖然這是一個最好的方案,但其現(xiàn)在這未能實用,因為需要修改所有主要過程操作的資源過于龐大,進而,對過程操作系統(tǒng)的修改會導致數(shù)以千計的面向過程的軟件程序無用。因此,所需的是一種可使面向目標的應用程序以面向目標的方式與具有本機過程界面的過程操作系統(tǒng)進行交互的處理。本發(fā)明是要提供一種使面向目標的應用程序以面向目標的方式對具有本機過程界面的過程操作系統(tǒng)進行訪問的系統(tǒng)和方法。該系統(tǒng)包括一個計算機以及在計算機中支持主機系統(tǒng)的存儲部件。存儲部件中存有一個編碼庫。該編碼庫包括實現(xiàn)一個面向目標的類別庫的計算機程序邏輯。該面向目標的類別庫包括相關(guān)的面向目標的類別,用于使應用程序以面向目標的方式訪問由操作系統(tǒng)提供的服務。面向目標的類別包括利用與操作系統(tǒng)的本機過程界面兼容的過程功能調(diào)用對操作系統(tǒng)進行訪問的方法。該系統(tǒng)還包括對面向目標的語句進行處理的裝置,這些面向目標的語句包含在應用程序中,并且通過執(zhí)行與其相應的類別庫產(chǎn)生的方法而由類別庫所定義。該類別庫最好包括(1)線索類別,該類別用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務從而產(chǎn)生,控制和獲取與線索有關(guān)的信息;(2)任務類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以便引用和控制任務,其中每個任務都表示一個分別與任務相關(guān)的線索的執(zhí)行環(huán)境;(3)虛擬存儲類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以訪問和操縱計算機中的虛擬存儲器;(4)內(nèi)部處理通信類別(IPC),用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務從而在應用程序在計算機運行時間執(zhí)行過程中與其他線索進行通信;(5)同步類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以與線索的執(zhí)行同步。(6)調(diào)度類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務從而調(diào)度線索的執(zhí)行;(7)故障類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以便處理系統(tǒng)和定義用戶的處理器故障(8)機器類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以定義和修改一個主機和處理器組。本發(fā)明的特性和優(yōu)點以后多種實施例的結(jié)構(gòu)和操作將結(jié)合附圖予以詳述。在附圖中,相同的數(shù)碼指示相同或功能相似的部件。圖1示出了一個計算機結(jié)構(gòu)的框圖,本發(fā)明的環(huán)繞程序(wrapper)操作于其中,圖2是展示本發(fā)明操作的高級流程圖。圖3是展示本發(fā)明操作的更詳細的流程圖;圖4是包括本發(fā)明的面向目標類別庫的編碼庫的框圖;圖5是本發(fā)明的線索和任務類別的類別圖;圖6是本發(fā)明的虛擬存儲類別的類別圖;圖7~9是本發(fā)明的內(nèi)部處理通信類別的類別圖;圖10是本發(fā)明的同步類別的類別圖;圖11是本發(fā)明調(diào)度類別的類別圖;圖12~15是本發(fā)明故障類別的烊別圖;圖16是本發(fā)明的主機和處理器組類別的類別圖;以及圖17示出了用于表示類別圖中的類別關(guān)系以及重要性的已知圖符。計算環(huán)境本發(fā)明提供了用于向具有本機過程界面的過程操作系統(tǒng)的提供面向目標的界面的系統(tǒng)和方法。本發(fā)明在一個具有過程操作系統(tǒng)的計算機結(jié)構(gòu)上模仿面向目標的軟件環(huán)境。尤其是,本發(fā)明提供了一種系統(tǒng)和方法,它們使面向目標的應用程序以面向目標的方式在應用程序在計算機中運行過程中對具有本機過程界面的過程操作系統(tǒng)進行訪問。本發(fā)明最好是應用程序于其中執(zhí)行的計算機的運行時間環(huán)境的一部分。在本專利申請中,本發(fā)明有時被稱為面向目標的環(huán)繞程序,因為其操作環(huán)繞于具有面向目標軟件層的過程操作系統(tǒng),以致面向目標的應用程序可以面向目標的方式訪問操作系統(tǒng)。圖1示出了一個計算機結(jié)構(gòu)102的框圖,本發(fā)明的環(huán)繞程序128和129操作于其中。在此要提請注意的是本發(fā)明交替地把環(huán)繞程序128,129與計算機結(jié)構(gòu)102相結(jié)合。計算機結(jié)構(gòu)102包括硬件部件103,例如RAM108和CPU106。CPU106可以是一個單獨的處理器,但最好是多個并行操作的處理器。計算機結(jié)構(gòu)102還包括與硬件部件103相連的外設。這些外設包括輸入設備(例如鍵盤,鼠標器,光筆等)數(shù)據(jù)存儲設備120(例如硬盤或軟盤)、顯示124以及打印機126。數(shù)據(jù)存儲設備120可與可擦除數(shù)據(jù)存儲介質(zhì)122(例如可擦除硬盤,盒式磁帶或軟盤)交互,其取決于所用數(shù)據(jù)存儲設備的類型。計算機結(jié)構(gòu)102還包括一個過程操作系統(tǒng)114,它有一未示出的本機過程界面。該過程界面包括被調(diào)用來訪問操作系統(tǒng)102提供的服務的過程功能。計算機結(jié)構(gòu)102還包括設備驅(qū)動器116,并可包括微指令碼(亦稱為固件)。如圖1所示,在執(zhí)行需要的功能時,設備驅(qū)動器116可與操作系統(tǒng)114相交互。應用程序130,132,134(以下將一步敘述)最好通過操作系統(tǒng)114而與設備驅(qū)動器116相交互,但亦可交替地直接與設備驅(qū)動器116交互。應注意的是操作系統(tǒng)114可代表基本上全功能的操作系統(tǒng),例如DOS和UNIX操作系統(tǒng)。但是,操作系統(tǒng)114可代表其他類型的操作系統(tǒng)。在本發(fā)明中,對操作系統(tǒng)114的唯一要求是具有本機過程界面的過程操作系統(tǒng)。操作系統(tǒng)114最好代表一個有限功能的過程操作系統(tǒng),例如由CMU開發(fā)的Mach微核心程序(micro—kernel),它是本領(lǐng)域已知技術(shù)。為說明之目的,本發(fā)明僅引用Machmicro—kernel,在本發(fā)明的最佳實施例中,計算機結(jié)構(gòu)102是IBM或IBM兼容計算機。在本發(fā)明的替換實施例中,計算機結(jié)構(gòu)102是一個蘋果計算機。環(huán)繞程序概述應用程序130,132,134最好在計算機102上并行操作,而且它們最好用于不同操作環(huán)境下。例如,應用程序130A和130B可操作于面向目標的環(huán)境程序。應用程序132操作于微軟視窗環(huán)境,IBMPS/2環(huán)境,或Unix環(huán)境下。正如本
技術(shù)領(lǐng)域
的一般技術(shù)人員所理解的,程序130A、130B和132不能直接與操作系統(tǒng)114交互,除非操作系統(tǒng)114實施在130A,130B和132可以操作的環(huán)境。例如,若程序132操作于IBMPS/2環(huán)境下,則其不能與操作系統(tǒng)114交互,除非該操作系統(tǒng)114是IBMPS/2操作系統(tǒng)(或兼容系統(tǒng))。若程序130A和130B操作于面向目標的環(huán)境,則其不能直接與操作系統(tǒng)114交互,因為操作系統(tǒng)有一過程界面。在圖1所示實例中,程序134操作于操作系統(tǒng)114生成的計算環(huán)境中,因此其可與操作系統(tǒng)114直接交互。環(huán)繞程序128是要為操作系統(tǒng)114提供具有面向目標的界面。環(huán)繞程序128使面向目標的程序130A和130B以面向目標的方式在計算機102執(zhí)行程序130A和130B的運行時間期間直接訪問過程操作系統(tǒng)114。環(huán)繞程序129的概念與之相似,其為操作系統(tǒng)114提供IBMPS/2界面,從而使程序132可以PS/2的方式直接訪問過程操作系統(tǒng)114(假設程序132操作于IBMPS/2環(huán)境下)。本發(fā)明的討論將限于環(huán)繞程序128,它為具有本機過程界面的過程操作系統(tǒng)提供了面向目標的界面。環(huán)繞程序128最好象存在RAM108中的編碼庫110一樣實施。編碼庫110也存在數(shù)據(jù)存儲設備120和/或數(shù)據(jù)存儲介質(zhì)122中。該庫110實現(xiàn)面向目標的類別庫402(見圖4)。根據(jù)本發(fā)明,面向目標的類別庫402包括相關(guān)的面向目標類別,用于使一個面向目標的程序(例如130A和130B)以面向目標的方式訪問操作系統(tǒng)114提供的服務。面向目標的類別包括具有與操作系統(tǒng)114的本機過程界面兼容的過程功能調(diào)用。由面向目標的類別庫402定義的面向目標的語句(例如調(diào)用類別庫402的至少一個方法的面向目標的語句)被插入到程序130以使程序30可以面向目標的方式在計算機102執(zhí)行程序的運行時間期間訪問操作系統(tǒng)服務。面向目標的類別庫402將在以下敘述。編碼庫110最好包括編譯過的可執(zhí)行計算機程序邏輯,該邏輯實現(xiàn)面向目標的類別402。編碼庫110的計算機程序邏輯不與應用程序鏈接。代之的是把編碼庫110的相關(guān)部分復制到運行時間期間的處理的可執(zhí)行尋址空間。這在下面將作更詳細解釋。由于編碼庫110的計算機程序邏輯不與應用程序相連,所以可在任何時刻對其進行修改而不必修改、重新編譯和/或重新連接應用程序(只要編碼庫110的界面不改變)。如上所述,本發(fā)明將參照Machmicro—kernel進行敘述,雖然用本發(fā)明來環(huán)繞其他操作系統(tǒng)亦屬于發(fā)明的范圍。Machmicrokernel為用戶提供了若干服務,它們按照下述范疇進行分組線索,任務,虛擬存儲器,內(nèi)部處理通信(IPC),調(diào)度,同步,故障處理,以及主機/處理器組處理。本發(fā)明的類別庫402包括一組用于每個Mach服務范疇的相關(guān)類別。參見圖4,類別庫402包括(1)線索類別(thread),是指使一個應用程序以面向目標的方式訪問操作系統(tǒng)的服務以產(chǎn)生、控制和獲得與線索有關(guān)的信息;(2)任務類別406,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以引用和控制任務,其中的每個任務代表一個分別與任務關(guān)聯(lián)的線索的執(zhí)行環(huán)境;(3)虛擬存儲類別408,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以訪問和操縱計算機中的虛擬存儲器。(4)IPC類別410,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以便在程序在計算機中執(zhí)行的運行時間期間與其他處理通信。(5)同步類別412,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以同步執(zhí)行線索;(6)調(diào)度類別414,用于使應用程序以面向目標的方式訪問操作系統(tǒng)服務以調(diào)度線索的執(zhí)行;(7)故障類別,用于使程序以面向目標的方式訪問操作系統(tǒng)服務以處理系統(tǒng)和定義用戶的處理故障;以及(8)機器類別418,用于使程序以面向目標的方式訪問操作系統(tǒng)服務以定義和修改一個主機和處理器組。類別庫402可包括用于Mach將來提供的其他服務范疇的其他類別。例如,正在為Mach開發(fā)保密服務。因此,類別庫402也可包括保密類別420,用于使應用程序以面向目標的方式存取操作系統(tǒng)保密服務。如所知曉的,包括在類別庫402中的類別的準確數(shù)量和類型取決于基本操作系統(tǒng)的實現(xiàn)。最佳實施例的操作綜述本發(fā)明的操作將結(jié)合圖2予以綜述。圖2示出了本發(fā)明高級操作流程圖202。本發(fā)明是根據(jù)在計算機結(jié)構(gòu)102上執(zhí)行面向目標的應用程序130A的全過程而予敘述的。在步驟206中(它是流程圖202的第一步驟),對操作系統(tǒng)114提供的服務進行訪問的一條面向目標的語句在計算機102執(zhí)行程序130A期間定位在程序130A中。該面向目標的語句由面向目標的類別庫402定義。例如,面向目標語句可參照一個由類別庫402的一個類別定義的方法。下述步驟敘述了計算機結(jié)構(gòu)102執(zhí)行該語句的方式。在步驟208中,面向目標的語句被譯成與操作系統(tǒng)114的本機過程界面兼容并與該面向目標的語句對應的一個過程功能調(diào)用。在步驟208處,該語句被譯為實施該語句引用的方法并來自編碼庫110的計算機程序邏輯。如上所述,該方法包括至少一個與操作系統(tǒng)114的本機過程界面相兼容的過程功能調(diào)用。在步驟210中,來自步驟208的過程功能調(diào)用在計算機結(jié)構(gòu)102中執(zhí)行,從而導致操作系統(tǒng)114提供為了應用程序130A的服務。步驟210是由執(zhí)行步驟208中敘述的方法而實施的,從而導致調(diào)用過程功能調(diào)用。一個最佳實施例的操作參照圖3予以詳述。圖3示出了本發(fā)明的詳細操作流程圖302。進而,還根據(jù)在計算機結(jié)構(gòu)102上執(zhí)行面向目標的應用程序130A的全程來描述本發(fā)明。尤其是,本發(fā)明根據(jù)在計算機結(jié)構(gòu)102上執(zhí)行的面向目標應用程序130A的一條面向目標的語句的過程而予敘述。應用程序130A包括訪問操作系統(tǒng)114提供的服務的語句,而且假設這些語句是由類別庫402定義的(換言之,程序員參照類別庫402來生成程序130A)。如以下將詳述的,在Machmicro—kernel中可執(zhí)行的實體稱作為線索。在Machmicro—kernel處理組織實體稱作為任務。一個任務包括至少一個線索(它可并行執(zhí)行)以及一個代表任務的線索可被執(zhí)行的虛擬存儲器的塊的地址空間。在任何時候都可有多個有效的任務在計算機結(jié)構(gòu)102上。當在計算機結(jié)構(gòu)102上執(zhí)行應用程序130A時,該程序可代表一個完整任務(有至少一個線索),或可代表作為一部分任務的幾個線索(在這種情況下,任務有其它與程序130A的操作相關(guān)或無關(guān)的線索)。本發(fā)明范圍包括當應用程序130A是一完整任務或只是一個任務的幾個線索時的情況。參見圖3,步驟308確定從實施語句引用的方法的編碼庫110而來的計算機程序邏輯(亦稱為計算機碼)是否展示在與程序130A關(guān)聯(lián)的任務地址空間中。若是,則步驟316被處理(以下將敘述)。若否,則計算機程序邏輯在步驟310,312,和314中被送到任務地址空間。步驟310確定是否已知與編碼庫110關(guān)聯(lián)的庫服務器(未示出)。編碼庫110可代表多個與環(huán)繞程序128關(guān)聯(lián)的編碼庫(未示出),其中,每個編碼庫包括用于類別庫402的面向目標的類別之一的計算機程序邏輯。如本
技術(shù)領(lǐng)域
一般技術(shù)人員所知,亦可有其他與環(huán)繞程序128完全無關(guān)的編碼庫(未示出)。庫服務器與編碼庫相關(guān),每個服務器管理指定的編碼庫的資源。希望對一個編碼庫的計算機程序邏輯進行訪問的一個處理實體對編碼庫的庫服務器發(fā)出一個請求。該請求可包括例如所希望的計算機程序邏輯的描述以及該計算機程序邏輯應被送至的目的地址。庫服務器通過訪問來自編碼庫的計算機程序邏輯并將其送至目的地址指定的存儲器區(qū)域而處理該請求。庫服務器的結(jié)構(gòu)和操作是眾所周知的。如此,步驟310確定與包含相關(guān)計算機邏輯的編碼庫110關(guān)聯(lián)的庫服務器是否是已知的。例如,通過引用標識已知的庫服務器以及它們服務的編碼庫的庫服務器表示實現(xiàn)步驟310。若庫服務器已知,則進行步驟314的處理。否則去往步驟312。步驟312標識與編碼庫110有關(guān)的庫服務器。庫服務器的標識可以從正被處理的面向目標語句的內(nèi)容中清楚得知。在標識了與編碼庫110相關(guān)的庫服務器之后或若庫服務器已知,則進行步驟314的處理,其中,一個請求被送至庫服務器以要求其把與語句引用的方法關(guān)聯(lián)的計算機程序邏輯復制到任務地址空間。一旦完成步驟314,庫服務器已把所請求的計算機程序邏輯復制到了任務地址空間。編碼庫110最好是一個共同庫。即編碼庫110可同時由多個線索訪問。但是,編碼庫110的計算機程序邏輯最好物理地存在一個唯一的物理存儲區(qū)中。庫服務器虛擬地將編碼庫110而來的計算機程序邏輯復制到任務地址空間。也就是說,代之以物理把物理存儲器的一部分中的計算機邏輯復制到另一個中,庫服務器在任務地址空間中放置一個指向包含相關(guān)計算機程序邏輯的物理存儲區(qū)的指針。在步驟316,在計算機結(jié)構(gòu)102上執(zhí)行與面向目標的語句關(guān)聯(lián)的計算機程序邏輯。如上指出的,一旦面向目標的語句訪問操作系統(tǒng)114,與方法關(guān)聯(lián)的計算機程序邏輯包括至少一個與操作系統(tǒng)114的本機過程界面兼容的過程功能調(diào)用。如此這樣執(zhí)行方法的計算機程序邏輯來啟動并執(zhí)行過程功能調(diào)用,從而導致操作系統(tǒng)114為應用程序130A提供服務。步驟306,308,310,312和314大部分實現(xiàn)于計算機結(jié)構(gòu)102建立的運行時間環(huán)境。如所周知,計算機結(jié)構(gòu)102的運行時間環(huán)境是由對程序1304進行編譯的特定編譯程序的運行時間規(guī)范所限定的。例如,運行時間規(guī)范可指示在遇到一個指令訪問一個操作系統(tǒng)服務時,從編碼庫110而來的相應編碼應被傳送到任務地址空間(通過相關(guān)的庫服務器)并被執(zhí)行。編譯程序運行時間規(guī)范是眾所周知的。運行時間規(guī)范是針對所采用的特定編譯程序的。在參照本發(fā)明的敘述,尤其是圖3的流程圖302之后,普通技術(shù)人員可以理解在本發(fā)明中和一特定編譯程序中所用的運行時間規(guī)范。如上所述,本發(fā)明的環(huán)繞程序128是作為編碼庫110實現(xiàn)的。編碼庫110包括實現(xiàn)面向目標的類別庫402的計算機程序邏輯。替換之,環(huán)繞程序128可作為硬件裝置實現(xiàn)。該硬件裝置基本根據(jù)圖3的流程圖302把應用程序中的面向目標的語句(由類別庫402定義)翻譯成為與操作系統(tǒng)114的過程界面兼容的過程功能調(diào)用?;蛘撸h(huán)繞程序138可作為操作在計算機結(jié)構(gòu)102上的軟件處理而予實現(xiàn)。該軟件處理捕捉所有對操作系統(tǒng)114的訪問(這由類別庫402定義面向目標的語句完成)并將這些訪問譯為與操作系統(tǒng)114的過程界面兼容的過程功能調(diào)用。環(huán)繞程序128的其他實現(xiàn)可依據(jù)本發(fā)明闡述而予完成。Mach服務本章節(jié)對Machmicro—Kernel提供的抽象和服務進行的綜述。這些服務針對Machmicro—kernel的每個主要區(qū)域進行敘述。如上所述,這些主要區(qū)域包括線索、任務、虛擬存儲器、IPC、調(diào)度、同步服務、硬件故障,以及主機/特權(quán)服務(也稱為機器服務)。在許多公開發(fā)行的刊物和書籍中對Machmicro—kernel都有進一步的描述。它們包括K.Loepere在OpenSoftwareFoundationandCarnegieMel-lonUniversity,DraftlndustrialSpecification上發(fā)表的“Mach3Kernel原理”,“Mach3Kernel界面”,“Mach3服務器編寫指南”,以及“Mach服務器編寫界面”(1992年9月和11月);A.Silberschatz,J.Peterson,P.Galvin在1992年7月發(fā)表的“操作系統(tǒng)概念”(由Addison—uesley出版社出版),以及由A.Tanenbaum在1992年發(fā)表的“現(xiàn)代操作系統(tǒng)”(由PrenticeHall出版)。線索在Mach中的可執(zhí)行實體即為線索。線索有幾個方面使其可在系統(tǒng)中執(zhí)行。線索總是包含在任務中,它代表線索可利用的大部分主要資源(即地址空間)。一個線索有一個執(zhí)行狀態(tài),它基本是機器寄存器組和組成其上下文其他數(shù)據(jù)。一個線索總是處于幾個預定狀態(tài)之一,即執(zhí)行,準備執(zhí)行,或某種原因之中上。線索應是輕加權(quán)(light—weight)執(zhí)行實體。這是要促使程序員利用程序中的多個線索。因此把比傳統(tǒng)操作系統(tǒng)更多的并發(fā)生性引入系統(tǒng)。雖然線索需要成本,但其實在太少而且在Mach環(huán)境中的典型應用程序或服務器可利用這一能力。但是線索確實有某些與其相關(guān)的元素。包括的任務和地址空間以及執(zhí)行狀態(tài)已被討論過。每個線索都有一調(diào)度策略。用于確定線索在何時或如何經(jīng)常被給予到運行其上的處理器。調(diào)度服務將在其后予以評述。一個線索的調(diào)度策略與后選的處理器組指定密切相關(guān),其可用于具有多處理器的系統(tǒng)中以便更嚴密地控制分配給處理器的線索以加強程序的功能。如前所述,一個地址空間(任務)可包括多個同時執(zhí)行的線索或不包括線索。核心不對整個系統(tǒng)中或地址空間中的線索的關(guān)系進行推測。反之,它根據(jù)與之相關(guān)的調(diào)度參數(shù)以及系統(tǒng)中的可用處理器資源調(diào)度和執(zhí)行線索。尤其是,在地址空間中沒有線索配置(即層級)并沒有關(guān)于它們之間如何交互的假設。為了控制線索的執(zhí)行以及其與某些有用終端的協(xié)調(diào),Mach提供了幾種同步機制。最簡單(最粗糙)的機制是線索級中止和返回操作。每個線索有一中止數(shù),它由這些操作增量或減量。一個具有正值中止數(shù)的線索保持中斷直至該計數(shù)為零??赏ㄟ^采用同步目標(信標,監(jiān)視器和條件)的方式獲得更為準確的同步。同步目標使多個不同的同步方式得以使用。線索亦可通過IPC進行交互。其后將對每一服務提供詳細敘述。所存在的基本操作包括支持生成、終止以及獲取和設置線索的屬性。還有幾個其他有關(guān)線索的控制操作它們可以由任何具有把權(quán)利送給屬意的線索的控制端口的線索所執(zhí)行。線索可以被明確地終止。它們亦可從多種可能的等待狀態(tài)中被中斷并在指示其處于中斷的情況下被恢復執(zhí)行。線索亦可被“連接”,其意為它們被標志為相對于核心資源的特權(quán),即它們可以在可用存儲器不足時用物理存儲器。這用于預置頁出道路的線索。最后,線索還有幾個重要IPC端口(更準確地說,是送出或從端口接收權(quán)利),它們被用于某些功能。尤其是,每個線索都有一個線索自有端口,可用于在線索上自已執(zhí)行某些功能。一個線索亦可有一組故障端口,用于當線索在執(zhí)行期間碰到處理器故障之時。還有區(qū)別端口,用于收集線索的執(zhí)行狀態(tài)的取樣以供其他線索(例如調(diào)試程序或程序簡介表程序監(jiān)測。任務用于管理Mach中的資源的基本組織實體叫做任務。任務有許多與之相關(guān)的目標和屬性。一個任務基本包括三件事一個任務包括多個線索,它們在系統(tǒng)中是可執(zhí)行實體;任務還包括一個地址空間,它代表線索在其中得以執(zhí)行的虛擬存儲器;任務還有一個端口名空間,用于代表線索在系統(tǒng)中與其他線索通信的有效IPC端口。在以下章節(jié)中將詳細討論在一個任務中的每個基本目標。要注意的是一個任務其本身不是可在Mach中執(zhí)行的實體。但是,任務可包括線索,而其是可執(zhí)行實體。一個任務除了以上所述的基本線索之外,還包括多個與之關(guān)聯(lián)的其他實體。其中一些實體必須根據(jù)預定的決策完成核心需要以便生成任務包括的線索。調(diào)度參數(shù),處理器組指定,以及主機信息都對任務的線索的調(diào)度有貢獻。一個任務還有多個服務于某些預定功能的區(qū)別內(nèi)處理通信端口。內(nèi)部處理通信的特征及端口將在其后討論?,F(xiàn)在,應充分了解端口資源是在一個任務中按時間積累的。大部分資源是由程序員明確管理的。上面提到的區(qū)分端口必須在系統(tǒng)中建立與幾個重要功能的連接。Mack提供給每個任務三個特定端口。第一個是任務自有端口,用于要求核心程序在任務上執(zhí)行某些操作。第二個特定端口是引導程序端口,用于除了通常服務于對其他服務進行定位之外的所有事(它是OS特定環(huán)境的)。第三個特定端口為每個任務所有,它是主機名端口,用于使任務獲取有關(guān)其運行的機器的信息。此外,Mach為每個任務提供幾個“注冊”的端口,以使任務中包括的線索與系統(tǒng)中的某些高級服務器(即網(wǎng)絡名服務器,“服務”服務器,以及環(huán)境服務器)進行通信。每個任務還有兩個有用的端口組,以允許故障處理和程序狀態(tài)取樣得以完成。任務的故障端口為要處理的任務中的線索所碰到的處理器故障提供通用位置。其后將對故障處理進行詳細敘述。PC取樣端口充許簡介工具反復監(jiān)視任務中的線索的執(zhí)行狀態(tài)。任務可能有許多操作。任務可被生成和結(jié)束。生成一個新任務涉及把某些現(xiàn)有任務指定為用于新任務地址空間的初始內(nèi)容的模型機。亦可終止一個任務,它導致所有包括的線索被終止。在一個任務中包括的線索可被計算且有關(guān)線索的信息可被抽取??梢酝ㄟ^中止和恢復操作來控制一個任務(更準確講是任務中的線索)的粗數(shù)式執(zhí)行。每個任務都有一中止計數(shù),它由中止和恢復操作增加和減少。任務中的線索可一直執(zhí)行,直到所包括的中止計數(shù)成為零。當中止計數(shù)為正時,任務中的所有線索被中斷,直到該任務最后恢復為止。最后,可按需要查詢和設置與一任務(即預定優(yōu)先級)關(guān)聯(lián)的各種參數(shù)和屬性。虛擬存儲器Mach支持虛擬存儲器(VM)子系統(tǒng)中的一些特性。外部客戶界面和內(nèi)部實現(xiàn)都提供在許多其他操作系統(tǒng)中沒有發(fā)現(xiàn)的特性。從廣義而言,Mach虛擬存儲系統(tǒng)支持用于在系統(tǒng)中運行的每個任務的大的稀疏虛擬地址空間。為客戶提供常規(guī)服務以管理地址空間的組成。VM系統(tǒng)的某些方面實際是由在微核心程序之外的部件實現(xiàn)的,這使得在修改不同系統(tǒng)環(huán)境的某些策略功能時具有很大靈活性。MachVM系統(tǒng)的內(nèi)部結(jié)構(gòu)已分為機器獨立和機器相關(guān)模塊以提供最大便利。對新處理器/MMU結(jié)構(gòu)的端口通常在實現(xiàn)操縱基本硬件MMU結(jié)構(gòu)的那些功能并非很重要。Mach已經(jīng)有端口到多個不同的處理器結(jié)構(gòu),表明整個核心程序和虛擬存儲系統(tǒng)的靈活性。一個Mach任務的地址空間包括多個虛擬存儲區(qū),它們是以不同方式分配以供任務所用的若干地址空間。它們是存儲器可以被合法訪問的位置。所有對地址空間限定區(qū)域之外的地址引用都將導致存儲器引用不當?shù)墓收?。一個虛擬存儲區(qū)有幾個有用的特性。它包括一個頁對齊起始地址和尺寸,它必須是多個系統(tǒng)頁尺寸。在區(qū)域中的頁面都有相同的訪問保護,這些訪問保護可以是只讀的、讀一寫的或執(zhí)行的。區(qū)域中的頁面具有相同的繼承特性,用于從當前任務中生成新任務之時。該頁面繼承特性可設置以指示一個新任務應繼承該區(qū)域的讀寫復制,即其應該繼承該區(qū)域的虛擬復制,或其不繼承該區(qū)域的復制。在一個新地址空間中的一個區(qū)域的讀寫復制提供了任務之間的區(qū)域的完全共用映射,由虛擬復制提供了寫復制映射,它基本上給出了每個任務的區(qū)域的自我復制但可有效地共享構(gòu)成區(qū)域的頁面的寫復制。每個虛擬存儲區(qū)實際上是一個稱為存儲器目標的抽象實體的映射。存儲器目標只是一個數(shù)據(jù)集合,它可以字節(jié)方式被訪問并且核心程序不對其進行假定。最好想想可被直接存在某些地或可按需要以某些方式被生成的一些純數(shù)據(jù)。許多事情都可作為存儲器目標。其例包括文檔,ROM碰盤分區(qū),或字形。存儲器目標沒有預定的操作或協(xié)議要遵從。包括在一個存儲的目標中的數(shù)據(jù)只是在其通過映射已與VM區(qū)域相連時才被訪問。在存儲器目標已映射到一個區(qū)域后,可通過正常的存儲器讀寫(裝入和存儲)操作訪問數(shù)據(jù)。存儲器目標通常由稱為外部存儲器管理程序或頁面程序的一種特定的任務管理。頁面程序是一個做微核心程序之外執(zhí)行的任務,就象系統(tǒng)中的其他任務一樣。它是一個用戶方式實體,其工作是處理對于存儲器目標支持的數(shù)據(jù)的請求。就象給定區(qū)域中客戶任務引用的線索一樣,核心程序邏輯地把來自相關(guān)存儲器目標的相應章節(jié)地址中的數(shù)據(jù)填充到頁面上,為完成這一任務,核心程序?qū)嶋H上將完善定義的(并且復雜的)協(xié)議與頁面程序相關(guān),這發(fā)生于只要當其需要獲取頁面故障數(shù)據(jù)或由于頁面替代而需要頁出數(shù)據(jù)之時。這一協(xié)議稱為外部存儲器管理界面(EMMI),也用于管理由用戶任務映射時的存儲器目標起始順序以及由用戶任務重新分配相關(guān)的存儲器區(qū)時的終止順序。根據(jù)不同用戶任務所用的存儲器目標而有各種在系統(tǒng)中運行的頁面程序。頁面程序通常與一給定時刻安裝的各種文檔系統(tǒng)關(guān)聯(lián)。例如,頁面程序亦可存在以支持某些數(shù)據(jù)庫程序,這些程序可能需要某些超出文檔系統(tǒng)支持的范圍之外的操作。頁面程序也可以用于某些希望以非標準方式(即生成計算數(shù)據(jù)而非從存儲子系統(tǒng)中檢索數(shù)據(jù))為其客戶提供數(shù)據(jù)的服務器。微核心程序總希望有在系統(tǒng)上運行系統(tǒng)的稱為預置頁面程序的不同頁面程序。該預置程序負責管理與假虛擬存儲器(例如堆棧、堆陣等)關(guān)聯(lián)的存儲器目標。這一存儲器是暫時的且只用于運行客戶任務的時候。如上所述,在MachVM系統(tǒng)中的主要實體是區(qū)域,存儲器目標,以及頁面目標。但是,大部分客戶將通過在存儲器范圍內(nèi)的操作而與虛擬存儲器關(guān)聯(lián)。所謂范圍可是區(qū)域的一部分或其它跨越地址空間中的多個連續(xù)區(qū)。由Mach提供的操作使用戶得以在地址空間中分配新的虛擬存儲器范圍并按需要重新分配范圍。另一重要操作使一存儲器目標被映射成為上述的虛擬存儲器的一個范圍。進一步的操作是改變存儲器范圍上的保護,改變繼承特性,以及連接(或鎖定)一個范圍的頁面進入物理存儲器。也可能從另一任務中讀出存儲器范圍或?qū)⒎秶鷮懭肓硪粋€任務,如果該任務的控制端口可用的話。其他服務還包括使用戶指示所期望的存儲器范圍的引用方式。這可由核心程序所用以便對不同情況制定頁面替代規(guī)定。另一服務涉及同步(或齊平)存儲器范圍的內(nèi)容和支持它的存儲器目標。最后的服務是獲得有關(guān)區(qū)域的信息并計算根據(jù)其包括的區(qū)域所敘述的一個任務的地址空間的內(nèi)容。內(nèi)部處理通信Mach有四個有關(guān)其內(nèi)部處理通信的概念端口,端口組,端口權(quán),以及消息。其中之一的端口權(quán)(portrights)亦由Mach用作標識系統(tǒng)中的某些通用資源的裝置(通用資源包括線索,任務,存儲器目標等)。端口線索利用端口進行相互間的通信。端口基本上是在核心程序之內(nèi)的消息隊列,在適當許可下,線索可把消息加至其中或從其中去除消息。所謂“許可”即為端口權(quán)。其他與端口相關(guān)的屬性(除端口權(quán)外)包括可在端口上排隊的消息數(shù)量的限制,可送至端口的消息的最大容量的限制,以及對端口的權(quán)利計數(shù)。端口只存在于核心程序中而且只可通過端口權(quán)操縱。端口權(quán)若端口有發(fā)送權(quán)時,線索可把一個消息加至該端口的消息隊列。類似地,亦可在有接收權(quán)時由線索從該端口隊列中去除消息。端口權(quán)被認為是任務的資源而非一個獨立線索。對一個端口可以有多個發(fā)送權(quán)(由不同任務所有);但是一個端口只可能有一個接收權(quán)。事實上,端口是通過分配接收權(quán)生成而且只有在接收權(quán)被重新分配(在任務消亡時直接或間接)時才去除端口。此外,端口的屬性由接收權(quán)操縱。多個線索(在相同或不同任務上)可在同時送至端口且多個線索(在同樣任務)可同時從一個端口接收。端口權(quán)可視作為從端口接收或向端口發(fā)送消息的許可或能力,而且如此它們實現(xiàn)了系統(tǒng)保密的低級形式。端口的“擁有者”是持有接收權(quán)的任務。另一任務欲獲取端口發(fā)送權(quán)的唯一方式是是否其直接從擁有者或任何具有該端口有效發(fā)送權(quán)的任務獲得了該權(quán)利。這主要是由在一個消息中包括該權(quán)利并將該消息送至另一任務而實現(xiàn)的。把發(fā)送權(quán)賦予給一個任務就是給了它一個許可使其在需要時把許多消息送至端口。另一種端口權(quán)稱為一次發(fā)送權(quán),它只允許持有者給端口發(fā)送一個消息,然后其發(fā)送權(quán)失效并不可以再使用。注意,可以通過把一個消息中的端口的接收權(quán)送至另一任務的方法完成傳送端口的擁有關(guān)系。任務通過在消息中生成或接收端口權(quán)以獲取端口權(quán)。接收權(quán)只能直接生成(通過對上述的端口分配);而發(fā)送權(quán)可從現(xiàn)有的發(fā)送權(quán)或接收權(quán)中直接生成,即可從消息傳送中間接生成,一次發(fā)送權(quán)只能從一接收權(quán)中直接或間接生成。當發(fā)送消息的權(quán)利時,發(fā)送端能指定其復制、移動,或由發(fā)送操作生成的新權(quán)利。(當然,接收權(quán)只可以被移動)。當移動一個權(quán)利時,發(fā)送程序就失去其權(quán)利而接收程序得到該權(quán)利。當復制時,發(fā)送程序保留其權(quán)利但生成復制的權(quán)利并將其賦予給接收程序。當生成時,發(fā)送程序提供一個接收權(quán)而且一個新的發(fā)送或一次發(fā)送權(quán)被生成并給予接收程序。當一個任務獲取一個端口權(quán)時,Mach賦予其一命名。注意端口本身并不命名,但其端口權(quán)要命名。(不管這一事實,Mach的生成程序決定了要由“端口名”這一術(shù)語來稱呼端口權(quán)的命名)。該命名是一個標量值(在Intel機器中是32位),該值在一個任務是確保是唯一的(其意味著在幾個任務中,每個任務都具有同樣數(shù)值的端口名但其代表了對于完全不同端口的端口權(quán))而且是隨機選擇的。由一個任務持有的每個不同的權(quán)利不必有一個區(qū)別端口名。一次發(fā)送權(quán)對每一權(quán)利都有一個單獨的名字。但是,對于同一端口的接收和發(fā)送權(quán)有相同的命名。端口權(quán)有幾個與之相關(guān)的屬性權(quán)利類型(發(fā)送,一次發(fā)送,接收,端口組,或無效名),以及對于每個上述權(quán)利類型的參考計數(shù)。當一個任務獲取了已有發(fā)送或接收權(quán)的端口時,便對相關(guān)端口名的參考計數(shù)增值。當其相關(guān)端口被破壞時,端口名成為無效名。即,表示其接收權(quán)被重新分配的端口的發(fā)送或一次發(fā)送權(quán)的所有端口名變成為無效名。任務可在其中一個權(quán)利變?yōu)闊o效時請求通知。核心程序保持每個端口發(fā)送或一次發(fā)送權(quán)數(shù)量的系統(tǒng)范圍計數(shù)。任何持有接收權(quán)的任務(例如服務器)可在該數(shù)字為零時請求發(fā)送通知消息,以指示該端口沒有更多的發(fā)送程序(客戶)。這叫做“無發(fā)送程序”通知。該請求必須包括通知送經(jīng)端口的發(fā)送權(quán)。端口組端口組提供從端口集同時接收的能力。即接收權(quán)可加到端口組以致當端口組的接收完成時,可從該組中的一個端口接收消息。其端口提供了消息的接收權(quán)的命名由接收操作報告。消息一條MachIPC消息包括標題和直接數(shù)據(jù)部分,以及任選地某些間接存儲器(outoflinememory)區(qū)和端口權(quán)。若消息即不包括端口權(quán)又不包括間接存儲器,則其為簡單消息;否則即為復雜消息。簡單消息包括消息標題以及其后的直接數(shù)據(jù)部分。消息標題包括一個目的地端口發(fā)送權(quán),一個響應可送達的任選發(fā)送權(quán)(通常是一次發(fā)送權(quán)),以及消息數(shù)據(jù)部分的長度。直接數(shù)據(jù)的長度可變(最大長度按端口不同而定)而且在復制時無需解釋。一個復雜消息包括一個消息標題(其格式與簡單消息的標題一樣),其后則為間接存儲區(qū)和端口的計數(shù),敘述這些區(qū)域和端口的核心程序處理的配置陣列,以及包括間接描述符和端口權(quán)的陣列。端口權(quán)配置陣列包括對權(quán)利的處理,即其是否被復制,生成或移到目標任務。間接存儲器配置陣列指示在消息排隊時是否每個存儲范圍應被重新分配,而且是否存儲器應被復制到接收任務的地址空間或通過一個虛擬存儲器的梳利復制處理而將其映射成接收地址空間。間接描述符指示間接存儲器區(qū)的容量,地址和對準。當一任務接收一條消息時,標題,直接數(shù)據(jù)和描述符陣列被復制到在參數(shù)中指定要接收調(diào)用的地址,若消息包括間接數(shù)據(jù),則接收任務的地址空間中的虛擬存儲器由核心程序自動分配以保持這些間接數(shù)據(jù)。接收任務有責任在接收數(shù)據(jù)時對存儲區(qū)進行重新分配。消息傳送語義MachIPC基本屬于非同步性質(zhì)。線索把消息送給端口,而且一旦消息在端口上排隊時,發(fā)送線索繼續(xù)進行。端口上的接收在沒有端口消息排隊時會被阻斷。為有效起見,有一個組合的發(fā)送/接收調(diào)用,它可用來發(fā)送消息并在指定的響應端口上立即阻斷消息等待(提供同步模式)。若在指定時段內(nèi)消息不能送出(或若無消息可接收時),則將所有將廢止的操作的消息操作設定為超時。發(fā)送調(diào)用將在其使用與之相應的端口已達到消息的最大數(shù)目的發(fā)送權(quán)的情況下阻斷。若發(fā)送采用一次發(fā)送權(quán),則在端口已滿的情況下將保證消息被排隊,消息傳送是可靠的,而且消息保證是以發(fā)送順序被接收的。在Mach中的一個特殊情況是其在非同步模式上優(yōu)化了同步模式;經(jīng)由服務器在反復發(fā)送/接收循環(huán)之后進行接收并由客戶在其他點進行相應的發(fā)送/接收循環(huán),取得了最快的IPC往返時間。作為標識符的端口權(quán)由于核心程序保證端口權(quán)不能被偽造且消息不能被誤導或曲解,端口權(quán)提供了一個非??煽勘kU的標識符。Mach通過用端口權(quán)代表系統(tǒng)中的幾乎一切(包括任務,線索,存儲器目標,外存管理程序,進行系統(tǒng)優(yōu)先操作的許可,處理器分配等等)的方式來利用這一點。此外,由于核心程序本身可發(fā)送和接收消息(它將其表示為“特殊”任務),所以可通過IPC消息而非系統(tǒng)調(diào)用陷阱訪問大部分核心程序服務。這使得服務在適當之處相當容易地遷移到核心程序之外。同步當前,Mach對同步能力提供非直接支持。但是,常規(guī)操作系統(tǒng)提供例行同步服務。這類同步服務采用許多已知處理,例如信標和監(jiān)視程序以及條件,它們敘述如下,信標(Semaphore)是允許對資源進行排比或共享訪問的同步處理,它可被獲取和釋放(在上述任一種訪問模式下),而且它們可任意地指定獲取操作上的超時時段。信標在保持有一信標的線索永久結(jié)束與該信標相關(guān)的計數(shù)內(nèi)被調(diào)整以及等待線索被適當解阻斷時可任意恢復。監(jiān)控程序和條件是實現(xiàn)比簡單信標更嚴格(和安全)的同步方式的一種同步處理。一個監(jiān)控程序鎖定(也稱為mu-tex)實際上是一個二進制信標,它啟動對某些數(shù)據(jù)的雙向排他地訪問。條件變量可用于等待和預示監(jiān)控程序上下之中的某些程序員定義的布爾表達的真值。當一個具有監(jiān)控程序鎖定的線索需要等待條件時,該監(jiān)控程序鎖定被釋放且線索被阻斷。稍后,當持有鎖定的另一線索通知該條件為真時,等待的線索被釋放然后在繼續(xù)執(zhí)行之前再次獲取鎖定。線索亦可在條件上執(zhí)行廣播操作,其釋放所有等待該條件的線索。亦可在條件等待操作上設置任意的超時,以限制線索等待條件的時間。調(diào)度由于Mach具有多處理器能力,所以它在多處理器環(huán)境中用于線索調(diào)度。Mach定義了處理器組從而將處理器分組,而且它定義了可與之關(guān)聯(lián)的調(diào)度規(guī)范。Mach提供了兩種調(diào)度規(guī)范時間共用和固定優(yōu)先級。時間共用規(guī)范基于CPU線索使用的指數(shù)平均值。這一規(guī)范企圖根據(jù)線索和處理器數(shù)量來優(yōu)化時間總和。固定優(yōu)先級規(guī)范不修改優(yōu)先級,但在同一優(yōu)先級的線索上進行循環(huán)調(diào)度。線索可利用其處理器組的預置調(diào)度規(guī)范或直接采用其處理器組能使用的調(diào)度規(guī)范之一??蔀樘幚砥鹘M和線索設置最大優(yōu)先級,在Mach中,優(yōu)先級越低,其越緊急。故障Mach故障處理服務是要為標準的和用戶定義的處理器故障提供靈活的處理。線索,消息和端口的標準核心程序用于提供故障處理機能。(本文在Mach文件使用“異常”一詞之處采用“故障”一詞。這類術(shù)語在此被改變以區(qū)別C++語言的異常機制和硬件故障)。線索和任務都有故障端口。它們在繼承規(guī)則中不同并希望以稍微不同的方式被使用。最好以每個線索為基礎(chǔ)進行錯誤處理并以每個任務為基礎(chǔ)處理調(diào)試。任務故障端口是由子任務從母任務繼承而來,而線索故障端口不繼承并且不預置給處理程序。線索故障處理程序優(yōu)于任務故障處理程序。當一個線索導致一個故障時,核心程序阻斷該線索并把一個故障消息通過故障端口送到線索的故障處理程序。故障處理程序是一個從故障端口接收消息的任務。該消息包括有關(guān)故障,線索,和導致故障的任務的信息。處理程序根據(jù)故障的類型實現(xiàn)其功能。若適當,則故障處理程序可以獲得并修改導致該故障的線索的執(zhí)行狀態(tài)??赡艿膭幼魇且宄收?,終止線索,或?qū)⒐收蟼魉徒o任務級處理程序。由類型和數(shù)據(jù)來標識故障。Mach定義支持所有Mach實現(xiàn)(即誤訪問,誤指令,斷點等)的某些機器獨立的故障類型。其他故障類型可是實施相關(guān)的(即f—行,協(xié)同處理器擾亂等)。主機和處理器組Mach輸出主機(host)的概念,它實際是在計算機上執(zhí)行的一個抽象。根據(jù)一個任務對該主機所有的特定端口權(quán)而在主機上進行多種操作。可由持有對主機名端口發(fā)送權(quán)的任何任務獲得不敏感的信息。這種信息例子包括為達到對系統(tǒng)時鐘值的訪問的核心程序或權(quán)利類型。幾乎所有其他信息都認為是敏感的,而且要求較高級的的特權(quán)以獲取或操縱該信息。當任務有對主機控制端口(也稱為主機特權(quán)端口)的發(fā)送權(quán)時,該加入的特權(quán)級被蘊含其中。必須非常小心地并有選擇選擇將該權(quán)給予任務,因為具有此權(quán)可使一任務虛擬地為核心程序做各種可能的事,從而通過IPC服務支持的系統(tǒng)的安全方面。這種加入的特權(quán)可完成各種操作,包括改變系統(tǒng)時鐘設置,獲得系統(tǒng)的整體性能和資源使用統(tǒng)計,并重新引導計算機。Mach要輸出處理器和處理器組的概念。他們允許任務更仔細地指示何時和在什么處理器上執(zhí)行線索。主機特權(quán)端口可計算和控制處理器和處理器組。一個處理器代表在系統(tǒng)中的一個特定處理器,而一個處理器組代表一個處理器集。服務存在以生成新處理器組并將處理器加至所希望的一組中或從該組中去除。還存在分配整個任務或特定線索給一個處理器組的服務。通過這些服務,程序員可控制(以粗粒式)構(gòu)成應用程序的線索和任務實際要執(zhí)行的時間。這使得程序員得到指定在一個處理器組中并行執(zhí)行某些線索的時間。不直接使用這些能力的線索和任務的故障分配是對系統(tǒng)故障處理器組的,它通常包括不在其他組中使用的系統(tǒng)處理器。保密Mach可包括除了上述之外的其他服務范疇。例如,Mach可包括與保密相關(guān)的服務。根據(jù)Mach保密服務。每個任務攜帶一個保密標記,它是未由Mach翻譯的標量值。有一個叫做主機保密端口的端口,它被給予引導任務并傳送給可靠的保密服務器。任何具有對主機保密端口發(fā)送權(quán)的任務均可設置或改變一個任務的保密標記,而無需專門許可以確定任務保密標記(當然除了持有任務的控制端口之外)的值。在接收到一個MachIPC消息之時,消息發(fā)送程序的保密標記作為接收功能的輸出參數(shù)之一而被返回。持有主機保密端口的任務可發(fā)送一消息并把一不同的保密標記分配給該消息,以致就象是來自于另一任務似的。這些服務可由統(tǒng)的上部層級所用以實施不同的保密級。環(huán)繞類別庫本節(jié)將對用于Mach做核心程序所提供的服務的面向目標接口進行逐區(qū)描述。到Mach服務的面向目標接口代表由編碼庫110實現(xiàn)的環(huán)繞類別庫402。庫402包括線索類別404,任務類別406,虛擬存儲器類別408,IPC類別410,同步類別412,調(diào)度類別414,故障類別416,以及機器類別418。它還可包括其他類別,例如保密類別420,其取決于操作系統(tǒng)114下所提供的服務。每一區(qū)由一說明每個類別功能和目的類別圖的文本加以描述。選擇的方法被表示和定義(適當時,還提供方法的參數(shù)表)。如此,這節(jié)對環(huán)繞類別庫402提供了完整的操作定義和敘述。庫402的實現(xiàn)方法在稍后章節(jié)中加以討論。展示類別圖采用了表示類別關(guān)系和基本原理的已知Booch圖符。這些圖符示于圖17中。GradyBood已在“面向目標的應用程序設計”一書中已對Booch圖符進行了討論。庫402最好由C++編程語言實現(xiàn)。但是,亦可用其他語言。最好把類別說明組成SPI(系統(tǒng)編程界面),API(應用程序界面),內(nèi)部(Internal)和“套索(Noose)”方法一由把有問題的編碼歸類的#ifndef語句(或由用于套索方法的命名)指定。SPI界面針對被使用的特定計算機結(jié)構(gòu)。為說明之目的,參照根據(jù)IBMMicroKernel(基于Mach版本3.0)或兼容的計算機結(jié)構(gòu)操作來說明和表達環(huán)繞類別庫402。一般技術(shù)人員可根據(jù)本發(fā)明對SPI進行修改以適應其他計算機結(jié)構(gòu)。API界面包括于庫402之中,它與系統(tǒng)運行的結(jié)構(gòu)無關(guān)。內(nèi)部界面只由低級設備所用。套索方法主要用于使和環(huán)境程序128一起操作的程序130與直接運行在Mach114上的編制的應用程序134(或服務器)進行通訊。它們以位于環(huán)繞程序128所建立的面向目標編程模式之外的方式提供對原始Mach設備的訪問。最不希望的是使用套索方法。SPI和API(也許內(nèi)部)類別和方法已足以實現(xiàn)任何應用程序、部件或子系統(tǒng)。線索類別圖5是線索類別404和任務類別406的類別圖501。線索類別把面向目標的界面提供給Mach114的任務和線索功能性。有些線索類別404是處理類別,其意為它們代表對相應核心程序?qū)嶓w的引用。處理類別上的空構(gòu)成程序生成一個空處理目標。該空處理目標開始并不與核心程序?qū)嶓w對應一它必須由流動,分配,或復制操作初始化。在一個空處理上的調(diào)用方法將導致投擲一個異常。可以生成多個處理目標的復制,每一復制都指向同一核心程序?qū)嶓w。該處理目標是內(nèi)部引用計數(shù)的,以致在最后一個代表它的目標被破壞之時可以去除核心程序?qū)嶓w。TThreadHandle是一個代表系統(tǒng)中的線索實體的具體類別。它為控制和確定有關(guān)線索的信息提供方法。它還為在系統(tǒng)中生成新線索提供處理機制??刂撇僮靼ㄈ∠?,中斷/恢復,以及進行停滯監(jiān)視。構(gòu)成TThreadHandle并在TThreadProgram目標中傳送會導致在當前任務中構(gòu)成一個新線索。在該新線索中運行的第一編碼是TThreadPro-gram目標的Prepare()和Run()方法。破壞一個TTread-Handle并不破壞其代表的線索??梢栽赥ThreadHandle目標上也有刪除操作,注意每個TThreadHandle目標包括一個對于該線索的控制端口的發(fā)送權(quán)。該信息通常不是由界面出口,但由于它有一端口權(quán),所以TThreadProgram可流入的唯一流入目標即為TIPCMessageStream。試圖流入其他TStream目標將導致扔掉一個異常。TThreadHandle為調(diào)試程序和運行時間環(huán)境提供了多種方法,并為支持由環(huán)繞程序128建立的環(huán)境外運行的Mach任務進行交互提供了各種方法。這些方法包括獲取和設定線索的狀態(tài),在另一任務中生成一個“空”線索,獲得線索的故障端口,將權(quán)利返回到線索的控制端口,并從一個線索控制端口發(fā)送權(quán)生成一個TThreadHandle處理。如上所述,環(huán)繞程序128建立應用程序130操作的計算環(huán)境,為簡潔起見,這樣由環(huán)繞程序128建立的計算環(huán)境稱為CE。關(guān)于環(huán)繞程序128,TThreadHandle在當前任務中生成一個CE運行時間線索。一個線索可由另一任務生成而不只限于由當前任務,其過程是使用TTaskHandle類別和其子類別的CreateTHread方法。(但是,在另一任務上生成線索不是最好的常規(guī)編程模式)。為了在另一CE任務上生成CE線索,把TCETaskHandleGreateThread方法送至說明要運行的線索的TThreadProgram。為生成非CE線索(即不在環(huán)繞程序128建立的計算環(huán)境中操作的線索),Cre-ateThread方法被用于適當?shù)腡TasKHandle子類別(即已被生成以便和其他非CE計算環(huán)境操作的TTaskHandle子類別)。例如,為在OS2任務上生成一個IBMOS2線索,可以使用一個TOS2TaskHandleGreateThread方法。不可能在非CE任務上運行CE線索,也不可能在CE任務上運行非CE線索。TThreadHandle包括下列方法TThreadHandle(constTTHreadProgram$copyTHreadCode)生成調(diào)用任務中的新線索一進行TThreadProgram的內(nèi)部復制,它在線索終止時被刪除。TTheadHandle(TThreadProgram*adoptThread-Code)在調(diào)用任務中生成一個新線索—ADOPT采用隨線索端止而被刪除的ThreadCode。由線索擁有的資源要被廢棄。不復制TThreadProgram。TThreadHandle(EExecutionyourself)生成用于調(diào)用線索的線索處理。TSream在TThreadHandle目標中流入到TIPCMes-sageStream。CopyThreadSchedule()將指針返回到調(diào)度目標的Scheduling目標(即TServerSchedule,TUISchedule等)。為必須由調(diào)用程序安排的TThreadSchedule目標分配存儲器。SetThreadSchedule(constTThreadSchedule&amp;newSchedule)把線索中的調(diào)度目標設置成newSchedule標。這使得調(diào)度線索的方法得以受控。GetScheduleState(TThreadHandle&amp;theBlockedOnThread)允許在線索被阻塞時對線索(theBlockedOnThread)的當前狀態(tài)進行查詢。CancelWaitAndPostException()const致使一個阻塞核心程序調(diào)用被釋放而且在該線索(*this)扔掉一個TK-ernelException。WaitForDeathOf()const進行線索的停滯監(jiān)視—阻塞調(diào)用線索直到該線索(*this)終止。CreateDeathInterest()生成有關(guān)線索(*this)停滯的通知。當線索終止時,指定的TInterest收到一個通知。TThreadProgram是一個把所有需要生成新線索的信息封裝起來的抽象主類別。這些信息包括執(zhí)行的代碼,調(diào)度信息,以及線索的堆棧。為了使用,它必須進行子分類以及Begin和Run方法置換,然后將目標的示例傳送到TThreadHandle的構(gòu)成程序以生成線索。Begin例行程序用于協(xié)助建立同步;Begin在TThreadHandle構(gòu)成程序完成之前在新線索中執(zhí)行,而Run例行程序則在TThreadHan-die構(gòu)成程序之后執(zhí)行。CopyThreadSchedule和GetStack-Sige方法返回預置線索調(diào)度和堆棧容量。為提供與預置不同的值,這些方法應被置換以返回理想的線索調(diào)度和/或堆棧容量。TThreadProgram包括以下方法TThreadProgram(constTText&amp;taskDescription)TaskDescription提供可通過TTaskHandleGetTaskDe-scription方法訪問的任務的文本說明。這只有在目標傳送給TTaskHandle構(gòu)成程序時才有效。若代之以采用預置構(gòu)成程序,則界面將合成一個唯一命名以供TTasKHandleGetTaskDescription返回。GetStackSize()返回將為該線索設置的堆棧的容量。若不想要“預置”的堆棧尺寸,可置換這一方法。GetStack()用于建立線索的推棧。若希望提供自己的堆棧,則可置換這一方法。Run()代表在線索上將運行的代碼的入口指針。置換該方法以提供被執(zhí)行代碼的線索。任務類別參見圖5關(guān)于任務類別406的類別圖。TTaskHandle是一個封裝一個基本Mach任務的所有操作和屬性的主類別。它可用于引用和控制系統(tǒng)上的所有任務。但是,TTaskHandle不能用于直接生成任務,因為其沒有關(guān)于運行時間環(huán)境的知識。它通過保護的方法為具有被生成的特定運行時間知識的子類別提供足夠的協(xié)約,這些子婁別可生成任務(TCETaskHandle即為這種類別的例子)。TTaskHandle目標流入和流出TIPCMessageStreams并通過IPC送至其他任務,而且它們在與TCETaskHandle相關(guān)的集中被返回。與TTaskHandle關(guān)聯(lián)的任務控制操作包括取消任務,中斷和恢復任務,以及進行有關(guān)任務的停滯監(jiān)視。信息方法包括獲取其主機,獲取和設定其登錄端口,計算其端口或虛擬存儲器區(qū)域獲得其故障端口,計算其線索等等。TTaskHandle包括下述方法TTaskHandle(EEXecutionThread)生成指定線索的任務處理。Suspend()中止任務(即所有任務包括的線索)Resume()恢復任務(即由該任務包括的所有線索)。Kill()終止任務—所有由任務包括的線索都被終止。WaitForDeathOf()進行任務的停滯監(jiān)視—調(diào)用線索被阻斷直到任務(*this)終止。CreateDeathInterest()生成用于任務停滯的通知關(guān)系(nohficationinterest)。在Tlnterest目標中指定的線索當任務(*this)終止時獲得一個通知。AllocateMemory(size—thowManyBytes,TMemory—Surtogate&amp;newRange)在任務地址空間中分配虛擬存儲器的范圍。字節(jié)的理想大小由howManyBytes指定。(在頁對齊之后)最新指定的存儲器的起始地址和實際容量返回到newRange之中。AllocateResernedAddressMemory(constTMemory-Surrogate&amp;range,TMemorySurrogate&amp;newRange)在任務的地址空間中以指定的保留地址確定虛擬存儲器的范圍。范圍自變量指定請求的地址和容量。newRange返回被分配的存儲器的頁對準地址和容量。GetRemotePorts(TCollection&lt;TRemotePor-tRightHandle&gt;&amp;thePortSet)獲取任務(*this)上的端口表。調(diào)用程序負責在返回的Collection中重新分配存儲器虛擬空白的CreateFaultAssociationCollection(TColection&lt;FaultAssociation&gt;&amp;where)返回這一任務登錄的故障端口。TCETaskHandle是TTaskHandle的子類別,它代表由CE運行時間系統(tǒng)(CE代表環(huán)境程序128建立的計算環(huán)境)執(zhí)行的一個Mach任務,并體現(xiàn)需要建立CE目標環(huán)境的所有知識。它可通過把TThreadProgram送到其構(gòu)成程序的方式生成一個新任務。該新任務由一個線索生成,而該線索又由送給TCETaskHandle構(gòu)成程序的TThreadProgram目標來說明。也有一個允許從TTaskHandle中構(gòu)成一個TCETaskHandle的構(gòu)成程序。為保證非CE運行時間任務不被TCETaskHandle所環(huán)繞,構(gòu)成程序查詢操作在CE環(huán)境下的裝載程序/庫服務器以確保被環(huán)繞的任務已由其登錄。這一行為自動完成(而無需用戶干預)。TCETaskHandle包括下述方法TCETaskHandle(constTThreadProgram&amp;What-ToRun)生成新任務和線索以執(zhí)行指定的代碼。該新線索在‘WhatToRun’中執(zhí)行代碼。TCETaskHandle(EExecutionTask)環(huán)繞當前執(zhí)行線索的任務。TCETaskHandle(constTThreadProgram&amp;what-toRun,constTOrderedCollection&lt;TLibrarySearcher&gt;&amp;liberarySearchers)生成新任務和線索以執(zhí)行具有指定庫檢索的特定碼。LibrarySearchers指定用于解決命名的庫表。TCETaskHandle(constTTaskHandle&amp;aTask)從一通用任務目標中生成一個CE任務目標。AddLibrarySearcher(constTLibrarySearch&amp;newlibSearcher)加入一個用于任務的庫檢索程序—裝入程序利用newlibrarySearcher首先解決庫引用,即把newlibrary-Searcher放在用于解決引用的集的頂部。GetTaskDescription(TText&amp;description)const返回任務的字符串說明—從根線索(送至構(gòu)成程序)的相關(guān)TThreadProgram中獲得字符串。該字符串保證是唯一的,而且若無說明被送到TThreadProgram構(gòu)成程序,則由界面合成一個字符串。NotifyUponGreation(Tlnterest*notifyMe)同步地通知調(diào)用程序有關(guān)系統(tǒng)中每個新任務的生成。沒有(*this)任務目標被涉及。生成調(diào)用的任務是通知的接收方。虛擬存儲器類型圖6是虛擬存儲器類別408的類別圖。TTaskHandle是代表一個任務上的類別,它已在任務類別406中討論過了。對虛擬存儲操作而言,TTasKHandle型的目標用于指定操作發(fā)生的地址空間。大部分可在Mach中執(zhí)行的虛擬存儲器操作表示為TTaskHandle的方法。在虛擬存儲器上操作的這些方法將TMemorySurrogate目標作為參數(shù)。進一步細節(jié)可參見TTaskHandle的多種方法說明。若干存儲器類別具有復制構(gòu)成程序和/或分配運算符。存儲器類別包括對存儲器而非實際存儲器本身的引用。因此,當復制和流入存儲器類別目標時,只有在其中而非實際存儲器的引用被復制。TMemorySurrogate類別包括復制引用的存儲器的直接方法。TMemorySurrogate是一個代表虛地址空間中連續(xù)存儲器范圍的類別。它有一起始地址和容量(以字節(jié)計)。TMemorySurrogate可用于指定在其上進行某些操作的存儲器的范圍。它們通常是作為自變量提供給在與任務相關(guān)的地址空間中操縱虛存的TTaskHandle的方法。這一類別用于指定/提供具有特定容量的存儲區(qū)。該類別本身并不分配任何存儲器。它只是封裝現(xiàn)有存儲器。調(diào)用程序的任務是提供該類別指定的實際存儲器(自變量給構(gòu)成程序)。該類別不可再分類。TChunkyMemory是以指定尺寸的塊管理存儲器的抽象主分類。存儲器被(有指定塊尺寸)分成塊,便對用戶而言存儲器仍視為一系列字節(jié)。TChunkyMemory包括下列方法。locatechunk(size—tlwhere,TMemorySurrogate&amp;theCoutainingRange)在塊集中查找并在theContain-ingRange中返回存儲器和塊尺寸的地址。CutBackTo(sige—twhere)剪切回到包括“where”的塊,即在表中將成為最后一塊的偏移處的塊。AllocateMemoryChunky(TMemorySurrogate&amp;theAllocateRange)由客戶調(diào)用以按需要分配存儲器的新塊。返回分配的范圍。THeapChunkyMemory是在堆陣上管理塊存儲器(chunkymemory)的具體類別。TVMChunkymemery是用虛存管理塊存儲器的具體類別。TMemoryRegionInfo是在任務的地址空間中由虛擬存儲器使用的類別。它提供了存儲器屬性信息(例如繼承,保護等)。它還提供對與存儲區(qū)相關(guān)的存儲器目標以及對存儲區(qū)中封裝的實際存儲范圍進行的訪問。在TMemoryRegion-Info中嵌套定義存儲區(qū)的所有存儲屬性的類別TMemory-AttributeBundle。這在想要獲取/設置所有存儲器屬性時(或在最小改變時重新使用存儲器屬性時)很有用。TMemo-ryAttributeBundle也用于類別TTaskHandle中以涉及把存儲器目標映射到任務的地址空間。TMemoryRegionInfo包括下述方法EMemoryProtection{kReadOnly,KReadWrite,KEx-ecute}指示了存儲器的保護。EMemoryInheritance{KDontInherit,kReadWriteIn-herit,kCopylnherit}指出存儲器繼屬特性。EMemoryAttribute{kCacheable,kMigrateable}指示如何管理存儲器的機器指定特性。EMemoryAdvice{KWillUse,KWontUse}指出如何使用存儲器。TMemoryObjectHandle是代表Mach存儲器類別的概念的主類別。它體現(xiàn)了可映射到虛擬存儲器的數(shù)據(jù)。提供TMemoryObjectHandles給客戶的系統(tǒng)服務器從TMemo-ryObjectHandle中分類以便定義文檔、設備分區(qū)等的特定類型的存儲器目標。對通用虛擬存儲器服務的客戶而言,E-MemoryBehavior{kReferenceSequential,kRefer-enceReverseSequential,kReferenceRandom}指示存儲器如何引用。TMemoryObjectHandle以及各種子類別的主要用處是提供可映射到任務地址空司的數(shù)據(jù)的通用類型和協(xié)約。TChunkyStream是體現(xiàn)由存儲器塊支持的隨機存取流的具體類別(衍生于TRandomAccessStream)。可指定塊尺寸或使用的預置??捎嬎銐K。該類別在無需產(chǎn)生維護連續(xù)存儲器的花費的情況下提供TMemory類別的通用功能。若需要保留TMemory的功能性,則可定義其他類別。TContinuousMemoryStream是采用連續(xù)存儲器(由客戶提供)的具體類別。由于其來自TRndomAccessStream,所以全部隨機存取操作(如Seek)都可用于TContinuous-MemoryStream目標。內(nèi)部處理通信(IPC)類別IPC類別410代表MachIPC消息抽象。所有消息行為都在消息類別上;端口權(quán)類別基本上用于對消息尋址。常用模型最好如下示例一個TIPCMessageStream,將目標流入其中,并由代表目的地發(fā)送權(quán)(作為自變量傳送)的目標調(diào)用TIPCMessageStream::Send方法為接收消息。為接收一個消息,示例TIPCMessageStream并調(diào)用其Receive方法,并在接收權(quán)目標中將其作為自變量傳送。當Receive返回時,目標從TIPCMessageStream目標中流出。該TIPCMes-sageStream目標是可再使用的。參照圖7、圖8和圖9對IPC類別410進行更詳細的說明,圖7示出了IPC消息類別的類別圖702,圖8示出了IPC間接存儲器類別的類別圖802,而圖9是IPC端口權(quán)類別的類別圖902。消息類別MIPCMessage是代表MachIPC消息的抽象主類別。它為設置標題區(qū),安排陣列,以及端口和間接存儲器陣列提供所有方法。它還包括消息發(fā)送和接收的全部協(xié)約。它提供基本協(xié)約(作為保護界面出口)到建立直接消息數(shù)據(jù)的子類別。類別TIPCMessageStream和TIPCPrimitiveMessage從這一類別中衍生,并提供公共方法把數(shù)據(jù)加入消息中。MIPCMessage包括下列方法GetReplyPort(TPortSendSideHandle&amp;replyPort)只對接收側(cè)有效。在其與消息一起發(fā)送時,返回一個響應端口目標。只有在接收消息后第一次調(diào)用時入返回。否則返回偽值。TSecurityTokenGetSendersSecurityToken()只在接收側(cè)有效。返回發(fā)送該消息的任務的保密標記。SetSendersSecurityToken(constTSecurityToken&amp;impostorSecurityToken,constTPortSendRight$hostSecurityPort)上在發(fā)送側(cè)有效。下一次發(fā)達消息時,它將載帶特定的保密標記而非實際進行發(fā)送的任務的標記。其中在下一發(fā)送中有效并轉(zhuǎn)換回到實際發(fā)送程序的保密標記值。發(fā)送/接收IPC消息的方法(注意所有這些方法具有任選的TTime超時值。若無需超時,則指定KPositiveIn-finity。所有這些方法取代位于msg標題中的現(xiàn)有響應端口值。對允許響應端口說明的方法而言,響應端口權(quán)以及端口權(quán)本身的安排通過目標MIPCMessageTReplyPort-Disposition傳送。這是設定響應端口的唯一方式,因為配置狀態(tài)只在發(fā)送期間有效。其配置被移去的端口權(quán)的目標只是在發(fā)送發(fā)生時才無效)Send(constTPortSendSideHandle&amp;destinatiomPortconstTTime&amp;timeout=kPositivelnfinity)是單向非同步發(fā)送。Send(constTPortSendSideHandle&amp;destinationPort,constTReplyPortDisposition&amp;replyPort,constTTime&amp;timeout=kPositiveInfinity)是同步發(fā)送,具有指定的(一次)發(fā)送響應端口。接收(constTPortReceiveSideHandlesourcePort,con-stTTime&amp;timeout=kPositiveInfinity)是“阻斷”接收。SendAndReceive(constTPortSendSideHandle&amp;sendPort,constTPortReceiveSideHandle&amp;receivePort,constTTime&amp;timeout=kPositiveInfinity)送出一條消息,阻塞和接收一個響應(響應編口是從receivePort構(gòu)成的一次發(fā)送權(quán))。SendAndReceive(constTPortSendSideHandle&amp;sendPort,constTPortRe-ceiveSideHandlereceivePort,MIPCMessage&amp;receiveMsg,constTTime&amp;timeout=kPositiveInfinity)發(fā)送消息,阻斷和接收響應(響應端口是從receivePort構(gòu)成的一次發(fā)送權(quán))。消息在一個新消息目標中接收以避免重寫。ReplyAndReceive(constTPortSendSideHandle&amp;replyToPort,constTPortRe-ceiveSideHandle&amp;ReceivePort,constTTime&amp;timeout=kPositiveInfinity)送回一個響應,阻斷和接收一個新消息。ReplayAndReceive(constTPortSendSideHandle&amp;re-plyToPort,constTPortRceeiveSideHandle&amp;receivePort,MIPCMessage&amp;receciveMsg,constTTime&amp;timeout=kPositivelnfinity)送回一個響應,阻塞和接收一個新消息。用于在標題中獲取/設置端口權(quán)區(qū)段的子類別的方法(RemoteandLocalPorts在SEND側(cè),REMOTEPORT指定目的端口而LOCALPORT指定響應端口。在RE-CEIVE側(cè),REMOTEPORT指定響應端口(在響應之前)而LOCALPORT指定接收端口。傳輸(或要用來傳輸)端口的方法返回到Disposition。它可有以下值MACH_MSG_TYPE_(MOVE_RECEIVE_MOVE_SEND,MOVE_SEND_ONCE,COPY_SEND,MAKE_SEND,MAKE_SEND_ONCE.)GetRemotePort在遠地端口權(quán)中傳送和指定配置。PORTRIGHT方法MovePortRightDescriptor發(fā)送方把端口權(quán)給予目的。在發(fā)送權(quán),一次發(fā)送權(quán)和接收權(quán)上工作。CopyPortSendRightDesCriptor發(fā)送程序在目的地生成發(fā)送權(quán)的復制。MakePortSendRightDescriptor在目的地生成一個新發(fā)送權(quán)。MakePortSendOnceRightDescriptor將在目的地生成一個新的一次發(fā)送權(quán)。TIPCMessageStream是提供基于流動的IPC消息抽象。這是用于IPC操作的建議類別。它衍生自MIPCMes-sageDescriptor和TStream。為發(fā)送一個消息,TIPCMesageStream在要發(fā)送的數(shù)據(jù)(包括端口權(quán)(TPortRightHandle衍生結(jié)果),間接存儲區(qū)(TOutOfLineMem-orySurrogate),端口權(quán)陣列(TPortRightHandleArray),包括任意或所有這些的目標,以及需要的任意其他目標或數(shù)據(jù)類型中流動。TIPCMessageStream將自動地為端口權(quán),端口權(quán)陣列,以及消息標題中的間接存儲器建立適當?shù)臄?shù)據(jù)結(jié)構(gòu),并把一個位置保持程序放入該流動以便這些元素可在流動的適當位置處流出該消息。一旦數(shù)據(jù)已流入,就用Send方法發(fā)送消息,從而提供適當?shù)哪康亩丝跈?quán)(TPortSender-Handle)和任意的響應端口。為接收消息可調(diào)用Receive方法,從而為接收端口提供接收權(quán)(TPortReceiverHandle)。剛接到的數(shù)據(jù)則自TIPCMessageStream中流出。TIPCMessage也提供兩種方法進行組合的發(fā)送和接收操作,設計用于提供通用信息傳送語義(并利用Mach微核心程序中的快速通路)。SendAndReceive進行客戶側(cè)同步方式發(fā)送然后在接收中阻斷以選取響應消息。ReplyAn-dReceive進行服務器一側(cè)的響應消息發(fā)送并立即阻斷接收等待下一請求。兩個調(diào)用都要求指定目的端口和接收端口。此外,SendAndReceive方法自動地從提供的接收權(quán)中生成適當?shù)囊淮伟l(fā)送權(quán)并將其作為響應端口一起發(fā)送。TIPCPrimitiveMessage是從MIPCMessage中衍生的具體類別并把一個更基本和低級的界面提供給Mach消息系統(tǒng)。通過獲取和設定調(diào)用為消息標題和正文提供數(shù)據(jù)并從中得到數(shù)據(jù)。它沒有流動能力。這是一個代表MachIPC消息的具體類別。通過在TMemorySurrogate中傳送而將數(shù)據(jù)加到消息上。端口權(quán),陣列,和OOL數(shù)據(jù)用適當方法被直接加入和抽取出來。TOutOfLineMemorySurrogate代表一個將包括在IPC消息中的間接存儲器范圍。它在實施過程中采用TMemorySurrogate并只把配置信息加到StartAddress而且長度信息已包含在了TMemorySurrogate之中。這一類別與TMemorySurrogate一樣,不同之處僅在于在發(fā)送消息時包括配置信息并可代表與范圍相關(guān)的存儲。該類別包括流動操作,設定/獲取范圍的方法以及設定/獲取配置信息的方法。端口權(quán)以下類別代表Mach端口權(quán)的所有有效類型。這些類別都共享下列通用行為通常,當端口權(quán)目標被示例時,它對該權(quán)的核心程序的引用計數(shù)增值,而當端口權(quán)被破壞時,將該引用計數(shù)減值。但是,端口權(quán)目標處理“真正”的核心程序端口權(quán)實體。它們可被復制,從而可以有兩個引用同樣核心程序端口權(quán)實體的目標。這些復制是內(nèi)部引用計數(shù)的,從而當所有引用端口權(quán)的目標被刪除時,該核心程序的端口權(quán)引用計數(shù)被減值。當端口權(quán)成為無效名(即其所屬端口被破壞時),采用代表目標的方法將扔掉一個異常(排除那些象設定引用計數(shù)之類的在無效名上有效的操作)。TPortRightHandle是一個代表端口權(quán)概念的抽象類別。它包括對每種端口權(quán)返回的協(xié)約,例如獲取端口名,請求無效名通知,測試檢查是否端口權(quán)為無效名等。(端口名作為mach_port_name_ttype返回,并作為與Mach服務器交互的方式提供,該服務器不是由目標環(huán)繞程序編寫的)。它還作為通用主類別以使代表所有類型端口的一個類型被多形地傳送。TPortSenderHandle和TPortReceiverHandle衍生于這些類別。該類別包括流動支持方法(這一類別以及任何包括它的類別只可在TIPCMessageStream類別中流入流出。想流入任何其他TStream的企圖將在運行時間導致扔棄一個異常),獲取程序/設置程序,以及請求通知的方法(必須提供通知要送達的一次發(fā)送權(quán)。通過傳送(由引用)一個接收權(quán)而生成一個一次發(fā)送權(quán)。通過采用一個一次發(fā)送權(quán)而MOVE一個一次發(fā)送權(quán))。TPortSenderHandle是代表IPC消息可送達的任意端口權(quán)的抽象類別,即這是MIPCMessageSend作為目的和響應端口的類型。類別TPortSendRightHandle以及TPoriSendOnceRightHandle這一類別而來。該類別包括流動支持的方法,以及獲取程序和設置程序。TPortSendRightHandle代表端口發(fā)送權(quán)。它支持所有可在發(fā)送權(quán)上完成的典型操作。通過把一個有效的TPortReceiveRightHandle或TPortSendRightHandle傳送到構(gòu)成程序,或?qū)⑵淞鞒鯰IPCMessageStream而生成該類別。該類別還包括不影響核心程序的引用計數(shù)而生成空TPortSendRightHandle目標的方法,在當前任務中生成新的發(fā)送權(quán)的構(gòu)成程序,流動支持方法,以及獲取程序和設置程序。TPortSendOnceRightHandle代表端口一次發(fā)送權(quán)。它支持可在一次發(fā)送權(quán)上進行的所有典型操作。通過把一有效TPortReceiveRightHandle送給構(gòu)成程序或?qū)⑵淞鞒鯰IPCMessageStream即可生成該類別。當把消息送到該類別的目標時,使一次發(fā)送權(quán)無效。所有要對該目標進行的發(fā)送都將導致丟棄異常。此外,目標被標記為無效且企圖使用該目標時也將導致產(chǎn)生丟棄異常(除了將目標初始化的方法之外)。這一類別包括生成一個TPortSendOn-ceRightHandle目標的構(gòu)成程序,生成當前任務上的新的一次發(fā)送權(quán)的構(gòu)成程序,以及獲取程序和設置程序。TPortReceiveHandle是代表IPC消息可從其接收的任意端口權(quán)的抽象類別。即,這是MIPCMessge::Receive用作端口進行接收的類型。類引TPortRightReceiveHanlle和TPortSetHandle自該類別衍生而來。該類別包括流動支持方法,以及獲取程序和設置程序。TPortReceiveRightHandle代表端口接收權(quán)。它支持可在接收權(quán)上運行的所有典型操作,例如請求無發(fā)送程序通知,設置和獲取端口的最大消息尺寸及隊列長度,以及設置和獲取其生成的發(fā)送計數(shù)等。若示例一個TPortReceiveR-ightHandle(不是由空的或復制構(gòu)成程序示例),則其導致生成一個端口和接收權(quán)。該復制構(gòu)成程序生成另一目標來引用同一接收權(quán)。這些目標被內(nèi)部地引用計數(shù),從而當引用一個特定接收權(quán)的最后目標被破壞時,也破壞了接收權(quán)和其代表的端口,進而導致所有對于該端口的權(quán)成為無效名。這一類別是代表端口接收權(quán)的具體類別。由定義,在生成接收權(quán)時生成實際的核心程序端口實體,并在接收端口被破壞時破壞。由于該類別是一處理,所以接收權(quán)的生成和刪除連系在一起。例如,預置構(gòu)成程序(construtor其意為C++語言中,在類別的目標生成時自動調(diào)用的成員功能)實際上不生成新權(quán)利,而只生成一個空目標。該類別包括生成一個TPortRe-ceiveRightHandle目標而不生成端口或影響核心程序引用計數(shù)的構(gòu)成程序,生成新的接收權(quán)和端口的構(gòu)成程序,使未初始化目標有效的方法,在處理中生成接收權(quán)(因此端口),流動支持,接收權(quán)/端口操縱方法,獲取程序和設置程序,以及請求通知的方法。TPortSetHandle代表一個端口集,它有對代表端口集中包括的接收權(quán)的TPortReceiveRightHandle目標進行加入,去除和計算的方法,獲取和設置其進行發(fā)送計數(shù)的方法等等。若TPortsetHandle由預置構(gòu)成程序示例,則將生成端口。若其由復制的構(gòu)成程序示例,則將生成端口。若其由復制的構(gòu)成程序示例,則生成同一端口組的別名。當表示一特定端口集的最后目標被刪除時,會破壞該端口集。該類別不能流動。TPortRightHandleArray是代表可作為IPC消息中的間接描述符被發(fā)送的端口權(quán)陣列的具體類別。它可包括各種端口權(quán),以及在陣列中的每個端口權(quán)的配置進行指定(即怎樣將其傳給目標任務)。這一類別實現(xiàn)了可在IPC消息中作為間接描述符(與端口權(quán)和間接存儲)發(fā)送的端口權(quán)陳列。該類別包括流動支持的方法,將元素加入陣列(發(fā)送側(cè))的方法,以及從陣列(接收側(cè))去除元素的方法。TRemotoPortRightHandle是用于引用另一任務中的端口權(quán)的具體類別。它不包括大部分有用的端口權(quán)方法,因為它不希望被用于執(zhí)行那些功能而只想作為遠地端口權(quán)的命名和處理。構(gòu)成這一類別不生成端口權(quán)一它只代表已存在于另一任務中的端口權(quán)。等待組MWaitable以及TWaitGroup是提供消息發(fā)送和同時等待多種消息源能力的類別。TWaitGroup是提供能力以建立由MWaitable衍生的目標集以致線索可用該等待方法從任一MWaitabie目標中接收消息。它還提供接收消息的自動發(fā)送。一個任務反復調(diào)用多次等待操作以接收信息,它們是多線索安全的,以致于可以有多于一個的服務于消息的線索。該類別包括操縱TWaitGroup成員的方法。例如,GetListOfWaitables在該組中返回一個MWaitables表。MWaitable是把端口和內(nèi)部處理方法(HandlelPCMessage)相關(guān)聯(lián)的抽象主類別。它還提供公共主類別以通過TWaitGroup類別收集ReceiveRight以及其他基于Re-ceiveRiglits的類別。TWaitablePortReceiveRightHandle是從TPortRe-ceiveRightHandle和MWaitable中衍生出來的方法類別。它是一個抽象主類別,其子類別可加至TWaitGroup以便為Mach消息IPC的多等待/發(fā)送提供其他MWaitable子類別。同步類別圖10是同步類別412的類別圖1002,它用于調(diào)用Mach的同步服務。如上述,同步類別412采用信標,監(jiān)控程序和條件。TSemaphore是一個提供計數(shù)信標的通用服務的類別。當獲取一個信標(Semaphore,其意是指在多任務中,用于實施互異的鎖定,從而在一個時刻只有一個線索可對共同數(shù)據(jù)進行訪問,一個簡單的信標無論是鎖定的還是釋放的,有時被稱為mutex)時,若一些其他任務已獲取了該信標,則阻斷調(diào)用線索(無異常丟棄)。但若信標由于某種原因無效,則將丟棄一個異常。該類別包括下列方法Acquire以排它模式獲取信標。Acquire(constTTime&amp;maximumWait)以互異模式獲取有超時的信標。AcquireShared()以共享模式獲取信標。AcquireShared(constTTime&amp;maximumWait)以共享模式獲取有超時的信標。Release()釋放以前獲取的信標。AnyThreadsWaiting()若信標現(xiàn)有等待獲取它的線索,則返回真值。TLocalSemaphore是代表可以互異或共享模式獲取的一個計數(shù)信標的類別。其主要操作是獲取和釋放。一個任選的超時值可在獲取操作上指定以限制等待時間。該類別實現(xiàn)“本地”信標,其只可一個在任務中使用并且無恢復語義。TRecoverableSemaphoreHandle是代表其行為與TLocalSemaphore類似但其可以恢復的信標的類別??苫謴托允侵府敵钟性撔艠说木€索異常終止時,調(diào)整計數(shù)并適當?shù)蒯尫湃魏蔚却木€索。在每個這種線索中提出了一個例外,它指示信標被恢復且有關(guān)的用戶數(shù)據(jù)的整體性可能被懷疑。對于以共享方式獲取了信標的線索的異常終止而言,無需在其它線索中產(chǎn)生例外,因為相關(guān)的數(shù)據(jù)只是以只讀方式訪問而且處于一致狀態(tài)。這一類別包括下述方法GetCurrrentHolders返回持有信標的當前線索集。SetRecovered設置信標狀態(tài)為“恢復”,去除以前“損壞”的狀態(tài)。Destroy從系統(tǒng)中去除可恢復的信標。TMonitorEntry是一個代表與一個監(jiān)控程序(monitor,其意是指在多任務中如一個概念實體,它包括數(shù)據(jù),操縱數(shù)據(jù)的功能,以及對數(shù)據(jù)訪問進行控制的鎖。監(jiān)控程序亦可包括對數(shù)據(jù)訪問提供更準確控制的條件)相關(guān)的鎖(有時亦稱為mutex)的類別。該類別的構(gòu)成程序?qū)е芦@取監(jiān)控程序鎖,且現(xiàn)存本地范圍(它導致調(diào)用破壞程序)的動作導致放棄監(jiān)控序鎖。若在該監(jiān)控程序中已有另一任務,則企圖進入該監(jiān)控程序的線索將在TMonitorEntry構(gòu)成程序中被阻斷,直到先前的線索離開該監(jiān)控程序。這一類別包括運算符新和刪除,它們是隱私的以致TMonitorEntry能在堆棧中確定,從而提供有范圍入出口的自動進入的出口(而且相關(guān)的監(jiān)控程序鎖獲取和釋放)。TMonitorCondition是一個代表與某些監(jiān)控程序相關(guān)的條件變量的類別。其主要操作是等待,通知和播放,等待操作導致當前的線索等待將被通知的條件,并在線索被阻斷時放棄監(jiān)控程序鎖定。由在監(jiān)控程序中執(zhí)行的線索調(diào)用通知和播放以指示在條件上等待的一個或全部線索在通知(或廣播)線索退出監(jiān)控程序時被釋放。當釋放一等待線索時,試圖再次獲取監(jiān)控程序鎖定(在廣播時的一個線索),在該點恢復監(jiān)控程序執(zhí)行,一個任選超時值可被指定以限制等待條件所需的時間。除構(gòu)成和破壞之外,所有TMonitorCondition方法必須只從監(jiān)控程序中調(diào)用。TMonitorLock是表示在監(jiān)控程序上的鎖定的類別。它被傳給TMonitorEntry和TMonitorCondition的構(gòu)成程序以指定要獲取的監(jiān)控程序或與之相關(guān)的監(jiān)控程序。調(diào)度類別圖11是調(diào)度類別414的類別圖,用于調(diào)用Mach的調(diào)度服務。TThreadSchedule是體現(xiàn)線索的調(diào)度行為的具體類別。它定義了線索的實際,預置和最優(yōu)先權(quán)。優(yōu)先權(quán)值越低,則其越緊急。每一處理器組都有一可被啟動的TThreadSchedule集和一預置集。可將一個線索分配給任一TThread-schedule,該TThreadschedule可由線索在其上運行的處理器組啟動。優(yōu)先級可設置成TThreadSchedule限定的最大值,但盡量不要采用這一特性。特定的調(diào)度類別(TI-dleSchedule,TServerSchedule等)可為使用。但是(由于在這一類別中沒有純虛擬功能),衍生的類別可在需要時自由生成該類別的目標(但其不可以被要求這樣做)。TThread-Schedule目標(采用多形性)用于指示線索的調(diào)度規(guī)范,以下展示的子類別應用于確定適當?shù)膬?yōu)先權(quán)和范圍。TIdleThreadSchedule是在系統(tǒng)空閑時要運行的那些線索的TThreadSchedule的子類別。它們只在系統(tǒng)空閑時才運行。通常,這一范疇用于空閑時間,維護,或診斷線索。TServerSchedule是服務器線索的TThreadSchedule的具體子類別。服務器線索必須很負責。它們執(zhí)行短時間后便阻斷。對占用相當時間的服務而言,有不同TThread-Schedule(TSupportSchedule)的應被使用。TUserInterfaceSchedule是用于響應和處理應用程序人類界面的那些應用程序任務的TThreadschedule的具傳子類別。它們通常運行短時間并阻斷直到下一交互。TApplicationSchedule是支持應用程序的較長運行部分的線索的使用的一個類別。這類線索運行相當長時間。當激勵一個視窗或應用程序時,在相關(guān)任務中的線索變?yōu)楦o迫以致線索更具響應性。TPseudoRealTimeThreadSchedule是一個類別,它允許任務通過其范圍內(nèi)的級別設定指示它們在確定優(yōu)先級中的相關(guān)緊急度。該任務調(diào)度出口可允許的級別數(shù)量以及預置的主級別。若要求一個級別后其值處于類別范圍之外,則將丟棄一個異常。該類別包括下述方法SetLevel(PriorityLevelsthelevel)設定任務級,數(shù)字越低越緊急。ReturnNumberofLeveis()返回這一調(diào)度目標的緊急級的數(shù)量。ReturnDefaultLevel()返回調(diào)度目標的預置緊急級,它與調(diào)度類別的最高優(yōu)先級相關(guān)。故障類別圖12,13,14和15表示了故障類別416的類別圖12021220,1302,1402,和1502,它們用于調(diào)用Mach的故障服務。對于代表故障消息的類別(如TIPCIdentity-FaultMessage,TIPCIdentityFaultMessage等)而言,必須決定每個消息類型的一個端口。即用戶應確保只將在用于故障處理的任意給定端口接收一類消息。最好是故障類別416包括操作系統(tǒng)114運行于其上的每個處理器106的類別的特定處理器組。替換之,故障類別414通??砂ㄓ糜诙嗵幚砥鞯念悓兕悇e。Motorola—68000類別展示于此以供說明而非限制。本領(lǐng)域技術(shù)人員可以發(fā)現(xiàn)對于基于本文的原理產(chǎn)生其它處理器類別是顯而易見的。TFaultType是代表一個故障的抽象主類別。它被再分類以提供處理器獨有的故障值。它通過處理器和故障標識來辯識故障。以下是TFaultType的三個子類別TMC680X0FaultType代表在Motorola68K處理器上的故障類型。它標識可能的68K類型值和CPU描述符。TMC680X0BadAccessFautType代表在Motorola68K處理器上的錯誤訪問。TMC680X0AddressFaultType代表在Motorola68K處理器上錯誤地址類型。TFaultDesignation是封裝消息應被送往一個任務或線索的目的,故障消息格式,以及故障類型的類別。該類別允許以任務或線索為基礎(chǔ)指示用于特定故障類型的需要類型的故障消息應被送往發(fā)送權(quán)指定的端口。TFaultTypeSet封裝一組故障類型。TFaultDate一類別,用于封裝除處理器狀態(tài)之外的核心程序提供的故障數(shù)據(jù)。并非所有故障都有故障數(shù)據(jù)。故障數(shù)據(jù)提供于故障消息中并來自線索狀態(tài)。TIPCFaultMessage是一類別,用于封裝核心程序發(fā)送的故障消息,它代表獲得故障的線索。它用于接收和回答故障。對可以由故障消息發(fā)出三種可能的數(shù)據(jù)提供了三種子類別。該消息可包括標識故障任務和線索,或故障線索的狀態(tài),或兩種信息。TIPCIdentityFaultMessage封裝包括獲取故障的線索的標識的故障信息,它用來接收和應答該故障。TIPCStateFaultMessage則封裝包括獲取故障的線索的線索狀態(tài)的故障消息,它用于接收和應答該故障。TIPCState-AndIdentityMessage對包括獲得了故障的線索的線索狀態(tài)和標識的故障消息進行封裝,它用于接收和應答該故障。TThreadState是表示線索的CPU狀態(tài)的抽象類別。子類別實際定義了處理器特定格式。在類別中沒有信息。所有工作完成于衍生類別中。所有對CPU狀態(tài)的詢問返回一個TMC680X0State指針,該指針必須在運行時間形成正確的衍生類別目標。衍生子類別針對特定處理器,例如示于圖12、13、14和15中的許多子類別,它們與Motorola68xxx處理器相關(guān)。這類子類別包括TMC680X0CPUState,它是代表線索的680X0CPU狀態(tài)的具體類別。另一個例子包括TMC680X0CPUState,它對可用于所有68K狀態(tài)加以封裝,以及TMC680X0CPUFaultState,它封裝用于所有68K狀態(tài)的68K故障狀態(tài)。主機和處理器組類別圖16是用于機器類別418的類別圖1602。機器類別也稱為主機和處理器組類別,它們用于調(diào)用與Mach機有關(guān)的服務以及多處理器支持。TPrivilegedHostHandle是體現(xiàn)對核心程序的主機目標的特權(quán)端口的具體類別。特權(quán)主機端口是Mach處理器管理的根。特權(quán)主機端口的持有者可以訪問系統(tǒng)的任何端口。由心程序提供的基本特權(quán)處理是對任務持有所控制端口的特權(quán)操作的限制。因此,系統(tǒng)的整體性取決于這一特權(quán)主機端口的封閉保持。該類別的目標可以獲取信息和主機統(tǒng)計,重新引導該系統(tǒng),計算特權(quán)的處理器組,與非CE實體通訊,以及計算處理器。THostHandle是體現(xiàn)對于核心程序的主機目標的命名端口的非特權(quán)具體類別。該類別的目標可返回一些主機信息并返回預置的處理器組。這一類別的目標在從主機中獲取信息(例如核心程序方案,最大CPU數(shù)量,存儲器容量,CPU類型等)時限有用,但不能導致對主機的任何損壞。用戶應該被供給對該類別目標而非高等級特權(quán)的TPrivileged-HostHandle目標的訪問。TProcessorHandle是代表一個處理器的具體類別。可將一個處理器啟動,激勵,加到TPrivileged-ProcessorSetHandle中,處理返回信息,并被送給與實施相關(guān)的控制。TPrivilegedProcessorSetHandle是為處理器端口提供協(xié)議的具體類別。這一類別的目標可以啟動和禁止調(diào)度規(guī)范,設置處理器組的最高優(yōu)先級,返回統(tǒng)計和信息,計算任務和線索,并將線索和任務分配給處理器組??蛻魧@一類別的目標的訪問應被嚴格限制以保護單獨的處理器和處理器組。TProcessorSetHandle是為處理器組命名端口提供協(xié)議的具體類別。這一類別的目標可返回有關(guān)信息組的基本信息(在處理器組中的處理器數(shù)量等),但它們不能導致對處理器組的任何損壞。環(huán)繞程序方法的實現(xiàn)如上所述,Mach和Mach過程界面是眾所周知的。環(huán)繞類別庫402以及其操作方法已在上面定義和敘述過了。由庫402定義的方法的實現(xiàn)通過考慮從庫402中選擇的方法而敘述如下。在相關(guān)領(lǐng)域的一般技術(shù)人員可根據(jù)Mach的已知說明,對庫402的上述討論,以及其后將敘述的環(huán)繞方法實現(xiàn)而清楚地理解實施庫402的方法。下面的CodeExample2示出了從線索類別404的TThreadHandle類別實現(xiàn)的Kill()方法。CodeExample示出了一個稱為“examplel”的例行程序,它包括導致Kill()方法被執(zhí)行的分解語句。<prelisting-type="program-listing"><![CDATA[Copyright,TaligentInc.,1993voidexamplel(TThreadHandle&amp;aThread){TRY{aThread.Kill();//terminatesaThreadimmediatly}CATCH(TKernelException)(Printf("Couldn′tkillthread\n");//erroroccuredtryingtokill}ENDIRY;//…}CODEEXAMPLE1voidTThreadHandle::Kill(){kern_return_terror;if((error=thread_terrninate(fThreadControlPort))!=KERN_SUCCESS)THROW(TKernelExcePtion());//ErrorindicatorCODEEXAMPLE2]]></pre>這里fThreadControlPort是包括類別代表的線索的Mach線索控制端口的TThreadHandle類別的示例變量(instancevariable,是指在C++中包括在目標中用于定義目標的屬性的變量)。TKernelException是在核心程序獲得錯誤時丟棄的C++異常類別。THROW,TRY,CATCH,以及ENDTRY是允許丟棄和捕獲C++異常的C++語言的部分。下面的CodeExample4示出了從任務類別406的TTaskHandle類別中實現(xiàn)sus-pend()方法。在CodeExample3中示出了一個將為“exam-ple2”的例行程序,該程序包括一條導致suspend()方法被執(zhí)行的分解語句。<prelisting-type="program-listing"><![CDATA[voidexample2(TTaskHmandle&amp;aTask){TRY{aTask.SusPend();//suspendallthreadsontaskaTask}CATCH(TKemelException)(Printf("Couldn′tsuspendthreads\n");//erroroccured}ENDTRY;//…}CODEEXAMPLE3voidTTaskHandle::Suspend(){kern_return_terror;if((error=task_suspend(fTaskControlPort))!=KERN_SUCCESS)THROW(TKernelExcePhon());//Errorindicator}CODEEXAMPLE4]]></pre>這里fTaskControlPort是包括類別代表的任務的Mach線索控制端口的TTaskHandle類別的示例變量。TKernelException是在核心程序獲取一個錯誤時丟棄的C++異常類別。THROW,TRY,CATCH以及ENDTRY是丟棄和捕獲C++異常的C++語言部分。以下的CodeEXample6示出了從調(diào)度類別414的TPseudoRealTimeThreadSchedule類別中實現(xiàn)GetLevel()方法。CodeExample5則示出了稱為“example3”的例行程序,該程序包括導致執(zhí)行GetLevel()方法的分解語句。<prelisting-type="program-listing"><![CDATA[voidexarple3(TPseudoRealTirneThreadSchedule&amp;aSchedule){PriorityLevelscurPriority;curPriority=aSchedule.GetLevel();//Getthread’scurrentpriority//…}CODEEXAMPLE5PriorityLevelsTPseudoRealTimeThreadSchedule::GetLevel(){structtask_thread_sched_infoschedInfo;thread_sched_infoschedInfoPtr=schedInfo;mach_msg_type_number_treturnedSize;returnedSize=sizeof(schedInfo);voidthread_info(fThreadControlPort,THREAD_SCHED_INFO,schedInfoPtr,&amp;returnedSize);return(schedInfo.cur_Priority);}CODEEXAMPLE6]]></pre>這里fThreadControlPort是TPseudoRealTimeThread-Schedule類別的示例變量。它包括類別是調(diào)度的線索的Mach線索控制端口。CodeExample8示出了從機器類別418的THostHandle類別中實現(xiàn)GetKernelVersion()方法。在CodeExample7中示出了叫做“example4”的例行程序,它包括導致執(zhí)行GetKernelVersion()方法的分解語句。<prelisting-type="program-listing"><![CDATA[voidexarmple4(THostHandle&amp;aHost){kemel_version_tversion;aHost.GetKernelVersion(&amp;version);//getversionofkernelcurrentlyrunning//…}CODEEXAMPLE7voidTHostHandle::GetKernelVersion(kernel_version_t&amp;theVersion){voidhost_kernel_vetsion(fHostPort,theVerson);}CODEEXAMPIE8]]></pre>這里fHostPort是包括類別表示的主機的Mach主機控制端口的THostHandle類別的示例變量。CodeExample10示出了從IPC類別410的TPortRe-ceiveRightHandle類別實現(xiàn)GetMakeSendCount()方法。CodeExample9示出了稱為“example5”的例行程序,該程序包括導致執(zhí)行CetMakeSendCount()方法的分解語句。正如其名,GetMakeSendCount()方法訪問Mach以檢索與端口關(guān)聯(lián)的發(fā)送計數(shù)。GetMakeSendCount()方法包括調(diào)用mach_Port_get_attributes的語句,它是Mach面向過程的系統(tǒng)調(diào)用,它返回有關(guān)端口的狀態(tài)信息。在GetMake-SendCount()中,fTheTask是包括相關(guān)任務的任務控制端口的TPortRightHandle目標的示例變量,而fThePort-Name是包括由TPortReceiveRightHandle目標代表的端口的端口權(quán)名的TPortReceiveRightHandle的示例變量。<prelisting-type="program-listing"><![CDATA[voidexample5(TPortReceiveRjghtHandle&amp;aReceiveRight){unsignedlongcount;count=aReceiveRight.GetMakeSendCount();//…}CODEEXAMPLE9unsignedlongTPortReceiveRightHandle::GetMakeSendCount(){mach_port_starus_ttheInfo;//portstatusinforeturnedbyMachmach_msg_type_number_ttheSize;//sizeofinforeturnedbyvoidmach_port_get_attributes(fTheTask,fThePortName,MACH_PORT_RECEIVE_STATUS,&amp;theInfo,&amp;theSize);return(theInfo.mps_mscount);}CODEEXAMPLE10]]></pre>本發(fā)明的改型與變化對本發(fā)明
技術(shù)領(lǐng)域
的一般技術(shù)人員而言是顯示易見的。例如,本發(fā)明的范圍包括使過程應用程序以過程方式在由計算機執(zhí)行的程序的運行時間內(nèi)訪問有本機面向目標界面的面向目標的操作系統(tǒng)。本發(fā)明最好由定位應用程序中的過程語句以訪問操作系統(tǒng)提供的服務,將過程語句譯為與操作系統(tǒng)的本機面向目標界面兼容并對應于該過程語句的面向目標的功能調(diào)用。該功能調(diào)用在計算機中執(zhí)行以使操作系統(tǒng)為應用程序提供服務。雖然這在本文中對本發(fā)明的實施例進行了闡述,但其只是為了說明本發(fā)明的原理而非限制。本發(fā)明的范圍只由權(quán)利要求所限定。權(quán)利要求1.一種以面向目標的方式使面向目標的應用程序?qū)哂斜緳C過程界面的操作系統(tǒng)進行訪問的裝置,其特征在于包括(a)計算機;(b)位于計算機中的存儲器部件;(c)編碼庫,其位于存儲器部件中并包括實施一個面向目標的類別庫的計算機程序邏輯,該面向目標的類別庫包括有關(guān)的面向目標的類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng)提供的服務,面向目標類別包括用與操作系統(tǒng)的本機過程界面兼容的過程功能調(diào)用以訪問操作系統(tǒng)服務的方法;(d)在計算機中通過執(zhí)行來自與面向目標的語句相應的類別庫的方法處理由應用程序包括并由類別庫定義的面向目標的語句的裝置;(e)主機裝置,其中的主機代表計算機的抽象,其中包括多個并行操作的處理器且每個處理器組包括至少一個處理器。2.權(quán)利要求1所述裝置,其中的面向目標的類別庫包括面向目標的機器類別,用于以面向目標的方式使應用程序訪問操作系統(tǒng)服務以定義和修改主機和處理器組。3.權(quán)利要求2所述裝置,其中的機器類別包括封裝主機的特權(quán)端口的面向目標類別,該面向目標類別包括以下方法使目標訪問面向目標類別的實例以獲取引導信息和主機統(tǒng)計,以便引導計算機,并通過操作系統(tǒng)的特權(quán)端口計算特權(quán)處理器組和處理器的方法。4.權(quán)利要求2所述裝置,其中的機器類別包括封裝主機的命名端口的面向目標類別,該面向目標類別包括使目標訪問面向目標類別的實例以獲取與主機相關(guān)的有限信息和分配系統(tǒng)預置的處理器組的處理器表的方法。5.權(quán)利要求2所述裝置,其中的機器類別包括定義一個協(xié)議以訪問處理器組控制端口的面向目標類別,該面向目標的類別包括激勵面向目標類別的實例以激勵和禁止調(diào)度策略,從而為一個處理器組設置最大優(yōu)先級,計算與處理器組關(guān)聯(lián)的任務和線索,并為處理器組分配任務和線索。6.權(quán)利要求2所述裝置,其中的機器類別包括定義一個用于訪問處理器組命名端口的協(xié)議的面向目標類別,該面向目標的類別包括激勵面向目標類別的實例以獲取與處理器組相關(guān)的有限信息的方法。7.一種為具有本機過程界面的操作系統(tǒng)提供面向目標的界面的裝置,其特征在于包括(a)計算機;(b)位于計算機中的存儲器部件;(c)編碼庫,其位于存儲器部件中并包括實施一個面向目標的類別庫的計算機程序邏輯,該面向目標的類別庫包括相關(guān)的面向目標的類別,用于使面向目標的應用程序以面向目標的方式訪問操作系統(tǒng)提供的服務,該面向目標類別包括用與操作系統(tǒng)的本機過程界面兼容的過程功能調(diào)用以訪問操作系統(tǒng)服務的方法;其中,由面向目標的類別庫定義的面向目標的語句被加入應用程序以使其以面向目標的方式在計算機執(zhí)行應用程序的運行時間內(nèi)訪問操作系統(tǒng)服務。(d)在面向目標的類別庫中的裝置,包括面向目標的機器類別,用于使應用程序以面向目標的方式訪問操作系統(tǒng),以定義和修改主機和處理器組。8.一種為具有本機過程界面的操作系統(tǒng)提供面向目標的界面的裝置,其特征在于包括(a)計算機;(b)位于計算機中的存儲器部件;(c)編碼庫,其位于存儲器部件中并包括實施一個面向目標的類別庫的計算機程序邏輯,該面向目標的類別庫包括使面向目標的應用程序以面向目標的方式訪問操作系統(tǒng)機器服務以定義和修改主機和處理器組的面向目標的機器類別,該面向目標類別包括用與操作系統(tǒng)的本機過程界面兼容的過程功能調(diào)用訪問操作系統(tǒng)機器服務的方法;其中,由面向目標的類別庫定義的面向目標的語句被插入應用程序以使其以面向目標的方式在計算機執(zhí)行應用程序的運行時間內(nèi)訪問操作系統(tǒng)機器服務。9.權(quán)利要求8所述裝置,其中的機器類別包括封裝主機的特權(quán)端口的面向目標類別,該面向目標類別包括以下方法使目標訪問面向目標類別的實例以獲取引導信息和主機統(tǒng)計,引導計算機,并通過操作系統(tǒng)的特權(quán)端口計算特權(quán)處理器組和處理器。10.權(quán)利要求8所述裝置,其中的機器類別包括封裝主機的命名端口的面向目標類別,該面向目標類別包括使目標訪問面向目標類別的實例以獲取與主機相關(guān)的有限信息和分配給系統(tǒng)預置的處理器組的處理器表的方法。11.權(quán)利要求8所述裝置,其中的機器類別包括定義一個協(xié)議以訪問處理器組控制端口的面向目標類別,該面向目標的類別包括激勵面向目標類別的實例以激勵和禁止調(diào)度策略,從而為一個處理器組設置最大優(yōu)先級,計算與處理器組關(guān)聯(lián)的任務和線索,并為處理器組分配任務和線索。12.權(quán)利要求8所述裝置,其中的機器類別包括定義一個用于訪問處理器組命名端口的協(xié)議的面向目標類別,該面向目標的類別包括激勵面向目標類別的實例以獲取與處理器組相關(guān)的有限信息的方法。13.使面向目標的應用程序以面向目標的方式對位于具有存儲器部件和位于存儲器部件中編碼庫的計算機中并有本機過程界面的過程操作系統(tǒng)進行訪問的方法,其特征在于包括以下步驟(a)實現(xiàn)一個面向目標的類別庫,該面向目標的類別庫包括相關(guān)的面向目標類別,用于使應用程序以面向目標的方式訪問由操作系統(tǒng)提供的服務,該面向目標的類別包括用與操作系統(tǒng)的本機過程界面兼容的過程功能調(diào)用來訪問操作系統(tǒng)服務的方法;(b)通過執(zhí)行來自與面向目標的語句對應的類別庫的方法處理包括在應用程序中并由類別庫定義的面向目標的語句;(c)把計算機的抽象表示為主機,其中,該計算機包括多個并行操作的處理器且每個處理器組包括至少一個處理器。14.權(quán)利要求13所述方法,還包括以面向目標的方式使應用程序訪問操作系統(tǒng)服務以定義和修改主機和處理器組的步驟。15.權(quán)利要求14所述方法,還包括封裝主機的特權(quán)端口的步驟,該面向目標類別包括使目標訪問面向目標類別的實例以獲取引導信息和主機統(tǒng)計,以便引導計算機,并通過操作系統(tǒng)的特權(quán)端口計算特權(quán)處理器組和處理器的方法。16.權(quán)利要求14所述方法,還包括封裝主機的命名端口的步驟,該面向目標類別包括使目標訪問面向目標類別的實例以獲取與主機相關(guān)的有限信息和分配給系統(tǒng)預置的處理器組的處理器表的方法。17.權(quán)利要求14所述方法,還包括定義一個協(xié)議以訪問處理器組控制端口的步驟,該面向目標的類別包括激勵面向目標類別的實例以激勵和禁止調(diào)度策略,從而為一個處理器組設置最大優(yōu)先權(quán),計算與處理器組關(guān)聯(lián)的任務和線索,并為處理器組分配任務和線索的方法。18.權(quán)利要求14所述方法,還包括定義一個用于訪問處理器組命名端口的協(xié)議的步驟,該面向目標的類別包括激勵面向目標類別的實例以獲取與處理器組相關(guān)的有限信息的方法。19.用于為一個過程操作系統(tǒng)提供面向目標的界面的方法,該操作系統(tǒng)具有一本機過程界面且位于一個計算機中,該計算機具有一存儲器部件,該方法的特征在于包括以下步驟(a)把具有實現(xiàn)面向目標的類別庫的計算機程序邏輯的編碼庫存于存儲器部件中,該面向目標的類別庫包括有關(guān)的面向目標的類別用于使面向目標的應用程序以面向目標的方式訪問操作系統(tǒng)提供的服務的相關(guān)的面向目標的類別;(b)用與操作系統(tǒng)的本機過程界面相兼容的功能調(diào)用訪問操作系統(tǒng)服務;(c)由面向目標的類別庫定義面向目標的語句,該語句被插入應用程序以使應用程序以面向目標的方式在計算機執(zhí)行應用程序的操作時間內(nèi)訪問操作系統(tǒng)服務;以及(d)使應用程序以面向目標的方式訪問操作系統(tǒng)服務以定義和修改主機和處理器組。20.用于為一個過程操作系統(tǒng)提供面向目標的界面的方法,該操作系統(tǒng)有一本機過程界面且位于一個計算機中,該計算機具有一存儲器部件,該方法的特征在于包括以下步驟(a)在存儲器部件中存儲一個編碼庫;(b)在存儲器部件中存儲計算機程序邏輯以實施一個面向目標的類別庫,該面向目標的類別庫包括面向目標的機器類別,用于使面向目標的應用程序以面向目標的方式訪問操作系統(tǒng)機器服務以定義和修改主機和處理器組;(c)利用與操作系統(tǒng)的本機過程界面相兼容的過程功能調(diào)用訪問操作系統(tǒng)機器服務;其中,由面向目標的類別庫定義的面向目標的語句被插入應用程序以使其以面向目標的方式在計算機執(zhí)行應用程序的運行時間內(nèi)訪問操作系統(tǒng)機器服務。21.權(quán)利要求20所述方法,還包括封裝主機的特權(quán)端口的步驟,該面向目標的類別包括使目標訪問面向目標類別的實例以獲取引導信息和主機統(tǒng)計,從而引導計算機,并通過操作系統(tǒng)的特權(quán)端口計算特權(quán)處理器組和處理器的方法。22.權(quán)利要求21所述方法,還包括封裝主機的命名端口的步驟,該面向目標類別包括使目標訪問面向目標類別的實例以獲取與主機相關(guān)的有限信息,以及獲取分配給系統(tǒng)預置處理器組的處理器表的方法。23.權(quán)利要求22所述方法,還包括定義一個協(xié)議以訪問處理器組控制端口的步驟,該面向目標的類別包括激勵面向目標類別的實例以激勵和禁止調(diào)度策略,從而為一個處理器組設置最大優(yōu)先級,計算與處理器組關(guān)聯(lián)的任務和線索,并為處理器組分配任務和線索的方法。24.權(quán)利要求23所述方法,還包括定義一個用于訪問處理器組命名端口的協(xié)議的步驟,該面向目標的類別包括激勵面向目標類別的實例以獲取與處理器組相關(guān)的有限信息的方法。全文摘要一種使面向目標的應用程序以面向目標的方式訪問具有本機過程界面的過程操作系統(tǒng)的裝置。該裝置包括一個計算機和位于其中的存儲器并支持主機系統(tǒng)。存儲器中存有一編碼庫,該庫包括實施面向目標的類別庫的計算機程序邏輯,該類別庫包括相關(guān)的面向目標的類別,以使應用程序能以面向目標的方式訪問操作系統(tǒng)提供的服務。文檔編號G06F9/46GK1116881SQ94190996公開日1996年2月14日申請日期1994年1月6日優(yōu)先權(quán)日1993年7月19日發(fā)明者尤金尼·李·博爾頓,凱夏夫·戴塔里申請人:塔里根特公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
肇东市| 灌南县| 葵青区| 鄂尔多斯市| 松溪县| 密山市| 承德县| 宜城市| 弋阳县| 辽宁省| 广元市| 拉萨市| 江陵县| 沧源| 新野县| 石城县| 吉安市| 交城县| 临汾市| 麻城市| 青州市| 古交市| 南城县| 泾川县| 济阳县| 长乐市| 浑源县| 育儿| 永吉县| 安福县| 新绛县| 延吉市| 沂水县| 固始县| 岫岩| 澄迈县| 巨鹿县| 临清市| 寿宁县| 喜德县| 灵武市|