亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

重定位在多線程計算機中共享的計算機數(shù)據(jù)的設(shè)備和方法

文檔序號:6380618閱讀:153來源:國知局
專利名稱:重定位在多線程計算機中共享的計算機數(shù)據(jù)的設(shè)備和方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機和計算機軟件,特別是涉及重定位多線程計算機中共享的計算機數(shù)據(jù),該重定位(deallocation)例如與刪除邏輯分區(qū)計算機中分區(qū)有關(guān)。
背景技術(shù)
假如在現(xiàn)代社會人們不斷增加對計算機的依賴,那么計算機技術(shù)就必須推向許多前沿以跟上增漲的需求。重大研發(fā)計劃的一項課題是并行操作,即并行多任務(wù)的性能。
目前已經(jīng)開發(fā)了便于增加并行處理的大量計算機軟件和硬件技術(shù)。多線程操作系統(tǒng)和核心程序已經(jīng)依據(jù)軟件觀點開發(fā)出來,它允許計算機程序以多“線程”并行運行,以便在同一時間實質(zhì)上執(zhí)行多個任務(wù)。線程通常代表運行程序的獨立路徑。例如,對于電子商務(wù)計算機應(yīng)用,可以將不同線程分配給不同客戶機,以便每個客戶機特定的電子商務(wù)交易在一個分離的線程中得到處理。
依據(jù)硬件觀點,計算機將越來越依賴計算機微處理器來提供增加的工作負荷容量。此外,已經(jīng)開發(fā)了某些支持并行運行多線程的能力的微處理器,有效地提供了可通過多個微處理器使用達到的相同性能增益。
依據(jù)軟件觀點,某些計算機實行了邏輯分區(qū)的概念,其中允許單個計算機基本上像多個獨立的“虛擬”計算機(稱之為邏輯分區(qū))那樣進行操作,該虛擬計算機具有在不同邏輯分區(qū)中分配的物理計算機(例如,處理器,存儲器,輸入/輸出裝置)的同步資源。每個邏輯分區(qū)運行一個分離的操作系統(tǒng),并且從用戶的來看(perspective)和從運行在邏輯分區(qū)上的軟件應(yīng)用程序來看,它作為一個全獨立計算機進行操作。
借助邏輯分區(qū),共享資源(通常稱之為“管理器”或者分區(qū)管理器)管理邏輯分區(qū)并推動向不同邏輯分區(qū)的資源分配。例如,分區(qū)管理器可以向各個分區(qū)分配資源如處理器、工作站適配器、存儲裝置、存儲器空間、網(wǎng)絡(luò)適配器等,以便按照與分離的物理計算機非常相同的方式支持每個邏輯分區(qū)的比較獨立的操作。
在邏輯分區(qū)方面,創(chuàng)建和刪除各自分區(qū)而又不需要整個計算機停機和重新啟動可能是理想的,這樣可以確保計算機中其它分區(qū)的連續(xù)可用性。創(chuàng)建新分區(qū)通常不會有特殊問題,因為可以創(chuàng)建新數(shù)據(jù)結(jié)構(gòu)支持一個沒有沖撞風險的新分區(qū)。另一方面,刪除分區(qū)通常具有更多問題,因為需要確保當用于分區(qū)的現(xiàn)有數(shù)據(jù)結(jié)構(gòu)在從計算機中重定位或者移除時不再使用。
具體說,刪除能夠在多線程計算機環(huán)境中由多線程訪問的任何數(shù)據(jù)結(jié)構(gòu),需要注意確保線程不使用刪除之前的數(shù)據(jù)結(jié)構(gòu)。否則,線程可能試圖隨后訪問已經(jīng)刪除的數(shù)據(jù)結(jié)構(gòu),從而導致不確定結(jié)果和潛在的系統(tǒng)故障。
按照慣列,對許多共享數(shù)據(jù)結(jié)構(gòu)的訪問是通過使用信號標志或者自旋鎖(spin lock)來管理的。信號標志通常被實施為與數(shù)據(jù)結(jié)構(gòu)的共享指針關(guān)聯(lián)的各種標志,多個線程可以讀取這些標志以確定指針目前是否被一個線程使用。無論線程是否讀取一個指示其它線程目前未使用該指針的信號標志,該線程都能夠把信號標志設(shè)置到向所有其它線程指示該指針當前正在使用中的一個值(一個稱之為“獲取”信號標志的處理)。這樣,當另一個線程希望訪問數(shù)據(jù)結(jié)構(gòu)而檢測信號標志被另一個線程持有時,該線程需要等候到其它線程釋放該信號標志指示指針(以及由此得到數(shù)據(jù)結(jié)構(gòu))可再次對其它線程訪問的時候。因而在任何給定時間只允許一個線程持有信號標志。
信號標志和自旋鎖的一個顯著缺陷是,只要一個關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)需要被訪問,就需要與檢驗和獲取信號標志相關(guān)聯(lián)的實質(zhì)處理開銷。例如,在邏輯分區(qū)計算機的情況下,大量數(shù)據(jù)結(jié)構(gòu)在正常操作過程期間被頻繁訪問。例如用來存儲臨界分區(qū)配置信息的分區(qū)控制塊,幾乎在每次管理操作的期間都要被訪問。在每次分區(qū)控制塊需要被訪問時請求一個線程獲取信號標志,依據(jù)性能觀點被認為是非常昂貴的。
因此,一種實際需要已經(jīng)以支持重定位的方式出現(xiàn),即采用減少的處理開銷重定位多線程計算機中的數(shù)據(jù)結(jié)構(gòu)。

