亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

對(duì)來(lái)自多處理器系統(tǒng)上的多線(xiàn)程程序的存儲(chǔ)器訪(fǎng)問(wèn)進(jìn)行管理的方法和系統(tǒng)的制作方法

文檔序號(hào):6456802閱讀:405來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):對(duì)來(lái)自多處理器系統(tǒng)上的多線(xiàn)程程序的存儲(chǔ)器訪(fǎng)問(wèn)進(jìn)行管理的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明總體上涉及在多處理器系統(tǒng)上執(zhí)行的多線(xiàn)程應(yīng)用程序之
間的共享存儲(chǔ)器訪(fǎng)問(wèn);更具體地,本發(fā)明涉及使共享存儲(chǔ)器訪(fǎng)問(wèn)成 為確定性事件,以用于例如促進(jìn)虛擬化的多線(xiàn)程應(yīng)用的復(fù)制。
背景技術(shù)
對(duì)線(xiàn)程之間的共享存儲(chǔ)器訪(fǎng)問(wèn)進(jìn)行虛擬化的 一 種安全而簡(jiǎn)單的 方式是登記對(duì)存儲(chǔ)器的每個(gè)訪(fǎng)問(wèn)以及在復(fù)制機(jī)器中重放(replay) 這些訪(fǎng)問(wèn)。這在性能方面尤其低效。
因此,需要使多線(xiàn)程程序的共享存儲(chǔ)器訪(fǎng)問(wèn)具有確定性,例如 以便能夠通過(guò)簡(jiǎn)單地在復(fù)制機(jī)器上重新執(zhí)行應(yīng)用程序的代碼而在備 份機(jī)器上對(duì)在主機(jī)器上虛擬化的應(yīng)用進(jìn)行復(fù)制。
一個(gè)主要的用途可能是在容錯(cuò)系統(tǒng)中。在容錯(cuò)系統(tǒng)中,應(yīng)用運(yùn) 行在主機(jī)器上,并且其執(zhí)行被完全復(fù)制在第二機(jī)器上(以便在主機(jī) 器失效時(shí)進(jìn)行恢復(fù))。通過(guò)記錄和重放產(chǎn)生非確定性結(jié)果的事件或 者重新執(zhí)行用于復(fù)制產(chǎn)生確定性結(jié)果的事件的代碼來(lái)實(shí)現(xiàn)復(fù)制。使 得多線(xiàn)程程序進(jìn)行的共享存儲(chǔ)器訪(fǎng)問(wèn)具有確定性的另 一種用途是調(diào) 試虛擬化程序,該調(diào)試通過(guò)將代碼(此情況下在同一機(jī)器上)重新 執(zhí)行所需的次數(shù)來(lái)進(jìn)行。
進(jìn)程針對(duì)可寫(xiě)共享存儲(chǔ)器區(qū)域的交替執(zhí)行是一種潛在的非確定 性資源。為了能夠使得共享存儲(chǔ)器訪(fǎng)問(wèn)具有確定性,需要記錄并發(fā) 進(jìn)程訪(fǎng)問(wèn)共享存儲(chǔ)器的順序。在單處理器機(jī)器的情況下,可以?xún)H僅 通過(guò)每個(gè)調(diào)度周期登記一條記錄來(lái)優(yōu)化記錄操作。代替登記對(duì)共享 存儲(chǔ)器區(qū)域的每個(gè)訪(fǎng)問(wèn),如果記錄指定進(jìn)程標(biāo)識(shí)符,連同在調(diào)度周期內(nèi)所訪(fǎng)問(wèn)的第 一 條指令的位置以及在該調(diào)度周期結(jié)束以前該進(jìn)程 所執(zhí)行的用戶(hù)指令的數(shù)目,則在訪(fǎng)問(wèn)共享存儲(chǔ)器區(qū)域的每個(gè)調(diào)度周 期登記一條記錄是足夠的。因此,對(duì)于一個(gè)調(diào)度周期,共享存儲(chǔ)器 訪(fǎng)問(wèn)已變?yōu)榇_定性事件。為了在備份機(jī)器中重現(xiàn)此事件,恢復(fù)調(diào)度 周期的記錄以及重新執(zhí)行此周期的代碼就已足夠。
為了將此優(yōu)化法擴(kuò)展至多處理器機(jī)器,需要將單處理器互斥屬 性強(qiáng)制為對(duì)共享存儲(chǔ)器區(qū)域的串行訪(fǎng)問(wèn)。轉(zhuǎn)讓給國(guó)際商業(yè)機(jī)器公司
的法國(guó)專(zhuān)利申請(qǐng)WO2006/077261描述了如何實(shí)現(xiàn)多處理器系統(tǒng)上的 多進(jìn)程應(yīng)用的確定性重放。其中描述了共享存儲(chǔ)器訪(fǎng)問(wèn)控制機(jī)制; 該機(jī)制使用處理器的存儲(chǔ)器管理單元(MMU)。對(duì)訪(fǎng)問(wèn)共享存儲(chǔ)器 的控制是通過(guò)對(duì)一個(gè)處理器的MMU (存儲(chǔ)器管理單元)硬件設(shè)備進(jìn) 行編程以允許授權(quán)訪(fǎng)問(wèn)存儲(chǔ)器頁(yè)面來(lái)實(shí)現(xiàn)的,其他處理器的MMU -故編程為拒絕對(duì)同 一 頁(yè)面的任何訪(fǎng)問(wèn)。
在調(diào)度周期內(nèi),在多處理器機(jī)器上,給予每個(gè)單獨(dú)的進(jìn)程對(duì)共 享存儲(chǔ)器的排他性訪(fǎng)問(wèn)權(quán)。利用進(jìn)程的頁(yè)表在每個(gè)調(diào)度周期內(nèi)將訪(fǎng) 問(wèn)權(quán)選擇性地授予單個(gè)進(jìn)程。然而,在多線(xiàn)程程序的情況下,參與 的進(jìn)程共享它們的地址空間;通過(guò)利用共享頁(yè)表來(lái)應(yīng)用單處理器解 決方案會(huì)影響整個(gè)線(xiàn)程組。進(jìn)一步地,與單處理器環(huán)境中的進(jìn)程相 比,整個(gè)地址空間會(huì)在線(xiàn)程之間共享,并且為了監(jiān)視和控制這些地 址,必須跟蹤對(duì)共享地址空間的可寫(xiě)部分的任何訪(fǎng)問(wèn)。這意p木著, 即使存儲(chǔ)器頁(yè)面是共享的,每個(gè)任務(wù)也可以具有其自己的私有存儲(chǔ) 器描述符集合。對(duì)于多線(xiàn)程程序卻不是這種情況,在多線(xiàn)程程序中, 所有的存儲(chǔ)器描述符是共享的。此專(zhuān)利申請(qǐng)建議為了跟蹤創(chuàng)建不 止一個(gè)線(xiàn)程的一個(gè)任務(wù)的共享存儲(chǔ)器訪(fǎng)問(wèn),頁(yè)表?xiàng)l目的結(jié)構(gòu)需要擴(kuò) 展為在每個(gè)任務(wù)內(nèi)克隆的每個(gè)線(xiàn)程,其中每個(gè)任務(wù)按照本發(fā)明所描 述地進(jìn)行監(jiān)視。該發(fā)明的原理可以應(yīng)用到每個(gè)任務(wù)或者一個(gè)任務(wù)內(nèi) 的每個(gè)線(xiàn)程,對(duì)共享存儲(chǔ)器頁(yè)面的訪(fǎng)問(wèn)在調(diào)度器所定義的激活周期 的整個(gè)持續(xù)時(shí)間內(nèi)是排他的。在此周期期間,共享存儲(chǔ)器頁(yè)面保持 一致。因此,需要擴(kuò)展內(nèi)核的虛擬存儲(chǔ)器管理模塊以使得現(xiàn)有技術(shù)的 共享存儲(chǔ)器訪(fǎng)問(wèn)串行化機(jī)制能夠應(yīng)用于完全共享其整個(gè)存儲(chǔ)器空間 的多線(xiàn)程程序(而不是只共享其存儲(chǔ)器空間的子集的進(jìn)程)。
美國(guó)專(zhuān)利號(hào)6854108描迷了 一種用于確定性地重放在多處理器 上的分布式多線(xiàn)程程序的可觀察運(yùn)行時(shí)間行為的方法。該方法依賴(lài) 于對(duì)JVM中鎖定例程的使用。此方案意味著改動(dòng)JVM并且受限于 運(yùn)行在JVM頂層的純Java應(yīng)用,還受限于所有存儲(chǔ)器訪(fǎng)問(wèn)必須由 JVM將進(jìn)行的鎖定來(lái)保護(hù)的事實(shí)。
需要提供一種應(yīng)用于多處理器計(jì)算機(jī)上的多線(xiàn)程進(jìn)程的共享存 儲(chǔ)器訪(fǎng)問(wèn)控制,該共享存儲(chǔ)器訪(fǎng)問(wèn)控制是通用的并且可透明地應(yīng)用 于任何類(lèi)型的應(yīng)用。

