国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      靜態(tài)可驗證進程間通信隔離進程的制作方法

      文檔序號:6569456閱讀:222來源:國知局
      專利名稱:靜態(tài)可驗證進程間通信隔離進程的制作方法
      靜態(tài)可驗證進程間通信隔離進程背景某些操作系統(tǒng)(OS)提供進程隔離和進程間通信。os試圖隔離進程,使得它不能訪問或破壞數(shù)據(jù)或執(zhí)行另一進程的指令。此外,隔離提供用于關(guān)閉進 程并回收其資源而無需其它進程的協(xié)助的清楚的邊界。進程間通信允許進程交換數(shù)據(jù)并信令事件。然而,在進程中的隔離與通信之間存在自然張力。 一般,進程彼此隔離程 度越高,進程彼此通信就越復(fù)雜且可能越昂貴。相反,進程彼此隔離的程度越 低,進程彼此通信就越容易。例如,共享存儲器的進程可被視為具有低程度的隔離。共享存儲器的進程 一般可按照顯然簡單的方式僅通過對共享存儲器直接讀寫來通信。另一方面,如果OS不允許進程共享存儲器,則OS —般提供供進程交換信息的某種機制。為了遵從性能考慮,隔離與通信之間的折衷常規(guī)上按照犧牲隔離的好處的方式來解決。具體地,常規(guī)os通常允許進程之間的共享存儲器。因此,OS甚至使組件位于同一進程內(nèi)以最大化通信。這樣的位于一處的示例有設(shè)備驅(qū)動器、瀏覽器擴展和web服務(wù)插件。為這樣容易訪問而對這樣的組件避開進程隔 離可能會復(fù)雜化或破壞隔離的眾多好處,諸如故障隔離和清除資源管理。當一 個組件故障時,該故障通常令共享的存儲器處于可能致使其余組件不可操作的 不一致或破壞的狀態(tài)中。在另一方面,真正隔離的進程當然享有隔離的好處。然而,這樣隔離的進 程常規(guī)上同進程間通信抗爭。概述此處描述了允許隔離進程之間的靜態(tài)可驗證進程間通信的操作系統(tǒng)的一 個或多個實現(xiàn)。而且,此處描述了便于開發(fā)具有進程間通信的靜態(tài)可驗證隔離 進程的編程工具的一個或多個實現(xiàn)。提供該概述以簡化形式介紹將在以下在詳細描述中進一步描述的概念的 選集。該概述不旨在標識所要求保護的主題的關(guān)鍵特征或本質(zhì)特征,它也不旨 在用于幫助確定所要求保護的主題的范圍。
      附圖簡述
      貫串附圖使用相同的標號來指示同樣的元素和特征。


      圖1是支持此處所述的一個或多個實現(xiàn)的操作系統(tǒng)體系結(jié)構(gòu)的操作場景。
      圖2是支持此處所述的一個或多個實現(xiàn)的操作系統(tǒng)體系結(jié)構(gòu)的另一操作 場景。
      圖3是支持此處所述的一個或多個實現(xiàn)的操作系統(tǒng)體系結(jié)構(gòu)的框圖。 圖4是此處所述的另一方法實現(xiàn)的流程圖。 圖5是此處所述的另一方法實現(xiàn)的流程圖。
      詳細描述
      以下描述示出了允許具有進程間通信能力的隔離進程的操作系統(tǒng)(OS)。 所述OS隔離進程之間的隔離是靜態(tài)可驗證的。隔離進程的可執(zhí)行指令可在編 譯時或運行時或兩者驗證。而且,此處所述了便于開發(fā)隔離進程之間的靜態(tài)可 驗證進程間通信的一個或多個編程語言工具。
      靜態(tài)可驗證進程是可在無需實際執(zhí)行軟件進程的指令的情況下分析其可 執(zhí)行指令的軟件進程。分析確保進程不會以不允許的方式工作和/或干預(yù)其它進 程或操作系統(tǒng)本身的操作。
      此處所述的一個或多個實現(xiàn)采用編程語言工具來創(chuàng)建其中軟件更可能良 好地構(gòu)建、程序行為更易于驗證、且運行時故障可被容忍并緩和的環(huán)境。此處 所述的一個或多個實現(xiàn)的一些特征包括(但不限于)
      ,數(shù)據(jù)在雙向通道上交換,其中每一通道由正好兩個端點組成。在任何時 刻,每一通道端點為單個線程所有(即,為單個進程所有)。
      ,緩沖器和其它存儲器數(shù)據(jù)結(jié)構(gòu)由指針轉(zhuǎn)移,而非通過復(fù)制包含在緩沖器 和存儲器數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)。這些轉(zhuǎn)移傳遞存儲器塊的所有權(quán)。
      ,通道通信由靜態(tài)可驗證通道契約管控,這些契約將消息、消息自變量類型和有效消息交互序列描述為類似于會話類型的有限狀態(tài)機。
      通道端點可在通道上在消息中發(fā)送。因此,通信網(wǎng)絡(luò)可動態(tài)發(fā)展。
      在通道上發(fā)送和接收不需要存儲器分配。
      "發(fā)送是無阻塞且無故障的。無阻塞意味著,發(fā)送不等待通信成功。無故 障意味著通信最后總是成功。實現(xiàn)按以下定義對此達成發(fā)送操作在不等待結(jié) 果的情況下完成。(然而,"通道"可能會發(fā)生故障,這可當在通道上接收時 觀察到。)
      示例性操作系統(tǒng)和編程工具
      圖1示出了支持靜態(tài)可驗證進程間通信軟件隔離進程(SIP)以及對便于 編程這樣的靜態(tài)可驗證進程間通信SIP的編程工具的使用的示例性操作場景。
      圖1示出了在計算機120的存儲器110中存儲和/或執(zhí)行的操作系統(tǒng)100 和編程工具160。計算機120 —般包括各種處理器可讀介質(zhì)(包括存儲器110)。 這樣的介質(zhì)可以是可由計算機120訪問的任何可用介質(zhì),且包括易失性、非易 失性介質(zhì)、可移動和不可移動介質(zhì)。
      計算機120包括存儲一組加載模塊124的計算機存儲設(shè)備122 (例如,硬 盤驅(qū)動器、RAID系統(tǒng)等)和工作存儲器130 (它是存儲器110的一部分或與 存儲器110分開)。
      工作存儲器130也包括交換堆132,它是用于保存信息(諸如對工作存儲 器130中的位置的指針)的緩沖器。此處,交換堆可被稱為"緩沖器"、"共 享交換緩沖器"或與之等效的東西。堆可包括多個可尋址存儲器塊(如框134 所示)。盡管交換堆132整體上可由多個處理器訪問,但各個塊一次為一個進 程所有(當塊在使用時)。然而,存儲器塊的所有權(quán)可與另一活動進程交換。 因此,以此方式,交換堆132提供供SIP交換數(shù)據(jù)的機制。
      如所述,操作系統(tǒng)IOO包括進程構(gòu)造器150模塊。進程構(gòu)造器可以是操作 系統(tǒng)100的內(nèi)核的一部分。處理器構(gòu)造器150根據(jù)一般被表現(xiàn)為存儲在計算機 存儲中的加載模塊的集合的組成組件的動態(tài)集構(gòu)造計算機工作存儲器中的進 程。
      在圖1的示例中,進程構(gòu)造器150構(gòu)造存儲在工作存儲器130中的進程140。如此處所述,根據(jù)加載模塊124構(gòu)造進程140,加載模塊124是進程的擴
      展組件編輯的進程組成組件的表現(xiàn)。
      進程140具有進程清單142,它定義了進程140的內(nèi)容、進程所許可的行 為、以及進程的其它可能的屬性。如此所述,進程清單142與其描述組成的進 程(諸如進程140)直接相關(guān)聯(lián)。
      編程工具160包括模塊和數(shù)據(jù)結(jié)構(gòu)。采用這些,編程工具160幫助開發(fā)進 程的人們用進程的所定義且受限的進程間通信創(chuàng)建靜態(tài)變量和隔離進程。編程 工具160通過使用在編譯時、運行時或兩者實施的強不變性來促進這種開發(fā)。 以下在"驗證"章節(jié)中討論強不變性。
      編程工具160提供靜態(tài)分析工具來幫助編程員在無需耗時的測試和調(diào)試 的情況下找到、更正和/或防止進程間通信錯誤。通過增加確定的靜態(tài)預(yù)計算分 析工具的有效性和適用性,編程工具160還增加了一個或一組編程員將產(chǎn)生沒 有進程間通信相關(guān)錯誤的一個或一組程序的可能性,并進一步減少了產(chǎn)生這樣 的一個或一組程序所需的測試和調(diào)試努力。
      所述編程工具(例如,圖1的編程工具160)采用便于開發(fā)員使用和創(chuàng)建 SIP (如此處所述)的編程構(gòu)造和方法。釆用所述的編程工具,SIP通信可被靜 態(tài)驗證。
      軟件隔離進程
      在計算機科學領(lǐng)域,更具體地在操作系統(tǒng)領(lǐng)域,術(shù)語"軟件進程"(或簡
      稱為"進程")是公知的。應(yīng)用程序通常由一個或多個進程組成。操作系統(tǒng)(os)
      意識到并實際上可管理和監(jiān)督運行在計算機上的一個或多個單獨的進程。
      此處描述了在允許和/或支持軟件隔離進程(SIP)抽象模型的os模型中 操作一個或多個實現(xiàn)。SIP封裝程序或系統(tǒng),并提供信息隱藏、故障隔離和強 接口。根據(jù)所述實現(xiàn),SIP在OS和應(yīng)用程序軟件中貫串使用。
      采用SIP,內(nèi)核外的可執(zhí)行代碼在SIP中執(zhí)行且通過強類型通信通道來通 信。SIP是封閉的環(huán)境,它不允許數(shù)據(jù)共享或動態(tài)代碼加載。SIP在多個方面
      與常規(guī)的OS進程不同。以下是SIP與常規(guī)OS進程不同的這樣的方面的示例
      SIP是封閉的對象空間而非地址空間。兩個SIP不能同時訪問一個對象。進程間的通信轉(zhuǎn)移數(shù)據(jù)的排他所有權(quán)。
      SIP也是封閉的代碼空間。進程不能動態(tài)加載或生成代碼。
      SIP不依賴于存儲器管理硬件來隔離,因此多個SIP可駐留在一物理或 虛擬地址空間中。
      .SIP之間的通信是通過雙向、強類型、高階通道。通道的類型描述其通 信協(xié)議以及它所傳輸?shù)闹?,這兩方面都得到驗證。
      .創(chuàng)建SIP是不昂貴的,且SIP之間的通信造成較低的開銷。其低成本使
      得使用SIP作為精細粒度隔離和擴展機制是實際的。
      ,SIP由操作系統(tǒng)創(chuàng)建和管理,因此在終端上,SIP的資源可被高效回收。 .SIP是獨立的執(zhí)行環(huán)境,甚至對具有不同數(shù)據(jù)布局、運行時系統(tǒng)和垃圾
      收集器而言也是如此。其它的安全語言系統(tǒng)支持一個執(zhí)行環(huán)境。
      此處為方便起見使用術(shù)語"軟件隔離進程"即"SIP"。不旨在限制該概
      念的范圍。實際上,該概念可用軟件、硬件、固件或其組合來實現(xiàn)。 進程間通信
      圖2示出了便于進程間通信而沒有不曾預(yù)料到的SIP之間的交互的示例性 進程間通信(IPC)體系結(jié)構(gòu)200。除允許進程之間的通信以外,示例性IPC 體系結(jié)構(gòu)200可允許進程與操作系統(tǒng)內(nèi)核之間的通信。
      采用示例性IPC體系結(jié)構(gòu)200, SIP通過在通道上發(fā)送消息來排他地通信, 通道是兩個進程之間雙向、行為類型連接。消息是"交換堆"(諸如以上圖1 中的交換堆132)中從發(fā)送進程傳輸?shù)浇邮者M程的值或消息塊的帶標簽集合。 通信由契約來定類型,契約指定消息的格式和沿通道的有效消息序列。
      如圖2所示,示例性IPC體系結(jié)構(gòu)200實現(xiàn)在計算機202上,計算機202 配備存儲器210 (例如,易失性、非易失性、可移動、不可移動等)。操作系 統(tǒng)(212)被示為存儲在存儲器210中,且在計算機202上執(zhí)行。
      OS212具有內(nèi)核220。 OS內(nèi)核220包括進程間通信(IPC)促進器222。 OS內(nèi)核可構(gòu)造一個或多個進程。圖2例如示出了三個運行在存儲器210中的 活動進程(230、 240和250)。
      IPC促進器222促進活動進程(諸如進程230、 240和250)之間的通信。盡管圖2示出了 OS內(nèi)核220實現(xiàn)IPC促進器222,但其它實現(xiàn)可具有OS內(nèi) 核外的IPC促進器。如果這樣,它們各自將與OS合作和/或協(xié)作工作。
      存儲器210也包括交換堆290,它具有多個存儲器塊292。交換堆290可 由多個活動進程(諸如,進程230、 240和250)訪問。它提供供SIP交換數(shù)據(jù) 的機制。
      "Inter-Process Communications Employing Bi-directional Message Conduits (采用雙向消息管道的進程間通信)"公開了關(guān)于示例性IPC體系結(jié)構(gòu)200的 附加細節(jié),該體系結(jié)構(gòu)適于此處描述的一個或多個實現(xiàn)。
      交換堆
      每一SIP維護其自己獨立且私有的堆。SIP不彼此共享存儲器。因此,當 數(shù)據(jù)從一個SIP傳遞到另一 SIP時,所傳遞的數(shù)據(jù)不是來自進程的私有堆的。
      相反,它來自用于保存可在進程之間移動的數(shù)據(jù)的單獨的堆。該單獨的堆是交
      換堆,諸如圖1中所示的交換堆132或圖2中所示的交換堆290。
      SIPO可包含指向其自己私有堆的指針。此外,SIP可包含指向公共交換堆
      的指針。在至少一個所述實現(xiàn)中,交換堆僅包含指向交換堆本身的指針。每一
      SIP可保存指向交換堆的多個指針。然而,交換堆中的每一存儲器塊在系統(tǒng)執(zhí)行的任何時刻至多為一個SIP所有(即,可訪問)。
      當執(zhí)行靜態(tài)驗證時,編程工具160可跟蹤交換堆中存儲器塊的所有權(quán),因
      為每一塊任何時間都至多為一個進程所有。交換堆中的每一塊在任何時間可由
      單個進程訪問的事實也提供了有用的互斥保證。
      通道
      采用IPC體系結(jié)構(gòu)200,通道是由正好兩個端點組成的雙向消息管道。端 點有時被稱為通道對等體。通道無損地并按序傳遞消息。而且,消息通常按發(fā) 送它們的次序被檢索。語義上,每一端點具有接收隊列,且在端點上發(fā)送使一 消息進入對等體上的隊列。
      通道由通道契約描述。換言之,每一通道的契約指定該通道上的進程間通 信約束。例如,契約可指定進程可與哪些其它進程通信以及這樣的通信可如何發(fā)生。通道的兩端一般不是對等的。出于此處的描述性目的, 一個端點被稱為
      導(dǎo)入端(Imp),另一端被稱為導(dǎo)出端(Exp)。它們分別以類型C.Imp和C.Exp
      在類型級別上區(qū)分,其中C是管控交互的通道契約。
      圖2比喻地將通道示為電子插頭、線和出口。在至少一個所述實現(xiàn)中,通 道具有正好且僅兩個端點,每一端點為至多一個進程所有。如所述的,通道260 鏈接進程230和OS內(nèi)核220,并僅具有兩個端點262和264。通道270鏈接進 程240和進程250,且僅具有兩個端點272和274。通道280是初始將進程250 鏈接到自身但仍僅具有兩個端點282和284的新形成的通道。
      這些通道由帶有正好兩個"插頭"(表示端點)的"電線"的圖形比喻表 示。代替導(dǎo)電,這些"線"傳導(dǎo)正為每一參與方發(fā)送和接收的消息("雙向"), 其中"線"被插入。該雙向消息傳遞由通道270旁的有向信封示出。
      IPC體系結(jié)構(gòu)200提供了消息傳遞IPC通信機制。代替使用及時讀寫某些 共享的存儲器(如在某些常規(guī)方法中),IPC體系結(jié)構(gòu)200將進程間通信限于 發(fā)送和接收消息。
      常規(guī)OS消息傳遞方法是單向機制——通?;蛘呔哂幸粋€發(fā)送方和多個接 收方或者具有多個發(fā)送方和一個接收方。與這些常規(guī)方法不同,IPC體系結(jié)構(gòu)
      200的通道是帶有正好兩個端點和至多兩個參與方的雙向機制。
      這由圖2中的通道260和通道270示出。通道260鏈接進程230和OS內(nèi) 核220,且僅具有這兩個端點。通道270鏈接進程240和進程250,且僅具有 這兩個端點。
      如圖2中所示,雙向IPC通道中的每個具有正好兩個通道端點。每一通道 端點一次至多為一個進程所有。例如, 一個通道端點為一個進程所有,而另一 通道端點為另一進程所有或為操作系統(tǒng)的內(nèi)核所有。端點可在通道上轉(zhuǎn)移。這 樣做,這些端點的所有權(quán)也轉(zhuǎn)移。
      IPC促進器222保證每一消息和每一消息的封裝在任何一瞬至多為一個進 程所有。這可通過為每一通道采用通道級抽象來完成。而且,在通道的抽象級, 消息在任何一瞬至多駐留在一個進程的可訪問存儲器中。從通信進程的角度, 消息中包含或可從消息訪問的狀態(tài)從不共享。在至少一個所述實現(xiàn)中,僅在消 息被發(fā)送之前,它才可由消息創(chuàng)建方訪問。在至少一個所述實現(xiàn)中,僅在消息被接收之后,它才可由消息接收方訪問。 所有權(quán)
      通過在編譯時跟蹤交換堆中的所有塊來保證端點與通道上傳輸?shù)钠渌鼣?shù) 據(jù)的存儲器隔離。具體地,靜態(tài)檢査強制對這些資源的訪問在擁有資源的程序 點進行,且方法不會泄露資源的所有權(quán)。所跟蹤的資源具有嚴格的所有權(quán)模型。
      每一資源在任何時刻至多為一個進程所有。例如,如果在自線程T1到線 程T2的消息中發(fā)送一端點,則該端點的所有權(quán)如下改變從T1到消息,然后 在消息接收時到T2。
      在常規(guī)方法中,進程制作數(shù)據(jù)的副本,并傳遞該數(shù)據(jù)。因此,該數(shù)據(jù)現(xiàn)在 為多個進程所有。發(fā)送數(shù)據(jù)的進程可仍對其數(shù)據(jù)副本操作。
      采用至少一個所述實現(xiàn),數(shù)據(jù)的所有權(quán)鏈接至特定的SIP。數(shù)據(jù)的所有權(quán) 與所傳遞的數(shù)據(jù)一起傳遞。從而,進行發(fā)送的SIP—旦在它傳遞數(shù)據(jù)之后就不 能對數(shù)據(jù)操作,因為它不再具有對數(shù)據(jù)的訪問權(quán),且不能對其制作副本。在此 處所述的一個或多個實現(xiàn)中,數(shù)據(jù)為一個SIP所有,且其所有權(quán)在數(shù)據(jù)一旦通 過通道發(fā)送之后隨數(shù)據(jù)一起傳遞。
      類似 地,通道的每一端點為僅一個SIP所有。端點的所有權(quán)隨端點的轉(zhuǎn)移 而傳遞給另一 SIP。 一旦端點被發(fā)送,進行發(fā)送的SIP就不再具有對它剛發(fā)送 的通道端點的訪問權(quán)。
      這種(端點和數(shù)據(jù)的)所有權(quán)的轉(zhuǎn)移經(jīng)由交換堆——諸如圖1中所示的交 換堆132或圖2中所示的交換堆290達成。更具體地,交換堆中的存儲器塊包 含指針(指向主題數(shù)據(jù)或主題端點的存儲器位置)。當在通道上與另一進程交 換時,進行發(fā)送的進程將指向交換堆中存儲器塊的指針傳遞給進行接收的進 程。
      以此方式,進行發(fā)送的進程有效地將主題數(shù)據(jù)傳遞給進行接收的進程,但 未為自己制作或保留副本。而且,進行發(fā)送的進程有效地將主題端點的所有權(quán) 傳遞給進行接收的進程,而未保留所有權(quán)。所有權(quán)轉(zhuǎn)移也可被描述為消息的發(fā) 送方通過在接收方的端點中由消息交換協(xié)議的當前狀態(tài)確定的位置處存儲指 向消息的指針來傳遞所有權(quán)。這些沒有數(shù)據(jù)被復(fù)制的交換可被稱為"零復(fù)制"方法。使用這樣的方法, 磁盤緩沖器和網(wǎng)絡(luò)分組可跨多個通道、通過協(xié)議堆棧并傳輸至應(yīng)用程序進程 內(nèi),而無需復(fù)制發(fā)送數(shù)據(jù)或任何保留發(fā)送數(shù)據(jù)。
      通道契約
      通道契約由此處所述的實現(xiàn)采用以便于促進進程隔離體系結(jié)構(gòu)。通道契約
      (以及進程間通信的其它方面)也在"Inter-Process Communications Employing
      Bi-directional Message Conduits"中描述。
      此處是描述通道上的簡單交互的示例契約
      contract cl ■[ in message Request(int x) requires x>0; out message Reply(int y); out message ErrorO;
      state start: Request1
      -> (Reply! or Error!) -> Start;
      在此示例中,契約C1聲明了三個消息R叫uest (請求)、Reply (回復(fù)) 和Error (出錯)。每一消息聲明指定消息中所包含的自變量的類型。例如, Request和Reply均包含單個整數(shù)值,而Error不攜帶任何值。此外,每一消息 可指定進一步限定自變量的Spec^要求子句。
      消息也可帶有方向標簽。從導(dǎo)出方觀點編寫契約。因此,在此示例中, R叫uest是可由導(dǎo)入方向?qū)С龇桨l(fā)送的消息,而Reply和Error是從導(dǎo)出方向?qū)?入方發(fā)送的。在沒有限定詞的情況下,消息可在兩個方向上行進。
      在消息聲明之后,契約經(jīng)由由發(fā)送和接收動作驅(qū)動的狀態(tài)機指定可允許的 消息交互。所聲明的第一狀態(tài)被視為交互的初始狀態(tài)。示例契約Cl聲明被稱 為Start(開始)的單個狀態(tài)。在狀態(tài)名之后,動作Request指示在Start狀態(tài)中, 通道的導(dǎo)出方愿意接收R叫uest消息。在此之后,結(jié)構(gòu)(Reply! or Error!)指定 導(dǎo)出方發(fā)送(! ) Reply或Error消息之一。最后一部分(->Start)指定交互然 后繼續(xù)到Start狀態(tài),從而無限循環(huán)。稍微更復(fù)雜的示例是網(wǎng)絡(luò)堆棧契約的一部分:
      public contract TcpConnectioncontract ■[
      〃請求
      in message Connect(uint dstiP, ushort dstPort);
      out message ReadyO ;
      //初始狀態(tài)
      state Start : Ready! -> ReadyState;
      state ReadyState : one {
      connect" -> connectResult; BindLocalEndPoint7 -> BindResult; Close1 -> Closed;
      //綁定至本地端點 state BindResult : one ■[ OK! -> Bound;
      lnvalidEndPoint! -> ReadyState;
      in message Listen〇;
      state Bound : one ■[
      Listen" -> UstenResult; Connect -> ConnectResult; Close1 -> Closed;
      契約中的協(xié)議指定用于若干目的。它可幫助檢測編程錯誤,或者在運行時 或者通過靜態(tài)分析工具。運行時監(jiān)控響應(yīng)于在通道上交換的消息而驅(qū)動契約的 狀態(tài)機并注視錯誤的轉(zhuǎn)移。運行時監(jiān)控技術(shù)獨自檢測一個程序執(zhí)行中的錯誤, 但它不能檢測諸如諸如非終止的"活性"錯誤?;钚詫傩允?最終發(fā)生了什么 好事情"形式的屬性,例如"最終程序發(fā)送了消息"。靜態(tài)程序分析可提供進程正確且在所有程序執(zhí)行中都未被卡住的更強的保證。 一般而言,靜態(tài)分析不 限于在一個執(zhí)行發(fā)生時對其監(jiān)控。例如,它可依賴于檢査進程上的指令以便確 定進程最終是否會做什么。在邏輯上存在這不會總是起作用的基本結(jié)果,但它 在眾多情況中可良好地起作用。
      一個實現(xiàn)使用運行時監(jiān)控和靜態(tài)驗證的組合。針對通道的契約檢査通道上 的所有消息,其檢測正確性而非活性問題。此處所述的實現(xiàn)具有驗證安全性屬 性的靜態(tài)檢査器。
      此外,編譯器使用契約來確定通道上可能未完成的消息的最大數(shù)目,這允 許編譯器靜態(tài)分配通道端點中的緩沖器。靜態(tài)分配的緩沖器改善通信性能。
      端點
      通道被表現(xiàn)為表示通道的導(dǎo)入和導(dǎo)出端的一對端點。每一端點具有指定通
      道遵循哪一契約的類型。端點類型是在每一契約內(nèi)隱式聲明的。契約C1被表
      示為類,端點類型為該類內(nèi)的嵌套類型,如下
      Cl.lmp——具有契約Cl的通道的導(dǎo)入端點類型。
      Cl.Exp——具有契約Cl的通道的導(dǎo)出端點類型。
      發(fā)送/接收方法
      每一契約類型包含用于發(fā)送和接收契約中所聲明的消息的方法。示例提供
      以下方法
      Cl.lmp { void SendRequest(int x); void RecvReply(out int y); void RecvErrorO ;
      Cl.Exp { void RecvRequest(out int void sendReply(int y); void SendErrorO ;
      發(fā)送方法的語義為它們異步發(fā)送消息。接收方法阻塞,直到給定消息到達。如果不同的消息首先到達,則發(fā)生錯誤。如果程序通過了契約驗證檢查,則這 樣的錯誤應(yīng)永遠也不會發(fā)生。除非接收方確切知道它接下來要求的是哪一消 息,否則這些方法不適當。
      方法實現(xiàn)
      圖3示出了用于促進靜態(tài)可驗證SIP的有效進程間通信的方法300和400。 這些方法300和400由如圖1和2中所述的各種組件中的一個或多個執(zhí)行。而 且,這些方法300和400可用軟件、硬件、固件或其組合來執(zhí)行。
      在圖3的框302,操作系統(tǒng)(OS)允許在計算機操作系統(tǒng)環(huán)境中執(zhí)行一個 或多個軟件隔離進程(SIP)。
      在框304, OS將特定數(shù)據(jù)集的所有權(quán)與第一 SIP相關(guān)聯(lián)。該數(shù)據(jù)集可以 是諸如圖1中所示的交換堆132或圖2中所示的交換堆290的交換堆中的存儲 器塊。該數(shù)據(jù)集可以是消息。該數(shù)據(jù)集可包括數(shù)據(jù)或指向包含數(shù)據(jù)的存儲器位 置的一個或多個指針。而且,該數(shù)據(jù)集可包括指向通道端點的一個或多個指針。
      在框306, OS將特定數(shù)據(jù)集從第一SIP發(fā)送到第二SIP。此處的發(fā)送可由 向第二SIP提供指向數(shù)據(jù)集(交換堆中)的指針組成?;蛘撸l(fā)送可由向連接 至第二 SIP的通道的端點編寫消息組成。
      在框308, OS將特定數(shù)據(jù)集的所有權(quán)從第一SIP轉(zhuǎn)移到第二SIP。當消息 在通道上發(fā)送時,所有權(quán)從進行發(fā)送的SIP傳遞給進行接收的SIP。進行發(fā)送 的SIP不再保留對該消息的引用。實際上,進行發(fā)送的SIP不再具有對所發(fā)送 消息的訪問權(quán)。
      在發(fā)送306和轉(zhuǎn)移308期間,不保留所發(fā)送信息的任何副本。實際上,不 創(chuàng)建發(fā)送信息的任何副本。由于僅傳遞指向數(shù)據(jù)集的指針(更精確的,是指向 存儲數(shù)據(jù)或指針的存儲塊的指針),因此不創(chuàng)建和發(fā)送任何副本。
      該所有權(quán)不變性由編程工具和操作系統(tǒng)(諸如編程工具160和OS 100) 實施。該所有權(quán)不變性用于至少三個目的第一是防止進程之間的共享。第二 是通過消除消息的指針混疊來促進靜態(tài)程序分析。第三是通過提供可由復(fù)制或 指針傳遞來實現(xiàn)的消息傳遞語義來允許實現(xiàn)的靈活性。
      如圖4中所示,在402,操作系統(tǒng)允許在計算機操作系統(tǒng)環(huán)境中執(zhí)行一個或多個軟件隔離進程(SIP)。
      在框404, OS將特定進程間通信通道的特定端點的所有權(quán)與第一 SIP相 關(guān)聯(lián)。該數(shù)據(jù)集可以是諸如圖1中所示的交換堆132或圖2中所示的交換堆290
      的交換堆中的存儲器塊。該數(shù)據(jù)集可以是消息。該數(shù)據(jù)集可包括一個或多個指 針。該數(shù)據(jù)集可包括指向包含一個或多個指針的存儲器位置的一個或多個指 針。而且,該數(shù)據(jù)集可包括指向通道端點的一個或多個指針。
      在框406, OS將特定進程間通信通道的特定端點從第一 SIP發(fā)送到第二 SIP。此處的發(fā)送可由向第二SIP提供指向特定端點(交換堆中)的指針組成。 或者,發(fā)送可由向連接至第二 SIP的通道的端點編寫消息組成。
      在框408, OS將特定進程間通信通道的特定端點的所有權(quán)從第一 SIP轉(zhuǎn) 移到第二 SIP。當端點所有權(quán)從進行發(fā)送的SIP傳遞到進行接收的SIP時,進 行發(fā)送的SIP不再保留對消息的引用。實際上,進行發(fā)送的SIP不再具有對所 發(fā)送數(shù)據(jù)的訪問權(quán)。
      而且,這種端點所有權(quán)的轉(zhuǎn)移在不創(chuàng)建或傳遞"副本"的情況下進行。由 于僅傳遞指向端點的指針(或指向存儲指向端點的指針的存儲塊的指針),因 此不創(chuàng)建和發(fā)送任何副本。
      驗證
      編程工具160可驗證一個或多個SIP的編程。編程工具160驗證所執(zhí)行的 代碼是類型安全的,并強制由編譯器且在運行時使用強不變性。這樣的強不變 性包括(作為示例而非限制)
      交換堆中的每一塊在任何時刻至多具有一個所有線程(即,進程)。 ,交換堆中的塊僅可由該塊的所有者訪問。因此在塊釋放或所有權(quán)轉(zhuǎn)移后 沒有訪問權(quán)。
      ,實施定義和限制進程之間的通信的通道契約(例如在通道上觀察到的消 息序列對應(yīng)于通道契約)。
      驗證的方法實現(xiàn)
      圖5示出了用于隔離進程的驗證的方法500。該方法500由如圖l和2中所示的各個組件中的一個或多個執(zhí)行。而且,該方法500可用軟件、硬件、固
      件或其組合來執(zhí)行。
      在圖5的框502,在支持SIP的計算機操作系統(tǒng)環(huán)境中編譯一個或多個軟 件隔離進程(SIP)的可執(zhí)行代碼。
      在框504,在編譯時間期間,編程工具160確認,交換堆中的每一存儲器 塊在任何時刻具有至多一個所有進程。這意味著,在任何一個時刻,僅有一個 SIP將擁有任何特定存儲器塊。
      在框506,在編譯時間期間,編程工具160確認,交換堆中的每一存儲器 塊僅可由其合法所有者(例如,SIP)訪問。
      在框508,在編譯時間期間,編程工具160確認,遵循通道契約條款。例 如,工具確認,觀察到控制中所定義的消息的序列。
      編程工具160可向用戶、程序模塊和/或操作系統(tǒng)報告這樣的確認的結(jié)果。 編程工具160可在編譯期間執(zhí)行其驗證。此外,它也可在所生成的中間語言代 碼上驗證這些相同的屬性。而且,編程工具160可再次驗證類型匯編語言的結(jié) 果形式。
      結(jié)論
      此處所述的技術(shù)可用眾多方式實現(xiàn),包括(但不限于)程序模塊、通用或 專用計算系統(tǒng)、網(wǎng)絡(luò)服務(wù)器和裝備、專用電子和硬件、固件,作為一個或多個 計算機網(wǎng)絡(luò)的一部分或其組合。
      此處所述的一個或多個實現(xiàn)可經(jīng)由眾多適于使用的公知計算系統(tǒng)、環(huán)境和 /或配置來實現(xiàn),包括但不限于個人計算機(PC)、服務(wù)器計算機、手持或 膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費者電子器件、 無限電話和裝備、通用和專用設(shè)備、專用集成電路(ASIC)、網(wǎng)絡(luò)PC、薄客 戶機、厚客戶機、機頂盒、小型機、大型機、包括以上系統(tǒng)或設(shè)備中任何一個 的分布式計算環(huán)境等。
      盡管用結(jié)構(gòu)特征和/或方法步驟專用的語言描述了一個或多個上述實現(xiàn), 但可以理解,其它實現(xiàn)可無需此處所述的特定的示例性特征或步驟而實現(xiàn)。相 反,特定的示例性特征和步驟被公開為一個或多個實現(xiàn)的優(yōu)選形式。在某些情況中,可略去或簡化公知特征以闡明示例性實現(xiàn)的描述。而且,為易于理解起
      見,某些方法步驟被描繪為分開的步驟;然而,這些分開描繪的步驟不應(yīng)被解 釋為在其實現(xiàn)時必然次序相關(guān)。
      權(quán)利要求
      1.一個或多個具有處理器可執(zhí)行指令的處理器可讀介質(zhì),當所述指令由處理器執(zhí)行時,執(zhí)行包括以下步驟的方法將特定數(shù)據(jù)集的所有權(quán)與第一進程(240)相關(guān)聯(lián);將所述特定數(shù)據(jù)集從所述第一進程(240)發(fā)送到第二進程(250);將所述特定數(shù)據(jù)集的所有權(quán)從所述第一進程(240)轉(zhuǎn)移到所述第二進程(250),其中所述第一進程(240)在所述轉(zhuǎn)移之后不再具有對所述特定數(shù)據(jù)集的訪問權(quán)。
      2. 如權(quán)利要求1所述的一個或多個介質(zhì),其特征在于,所述數(shù)據(jù)集包括 消息。
      3. 如權(quán)利要求1所述的一個或多個介質(zhì),其特征在于,所述數(shù)據(jù)集包括 一個或多個進程間通信的端點。
      4. 如權(quán)利要求1所述的一個或多個介質(zhì),其特征在于,所述所有權(quán)的轉(zhuǎn) 移通過連接所述第一進程(240)和第二進程(250)的一個或多個進程間通信 管道進行。
      5. 如權(quán)利要求1所述的一個或多個介質(zhì),其特征在于,所述發(fā)送和所述 轉(zhuǎn)移兩者均是在沒有存儲器分配的情況下執(zhí)行的。
      6. 如權(quán)利要求1所述的一個或多個介質(zhì),其特征在于,所述數(shù)據(jù)集是存 儲在所分配的存儲器的可尋址位置中的,所分配的存儲器具有多個可尋址位 置,每一位置可由所述第一和第二進程(240和250)中的任一個訪問但不同 時訪問。
      7. —個或多個具有處理器可執(zhí)行指令的處理器可讀介質(zhì),當所述指令由 處理器執(zhí)行時,執(zhí)行包括以下步驟的方法允許在計算機操作系統(tǒng)環(huán)境中執(zhí)行一個或多個隔離軟件進程,其中所有權(quán)的轉(zhuǎn)移通過一個或多個進程間通信通道進行,其中每一進程間通信通道由兩個 或多個端點組成;經(jīng)由所述進程間通信通道將特定數(shù)據(jù)集從第一進程(240)發(fā)送到第二進 程(250);將由所述第一隔離軟件進程(240)所擁有的對所述特定數(shù)據(jù)集的所有權(quán) 從所述第一隔離軟件進程(240)轉(zhuǎn)移到所述第二隔離軟件進程(250)。
      8. 如權(quán)利要求7所述的一個或多個介質(zhì),其特征在于,所述第一軟件進 程(240)在所述轉(zhuǎn)移之后不再具有對所述特定數(shù)據(jù)集的訪問權(quán)。
      9. 如權(quán)利要求7所述的一個或多個介質(zhì),其特征在于,所述特定數(shù)據(jù)集 被存儲在緩沖器的可尋址位置中,所述緩沖器具有多個可尋址位置,每一位置 可由所述第一或第二隔離軟件進程(240和250)中的任一個訪問,但不可同 時訪問。
      10. —個或多個具有處理器可執(zhí)行指令的處理器可讀介質(zhì),所述指令當由 處理器執(zhí)行時執(zhí)行包括以下步驟的方法-在計算機操作系統(tǒng)環(huán)境上獲取一個或多個隔離軟件進程,其中所獲取的兩 個或多個隔離軟件進程被格式化以可在所述計算機操作系統(tǒng)環(huán)境上執(zhí)行;確認共享交換堆(290)中的任何存儲塊都不可由一個以上的隔離軟件進 程同時訪問,其中這樣的訪問在兩個或多個隔離軟件進程正在執(zhí)行時會發(fā)生, 所述共享交換堆(290)具有一個或多個存儲器塊,且所述一個或多個存儲器 塊中的一個或多個可在執(zhí)行進程時由兩個或多個隔離軟件進程同時訪問。
      全文摘要
      此處描述了允許隔離進程(230、240和250)之間的靜態(tài)可驗證進程間通信的操作系統(tǒng)的一個或多個實現(xiàn)。而且,此處描述了促進具有進程間通信的靜態(tài)可驗證隔離進程的開發(fā)的編程工具的一個或多個實現(xiàn)。
      文檔編號G06F13/00GK101297277SQ200680040117
      公開日2008年10月29日 申請日期2006年10月16日 優(yōu)先權(quán)日2005年10月26日
      發(fā)明者B·斯汀斯嘉德, B·齊爾, C·霍伯利特澤, D·泰迪蒂, G·C·亨特, J·R·勞瑞斯, M·A·范德瑞, M·埃肯, M·阿巴迪, N·墨菲, O·霍德森, P·巴罕姆, S·列維, T·沃伯 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1