發(fā)明內(nèi)容
本發(fā)明通過提供不需要使用計算昂貴的信號標記或者自旋鎖(spin lock)就可以支持多線程計算機中數(shù)據(jù)結(jié)構(gòu)的重定位的設(shè)備、程序產(chǎn)品和方法,解決了與現(xiàn)有技術(shù)相關(guān)聯(lián)的這些和其它問題。具體而言,通過一個共享指針管理對數(shù)據(jù)結(jié)構(gòu)的訪問,其中當收到一個重定位數(shù)據(jù)結(jié)構(gòu)的請求時,將該共享指針最初設(shè)置到這樣一個值該值向任何線程指示此后所訪問的指針是數(shù)據(jù)結(jié)構(gòu)不可用的指針。這樣,能夠確保在啟動重定位數(shù)據(jù)結(jié)構(gòu)的請求時未訪問數(shù)據(jù)結(jié)構(gòu)的線程此后不能獲得該數(shù)據(jù)結(jié)構(gòu)。
此外,為了對已經(jīng)持有共享指針拷貝的任何線程尋址,從而能夠在請求啟動之后經(jīng)由共享指針訪問數(shù)據(jù)結(jié)構(gòu),應(yīng)當監(jiān)視所有這樣的線程,以便通過確定任何線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,來確定任何線程是否仍然使用共享指針。否則,處理將等候到被確定為線程不使用共享指針的時候,一旦這一條件被滿足,就可以確保線程不可能經(jīng)由共享指針訪問數(shù)據(jù)結(jié)構(gòu),從而可以隨后重定位數(shù)據(jù)結(jié)構(gòu)。
通過將一個關(guān)聯(lián)的共享指針設(shè)置到唯一值而發(fā)出數(shù)據(jù)結(jié)構(gòu)待重定位的信號,與在試圖訪問數(shù)據(jù)結(jié)構(gòu)之前檢驗共享指針相關(guān)聯(lián)的開銷將明顯低于獲取信號標志的需要。因此,實質(zhì)上加快樂隊數(shù)據(jù)結(jié)構(gòu)的訪問。此外,通過監(jiān)視線程以確定線程是否正在運行能夠使用訪問數(shù)據(jù)結(jié)構(gòu)的共享指針的程序碼,將不需要確定線程是否事實上正在使用共享指針。
上述處理的一個特定實施與邏輯分區(qū)計算機的分區(qū)刪除有關(guān),也就是重定位與將要被刪除的分區(qū)關(guān)聯(lián)的分區(qū)控制塊。為了便于重定位分區(qū)控制塊,可以將指向分區(qū)控制塊的共享指針設(shè)置到禁止訪問分區(qū)控制塊的零值,并表示分區(qū)控制塊不再訪問任何線程。因此,隨后試圖訪問分區(qū)控制塊的任何線程將不能進行這樣的訪問。
此外,在這樣一種實施中,認為共享指針只能經(jīng)由分區(qū)管理器訪問而不能被任何分區(qū)訪問。因此,為了對仍然使用共享指針的任何線程(即,獲得被設(shè)置到零值之前的共享指針的拷貝的線程)尋址,該實施例進行等候,直至可以確定沒有任何線程仍然使用共享指針。
在該實施中,當確定一個線程待用(inactive)、處于空閑循環(huán)(idle loop)中、未運行分區(qū)管理器的程序碼或者由于共享指針被設(shè)置為零值而退出分區(qū)管理器的程序碼時,可以將該線程確定為未使用共享指針。如果任何這樣的條件存在,就認為該線程訪問數(shù)據(jù)結(jié)構(gòu)的任何后續(xù)嘗試都將導致共享指針的零值的恢復(fù),而不考慮該線程隨后運行的程序碼將不能使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的情況。因此,此時可以刪除分區(qū)控制塊而不會對有效線程造成不良影響。
值得注意的是,關(guān)于邏輯分區(qū)計算機的本發(fā)明實施例實質(zhì)上僅僅是實例,因此本發(fā)明不限于下文所公開的特定實施例。
形成本發(fā)明部分的權(quán)利要求說明了表征本發(fā)明的這些和其它優(yōu)點和特點。然而為了更好地理解本發(fā)明,以及經(jīng)過本發(fā)明的使用而得到的優(yōu)點和目的,下面將結(jié)合附圖以及相伴隨的描述方式對本發(fā)明進行說明,其中描述了本發(fā)明的示范性實施例。