發(fā)明內(nèi)容
因此,本發(fā)明的一個(gè)目的是使得多線(xiàn)程程序的共享存儲(chǔ)器訪(fǎng)問(wèn) 可監(jiān)視且可控制,以便串行化這些訪(fǎng)問(wèn)并將其變成確定性事件。 本發(fā)明的另一目的是提供一種透明地實(shí)施于應(yīng)用的方法。 本發(fā)明的又一目的是使用已有方法來(lái)管理對(duì)多處理器環(huán)境中的 共享資源的訪(fǎng)問(wèn),該方法以更有效的方式為任何任務(wù)或線(xiàn)程提供了 ^卜他性訪(fǎng)問(wèn)。
如權(quán)利要求1中所要求的,這些目的通過(guò)一種用于控制由多處 理器計(jì)算機(jī)上執(zhí)行的進(jìn)程所創(chuàng)建的線(xiàn)程對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)的方法來(lái)實(shí)
現(xiàn),所述方法包括
-進(jìn)程請(qǐng)求創(chuàng)建新線(xiàn)程;
-在存儲(chǔ)器描述符中分配新頁(yè)表目錄,以及創(chuàng)建已有線(xiàn)程的頁(yè)表的
畐'J本; -等待事件;
-當(dāng)發(fā)生頁(yè)面錯(cuò)誤時(shí),對(duì)指示頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的兩個(gè) 4立進(jìn)4亍測(cè)"^式;
-如果頁(yè)面存在并且可寫(xiě),并且如果測(cè)試到線(xiàn)程將要退出,則-授權(quán)導(dǎo)致頁(yè)面錯(cuò)誤的線(xiàn)程訪(fǎng)問(wèn)頁(yè)面,以及設(shè)置指示頁(yè)面存在于
存儲(chǔ)器中并且可寫(xiě)的位; -執(zhí)行等待事件的步驟; -如果頁(yè)面存在并且可寫(xiě),如果另一線(xiàn)程具有對(duì)該頁(yè)面的訪(fǎng)問(wèn)權(quán)并
且等待其他線(xiàn)程釋放該頁(yè)面,則等待其他線(xiàn)程釋放; -當(dāng)線(xiàn)程已經(jīng)釋放訪(fǎng)問(wèn)權(quán)時(shí),
-授權(quán)導(dǎo)致頁(yè)面錯(cuò)誤的所述線(xiàn)程訪(fǎng)問(wèn)所述頁(yè)面,以及設(shè)置指示頁(yè) 面存在于存儲(chǔ)器中并且可寫(xiě)的位; -執(zhí)行等待事件的步驟。
根據(jù)權(quán)利要求2,上述目的還可以如此實(shí)現(xiàn),權(quán)利要求1的方法 還包括
步驟之后,如果頁(yè)面不存在或者不可寫(xiě),則讓內(nèi)核來(lái)處理所述頁(yè)面 錯(cuò)誤;
-通過(guò)測(cè)試相應(yīng)的位來(lái)測(cè)試所述新頁(yè)面在由內(nèi)核進(jìn)程創(chuàng)建之后是否 可寫(xiě);
-如果所述新頁(yè)面可寫(xiě),則重置所述新頁(yè)面的存在位; -將所述內(nèi)核創(chuàng)建的頁(yè)表?xiàng)l目傳播到所有線(xiàn)程的其他頁(yè)表; -執(zhí)行等待事件的步驟。
這些目的也可以通過(guò)針對(duì)優(yōu)選實(shí)施方式的解決方案的權(quán)利要求 3-4的方法來(lái)實(shí)現(xiàn),以及針對(duì)第二實(shí)施方式的兩頁(yè)表結(jié)構(gòu)的權(quán)利要求 5-7的方法來(lái)實(shí)現(xiàn)。
這些目的也可以通過(guò)根據(jù)權(quán)利要求8的計(jì)算機(jī)程序和根據(jù)權(quán)利 要求9的系統(tǒng)來(lái)實(shí)現(xiàn)。
本發(fā)明的解決方案允許針對(duì)在多處理器系統(tǒng)上執(zhí)行的每個(gè)多線(xiàn) 程應(yīng)用管理引用共享存儲(chǔ)器頁(yè)面的獨(dú)立的存儲(chǔ)器描述符。
使得多線(xiàn)程程序的共享存儲(chǔ)器訪(fǎng)問(wèn)可監(jiān)視和可控制,除了獲得 本發(fā)明的主要目的之外,還具有其他優(yōu)勢(shì)如下 -性能當(dāng)粒度變化時(shí),共享存儲(chǔ)器訪(fǎng)問(wèn)控制可以改善應(yīng)用性能(時(shí)
8間從指令持續(xù)時(shí)間到調(diào)度周期持續(xù)時(shí)間,空間從4字節(jié)的字到
4K字節(jié)的頁(yè)面),因?yàn)槠錅p少了共享對(duì)象的竟?fàn)幈嚷省?br> -根據(jù)本發(fā)明第三目的所描述的解決方案非常有效,足以?xún)?yōu)化處理
器中已有硬件功能的使用。如在優(yōu)選實(shí)施方式的詳細(xì)描述中所提到
的,本發(fā)明的解決方案不僅通過(guò)避免處理器中的硬件改動(dòng)而且通過(guò)
避免操作系統(tǒng)的內(nèi)核中的某些重大軟件變化,限制了對(duì)已有計(jì)算機(jī)
的重大改動(dòng)。
-非虛擬化任務(wù)不受改動(dòng)的影響。原始的存儲(chǔ)器管理系統(tǒng)保持用于
非虛擬化任務(wù)。對(duì)于可能具有不可預(yù)知結(jié)果的所有任務(wù),其他解決
方案可能使所述改動(dòng)全局化。此解決方案則可以選擇性地實(shí)施。例
如,對(duì)于所有任務(wù)來(lái)說(shuō),額外使用存儲(chǔ)器可能是不可接受的。同樣,
某些任務(wù)可能不支持粒度變化正常的訪(fǎng)問(wèn)控制(硬件準(zhǔn)許的)是
針對(duì)一條指令以及存儲(chǔ)器中一個(gè)存儲(chǔ)器字的大小,即使沒(méi)有觀察或 控制其的空間。不利影響的一個(gè)例子是兵乓效應(yīng),在此效應(yīng)中,兩
個(gè)任務(wù)交替訪(fǎng)問(wèn)共享頁(yè)面本發(fā)明的解決方案阻止了此情況的出現(xiàn), 因?yàn)槔脮r(shí)間片來(lái)分配排他性存儲(chǔ)器字,下一任務(wù)必須等待大約數(shù) 千條指令。對(duì)此存在一種解決方案修改應(yīng)用以允許通過(guò)特定指令 明確釋放頁(yè)面。


圖1示出了未實(shí)施本發(fā)明時(shí)多線(xiàn)程應(yīng)用中的存儲(chǔ)器描述符的結(jié)
構(gòu);
圖2示出了根據(jù)本發(fā)明的優(yōu)選實(shí)施方式的每個(gè)任務(wù)一個(gè)表的存 儲(chǔ)器描述符的結(jié)構(gòu);
圖3示出了根據(jù)第二實(shí)施方式的存儲(chǔ)器描述符的簡(jiǎn)化結(jié)構(gòu); 圖4是根據(jù)優(yōu)選實(shí)施方式的方法的流程圖; 圖5是根據(jù)第二實(shí)施方式的方法的流程圖。
具體實(shí)施方式
在非多線(xiàn)程應(yīng)用中,為了有效地重現(xiàn)共享存儲(chǔ)器訪(fǎng)問(wèn)的順序, 在調(diào)度周期內(nèi)對(duì)單獨(dú)的進(jìn)程給予對(duì)共享存儲(chǔ)器的排他性訪(fǎng)問(wèn)權(quán)。# ,J 用進(jìn)程的頁(yè)表在每個(gè)調(diào)度周期內(nèi)選擇性地授予單個(gè)進(jìn)程訪(fǎng)問(wèn)權(quán)。然 而,在多線(xiàn)程程序的情況下,參與的進(jìn)程共享它們的地址空間,利 用共享頁(yè)表會(huì)影響整個(gè)線(xiàn)程組。進(jìn)一步地,與非多線(xiàn)程應(yīng)用中的進(jìn) 程相比,整個(gè)地址空間會(huì)在線(xiàn)程之間共享,并且為了監(jiān)視和控制這 些地址,必須跟蹤對(duì)共享地址空間的可寫(xiě)部分的任何訪(fǎng)問(wèn)。繼而, 在容錯(cuò)系統(tǒng)中用于復(fù)制多線(xiàn)程程序?qū)蚕淼刂房臻g訪(fǎng)問(wèn)的訪(fǎng)問(wèn)信,包-被登記,并且將會(huì)用于通過(guò)在備份機(jī)器中重新執(zhí)行程序代碼來(lái)重放 這些i方問(wèn)。
為了跟蹤進(jìn)程訪(fǎng)問(wèn)共享存儲(chǔ)器區(qū)域的順序,通過(guò)改變跟蹤訪(fǎng)問(wèn) 的空間和時(shí)間粒度,涌現(xiàn)了各種設(shè)計(jì)選擇??臻g粒度可以從單個(gè)存 儲(chǔ)器位置改變至頁(yè)面、整個(gè)地址空間,而時(shí)間粒度可以從單條指令 訪(fǎng)問(wèn)共享區(qū)域改變至整個(gè)調(diào)度周期。通過(guò)在指令級(jí)別粒度跟蹤對(duì)單 個(gè)存儲(chǔ)器位置的訪(fǎng)問(wèn),可以準(zhǔn)確地重現(xiàn)主機(jī)器上的應(yīng)用的執(zhí)行。然 而,這么做既不是所希望的也不可行。
內(nèi)核線(xiàn)程的傳統(tǒng)實(shí)現(xiàn)為整個(gè)線(xiàn)程組提供了單頁(yè)表。為了跟蹤存 儲(chǔ)器訪(fǎng)問(wèn)的順序,可以采用以下技術(shù)。修改共享頁(yè)表以拒絕對(duì)地址 空間的所有可寫(xiě)部分的訪(fǎng)問(wèn)。這么做會(huì)迫使任何線(xiàn)程嘗試訪(fǎng)問(wèn)此區(qū) 域從而導(dǎo)致頁(yè)面錯(cuò)誤。在頁(yè)面錯(cuò)誤處理機(jī)中,登記該訪(fǎng)問(wèn),并且在 臨時(shí)激活對(duì)該存儲(chǔ)器位置的訪(fǎng)問(wèn)權(quán)的情況下重新執(zhí)行當(dāng)前指令。這 確保登記了每個(gè)線(xiàn)程對(duì)共享存儲(chǔ)器的每個(gè)訪(fǎng)問(wèn)。然而,此方法也強(qiáng) 加了由于攔截每個(gè)存儲(chǔ)器訪(fǎng)問(wèn)而導(dǎo)致的高開(kāi)銷(xiāo)。
為了提高前述方法的效率,可以將粒度從指令級(jí)別的粒度改變 到調(diào)度周期的粒度。這要求在調(diào)度周期期間的訪(fǎng)問(wèn)互斥性,并且通 過(guò)維持同步的頁(yè)表集合,線(xiàn)程組中每個(gè)線(xiàn)程一個(gè)表,有可能選擇性 地給予單獨(dú)的進(jìn)程整個(gè)調(diào)度周期的訪(fǎng)問(wèn)權(quán)。當(dāng)調(diào)度線(xiàn)程運(yùn)行時(shí),相
應(yīng)的頁(yè)表加載到MMU上下文中。
用于每個(gè)線(xiàn)程組的頁(yè)表集合必須完全同步。只允許在跨集合中的兩個(gè)頁(yè)表的相應(yīng)條目之間的存在標(biāo)記有所差別。無(wú)論何時(shí)修改任 一頁(yè)表的條目,此變化必須傳播到其余頁(yè)表。很多內(nèi)核子系統(tǒng)(例
如aio、 swap等)修改頁(yè)表,并且在每個(gè)實(shí)例中,此修改必須傳播到 該組中的每個(gè)頁(yè)表。
存儲(chǔ)器粒度是要考慮的另一維度。字節(jié)(或者存儲(chǔ)器字)級(jí)別 粒度將提供用于跟蹤共享存儲(chǔ)器訪(fǎng)問(wèn)的順序所需的串行化的最佳程 度。如果存儲(chǔ)器的單位是頁(yè)面,則將會(huì)拒絕竟?fàn)幍倪M(jìn)程對(duì)整個(gè)頁(yè)面 的訪(fǎng)問(wèn),而不是僅僅拒絕對(duì)竟?fàn)幬恢玫脑L(fǎng)問(wèn)。當(dāng)同一頁(yè)面中放置了 對(duì)多個(gè)資源的鎖時(shí),這尤其將是個(gè)問(wèn)題。串行化對(duì)頁(yè)面的訪(fǎng)問(wèn)將會(huì) 串行化對(duì)整個(gè)資源集合的訪(fǎng)問(wèn)。盡管希望字級(jí)別的粒度,但是其取 決于底層架構(gòu)所使用的存儲(chǔ)器的單位。典型的MMU架構(gòu)為了最優(yōu) 化頁(yè)表大小,以頁(yè)面級(jí)別粒度來(lái)管理存儲(chǔ)器。
對(duì)于另一極端,如果使用地址空間級(jí)別粒度,在調(diào)度周期期間 提供排他性訪(fǎng)問(wèn)所需的頁(yè)表的數(shù)目可以壓縮為2個(gè),而不管線(xiàn)程組 中線(xiàn)程的數(shù)目。為了向一個(gè)線(xiàn)程提供對(duì)可寫(xiě)地址空間的排他性訪(fǎng)問(wèn), 該線(xiàn)程的頁(yè)表中的相應(yīng)條目會(huì)被標(biāo)記為存在,而其余頁(yè)表中的可寫(xiě) 條目會(huì)被標(biāo)記為不存在。由于已被拒絕訪(fǎng)問(wèn)地址空間的線(xiàn)程的頁(yè)表 是一樣的,因此可以使用一個(gè)頁(yè)表(稱(chēng)為反頁(yè)表)。事實(shí)上,反頁(yè) 表的實(shí)際條目是不相關(guān)的,因?yàn)樗鼈儚臎](méi)有在頁(yè)面轉(zhuǎn)換中使用。反 頁(yè)表僅用于當(dāng)從被拒絕訪(fǎng)問(wèn)的線(xiàn)程的上下文進(jìn)行存儲(chǔ)器訪(fǎng)問(wèn)時(shí),強(qiáng) 制出錯(cuò)。當(dāng)線(xiàn)程應(yīng)當(dāng)被拒絕訪(fǎng)問(wèn)地址空間時(shí),其頁(yè)表被切換到反頁(yè) 表,反之亦然。
以下描述針對(duì)Linux內(nèi)核上下文中的線(xiàn)程的共享存儲(chǔ)器排他性 訪(fǎng)問(wèn)機(jī)制的實(shí)現(xiàn)以及Linux分頁(yè)模型。盡管此描述使用Linux特定的 術(shù)語(yǔ),但是本方法非常通用,足以應(yīng)用于其他操作系統(tǒng)和架構(gòu)。
為了提供對(duì)共享存儲(chǔ)器的排他性訪(fǎng)問(wèn),將本發(fā)明應(yīng)用于現(xiàn)有技 術(shù)的專(zhuān)利申請(qǐng),實(shí)施應(yīng)當(dāng)提供無(wú)縫授予單個(gè)進(jìn)程訪(fǎng)問(wèn)權(quán)以及在任何 其他線(xiàn)程嘗試訪(fǎng)問(wèn)該區(qū)域時(shí)引起錯(cuò)誤的能力。為此目的,使用在大 部分現(xiàn)代架構(gòu)中可用的分頁(yè)機(jī)制。"page_present (頁(yè)面—存在)"位
ii指示在物理存儲(chǔ)器中是否分配了特定頁(yè)面,當(dāng)向另一進(jìn)程指派對(duì)頁(yè) 面的排他性訪(fǎng)問(wèn)時(shí),該位會(huì)被人工重置以觸發(fā)頁(yè)面錯(cuò)誤。這么^f故可 能潛在地干擾常規(guī)分頁(yè)機(jī)制。通過(guò)增加頁(yè)面的使用計(jì)數(shù)器來(lái)捕獲頁(yè) 面上的鎖,避免了上述情況,使得內(nèi)核交換器永遠(yuǎn)不會(huì)交換該頁(yè)面。
圖1示出了未實(shí)施本發(fā)明時(shí)多線(xiàn)程應(yīng)用中的存儲(chǔ)器描述符的結(jié) 構(gòu)。其示出了頁(yè)表如何被常規(guī)線(xiàn)程共享的示意圖。在圖1中,示出 了在包括虛擬存儲(chǔ)器管理的大部分操作系統(tǒng)中可以找到的頁(yè)表層級(jí) 的一個(gè)例子。存儲(chǔ)器描述符(110)由需要訪(fǎng)問(wèn)存儲(chǔ)器的進(jìn)程的所有
線(xiàn)程(100)訪(fǎng)問(wèn)。存儲(chǔ)器描述符是頁(yè)表層級(jí)的最高級(jí)別。存儲(chǔ)器描 述符包括指向作為樹(shù)根的頁(yè)面全局目錄PGD ( 130)的指針(120)。 PGD指向頁(yè)面中間目錄(PMD) ( 140),該頁(yè)面中間目錄對(duì)頁(yè)面條 目(150)的列表編制索引,頁(yè)面條目是指向物理存儲(chǔ)器中的頁(yè)幀 (160, 165 )的指針。PGD、 PMD和PTE形成了頁(yè)表結(jié)構(gòu)(170), 其允許線(xiàn)程訪(fǎng)問(wèn)它們的公共地址空間的頁(yè)面。如所描述的,三個(gè)線(xiàn) 程(100)通過(guò)頁(yè)表結(jié)構(gòu)(170)訪(fǎng)問(wèn)(155, 157)相同的頁(yè)幀(160 和165)。
圖2示出了根據(jù)本發(fā)明優(yōu)選實(shí)施方式的存儲(chǔ)器描述符的結(jié)構(gòu), 其中每個(gè)任務(wù)一個(gè)表。
在將本發(fā)明應(yīng)用于現(xiàn)有技術(shù)的專(zhuān)利申請(qǐng)所包括的第 一方法中, 為每個(gè)線(xiàn)程復(fù)制PTE從而為每個(gè)單個(gè)線(xiàn)程保證排他性訪(fǎng)問(wèn)就足夠 了。這是這樣實(shí)現(xiàn)的對(duì)于給定的頁(yè)表?xiàng)l目,選擇性啟用相應(yīng)頁(yè)表 中的存在標(biāo)記。不過(guò)由于地址轉(zhuǎn)換是硬線(xiàn)連接到CPU的MMU中, 因此需要復(fù)制整個(gè)頁(yè)表層級(jí)。事實(shí)上,可以在存儲(chǔ)器描述符(200) 的更高級(jí)別來(lái)進(jìn)行隔離(segregation),其包括頁(yè)表層級(jí)和與進(jìn)程地 址空間有關(guān)的其他參數(shù)。在此方法中,將為每個(gè)線(xiàn)程提供單獨(dú)的存 儲(chǔ)器描述符。也有可能使用fork (分叉)系統(tǒng)調(diào)用的實(shí)現(xiàn),該fork 系統(tǒng)調(diào)用利用Linux創(chuàng)建新的進(jìn)程并且復(fù)制頁(yè)表。使用fork意味著 實(shí)施困難的同步。存儲(chǔ)器描述符是廣泛應(yīng)用的、架構(gòu)獨(dú)立的數(shù)據(jù)結(jié) 構(gòu),改變其用于線(xiàn)程的語(yǔ)義要求大量的內(nèi)核修改。此外,需要集中的鎖來(lái)同步跨越線(xiàn)程組中不同存儲(chǔ)器描述符的頁(yè)表,這使實(shí)現(xiàn)進(jìn)一 步復(fù)雜化。
如圖2所示,在優(yōu)選實(shí)施方式中,為組中的每個(gè)線(xiàn)程指派私有
頁(yè)表(210)。在線(xiàn)程組共享的存儲(chǔ)器描述符200中維護(hù)這些私有頁(yè) 表的哈希表,通過(guò)線(xiàn)程id對(duì)其進(jìn)行索引。進(jìn)一步地,指向頁(yè)面目錄 的指針(220)位于相應(yīng)線(xiàn)程的進(jìn)程描述符中,從而可以在上下文切 換操作期間快速訪(fǎng)問(wèn)頁(yè)面目錄。當(dāng)在內(nèi)核的虛擬存儲(chǔ)器管理子系統(tǒng) 中操作時(shí),在只有進(jìn)程的存儲(chǔ)器描述符可用的情況下,使用哈希表 來(lái)獲取特定線(xiàn)程的頁(yè)面目錄。 一旦每個(gè)線(xiàn)程有其自己的私有頁(yè)表
(210),則按照與根據(jù)現(xiàn)有技術(shù)的專(zhuān)利申請(qǐng)解決方案、針對(duì)常規(guī)進(jìn) 程的共享存儲(chǔ)器訪(fǎng)問(wèn)控制的情況下完全相同的方式,來(lái)控制對(duì)存儲(chǔ) 器可寫(xiě)區(qū)域的訪(fǎng)問(wèn)。在線(xiàn)程的情況下,地址空間中的每個(gè)頁(yè)面是共 享的,而在進(jìn)程的情況下,共享的頁(yè)面明確地標(biāo)記為共享。使用結(jié) 合圖5所描述的進(jìn)程,兩個(gè)線(xiàn)程(線(xiàn)程1和線(xiàn)程2)被授予(255, 257 )對(duì)存儲(chǔ)器的某些訪(fǎng)問(wèn),而對(duì)于所有線(xiàn)程拒絕其他訪(fǎng)問(wèn)(263, 265, 267, 269)。
一旦每個(gè)線(xiàn)程有其自己的私有頁(yè)表(210),則按如下方式來(lái)授 予組中的 一個(gè)線(xiàn)程對(duì)存儲(chǔ)器可寫(xiě)部分的訪(fǎng)問(wèn),即針對(duì)授權(quán)線(xiàn)程設(shè)置 所訪(fǎng)問(wèn)頁(yè)面的PTE中的pagejresent位,以及重置所有其他線(xiàn)程的 位,使得當(dāng)其他線(xiàn)程嘗試訪(fǎng)問(wèn)該頁(yè)面時(shí)將會(huì)產(chǎn)生頁(yè)面錯(cuò)誤。
圖3示出了在給予一個(gè)線(xiàn)程對(duì)整個(gè)地址空間的訪(fǎng)問(wèn)權(quán)時(shí)這一多 線(xiàn)程應(yīng)用的特定情況下的存儲(chǔ)器描述符的簡(jiǎn)化結(jié)構(gòu)。本發(fā)明的此第 二實(shí)施方式采用本文上面描述的地址空間級(jí)別粒度。在此情況下, 在調(diào)度周期期間提供排他性訪(fǎng)問(wèn)所需的頁(yè)表的數(shù)目可以壓縮為2個(gè)。 每個(gè)線(xiàn)程組將具有與其相關(guān)聯(lián)的一對(duì)頁(yè)表,正頁(yè)表(370)和反頁(yè)表
(375 )。正頁(yè)表(370)用于地址轉(zhuǎn)換,并且被指派給授權(quán)在調(diào)度 周期內(nèi)訪(fǎng)問(wèn)地址空間的線(xiàn)程(圖3中的線(xiàn)程1 )。將反頁(yè)表(375 ) 指派給被拒絕在此調(diào)度周期內(nèi)訪(fǎng)問(wèn)的其余線(xiàn)程(線(xiàn)程2和線(xiàn)程3)。 所示頁(yè)表結(jié)構(gòu)包括由線(xiàn)程組共享的唯一的存儲(chǔ)器描述符(300)。存儲(chǔ)器描述符包含指向各個(gè)頁(yè)表(370和375 )的兩個(gè)頁(yè)面目錄(330, 335 )。每個(gè)頁(yè)表結(jié)構(gòu)包括一個(gè)頁(yè)面中間目錄(340, 345 ),每個(gè)頁(yè) 面中間目錄對(duì)條目(350, 355 )的列表編制索引。在圖3中,如結(jié) 合圖6所描述的那樣使用進(jìn)程,向線(xiàn)程1授予(365, 367 )訪(fǎng)問(wèn)兩 個(gè)頁(yè)幀(160, 165 )的訪(fǎng)問(wèn)權(quán);對(duì)于組內(nèi)的其他線(xiàn)程(線(xiàn)程2和線(xiàn) 程3),拒絕訪(fǎng)問(wèn)那兩個(gè)頁(yè)幀(160, 165 )的訪(fǎng)問(wèn)權(quán)。
方法流程圖。
將私有頁(yè)表創(chuàng)建為克隆系統(tǒng)調(diào)用的一部分。如果虛擬化進(jìn)程沒(méi) 有調(diào)用設(shè)置了 VM—CLONE標(biāo)記的克隆系統(tǒng)調(diào)用,則不使用用于線(xiàn)程 的訪(fǎng)問(wèn)控制系統(tǒng),并且不執(zhí)行當(dāng)前的方法。當(dāng)虛擬化進(jìn)程調(diào)用設(shè)置 了 VM—CLONE標(biāo)記的調(diào)用克隆系統(tǒng)調(diào)用時(shí),修改已有copy—mm函 數(shù)以分配新的頁(yè)面目錄,從而為正在創(chuàng)建的線(xiàn)程保持私有頁(yè)表,并 將其添加到哈希表中。繼而調(diào)用新的函數(shù)rr一dup一vmas來(lái)有系統(tǒng)地復(fù) 制整個(gè)頁(yè)表層級(jí)。在稱(chēng)為dup—vmas的已有函數(shù)被fork調(diào)用之后,對(duì) 此函數(shù)進(jìn)行建模以創(chuàng)建用于新創(chuàng)建的子進(jìn)程的新的頁(yè)表。這兩個(gè)函 數(shù)之間的關(guān)鍵差別在于在rr_dup—vmas的情況下,所有頁(yè)表?xiàng)l目無(wú) 一例外地被復(fù)制,而dup—vmas跳過(guò)設(shè)置了稱(chēng)為VM—DONT—COPY 的已有標(biāo)記被置位的頁(yè)面。進(jìn)一步地,dup_vmas函數(shù)對(duì)于父(進(jìn)程) 和子(進(jìn)程)二者都將把地址空間的可寫(xiě)部分標(biāo)記成只讀,以實(shí)現(xiàn) 寫(xiě)入時(shí)復(fù)制,而rr一dup一vmas使得所有可寫(xiě)條目缺失。組內(nèi)的線(xiàn)程所 使用的頁(yè)表集合保持同步,以便維持線(xiàn)程的存儲(chǔ)器共享語(yǔ)義。對(duì)任 一頁(yè)表的任何修改被傳播到其余部分,從而這些變化反映在其他對(duì) 等進(jìn)程的上下文中。
針對(duì)線(xiàn)程的共享存儲(chǔ)器訪(fǎng)問(wèn)控制的實(shí)現(xiàn)需要解決在進(jìn)程情況下 不存在的特定問(wèn)題。內(nèi)核經(jīng)常直接訪(fǎng)問(wèn)進(jìn)程的地址空間。例如,當(dāng) 用戶(hù)級(jí)線(xiàn)程或進(jìn)程將存儲(chǔ)器緩存?zhèn)鬟f給讀取系統(tǒng)調(diào)用時(shí),內(nèi)核的文 件系統(tǒng)組件直接寫(xiě)到由用戶(hù)空間程序提供的緩存中。這種對(duì)共享存 儲(chǔ)器的訪(fǎng)問(wèn)通常由訪(fǎng)問(wèn)控制機(jī)制來(lái)仲裁。然而,在線(xiàn)程的情況下,當(dāng)線(xiàn)程將要退出時(shí),內(nèi)核直接將線(xiàn)程標(biāo)識(shí)符的值寫(xiě)到進(jìn)程地址空間 中用戶(hù)提供的存儲(chǔ)器指針。通過(guò)檢查進(jìn)程描述符中稱(chēng)為PF—
EXITING的已有標(biāo)記來(lái)^r測(cè)這種訪(fǎng)問(wèn),如果標(biāo)記^皮置位,則將特定 訪(fǎng)問(wèn)從常規(guī)訪(fǎng)問(wèn)控制中排除,并且給予內(nèi)核無(wú)條件訪(fǎng)問(wèn)。
一般說(shuō)來(lái),當(dāng)相應(yīng)的線(xiàn)程退出時(shí),每個(gè)線(xiàn)程的頁(yè)表或者是通過(guò) 顯式地調(diào)用退出系統(tǒng)調(diào)用來(lái)釋放,或者在被內(nèi)核殺死時(shí)隱式地釋放。 特別地,當(dāng)進(jìn)程中的一個(gè)線(xiàn)程調(diào)用exec系統(tǒng)調(diào)用時(shí),其解映射進(jìn)程 的當(dāng)前地址空間,并且創(chuàng)建和殺死進(jìn)程中除了已經(jīng)調(diào)用exec系統(tǒng)調(diào) 用的線(xiàn)程之外的所有其他線(xiàn)程。修改內(nèi)核的線(xiàn)程退出操作以釋放頁(yè) 面目錄以及與退出線(xiàn)程相關(guān)聯(lián)的頁(yè)表層級(jí)。在exec系統(tǒng)調(diào)用末尾, 只留下 一 個(gè)具有新的頁(yè)表集合的進(jìn)程。此進(jìn)程隨后創(chuàng)建的任何線(xiàn)程 將繼承其頁(yè)表的副本,并且再次強(qiáng)制排他性訪(fǎng)問(wèn)控制。
在圖4的流程圖中,示出了相應(yīng)的步驟 -利用VM—CLONE請(qǐng)求創(chuàng)建新線(xiàn)程(405 ); -在存儲(chǔ)器描述符中分配新頁(yè)表目錄,并創(chuàng)建已有線(xiàn)程的頁(yè)表的副
本(410); -等待事件(420);
-當(dāng)發(fā)生頁(yè)面錯(cuò)誤時(shí)(430),對(duì)指示頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)
的兩個(gè)位進(jìn)^f亍測(cè)試(435 ); -如果頁(yè)面存在并且可寫(xiě)(測(cè)試435為是),并且如果測(cè)試到線(xiàn)程
將要退出(測(cè)試到Linux PF位455:是),則
-授權(quán)導(dǎo)致頁(yè)面錯(cuò)誤的線(xiàn)程訪(fǎng)問(wèn)該頁(yè)面(465 ),并設(shè)置指示頁(yè)面
存在于存儲(chǔ)器中并且可寫(xiě)的位;
-執(zhí)行等待事件的步驟(420); -如果頁(yè)面存在并且可寫(xiě),如果另一線(xiàn)程具有對(duì)該頁(yè)面的訪(fǎng)問(wèn)權(quán)并
且等待(470)其他線(xiàn)程釋放該頁(yè)面(460),則等待其他線(xiàn)程釋
放;
-當(dāng)線(xiàn)程已經(jīng)釋放訪(fǎng)問(wèn)權(quán)時(shí),
-授予導(dǎo)致頁(yè)面錯(cuò)誤的線(xiàn)程對(duì)該頁(yè)面的訪(fǎng)問(wèn)權(quán),并設(shè)置指示頁(yè)面
15存在于存儲(chǔ)器中并且可寫(xiě)的位; -執(zhí)行等待事件的步驟。
-在對(duì)指示頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的兩個(gè)位進(jìn)行測(cè)試的步驟 (435 )之后,如果頁(yè)面不存在或者不可寫(xiě),則讓內(nèi)核處理所述頁(yè)面 錯(cuò)誤(440 );
-通過(guò)測(cè)試相應(yīng)的位來(lái)測(cè)試(445 )新頁(yè)面在由內(nèi)核進(jìn)程創(chuàng)建之后是 否可寫(xiě);
-如果該新頁(yè)面可寫(xiě),則重置新頁(yè)面的存在位(450); -將內(nèi)核創(chuàng)建的頁(yè)表?xiàng)l目傳播(425 )到所有線(xiàn)程的其他頁(yè)表; -執(zhí)行等待事件的步驟(420)。
在等待事件的步驟之后
-當(dāng)調(diào)度線(xiàn)程時(shí)(475 ),將存儲(chǔ)器的硬件上下文切換(480)到將
要被調(diào)度的線(xiàn)程的頁(yè)表;
-執(zhí)行等待事件的步驟(420)。
在等待事件的步驟之后還包括
-當(dāng)線(xiàn)程退出時(shí)(485 ),釋放(490)用于該線(xiàn)程的頁(yè)面目錄; -結(jié)束用于該線(xiàn)程的存儲(chǔ)器訪(fǎng)問(wèn)控制。
圖5是根據(jù)兩頁(yè)表實(shí)施方式的用于從線(xiàn)程組的線(xiàn)程訪(fǎng)問(wèn)存儲(chǔ)器 的方法流程圖。
反頁(yè)表是正頁(yè)表的復(fù)本,通過(guò)重置存在標(biāo)志來(lái)禁用其地址空間 的所有可寫(xiě)部分。當(dāng)反頁(yè)表分出第二線(xiàn)程并且線(xiàn)程計(jì)數(shù)超過(guò)1時(shí), 其首先由組內(nèi)的第 一線(xiàn)程創(chuàng)建。父線(xiàn)程和子線(xiàn)程二者初始地都被指 派了反頁(yè)表。隨后創(chuàng)建的線(xiàn)程在其創(chuàng)建時(shí)被指派反頁(yè)表。在從分叉 返回之前,父(線(xiàn)程)的硬件上下文被切換為使用反頁(yè)表。當(dāng)調(diào)度 子(線(xiàn)程)首次運(yùn)行時(shí),上下文切換例程可以指派反頁(yè)表。
當(dāng)組內(nèi)任一線(xiàn)程嘗試訪(fǎng)問(wèn)地址空間的可寫(xiě)部分時(shí),生成頁(yè)面4晉誤中斷。頁(yè)面錯(cuò)誤中斷是處理器提供的中斷,其用于幫助內(nèi)核實(shí)現(xiàn) 諸如請(qǐng)求分頁(yè)和寫(xiě)入時(shí)復(fù)制的便利。提供此中斷的中斷處理機(jī)通過(guò) 檢查正頁(yè)表中相應(yīng)條目的存在和寫(xiě)標(biāo)記,將作為內(nèi)核正常功能一部 分的頁(yè)面錯(cuò)誤中斷與由于訪(fǎng)問(wèn)控制導(dǎo)致的錯(cuò)誤區(qū)分開(kāi)。如果頁(yè)面存 在并且可寫(xiě),則錯(cuò)誤一定是由于訪(fǎng)問(wèn)控制導(dǎo)致的,若另一線(xiàn)程已不 再持有訪(fǎng)問(wèn)權(quán),則給予線(xiàn)程對(duì)地址空間的訪(fǎng)問(wèn)權(quán)。如果頁(yè)面不存在 或者如果是對(duì)只讀頁(yè)面的寫(xiě)訪(fǎng)問(wèn),則頁(yè)面錯(cuò)誤是真的,其將通過(guò)內(nèi) 核提供的常規(guī)渠道來(lái)處理。如果頁(yè)面在正頁(yè)表和反頁(yè)表二者中都不 存在,則在仲裁對(duì)地址空間的訪(fǎng)問(wèn)權(quán)之前,首先將頁(yè)面錯(cuò)誤作為正 常頁(yè)面錯(cuò)誤來(lái)處理。
在任何給定時(shí)間,線(xiàn)程組中只有 一個(gè)線(xiàn)程有權(quán)訪(fǎng)問(wèn)地址空間。
持有訪(fǎng)問(wèn)權(quán)的線(xiàn)程的線(xiàn)程標(biāo)識(shí)符(tid)存儲(chǔ)在存儲(chǔ)器描述符中,由 鎖來(lái)保護(hù)。當(dāng)線(xiàn)程在調(diào)度周期中首次嘗試訪(fǎng)問(wèn)共享存儲(chǔ)器并且共享 存儲(chǔ)器未被任何其他進(jìn)程占據(jù)時(shí),將該線(xiàn)程的tid存儲(chǔ)在存儲(chǔ)器描述 符中,并且改變?nèi)蝿?wù)的硬件上下文以反映新頁(yè)表,而舊頁(yè)表的TLB 條目是無(wú)效的。有可能對(duì)任務(wù)進(jìn)行調(diào)度,使其在不同于發(fā)生頁(yè)面錯(cuò) 誤的處理器的處理器上運(yùn)行。不過(guò)這不會(huì)導(dǎo)致問(wèn)題,因?yàn)樵趶捻?yè)面 錯(cuò)誤處理機(jī)返回之前加載了新頁(yè)表。
如果不能立即授予訪(fǎng)問(wèn)權(quán),則調(diào)度其他任務(wù)運(yùn)行。當(dāng)?shù)刂房臻g 由所有者線(xiàn)程釋放時(shí),等待的線(xiàn)程最終會(huì)得到訪(fǎng)問(wèn)權(quán)。當(dāng)暫停任務(wù) 時(shí)或者當(dāng)任務(wù)調(diào)用退出時(shí),通過(guò)移除其存儲(chǔ)在存儲(chǔ)器描述符中的tid 來(lái)釋放訪(fǎng)問(wèn)權(quán)。
在圖5的流程圖中,示出了相應(yīng)的步驟 利用此第二實(shí)施方式,在存儲(chǔ)器描述符中分配(410)新頁(yè)表目錄, 并創(chuàng)建作為已有線(xiàn)程的頁(yè)表的副本的新頁(yè)面目錄的步驟僅在其是第 一線(xiàn)程時(shí)才執(zhí)行;并且,還包括 -重置已經(jīng)設(shè)置了可讀位的所有頁(yè)面的頁(yè)面存在標(biāo)記。
將存儲(chǔ)器的硬件上下文切換(480)到將要被調(diào)度的線(xiàn)程的頁(yè)表的步驟由以下步驟(500)代替
-如果線(xiàn)程有權(quán)訪(fǎng)問(wèn)地址空間,則將存儲(chǔ)器的硬件上下文切換到已 有頁(yè)表(正PGD);
-如果線(xiàn)程沒(méi)有權(quán)利訪(fǎng)問(wèn)地址空間,則將存儲(chǔ)器的硬件上下文切換 到新創(chuàng)建的頁(yè)面目錄(反PGD)。
當(dāng)線(xiàn)程退出時(shí)釋放(490)頁(yè)面目錄的步驟由以下步驟(510)代替: -當(dāng)進(jìn)程中僅剩下一個(gè)其他線(xiàn)程時(shí),釋放新創(chuàng)建的頁(yè)面目錄。
優(yōu)選實(shí)施方式的解決方案的缺點(diǎn)在于有可能增加存儲(chǔ)器管理 的復(fù)雜性,因?yàn)轫?yè)表是針對(duì)每個(gè)線(xiàn)程而實(shí)例化的。在一個(gè)線(xiàn)程中映 射的改變必須傳播到組內(nèi)的其他線(xiàn)程。利用兩頁(yè)表的實(shí)現(xiàn),訪(fǎng)問(wèn)控 制的實(shí)現(xiàn)變得更加簡(jiǎn)單。
權(quán)利要求
1.一種用于控制由多處理器計(jì)算機(jī)上執(zhí)行的進(jìn)程所創(chuàng)建的線(xiàn)程對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)的方法,所述方法包括-所述進(jìn)程請(qǐng)求創(chuàng)建新線(xiàn)程;-在存儲(chǔ)器描述符中分配新頁(yè)表目錄,并創(chuàng)建已有線(xiàn)程的頁(yè)表的副本;-等待事件;-當(dāng)發(fā)生頁(yè)面錯(cuò)誤時(shí),對(duì)指示所述頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的兩個(gè)位進(jìn)行測(cè)試;-如果所述頁(yè)面存在并且可寫(xiě),并且如果測(cè)試到所述線(xiàn)程將要退出,則-授予導(dǎo)致所述頁(yè)面錯(cuò)誤的所述線(xiàn)程對(duì)所述頁(yè)面的訪(fǎng)問(wèn)權(quán),并且設(shè)置指示所述頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的位;-進(jìn)行所述等待事件的步驟;-如果所述頁(yè)面存在并且可寫(xiě),如果其他線(xiàn)程擁有對(duì)所述頁(yè)面的訪(fǎng)問(wèn)權(quán)并且等待所述其他線(xiàn)程釋放所述頁(yè)面,則等待所述其他線(xiàn)程釋放;-當(dāng)所述線(xiàn)程已經(jīng)釋放訪(fǎng)問(wèn)權(quán)時(shí),-授予導(dǎo)致所述頁(yè)面錯(cuò)誤的所述線(xiàn)程對(duì)所述頁(yè)面的訪(fǎng)問(wèn)權(quán),并且設(shè)置指示所述頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的位;-執(zhí)行所述等待事件的步驟。
2. 如權(quán)利要求l的方法,還包括-在對(duì)指示所述頁(yè)面存在于存儲(chǔ)器中并且可寫(xiě)的兩個(gè)位進(jìn)行測(cè) 試的步驟之后,如果所述頁(yè)面不存在或者不可寫(xiě),則讓內(nèi)核來(lái)處理 所述頁(yè)面4晉i吳;-通過(guò)測(cè)試相應(yīng)的位,來(lái)測(cè)試所述新頁(yè)面在由內(nèi)核進(jìn)程創(chuàng)建之后是否可寫(xiě);-如果所述新頁(yè)面可寫(xiě),則重置所述新頁(yè)面的存在位; -將所述內(nèi)核創(chuàng)建的所述頁(yè)表?xiàng)l目傳播到所有線(xiàn)程的其他頁(yè)表; -執(zhí)行所述等待事件的步驟。
3. 如權(quán)利要求1或2的方法,在所述等待事件的步驟之后還包括-在調(diào)度線(xiàn)程時(shí),將存儲(chǔ)器的硬件上下文切換到將要被調(diào)度的所述線(xiàn)程的頁(yè)表; -執(zhí)行所述等待事件的步驟。
4. 如權(quán)利要求1或2的方法,在所述等待事件的步驟之后還包括-當(dāng)線(xiàn)程退出時(shí),釋放用于所述線(xiàn)程的頁(yè)面目錄; -結(jié)束用于所述線(xiàn)程的存儲(chǔ)器訪(fǎng)問(wèn)控制。
5. 如權(quán)利要求1-4中任一的方法,其中在存儲(chǔ)器描述符中分配 新頁(yè)表目錄并創(chuàng)建作為已有線(xiàn)程的頁(yè)表的副本的新頁(yè)面目錄的步驟 僅在其是第一線(xiàn)程時(shí)才執(zhí)行;并且,還包括-重置已經(jīng)設(shè)置了可讀位的所有頁(yè)面的頁(yè)面存在標(biāo)記。
6. 如權(quán)利要求5的方法,其中將存儲(chǔ)器的硬件上下文切換到將 要被調(diào)度的線(xiàn)程的頁(yè)表的步驟由以下步驟代替-如果所述線(xiàn)程有權(quán)訪(fǎng)問(wèn)地址空間,則將存儲(chǔ)器的硬件上下文切 換到已有頁(yè)表;-如果所述線(xiàn)程無(wú)權(quán)訪(fǎng)問(wèn)地址空間,則將存儲(chǔ)器的硬件上下文切 換到新創(chuàng)建的頁(yè)面目錄。
7. 如權(quán)利要求5或6的方法,其中當(dāng)線(xiàn)程退出時(shí)釋放所述頁(yè)面 目錄的步驟由以下步驟代替-當(dāng)所述進(jìn)程中僅剩下一個(gè)其他線(xiàn)程時(shí),釋放所述新創(chuàng)建的頁(yè)面 目錄。
8. —種包括程序代碼指令的計(jì)算機(jī)程序產(chǎn)品,當(dāng)所述程序在計(jì) 算機(jī)上執(zhí)行時(shí),所述指令用于執(zhí)行根據(jù)權(quán)利要求1-7中任一方法的步驟。
9. 一種系統(tǒng),包括適合于執(zhí)行根據(jù)權(quán)利要求1-7中任一方法的裝置。
全文摘要
提供了一種用于控制由多處理器計(jì)算機(jī)上執(zhí)行的進(jìn)程所創(chuàng)建的線(xiàn)程對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)的方法、計(jì)算機(jī)程序和系統(tǒng)。為每個(gè)新的線(xiàn)程分配頁(yè)表結(jié)構(gòu),并且從已有線(xiàn)程復(fù)制該分配頁(yè)表結(jié)構(gòu)。通過(guò)存在位和可寫(xiě)位來(lái)控制頁(yè)面訪(fǎng)問(wèn)。當(dāng)頁(yè)面錯(cuò)誤時(shí),向一個(gè)線(xiàn)程提供訪(fǎng)問(wèn)權(quán)。內(nèi)核處理新頁(yè)面條目創(chuàng)建進(jìn)程并且將頁(yè)面存在位設(shè)置為零,從而創(chuàng)建頁(yè)面錯(cuò)誤。在第二實(shí)施方式中,創(chuàng)建兩頁(yè)表結(jié)構(gòu),一個(gè)頁(yè)表結(jié)構(gòu)用于一個(gè)有權(quán)訪(fǎng)問(wèn)地址空間的線(xiàn)程,另一個(gè)頁(yè)表結(jié)構(gòu)由無(wú)權(quán)訪(fǎng)問(wèn)地址空間的所有其他線(xiàn)程所共享。
文檔編號(hào)G06F11/36GK101563674SQ200780047152
公開(kāi)日2009年10月21日 申請(qǐng)日期2007年6月15日 優(yōu)先權(quán)日2006年12月21日
發(fā)明者D·薩布赫拉維蒂, M·韋特斯, P·貝格埃奧德 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1