圖1是本發(fā)明邏輯分區(qū)計算機中主要部件的方框圖;圖2是顯示在圖1的邏輯分區(qū)計算機的分區(qū)管理方面所利用的大量數(shù)據(jù)結(jié)構(gòu)的分區(qū)管理存儲器空間的方框圖;圖3是顯示由圖1的計算機運行的訪問分區(qū)控制塊例程的程序流的流程圖;圖4是顯示由圖1的計算機運行的訪問分區(qū)管理器例程的程序流的流程圖;圖5是顯示由圖1的計算機運行的刪除邏輯分區(qū)例程的程序流的流程圖;圖6是顯示由圖5中引出的可調(diào)度服務(wù)運行的等候例程的程序流的流程圖。
具體實施例方式
下面討論的實施例便于有序地重定位多線程計算機中的數(shù)據(jù)結(jié)構(gòu),這樣將不需要利用計算昂貴的信號標志和自旋鎖,來確保在已經(jīng)重定位數(shù)據(jù)結(jié)構(gòu)之后不會有線程試圖訪問該數(shù)據(jù)結(jié)構(gòu)。
具體而言,通過一個共享指針管理對數(shù)據(jù)結(jié)構(gòu)的訪問,其中當收到一個重定位數(shù)據(jù)結(jié)構(gòu)的請求時,將該共享指針最初設(shè)置到向任何線程指示此后所訪問的指針,是數(shù)據(jù)結(jié)構(gòu)不可用的指針的一個值。當其它特有值可以用來表示數(shù)據(jù)結(jié)構(gòu)不可用性時,一個合適值是零值。這樣,在指針已經(jīng)被設(shè)置到零值后,只要線程試圖獲取指針訪問數(shù)據(jù)結(jié)構(gòu),就禁止該線程訪問數(shù)據(jù)結(jié)構(gòu)。此外,還能夠保證即使數(shù)據(jù)結(jié)構(gòu)已經(jīng)從存儲器中重定位后,該線程也不能試圖訪問數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)的重定位可以僅發(fā)生在當數(shù)據(jù)結(jié)構(gòu)被重定位后可以確保線程將不試圖訪問數(shù)據(jù)結(jié)構(gòu)的時候。根據(jù)本發(fā)明,可以按以下方式獲得這樣的確保通過監(jiān)視系統(tǒng)中所有線程,以便通過確定任何線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,確定任何線程是否仍然使用共享指針。能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼可以被認為是這樣的程序碼即使當共享指針已經(jīng)被設(shè)置到唯一值如零值以指示數(shù)據(jù)結(jié)構(gòu)不可用之后,該碼也具有保留仍然引用數(shù)據(jù)結(jié)構(gòu)的共享指針的在前拷貝的潛力。只要線程正在運行這樣的程序碼,就存在試圖使用共享指針的在前拷貝訪問數(shù)據(jù)結(jié)構(gòu)的風險,從而導致不確定結(jié)果以及潛在的數(shù)據(jù)惡化和/或系統(tǒng)故障。
例如,在下面討論的特定實施例中,待重定位的數(shù)據(jù)結(jié)構(gòu)是分區(qū)控制塊,它僅僅可由邏輯分區(qū)計算機的分區(qū)管理器訪問,特別是由分區(qū)管理器的不可調(diào)度(non-dispatchable)部分訪問。假設(shè)在這些實施例中,只要線程進入分區(qū)管理器的程序碼,就要求該線程獲得用于該線程希望訪問的任何分區(qū)控制塊的共享指針的新拷貝。因此,在特定共享指針被設(shè)置到與重定位其關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)的嘗試有關(guān)的零值(或者其它合適的唯一值)之后,只要線程進入分區(qū)管理器的程序碼,就可以認為該線程將不獲取指向數(shù)據(jù)結(jié)構(gòu)的有效指針。因此,所述線程是,在設(shè)置與重定位關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)的請求有關(guān)的共享指針的時候,正在分區(qū)管理器的程序碼內(nèi)運行并且還未退出該程序碼的任何線程,因為存在共享指針的(目前已陳舊的)拷貝仍然存在的可能性。
在各種組合中可以檢驗的多個因素(factor)能夠用來提供這樣的保障,即保證線程不運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。一個因素例如確定線程是否為待用,作為一個待用線程(未運行任何指令的一個線程),當共享指針被設(shè)置到一個唯一值的時候,不能保留共享指針的陳舊拷貝。另一個因素是確定線程是否正在運行空閑循環(huán)(例如,分區(qū)管理器中的一個空閑循環(huán)),這樣線程同樣也不能保留共享指針的陳舊拷貝。
再一個因素是確定檢測線程是當前所運行的程序碼而不是在共享指針被設(shè)置到唯一值時能夠使用共享指針的程序碼;在這種情況下認為,當隨后運行能夠使用共享指針的程序碼時,該線程此后必定獲得共享指針的新拷貝。
再一個因素是確定檢測線程在共享指針被設(shè)置到唯一值時是否已經(jīng)退出能夠使用該共享指針的程序碼。在此情況下,認為退出該程序碼后的共享指針在隨后運行能夠使用共享指針的程序碼時,將必定獲得共享指針的新拷貝。
正如以下更詳細的說明,一個機構(gòu)可以用來檢驗線程是當前運行的程序碼而不是能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,以及檢驗線程是否退出能夠使用共享指針的程序碼。該機構(gòu)使用當線程進入和退出程序碼的特定部分時就進行修改的一個與每個線程相關(guān)聯(lián)指示符。盡管可以使用各種替代的實施例,但是一個合適的指示符是當線程進入能夠訪問共享指針的程序碼時以及當線程退出同一程序碼時遞增1的順序號。使用這樣的順序號,偶數(shù)和奇數(shù)值之一可以用來指定線程每次退出的程序碼不是能夠使用共享指針的程序碼。此外,通過捕獲與共享指針被設(shè)置到唯一值有關(guān)的順序號值,然后監(jiān)視順序號的當前值,那么順序號值的任何差異可以用來指示線程在需要時退出程序碼從而不能使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的情況。
值得說明的是,也可以考慮確定線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼的其它因素以及因素的組合。此外,可以在不是邏輯分區(qū)計算機的計算機中利用本發(fā)明的實施例。因此,本發(fā)明不局限于這里討論的特定實施例。
現(xiàn)在轉(zhuǎn)到附圖,在附圖中相同的標記代表圖中相同部件。圖1示出了本發(fā)明的邏輯分區(qū)計算機10的主要硬件部件。計算機10一般代表例如多個多用戶計算機的任何一個,比如網(wǎng)絡(luò)服務(wù)器、中型計算機、大型計算機等,例如一個IBM eServer中型計算機。然而,值得說明的是,也可以在其它計算機和數(shù)據(jù)處理器中實施本發(fā)明,例如在單用戶計算機如工作站、臺式計算機、便攜計算機和類似物,或者在其它可編程電子裝置(例如,合成嵌入式控制器等)中實施本發(fā)明。此外,也可以在非邏輯分區(qū)的多線程計算機中利用本發(fā)明。
計算機10一般包括經(jīng)由總線16連接存儲器14的一個或多個處理器12。每個處理器12被實施為單線程處理器,或者實施為多線程處理器,如采用被顯示為合并多個硬件線程18的處理器12a。多線程處理器12a中的每個硬件線程18被駐留在計算機中的軟件線程處理成幾乎完全像一個獨立的處理器。在這方面,為了公開的目的,單線程處理器將被認為合并了一個單硬件線程,即單一的獨立運行單元。然而,值得說明的是,基于軟件的多線程或者多任務(wù)可以連同單線程和多線程計算機一起使用,以便進一步支持計算機中多任務(wù)的并行性能。
此外,如圖1所示,一個或多個處理器12(例如處理器12b)可以被實施為服務(wù)處理器,用來運行管理系統(tǒng)初始程序裝入(IPL)的專用固件碼,以及監(jiān)視、診斷和配置系統(tǒng)硬件。一般來說,計算機10將包括一個服務(wù)處理器和多個系統(tǒng)處理器,用來運行駐留在計算機中的操作系統(tǒng)和應(yīng)用程序,然而不發(fā)明不限于該特定實施例。在某些實施中,服務(wù)處理器可以采用不通過總線16的方式連接到計算機中的各個其它硬件部件上。
存儲器14可以包括一級或多級存儲裝置,例如,基于DRAM的主存儲器,以及一級或多級數(shù)據(jù)、指令和/或高速緩存器,服務(wù)于單處理器或者多處理器的某些高速緩存器是本領(lǐng)域所公知的。此外,存儲器14經(jīng)由總線20連接多種類型的外部裝置,例如,一個或多個網(wǎng)絡(luò)適配器22(將計算機對接網(wǎng)絡(luò)24),一個或多個存儲控制器26(將計算機與一個或多個存儲裝置28對接)以及一個或多個工作站控制器30(經(jīng)由多個工作站適配器對接一個或者多個終端或工作站32)。
圖1還顯示了計算機10實現(xiàn)邏輯分區(qū)計算環(huán)境時利用的主要軟件部件和資源的更多細節(jié),包括由分區(qū)管理器或者管理器36管理的多個邏輯分區(qū)34??梢灾С秩魏螖?shù)量的邏輯分區(qū)是本領(lǐng)域公知技術(shù),以及任何時候駐留在計算機中的邏輯分區(qū)的數(shù)量可以隨著增加或者從計算機移出分區(qū)而動態(tài)改變。
在基于IBMeServer的實施例中,分區(qū)管理器36由兩層程序碼組成。第一層稱之為不可調(diào)度(non-dispatchable)部分38,它在計算機10的固件內(nèi)實現(xiàn),或者是計算機10的許可外碼,它被用來向各個硬件部件提供低級接口,同時將較高層例如操作系統(tǒng)與硬件訪問的細節(jié)相隔離。固件還與服務(wù)處理器如服務(wù)處理器12b通信。不可調(diào)度部分38提供計算機10的許多低級分區(qū)管理功能,例如頁表管理等。不可調(diào)度部分38沒有任務(wù)的概念,它主要是從軟件較高層經(jīng)由功能調(diào)用來訪問。
分區(qū)管理器36程序碼的第二層稱之為可調(diào)度(dispatchable)部分40。與沒有任務(wù)概念、隨著再定位中止而運行以及從軟件的較高層經(jīng)由功能調(diào)用訪問的不可調(diào)度部分38相對照,可調(diào)度部分40具有任務(wù)任務(wù)概念(類似任何一個操作系統(tǒng)),并且隨著再定位接通而運行。可調(diào)度部分通常按照與分區(qū)非常相同的方式運行,但是對用戶隱瞞??烧{(diào)度部分通常管理較高級分區(qū)管理操作如建立和刪除分區(qū)、并行I/O維持、分配處理器、存儲器和到達各個分區(qū)34的其它硬件資源等。
每個邏輯分區(qū)34通??梢员混o態(tài)和/動態(tài)地分配計算機10中的一部分可用資源。例如,每個邏輯分區(qū)可以被分配一個或多個處理器12和/或一個或多個硬件線程18,以及一部分可用存儲器空間。邏輯分區(qū)還可以共享特定的硬件資源如處理器,這樣一個給定的處理器可以由一個以上的邏輯分區(qū)使用。在一個可替代的實施中,可以把硬件資源一次僅分配給一個邏輯分區(qū)。
附加資源,例如大容量存儲器、備用存儲器、用戶輸入、網(wǎng)絡(luò)連接及其I/O適配器,通常按照本領(lǐng)域公知方式被分配給一個或多個邏輯分區(qū)??梢园凑斩喾N方式分配資源,例如以逐個總線為基礎(chǔ)或者以逐個資源為基礎(chǔ)分配資源,使多邏輯分區(qū)在同一總線上共享資源。某些資源甚至可以同時被分配給多個邏輯分區(qū)。
每個邏輯分區(qū)34利用操作系統(tǒng)42按照與不分區(qū)計算機的操作系統(tǒng)相同的方式控制邏輯分區(qū)的主操作。例如,可以使用可從國際商用機器公司得到的OS/400操作系統(tǒng)實現(xiàn)每個操作系統(tǒng)42。
每個邏輯分區(qū)34分離地或獨立地操作存儲空間,因而從在每個這樣的邏輯分區(qū)中執(zhí)行的每個用戶應(yīng)用(用戶設(shè)備)44來看,每個邏輯分區(qū)進行與獨立的不分區(qū)計算機非常相同操作。因此,用戶應(yīng)用通常不需要任何在分區(qū)環(huán)境中使用的特定配置。
假如邏輯分區(qū)34具有分離的虛擬計算機的性質(zhì),則可以理想地支持分區(qū)間的通信,以允許邏輯分區(qū)相互通信,好像邏輯分區(qū)位于分離的物理機器上。因此,在某些實施中,理想的情況是,在不可調(diào)度部分38中支持虛擬局域網(wǎng)(LAN)46,以允許邏輯分區(qū)34經(jīng)由連網(wǎng)協(xié)議如以太網(wǎng)協(xié)議彼此通信。根據(jù)本發(fā)明,支持諸多分區(qū)間通信的其它方式可以得到支持。
需要說明的是,本發(fā)明可以利用其它邏輯分區(qū)環(huán)境。例如,作為一種選擇,可調(diào)度部分的功能可以被合并到一個或者多個邏輯分區(qū)中,而不是利用與任何分區(qū)34分離的可調(diào)度部分40。
通常,為實現(xiàn)本發(fā)明實施例而運行的例程,不論被實施為操作系統(tǒng)的部分還是特定應(yīng)用、部件、程序、物體、模塊或者指令序列,或者甚至其子集,都將被稱之為“計算機程序碼”或者簡稱“程序碼”。程序碼通常包括一個或多個在不同時間駐留在計算機各個存儲器和存儲裝置上的指令;并且當它被一個或者多個計算機的處理器讀出和運行時,使該計算機執(zhí)行運行體現(xiàn)本發(fā)明各個方面的步驟或者元素所必需的步驟。此外,盡管在完全起到計算機和計算機系統(tǒng)的上下文中已經(jīng)并且將說明本發(fā)明,但是本領(lǐng)域熟練技術(shù)人員將會明白,本發(fā)明各個實施例都能夠被配置成各種形式的程序產(chǎn)品,并且本發(fā)明可以同樣地應(yīng)用,而不考慮用來實際完成該配置的信號承載媒介的特定類型。信號承載媒介包含但不局限于可記錄型媒介,比如易失性和非易失性存儲器裝置、軟盤和其它活動盤、硬盤驅(qū)動器、磁帶、光盤(例如,CD-ROM,DVD等),特別是傳輸型媒介如數(shù)字和模擬通信鏈路。
此外,此后所述的各種程序碼可以根據(jù)在本發(fā)明特定實施例中所實施的范圍之內(nèi)的應(yīng)用或者軟件部件來標識。然而,應(yīng)當理解的是,下面的任何特定程序術(shù)語僅僅為了方便目的而采用的,因此本發(fā)明不限于僅僅在由這種術(shù)語標識和/或暗示的任何特定應(yīng)用中使用。此外,如果存在可以將計算機程序組織成例程、過程、方法、模塊、物體和類似物的通常是無窮無盡的方式,以及存在程序功能可以被分配在駐留在一個典型計算機內(nèi)的各種軟件層(例如,操作系統(tǒng),數(shù)據(jù)庫API,應(yīng)用程序、小程序等)中的各種方式,則應(yīng)當理解為本發(fā)明不限于這里所述的程序功能的特定組織和分配。
本領(lǐng)域熟練技術(shù)人員將會明白,圖1所示的實例環(huán)境的用意不是限定本發(fā)明。實際上,本領(lǐng)域熟練技術(shù)人員將會明白,使用其它可替代硬件和/或軟件環(huán)境不背離本發(fā)明的范圍。
如上所述,在這里所述的實施例中,執(zhí)行與邏輯分區(qū)計算機的分區(qū)刪除有關(guān)的數(shù)據(jù)結(jié)構(gòu)的重定位。最好是,支持在邏輯分區(qū)計算機中動態(tài)建立和刪除分區(qū)的能力,而又不需要初始程序裝入(IPL)或者重新啟動計算機。與此操作相聯(lián)系,保持稱之為分區(qū)操作塊的數(shù)據(jù)結(jié)構(gòu),使有效分區(qū)存儲用于一個關(guān)聯(lián)分區(qū)的所需配置。部分邏輯分區(qū)的建立需要建立一個關(guān)聯(lián)的分區(qū)控制塊。同樣,部分邏輯分區(qū)的刪除需要重定位關(guān)聯(lián)的分區(qū)控制塊。
實際上,在分區(qū)管理器中特別是在通常駐留在系統(tǒng)固件中的其不可調(diào)度部分中所執(zhí)行的每個操作都需要訪問分區(qū)控制塊。這種訪問通常是通過使用指向分區(qū)控制塊的共享指針執(zhí)行,其中從指針的拷貝可以被系統(tǒng)中多個線程獲得的觀點看,該指針是共享的。通常,希望訪問分區(qū)控制塊的線程必須首先獲得其指針的拷貝;一旦獲得拷貝,就能夠經(jīng)過指針的相同拷貝進行進一步訪問。
例如,如圖2所示,分區(qū)管理器36的存儲器空間50(圖1)可以包括一組分區(qū)控制塊52,一組共享指針54中的一個分別指向每個控制塊52。
由于訪問與分區(qū)管理器中執(zhí)行的每個實際操作相聯(lián)系的分區(qū)控制塊,在任何時候一個線程運行分區(qū)管理器中的程序碼,因此存在這樣一個高似然性關(guān)聯(lián)的分區(qū)控制塊將被該線程訪問,以及該線程將獲得指向此塊的共享指針的拷貝。如果這種操作頻繁進行,則同步訪問共享資源的傳統(tǒng)機制,如信號標志或者自旋鎖,依據(jù)計算觀點是非常昂貴的,有可能過度地惡化系統(tǒng)性能。
為了解決這一問題,此后描述的實施例得到分區(qū)刪除操作實際上是異步的的優(yōu)點,因此,適合于較高級同步協(xié)議。此外,在分區(qū)管理器碼中運行的線程通常不優(yōu)先,所以此后描述的實施例也可以取得該實事的優(yōu)點。
具體說,此后描述的實施例通過最初將指向一個區(qū)控制塊的共享指針設(shè)置到指示該塊不再可用的一個唯一值,例如零值,來處理重定位該塊的請求。此外,此后描述的實施例為每個硬件或者處理器保持一個稱之為順序號的指示符,只要關(guān)聯(lián)的線程或者處理器進入分區(qū)管理器的程序碼(例如,作為功能調(diào)用、中斷、機器檢驗或者系統(tǒng)復(fù)位的結(jié)果)就遞增該指示符。當線程或者處理器離開分區(qū)管理器碼時也將遞增該順序號。在該實施例中,順序號的遞增在奇偶值的范圍內(nèi)(例如,每次遞增將1加入順序號中),這樣在適當?shù)貢r候,用奇數(shù)值或者偶數(shù)值指示分區(qū)管理器的程序碼中存在一個線程、例如,如果在進入分區(qū)管理器的程序碼之前順序號是奇數(shù),并且進入時遞增其值,則一個偶數(shù)值將指示分區(qū)管理器的程序碼正在由該線程運行。相反,一個奇數(shù)值將指示該線程未運行分區(qū)程序碼,因此該線程將沒有仍然指向待重定位的分區(qū)控制塊的共享指針的前一拷貝。
此外,順序號在線程或者處理器離開和重新進入管理器的程序碼時用于檢測。具體說,如下文的更加詳細的說明,可以在兩個時間點捕獲順序號的值,這樣甚至當收到重定位分區(qū)控制塊的請求時開始發(fā)現(xiàn)該線程運行分區(qū)管理器的程序碼時,順序號值的任何變化此后也將指示該線程在某些點離開分區(qū)管理器的程序碼,因而不再具有仍然指向待重定位的分區(qū)控制塊的共享指針的前一拷貝。
此外,此后描述的實施例還為每個硬件線程或者處理器保留一個狀態(tài)字段,該字段指示線程或者處理器是否為(1)待用(即,未運行指令),或者(2)以空閑線程等候工作(例如,按分區(qū)管理器空閑線程運行指令),實際上可以被確定為在任何情況下,線程或者處理器將沒有仍然指向待重定位的分區(qū)控制塊的共享指針的前一拷貝。
如圖2所示,例如,每個線程或者每個處理器指示符用來確定線程或者處理器是否運行能夠使用共享指針的程序碼,存儲合適的該指示符的一種方式是經(jīng)過多個線程狀態(tài)塊56。每個塊中被存儲一個線程標識符字段58,該標識符字段58將塊56連接到特定硬件線程或者處理器(單線程處理器的情況)。此外,每個塊56還包括服務(wù)于上述目的的順序號字段60和狀態(tài)字段。
值得說明的是,可以使用與確定線程或者處理器是否正在運行能夠使用共享指針的程序碼有關(guān)的各種可替代指示符及其數(shù)據(jù)結(jié)構(gòu)。因此本發(fā)明不局限于這里討論的特定實施。例如,事實上可以使用任何一個公式實現(xiàn)順序碼,所述公式導致定義分別指示線程是否正在運行分區(qū)管理器的程序碼的兩組值。在所示的實施例中,例如兩組值是奇數(shù)和偶數(shù)。此外,也可以使用不同指示符檢測(1)線程目前是否正在運行分區(qū)管理器的程序碼,(2)線程是否已經(jīng)交叉分區(qū)管理器的程序碼與其它程序碼的邊界。此外,也可以替代地使用其它線程狀態(tài)信息。
圖3-6顯示了計算機10可利用的各種實例例程,這些例程按照本發(fā)明的一種方式實施邏輯分區(qū)刪除以及相關(guān)聯(lián)的分區(qū)控制塊的重定位。具體而言,圖3顯示了訪問分區(qū)控制塊例程80,只要一個線程需要訪問分區(qū)控制塊,運行分區(qū)程序碼的該線程就可以執(zhí)行該例程。如上所述,所示實施例中的分區(qū)控制塊經(jīng)由共享指針訪問。因此假定在一個硬件線程任何時候進入分區(qū)管理器的程序碼(例如,作為功能調(diào)用和中斷的結(jié)果)時,線程將需要獲得指向該線程需要訪問的任何分區(qū)控制塊的共享指針的新拷貝。然而,還可以假定只要硬件線程離開分區(qū)管理器的程序碼時,共享指針的任何現(xiàn)存拷貝都將被丟棄。
因此,通過首先確定正在運行例程80的當前線程已經(jīng)具有指向分區(qū)控制塊的拷貝,在方框82中開始例程80。例如,假定線程還沒有該指針的拷貝,則方框82將控制轉(zhuǎn)向方框83,以獲得指向分區(qū)控制塊的指針的拷貝。隨后,方框84確定指針是否被設(shè)置到零,即指示分區(qū)控制塊不可用的一個值。如果否,方框84則將控制轉(zhuǎn)向方框86,以本領(lǐng)域已知的一種方式使用指針訪問分區(qū)控制塊。隨后控制轉(zhuǎn)向方框88,終止例程80并返回表示訪問成功的“ok”狀態(tài)。
返回到方框84,如果指針被設(shè)置到零值,控制改為轉(zhuǎn)向方框90,用一個表示訪問不成功的“錯誤”狀態(tài)終止例程80。例程80的主叫(用戶)將隨后以適當方式處理不成功訪問。此外,返回到方框82,如果指向分區(qū)控制塊的指針在調(diào)用流程時已經(jīng)被獲取,則控制直接轉(zhuǎn)向方框86,采用指針訪問分區(qū)控制塊,并以正常方式終止例程。
因此與每次訪問指針都需要花費大量處理開銷來獲得信號標志或者鎖的信號標志或者鎖實施例相對照,可以發(fā)現(xiàn)例程80僅需要在檢索指針的第一時間檢驗用于零值的指針,此時線程正在運行分區(qū)管理器的程序碼。因此明顯減少了路徑長度和后續(xù)處理開銷。
現(xiàn)在轉(zhuǎn)到圖4,該圖概括地示出了訪問分區(qū)管理器例程92。只有當線程從運行分區(qū)或者其它非分區(qū)管理器的程序碼轉(zhuǎn)換到運行分區(qū)管理器的程序碼時才調(diào)用例程92,并且說明了在實際執(zhí)行分區(qū)管理器中的預(yù)期任務(wù)之前(方框94)和之后(方框98),遞增與線程關(guān)聯(lián)的順序號。假定在該實施例中,當線程被建立在分區(qū)管理器的程序碼中時,順序號被最初設(shè)置到一個偶數(shù)值,這樣一個奇數(shù)值指示該線程正在運行的程序碼不是分區(qū)管理器的程序碼。
將會理解的是,方框94、96和98通常由分區(qū)管理器的程序碼執(zhí)行,盡管在某些實施例中。其它程序碼如駐留在一個分區(qū)中的程序碼可以執(zhí)行一個或多個這些操作。此外,將會明白,在某些實例中,當進入和離開程序碼時啟動順序號遞增的分區(qū)管理器的程序碼可以只包括分區(qū)管理器的程序碼的一個不可調(diào)度部分,或者作為選擇,包括分區(qū)管理器的程序碼的非調(diào)用和可調(diào)度部分。
這里沒有單獨說明用于每個線程或者處理器的狀態(tài)字段,作為狀態(tài)字段的設(shè)置,例如指示當線程是待用的(未運行指令)或者在分區(qū)管理器空閑循環(huán)中等候工作時,通常只要線程的狀態(tài)改變就僅僅把一個合適的寫并入專用狀態(tài)字段。
圖5說明了與刪除分區(qū)有關(guān)的在計算機10中執(zhí)行的一個刪除邏輯分區(qū)例程100。在所示的實施例中,經(jīng)由來自計算機用戶接口的刪除一個特定分區(qū)的請求啟動例程100。響應(yīng)該請求并且如方框102所示,服務(wù)處理器可以把該請求通知給分區(qū)管理器的可調(diào)度部分,導致分區(qū)管理器的可調(diào)度部分中計算機增益控制的一個線程。如方框104所示,可調(diào)度部分調(diào)用分區(qū)管理器的不可調(diào)度部分中的一個服務(wù)啟動用于待刪除的分區(qū)的分區(qū)控制塊的刪除,特別是,這一工作是通過把分區(qū)控制塊設(shè)置到零值實現(xiàn)的。然而,用于該指針前一拷貝可以被存儲在不可調(diào)度部分中,以便于隨后重定位分區(qū)控制塊。
如方框106所示,一旦指針已經(jīng)被設(shè)置到零值,調(diào)用就將控制返回到分區(qū)管理器的可調(diào)度部分,進行等待直至可以被確定為指針不再被計算機中的任何線程使用。此后,如方框108所示,可調(diào)度部分發(fā)出對不可調(diào)度部分的一個調(diào)度,以重定位分區(qū)控制塊的存儲器。然后控制返回到可調(diào)度部分,隨后完成充分刪除分區(qū)所需的任何其它操作,如方框110所示。然后完成例程100。
圖6示出了當在例程100的方框106中等待時,由分區(qū)管理器的可調(diào)度部分運行的一個示范性等待例程120。具體而言,例程120可以通過在計算機中準備有效線程(或者處理器)的一個比特掩碼,在方框120中開始。然后,在方框124中捕獲用于每個有效線程(或處理器)的順序碼,并且在方框126中啟動一個循環(huán),進行等候直至可以被確定為沒有有效線程能夠經(jīng)由共享指針的在前拷貝訪問分區(qū)控制塊,其中該共享指針已經(jīng)被設(shè)置到與分區(qū)控制塊的重定位有關(guān)的零值。
在特殊方框126中啟動循環(huán),以處理在方框122中準備的比特掩碼中標識的每個有效線程。對于每個這樣的線程,控制轉(zhuǎn)向方框128、130、132和134,以檢驗表示一個線程是否能夠使用分區(qū)控制塊的共享指針在前或者陳舊拷貝的四個因素。
方框128和130例如確定用于線程的狀態(tài)字段是否指示線程處于空閑狀態(tài)或者循環(huán)中,或者待用。方框132確定線程的當前順序號是否為奇數(shù)值,該奇數(shù)值指示線程正在運行的程序碼不是分區(qū)管理器的程序碼。方框134確定線程的當前順序號是否不同于在方框124中捕獲的順序號,以指示在重定位分區(qū)控制塊的處理被啟動以及指針被設(shè)置到零值時的某些后續(xù)點,線程已經(jīng)離開分區(qū)管理器的程序碼(并且可能重新進入這樣的程序碼)。
在方框128-134中檢驗的條件是真實的任何時候,控制轉(zhuǎn)到方框136,以清除與比特掩碼相關(guān)聯(lián)的比特。反之,如果方框128-134中檢驗的條件沒有一個是真實的,則跳過方框136,并且控制直接轉(zhuǎn)到方框126,使與仍然設(shè)置在比特掩碼中的線程相關(guān)聯(lián)的比特指示該線程仍然運行能夠使用共享指針的程序碼。
一旦已經(jīng)處理所有有效線程,方框126就把控制轉(zhuǎn)到方框138,以確定比特掩碼是否等于零,零的比特掩碼指示線程不能使用共享指針訪問分區(qū)控制塊。如果是,則方框138終止例程120,接著可以進行重定位分區(qū)控制塊的處理。另外,只要任何有效線程仍然運行能夠使用共享指針訪問分區(qū)控制塊的分區(qū)管理器的程序碼,方框138就把控制轉(zhuǎn)到方框140,以延遲某些時段,然后重新開始方框126的循環(huán),再次輪詢所有有效線程。直到未檢測到有效線程可能潛在地保留共享指針的拷貝以及訪問數(shù)據(jù)結(jié)構(gòu)時,例程120才將重復(fù)方框126的循環(huán)。
本領(lǐng)域的普通技術(shù)人員將會明白這里描述的實施例的有益于公開的各種修改。因此本發(fā)明由權(quán)利要求確定。
權(quán)利要求
1.一種從包含由分區(qū)管理器管理的多個邏輯分區(qū)類型的邏輯分區(qū)計算機中刪除分區(qū)的方法,該邏輯分區(qū)計算機還包括在其上運行的多個線程,并且分區(qū)管理器訪問與刪除的分區(qū)相關(guān)聯(lián)的分區(qū)控制塊,該方法包括當多個線程中的第一線程進入分區(qū)管理器的程序碼時,將與該第一線程關(guān)聯(lián)的順序號遞增到奇數(shù)值和偶數(shù)值之一;當?shù)谝痪€程離開程序碼時,從奇數(shù)或偶數(shù)值的另一個遞增順序號;和通過以下方式重定位分區(qū)控制塊將指向分區(qū)控制塊的共享指針設(shè)置成指示分區(qū)控制塊不可用的零值;捕獲順序號的值;等候直至多個線程之每個不再使用共享指針,在等候期間監(jiān)視每個線程以確定每個線程是否正在運行使用共享指針的程序碼,所述確定包括響應(yīng)多個條件的至少一個條件的滿足來確定第一線程不再使用共享指針,所述多個條件包括第一線程無效的第一條件,第一線程正在分區(qū)管理器的空閑循環(huán)中運行的第二條件,順序號被設(shè)置到奇數(shù)和偶數(shù)值之一的第三條件,以及順序號已經(jīng)依據(jù)捕獲值改變的第四條件;和在等候直至多個線程之每個不再使用共享指針之后,重定位分區(qū)控制塊。
2.一種重定位可以被多個在計算機中運行的線程訪問的數(shù)據(jù)結(jié)構(gòu)的方法,該方法包括,響應(yīng)重定位數(shù)據(jù)結(jié)構(gòu)的請求將指向數(shù)據(jù)結(jié)構(gòu)的共享指針設(shè)置到一個預(yù)定值,該預(yù)定值向此后訪問該指針的線程指示該數(shù)據(jù)結(jié)構(gòu)是不可用的;通過監(jiān)視每個線程以確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,進行等候直至多個線程之每個不再使用共享指針;和當?shù)群蛑敝炼鄠€線程之每個不再使用共享指針之后,重定位數(shù)據(jù)結(jié)構(gòu)。
3.根據(jù)權(quán)利要求2所述的方法,其中確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定多個線程中第一線程是否無效。
4.根據(jù)權(quán)利要求2所述的方法,其中確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定多個線程中第一線程是否正在運行空閑循環(huán)。
5.根據(jù)權(quán)利要求4所述的方法,其中空閑循環(huán)是一個分區(qū)管理器空閑循環(huán)。
6.根據(jù)權(quán)利要求2所述的方法,其中確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程目前正在運行其它程序碼。
7.根據(jù)權(quán)利要求2所述的方法,其中確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程已經(jīng)離開程序碼。
8.根據(jù)權(quán)利要求2所述的方法,其中確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程目前正在運行程序碼或者第一線程已經(jīng)離開程序碼,其中該指示符包括當?shù)谝痪€程進入程序碼時從第一值更新到第二值的順序號,以及當?shù)谝痪€程離開程序碼時從第二值更新到第三值的順序號,和其中,確定與第一線程相關(guān)聯(lián)的指示符是否指示第一線程已經(jīng)離開程序碼包括將該指示符與其舊值進行比較。
9.根據(jù)權(quán)利要求2所述方法,還包括當多個線程中第一線程進入程序碼時,將與該第一線程關(guān)聯(lián)的順序號從第一組值中選擇的第一值遞增到從第二組值中選擇的第二值;當?shù)谝痪€程離開程序碼時,將順序號從第二值遞增到從第一組值選出的第三值;和其中,等候直至多個線程之每個不再使用共享指針包括捕獲監(jiān)視每個線程之前的順序號的值,其中確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼包括確定與第一線程關(guān)聯(lián)的順序號是否具有選自第二組值的一個值,以及確定順序號是否具有不同于捕獲值的一個值。
10.根據(jù)權(quán)利要求9所述的方法,其中第一組值由奇數(shù)組成,第二組值由偶數(shù)組成。
11.根據(jù)權(quán)利要求2所述的方法,其中計算機是邏輯分區(qū)計算機,以及其中程序碼包括可訪問計算機中多個邏輯分區(qū)的分區(qū)管理器。
12.根據(jù)權(quán)利要求11所述的方法,其中程序碼包括分區(qū)管理器的不可調(diào)度部分。
13.根據(jù)權(quán)利要求11所述的方法,其中數(shù)據(jù)結(jié)構(gòu)包括由分區(qū)管理器使用的分區(qū)控制塊。
14.根據(jù)權(quán)利要求2所述的方法,其中將共享指針設(shè)置到預(yù)定值包括將共享指針設(shè)置到零值。
15.根據(jù)權(quán)利要求2所述的方法,其中多個線程包括在單線程處理器上運行的第一線程。
16.根據(jù)權(quán)利要求2所述的方法,其中多個線程包括在多線程處理器上運行的第一和第二線程。
17.一種設(shè)備,包括一個存儲器,其內(nèi)駐留有數(shù)據(jù)結(jié)構(gòu);至少一個處理器,被配置來運行多個線程;和程序碼,被配置來由至少一個處理器運行,以通過以下方式重定位數(shù)據(jù)結(jié)構(gòu)響應(yīng)重定位數(shù)據(jù)結(jié)構(gòu)的請求,將共享指針設(shè)置到一個向此后訪問該指針的線程指示數(shù)據(jù)結(jié)構(gòu)是不可用的預(yù)定值,通過監(jiān)視每個線程以確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,進行等候直至多個線程之每個不再使用共享指針,以及當?shù)群蛑敝炼鄠€線程之每個不再使用共享指針之后,重定位數(shù)據(jù)結(jié)構(gòu)。
18.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配置成通過確定多個線程中第一線程是否無效,來確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。
19.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配置成通過確定多個線程中第一線程是否正在運行空閑循環(huán),來確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。
20.根據(jù)權(quán)利要求19所述的設(shè)備,其中空閑循環(huán)是一個分區(qū)管理器空閑循環(huán)。
21.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配置成確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程目前正在運行其它程序碼,來確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。
22.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配置成通過確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程已經(jīng)離開程序碼,來確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。
23.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配成通過確定與多個線程中第一線程相關(guān)聯(lián)的指示符是否指示第一線程目前正在運行程序碼或者第一線程已經(jīng)離開程序碼,來確定一個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,其中該指示符包括當?shù)谝痪€程進入程序碼時從第一值更新到第二值的順序號,以及當?shù)谝痪€程離開程序碼時從第二值更新到第三值的順序號;并且程序碼被配置成通過將該指示符與其舊值進行比較,來確定與第一線程相關(guān)聯(lián)的指示符是否指示第一線程已經(jīng)離開程序碼。
24.根據(jù)權(quán)利要求17所述設(shè)備,其中程序碼被進一步配置成當多個線程中第一線程進入程序碼時,將與該第一線程關(guān)聯(lián)的順序號從第一組值中選擇的第一值遞增到從第二組值中選擇的第二值;以及當?shù)谝痪€程離開程序碼時,將順序號從第二值遞增到從第一組值選出的第三值;其中,程序碼被配置成通過捕獲在監(jiān)視每個線程之前的順序號的值,進行等候直至多個線程之每個不再使用共享指針;程序碼被配置成通過確定與第一線程關(guān)聯(lián)的順序號是否具有選自第二組值的一個值,以及確定順序號是否具有不同于捕獲值的一個值,來確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。
25.根據(jù)權(quán)利要求24所述的設(shè)備,其中第一組值由奇數(shù)組成,第二組值由偶數(shù)組成。
26.根據(jù)權(quán)利要求17所述的設(shè)備,其中設(shè)備被配置為邏輯分區(qū)計算機,其中程序碼包括可訪問至少在一個處理器上運行的多個邏輯分區(qū)的分區(qū)管理器。
27.根據(jù)權(quán)利要求26所述的設(shè)備,其中程序碼包括分區(qū)管理器的不可調(diào)度部分。
28.根據(jù)權(quán)利要求26所述的設(shè)備,其中數(shù)據(jù)結(jié)構(gòu)包括由分區(qū)管理器使用的分區(qū)控制塊。
29.根據(jù)權(quán)利要求17所述的設(shè)備,其中程序碼被配置成通過把共享指針設(shè)置到零值,來將共享指針設(shè)置到預(yù)定值。
30.根據(jù)權(quán)利要求17所述的設(shè)備,其中至少一個處理器包括一個單線程處理器。
31.根據(jù)權(quán)利要求17所述的設(shè)備,其中至少一個處理器包括多線程處理器。
32.一種程序產(chǎn)品,包括程序碼,被配置成重定位可由在一個計算機上運行的多個線程訪問的數(shù)據(jù)結(jié)構(gòu),所述重定位數(shù)據(jù)結(jié)構(gòu)配置按以下方式進行響應(yīng)重定位數(shù)據(jù)結(jié)構(gòu)的請求,將共享指針設(shè)置到一個向此后訪問該指針的線程指示數(shù)據(jù)結(jié)構(gòu)是不可用的預(yù)定值,通過監(jiān)視每個線程以確定每個線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼,進行等候直至多個線程之每個不再使用共享指針,以及當?shù)群蛑敝炼鄠€線程之每個不再使用共享指針之后,重定位數(shù)據(jù)結(jié)構(gòu);和一個承載程序產(chǎn)品的信號承載媒介。
33.根據(jù)權(quán)利要求32所述的程序,其中信號承載媒介包括傳輸媒介和可記錄媒介的至少一個。
全文摘要
本發(fā)明公開了支持重定位多線程計算機中的數(shù)據(jù)結(jié)構(gòu)并且不需要使用計算昂貴的信號標志或者自旋鎖的設(shè)備、程序產(chǎn)品和方法。特別是,訪問數(shù)據(jù)結(jié)構(gòu)由一個共享指針管理,當收到重定位數(shù)據(jù)結(jié)構(gòu)的請求時,將共享指針最初設(shè)置到一個向任何隨后訪問指針的線程顯示該數(shù)據(jù)結(jié)構(gòu)是不可用的值。此外,為了尋址已經(jīng)持有共享指針的拷貝的任何線程,從而能夠在請求啟動之后經(jīng)由共享指針訪問數(shù)據(jù)結(jié)構(gòu),因此監(jiān)視所有這樣的線程,以確定任何線程是否正在運行能夠使用共享指針訪問數(shù)據(jù)結(jié)構(gòu)的程序碼。一旦該條件被滿足,就確保線程不可能潛在地經(jīng)由共享指針訪問數(shù)據(jù)結(jié)構(gòu),因而可隨后重定位數(shù)據(jù)結(jié)構(gòu)。
文檔編號G06F9/46GK1534478SQ20041000282
公開日2004年10月6日 申請日期2004年1月17日 優(yōu)先權(quán)日2003年3月27日
發(fā)明者威廉·J·阿姆斯特朗, 威廉 J 阿姆斯特朗, J 海爾曼, 彼得·J·海爾曼, 內(nèi)亞, 內(nèi)爾什·內(nèi)亞 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1