專利名稱:在虛擬機(jī)或其他計算機(jī)實體之間傳送數(shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
一般地說,本發(fā)明涉及計算機(jī)系統(tǒng),更具體地說,本發(fā)明論及在虛擬機(jī)、邏輯分區(qū)或應(yīng)用程序之間傳送消息和數(shù)據(jù)的有效技術(shù)。
背景技術(shù):
在許多計算機(jī)環(huán)境中,兩個或更多個計算機(jī)實體需要交換消息或數(shù)據(jù)。這些計算機(jī)實體包括虛擬機(jī)、邏輯分區(qū)和在單一操作系統(tǒng)(如Unix或Windows NT)上運行的應(yīng)用。
虛擬機(jī)操作系統(tǒng)在今天是眾所周知的,它包含一個公共基礎(chǔ)部分和若干單獨的用戶部分。在一個IBM z/VM操作系統(tǒng)中,該公共基礎(chǔ)部分稱作“控制程序”或“CP”,而每個用戶部分稱作“虛擬機(jī)”或“賓客(guest)”。在每個虛擬機(jī)上能運行許多應(yīng)用。每個虛擬機(jī)有它自己的工作調(diào)度器(以及相關(guān)聯(lián)的工作隊列)而且是作為個人操作系統(tǒng)顯現(xiàn)給用戶及其應(yīng)用。每個虛擬機(jī)以它們所支持的應(yīng)用的名義執(zhí)行命令。不同的虛擬機(jī)能通過公共基礎(chǔ)部分彼此通信。不同虛擬機(jī)之間經(jīng)由CP進(jìn)行的通信是以消息的形式實現(xiàn)的,這些消息由虛擬化通信設(shè)備如Guest Lan或IBM專有協(xié)議(如IUCV)傳送。盡管這些通信是由多樣協(xié)議傳送的,但所有這些通信機(jī)制至少有四個共同性質(zhì)a)消息數(shù)據(jù)首先被寫入發(fā)送方的虛擬地址空間。
b)在每個接收方虛擬機(jī)中為每個消息產(chǎn)生一個中斷。這調(diào)用每個接收方虛擬機(jī)中的中斷處理。
c)為實現(xiàn)通信,CP必須被調(diào)用。
d)CP把消息數(shù)據(jù)從發(fā)送方虛擬地址空間復(fù)制到所有接收方的虛擬地址空間。
采用上述通信方法,存在顯著的開銷,此種開銷是與調(diào)用CP、產(chǎn)生中斷、處理中斷和把消息數(shù)據(jù)從發(fā)送方虛擬地址空間復(fù)制到每個接收方的虛擬地址空間相關(guān)聯(lián)的。
下面是對IUCV的更詳細(xì)描述。IUCV是IBM專有的點到點協(xié)議。點對點協(xié)議從一個發(fā)送方向一個接收方傳送數(shù)據(jù)。為經(jīng)由IUCV進(jìn)行通信,發(fā)送方首先調(diào)用CP,指出通信的預(yù)期接收方的標(biāo)識。CP產(chǎn)生一個對該接收方的中斷,如果該接收方同意通信,則CP向該接收方提供一個通信路徑id(標(biāo)識)。然后,CP還中斷該發(fā)送方并向該發(fā)送方提供該通信路徑id。為發(fā)送數(shù)據(jù),該發(fā)送方調(diào)用CP,指出先前得到的路徑id和要發(fā)送的數(shù)據(jù)。CP使用該路徑id去識別接收方并產(chǎn)生對該接收方的中斷。該接收方通過調(diào)用CP以接收該數(shù)據(jù)作為對中斷的響應(yīng)。于是CP從發(fā)送方的虛擬地址空間向接收方的虛擬地址空間復(fù)制數(shù)據(jù)并對發(fā)送方產(chǎn)生一個中斷,指出數(shù)據(jù)已被傳送。
下面是對Gest Lan的更詳細(xì)描述。Guest Lan是使用局域網(wǎng)(LAN)協(xié)議的一種虛擬化通信設(shè)備。Lan協(xié)議允許在一個發(fā)送方和多個接收方之間同時通信。為經(jīng)由Guest Lan通信,發(fā)送方和接收方都調(diào)用CP,指出它們希望加入Guest Lan。為發(fā)送數(shù)據(jù),發(fā)送方調(diào)用CP,指出要發(fā)送的數(shù)據(jù)和哪些接收方應(yīng)得到該數(shù)據(jù)。CP為每個所確定的接收方產(chǎn)生一個中斷。每個接收方通過調(diào)用CP以接收數(shù)據(jù)來響應(yīng)。于是CP把數(shù)據(jù)從發(fā)送方的虛擬地址空間復(fù)制到每個接收方的虛擬地址空間。一旦所有接收方已收到該數(shù)據(jù),CP對發(fā)送方產(chǎn)生一個中斷,指出該數(shù)據(jù)已傳送給所有接收方。
邏輯分區(qū)環(huán)境也是今天眾所周知的。邏輯分區(qū)是對單個計算機(jī)系統(tǒng)的資源的一種邏輯劃分,這種劃分是由軟件和微代碼完成的。每個邏輯分區(qū)各自是由一個或多個CPU、存儲器和外圍設(shè)備的配置規(guī)定的。在一個邏輯分區(qū)上運行的操作系統(tǒng)看待它的邏輯分區(qū)幾乎與真實的計算機(jī)區(qū)分不開,當(dāng)然,邏輯分區(qū)可能提供某些附加的服務(wù),這些服務(wù)在真實計算機(jī)上是得不到的。所以,該操作系統(tǒng)基本上不知道它是運行在一個邏輯分區(qū)上,而且它基本上不知道這同一真實計算機(jī)上的其他邏輯分區(qū)。每個分區(qū)也有它自己的調(diào)度器,并如在虛擬機(jī)環(huán)境中那樣使用中斷從一個邏輯分區(qū)到另一個邏輯分區(qū)傳送消息/數(shù)據(jù)。
有其他已知技術(shù)用于當(dāng)兩個應(yīng)用運行在同一操作系統(tǒng)(如WindowsNT或Unix)上時一個應(yīng)用與另一個應(yīng)用間的通信。在這一環(huán)境中,操作系統(tǒng)對這兩個應(yīng)用使用同一個調(diào)度器。根據(jù)這些已知的通信技術(shù),當(dāng)應(yīng)用“A”要與應(yīng)用“B”通信時,應(yīng)用A調(diào)用/通知該操作系統(tǒng)內(nèi)的管理程序(supervisor)。該調(diào)用包括可由應(yīng)用A訪問的存儲器中該消息/數(shù)據(jù)的地址。作為響應(yīng),管理程序把該消息/數(shù)據(jù)復(fù)制到應(yīng)用B能訪問的位置。接下來,管理程序把一個工作單元(work element)放到調(diào)度隊列上。該工作單元把應(yīng)用B認(rèn)作接收方并包括一個取消息/數(shù)據(jù)命令。然后,調(diào)度器在與操作系統(tǒng)調(diào)度策略和工作單元相對優(yōu)先級相一致的時刻把該工作單元調(diào)度到應(yīng)用B。下面是一些可能的已知調(diào)度策略。如果應(yīng)用B當(dāng)前不忙,則當(dāng)處理器變?yōu)榭臻e和/或未被處理(任何應(yīng)用的)更高優(yōu)先級工作單元所占用時,該消息/數(shù)據(jù)工作單元被調(diào)度到應(yīng)用B。如果應(yīng)用B當(dāng)前忙于另一個優(yōu)先級較低的工作項目,則調(diào)度器可能在該較低優(yōu)先級工作項目完成它的被分配的處理器時間片或?qū)Σ僮飨到y(tǒng)進(jìn)行一次調(diào)用時替入該消息/數(shù)據(jù)工作項目。但是,“中斷”該操作系統(tǒng)以向應(yīng)用B傳送消息/數(shù)據(jù)是不適當(dāng)?shù)?,因為這會導(dǎo)致開銷。對調(diào)度器的共享使這種做法沒有必要。如上文指出的那樣,虛擬機(jī)、邏輯分區(qū)和其他環(huán)境沒有共同的調(diào)度器。
本發(fā)明的一個目的是提供一種有效的方法,用于在a)運行在同一基礎(chǔ)操作系統(tǒng)上的兩個不同的虛擬機(jī)、b)同一計算機(jī)的兩個邏輯分區(qū)或c)運行在同一計算機(jī)上但有不同調(diào)度器的兩個應(yīng)用之間的通信/數(shù)據(jù)傳送。
本發(fā)明的一個目的是提供一種有效的方法,用于a)全部運行在同一基礎(chǔ)操作系統(tǒng)上的一個虛擬機(jī)到兩個或更多個其他虛擬機(jī)、b)同一計算機(jī)的一個邏輯分區(qū)到兩個或更多個其他邏輯分區(qū)或c)運行在同一計算機(jī)上但有不同調(diào)度器的一個應(yīng)用到兩個或更多個其他應(yīng)用的通信/數(shù)據(jù)傳送。
發(fā)明內(nèi)容
本發(fā)明在于一種方法,用于有共享存儲器的第一和第二計算機(jī)程序之間的通信。第一計算機(jī)程序有第一工作調(diào)度器用于第一工作隊列。第二計算機(jī)程序有第二工作調(diào)度器用于第二工作隊列。一個消息或數(shù)據(jù)被從第一程序?qū)懭牍蚕泶鎯ζ鞴┑诙绦蚴褂?,以一個工作項目對第二工作隊列進(jìn)行更新,該工作項目指出用于第二程序的消息或數(shù)據(jù)。與更新步驟相關(guān)聯(lián)的是確定第二程序當(dāng)前是否忙。如果是,則第二程序不會因為該消息或數(shù)據(jù)而被中斷。當(dāng)其后第二程序變?yōu)椴幻r,該第二程序便無需中斷而接收和執(zhí)行該工作項目去接收該消息或數(shù)據(jù)。如果第二程序當(dāng)前不忙,則第二程序被中斷以在它的工作隊列上處理該消息或數(shù)據(jù)。(這給第二程序以最小負(fù)擔(dān)。)根據(jù)本發(fā)明的另一特性,有一種方法用于具有共享存儲器和共同基礎(chǔ)操作系統(tǒng)的第一和第二虛擬機(jī)之間的通信。第一虛擬機(jī)有第一工作調(diào)度器用于第一工作隊列。第二虛擬機(jī)有第二工作調(diào)度器用于第二工作隊列。第一和第二工作隊列駐留在由第一和第二虛擬機(jī)二者共享的存儲器中。無需調(diào)用共同基礎(chǔ)操作系統(tǒng),一個消息或數(shù)據(jù)被從第一虛擬機(jī)寫入共享存儲器供第二虛擬機(jī)使用,以一個工作項目對第二工作隊列進(jìn)行更新,該工作項目指出用于第二虛擬機(jī)的消息或數(shù)據(jù)。其后,第二虛擬機(jī)程序從共享存儲器中讀取該消息或數(shù)據(jù)。
圖1是根據(jù)本發(fā)明的虛擬機(jī)操作系統(tǒng)方框圖。
圖2是顯示根據(jù)本發(fā)明由圖1的虛擬機(jī)實現(xiàn)的接收來自另一虛擬機(jī)的消息或數(shù)據(jù)的過程的流程圖。
圖3是顯示根據(jù)本發(fā)明由圖1的虛擬機(jī)實現(xiàn)的向另一虛擬機(jī)發(fā)送消息或數(shù)據(jù)的過程的流程圖。
圖4是根據(jù)本發(fā)明的邏輯上分區(qū)的計算機(jī)系統(tǒng)的方框圖。
圖5是顯示根據(jù)本發(fā)明由圖4的計算機(jī)系統(tǒng)的一個邏輯分區(qū)實現(xiàn)的接收來自另一邏輯分區(qū)的消息或數(shù)據(jù)的過程的流程圖。
圖6是顯示根據(jù)本發(fā)明由圖4的一個邏輯分區(qū)實現(xiàn)的向另一邏輯分區(qū)發(fā)送消息或數(shù)據(jù)的過程的流程圖。
具體實施例方式
現(xiàn)在詳細(xì)地參考附圖,各圖中相同的標(biāo)號始終表示相同的部件。圖1顯示根據(jù)本發(fā)明的虛擬機(jī)操作系統(tǒng),一般以10表示。作為舉例,虛擬機(jī)操作系統(tǒng)10可以是IBM z/VM版本4.2.0或4.3.0操作系統(tǒng),當(dāng)然本發(fā)明也能被納入其他虛擬機(jī)或非虛擬機(jī)操作系統(tǒng)。z/VM 4.2.0操作系統(tǒng)的詳情在IBM出版物“z/VM 4.2.0一般信息”(z/VM 4.20 General Information)(文檔號GC24-5991-03)中被公開,它可從國際商業(yè)機(jī)器公司(PO Box29570,IBM Publications,Raleigh,North Corolina 27626-0570)或在萬維網(wǎng)上得到,網(wǎng)址為WWW.IBM.com/shop/publications/order。該出版物在這里被納入作為本公開內(nèi)容的一部分供參考。操作系統(tǒng)10在物理計算機(jī)11如IBM zSeries(z系列)大型機(jī)中執(zhí)行,當(dāng)然本發(fā)明也能在其他服務(wù)器計算機(jī)或個人計算機(jī)中實現(xiàn)。操作系統(tǒng)10包含用戶部分12、14、16...(在z/VM操作系統(tǒng)中稱作“虛擬機(jī)”或“賓客虛擬機(jī)”)和公共基礎(chǔ)部分20(在z/VM操作系統(tǒng)中稱作“CP”)。每個用戶部分12、14和16提供標(biāo)準(zhǔn)的操作系統(tǒng)功能,如I/O、通信等。每個用戶部分12、14和16能并發(fā)執(zhí)行若干不同的應(yīng)用,如圖中所示應(yīng)用32、34和36。作為舉例,應(yīng)用32、34和36可以是TELNET、FTP和PING(并使用本發(fā)明代替先有技術(shù)的通信機(jī)制)。在z/VM 4.2.0和4.3.0操作系統(tǒng)中,Linux(Linus Torvalds的商標(biāo))操作系統(tǒng)也能在每個虛擬機(jī)12、14和16上運行,當(dāng)然,Linux操作系統(tǒng)不需要虛擬機(jī)12、14和16的某些操作系統(tǒng)功能,因為它們前已由Linux操作系統(tǒng)提供了。盡管未畫出,通常還有許多其他虛擬機(jī)及相關(guān)的操作系統(tǒng),它們也共享公共基礎(chǔ)部分20。同樣,在每個虛擬機(jī)上可以有多個應(yīng)用在執(zhí)行?;A(chǔ)部分20包括已知的功能,如虛擬化的存儲器、虛擬化的諸設(shè)備以及虛擬化的諸CPU。
計算機(jī)11還包括存儲器區(qū)21,它由全部虛擬機(jī)12、14、16等共享。作為“被共享的”存儲器區(qū),每個虛擬機(jī)能直接尋址和訪問該共享存儲器區(qū)21以從中讀取數(shù)據(jù)和向其中寫入數(shù)據(jù)。對于由應(yīng)用請求的或由應(yīng)用產(chǎn)生的數(shù)據(jù),該應(yīng)用向它運行所在的相應(yīng)虛擬機(jī)發(fā)出讀或?qū)懻埱?。這個相應(yīng)的虛擬機(jī)代表該應(yīng)用訪問共享存儲器,如下文中參考圖2和圖3解釋的那樣。在本發(fā)明的(多個實施例中的)一個實施例中,共享存儲器21是基礎(chǔ)部分20的非連續(xù)保存段(Discontiguous Saved Segment,DCSS)部分的一部分。DCSS是共享存儲器的一種特殊形式,它能被動態(tài)加載和卸載。在虛擬機(jī)終止甚至CP終止時它仍能存在,并能包含可執(zhí)行代碼。然而,除了共享存儲器外,DCSS內(nèi)的其他功能不是本發(fā)明所需的,因此本發(fā)明不局限于涉及DCSS或其等效物的那些實現(xiàn)。
每個虛擬機(jī)12、14和16包括各自的讀功能32a、32b和32c,各自的寫功能42a、42b和42c以及各自的調(diào)度器22a、22b和22c。當(dāng)虛擬機(jī)在它執(zhí)行的應(yīng)用中遇到寫命令時便調(diào)用寫功能。該寫功能是處于待用狀態(tài)的,所以對寫功能任務(wù)無需排隊。寫功能把數(shù)據(jù)從虛擬機(jī)寫入共享存儲器。寫操作不調(diào)用CP。當(dāng)虛擬機(jī)在它執(zhí)行的應(yīng)用中遇到讀命令時便調(diào)用讀功能。該讀功能是處于待用狀態(tài)的,所以對讀功能任務(wù)無需排隊。讀功能從共享存儲器中讀數(shù)據(jù)。這樣,數(shù)據(jù)不是從寫方虛擬地址空間復(fù)制到讀方虛擬地址空間。還有,不調(diào)用CP去讀共享存儲器,而這減少了開銷。每個虛擬機(jī)當(dāng)完成一個工作項目并因此需要另一個工作項目(如果有的話)時便調(diào)用(call/invoke)它的調(diào)度器。響應(yīng)這一調(diào)用,該調(diào)度器檢驗共享存儲器21內(nèi)其相應(yīng)隊列26a、26b和26c上的工作項目。
在共享存儲器21中還存儲表24。該表指出每個虛擬機(jī)12、14、16的狀態(tài)。每個虛擬機(jī)12、14和16還包括各自的工作隊列管理功能(WorkQueue Management Function,“WQMF”)81a、81b或81c,該WQMF當(dāng)出現(xiàn)工作項目時便把它們加到工作隊列中,并把每個虛擬機(jī)的狀態(tài)更新為“閑”或“不閑”,如下文描述的那樣。表24包括每個虛擬機(jī)的標(biāo)識和指出各自虛擬機(jī)是否空閑的一個指示。表24還包括用于每個虛擬機(jī)的指針,指向各自工作隊列26a、26b或26c。當(dāng)狀態(tài)變化時表24也變化。在圖1所示例子中,當(dāng)前虛擬機(jī)12不空閑,即它當(dāng)前正在執(zhí)行另一個工作項目/任務(wù)。然而,虛擬機(jī)12在完成它的當(dāng)前工作項目之后在它的工作隊列26a中沒有任何事情要做。虛擬機(jī)14當(dāng)前是空閑的,但在其隊列26b中有一個工作項目。在隊列26b中的工作項目是讀共享存儲器的內(nèi)容,從位置24D00開始并延伸給定的長度。(在工作項目之后的詞“null(空)”表明該隊列中再沒有工作項目。)虛擬機(jī)16當(dāng)前不空閑,并在其隊列26c中有一個工作項目。在隊列26c中的工作項目是讀共享存儲器中的內(nèi)容,從位置24D00開始并延伸給定的長度。
圖2是流程圖,顯示每個調(diào)度器的操作,即每個調(diào)度器與其他調(diào)度器分離地實現(xiàn)圖2的步驟。在一個虛擬機(jī)完成每個工作項目/任務(wù)之后,它調(diào)用它的調(diào)度器去尋找要完成的新的工作項目(決策48)。在該虛擬機(jī)內(nèi)的調(diào)度器響應(yīng)這一調(diào)用,檢驗相應(yīng)的工作隊列(對調(diào)度器22a是工作隊列26a,對調(diào)度器22b是工作隊列26b,對調(diào)度器22c是工作隊列26c)以查找工作項目(步驟50)。如果在該隊列中存在一個工作項目(決策52),則調(diào)度器對該工作項目進(jìn)行分析(parse),以確定它的性質(zhì)并確定調(diào)用哪個功能來完成該工作項目。在讀請求的情況中,調(diào)度器調(diào)用讀功能,在由該工作項目指出的位置讀消息/數(shù)據(jù)。這樣,能在不產(chǎn)生中斷和不調(diào)用中斷處理的情況下完成這個讀操作。然后,調(diào)度器循環(huán)回到?jīng)Q策52,以再次檢驗工作隊列。如果在決策52的任何循環(huán)期間,在工作隊列中沒有工作項目,則該調(diào)度器在表24中為相應(yīng)的虛擬機(jī)設(shè)置狀態(tài)字段為“閑”(步驟60)。然后,調(diào)度器通知該虛擬機(jī)進(jìn)入等待狀態(tài)(步驟62)。在這一等待狀態(tài),該虛擬機(jī)是處于“睡眠”或“閑”方式,這時它不為應(yīng)用也不為它本身執(zhí)行任何工作項目。該虛擬機(jī)將保持在這一等待狀態(tài),直至收到一個中斷指出在其工作隊列中有了新的工作項目(決策66)。當(dāng)收到這一中斷時,該虛擬機(jī)的WQMF在表24中為相應(yīng)的虛擬機(jī)設(shè)置狀態(tài)字段為“不閑”(步驟68)。接下來,該調(diào)度器循環(huán)回到?jīng)Q策52以檢驗該工作隊列去尋找工作項目。在這時,在該工作隊列中應(yīng)該有一個工作項目。
圖3顯示虛擬機(jī)之一(例如虛擬機(jī)12)當(dāng)它想要向另一虛擬機(jī)(如虛擬機(jī)14)發(fā)送一個消息/數(shù)據(jù)時的操作。在步驟80,虛擬機(jī)12調(diào)用它的寫功能32a以把數(shù)據(jù)寫入共享存儲器21。如前文解釋的那樣,每個虛擬機(jī)通過提供適當(dāng)?shù)牡刂纺苤苯釉L問共享存儲器。于是,虛擬機(jī)12的寫功能32a通過給定要寫入的地址和提供要寫的數(shù)據(jù)把該數(shù)據(jù)寫入共享存儲器。接下來,在虛擬機(jī)12內(nèi)的工作隊列管理功能(“WQMF”)81a通過把一工作項目寫入虛擬機(jī)14的工作隊列26b使得對工作隊列26b添加了一個工作項目(步驟82)。因為該工作隊列是在共享存儲器中,所以這不需要調(diào)用CP。接下來,WQMF 81a通過檢驗表24確定虛擬機(jī)14當(dāng)前是否空閑(決策84)。如果不空閑,則虛擬機(jī)12不再做任何事情去完成這一通信,而且在這一通信過程的任何一點CP都不被調(diào)用(終止步驟86)。根據(jù)本發(fā)明,虛擬機(jī)12不去中斷虛擬機(jī)14,這是因為在中斷虛擬機(jī)過程中涉及的開銷。如上文參考圖2解釋的那樣,當(dāng)虛擬機(jī)14完成它的當(dāng)前工作項目時,它將自動調(diào)用(invoke/call)它的調(diào)度器去檢驗其工作隊列以尋找另一個工作項目(決策48和步驟50)。在那時它將看到來自虛擬機(jī)12的這個工作項目。再次參考決策84,如果虛擬機(jī)14空閑,則根據(jù)本發(fā)明,虛擬機(jī)12向虛擬機(jī)14發(fā)出“喚醒”型中斷(步驟88)。這需要調(diào)用CP。這個喚醒型中斷告警/調(diào)用虛擬機(jī)14,告知它在其隊列26b中有一個工作項目。虛擬機(jī)12以發(fā)出這一中斷完成數(shù)據(jù)通信的它的那一部分。該“喚醒”中斷自動地使虛擬機(jī)14啟動其調(diào)度器22b(圖2的決策48)以檢驗其工作隊列尋找工作項目。然后調(diào)度器22b實現(xiàn)圖2中所示步驟以檢驗它的工作隊列26b(步驟50和決策52),然后讀數(shù)據(jù)(步驟54)。
圖3還顯示虛擬機(jī)之一(例如虛擬機(jī)12)當(dāng)它想要與兩個或更多個其他虛擬機(jī)(例如虛擬機(jī)14和16)進(jìn)行通信時的操作。在步驟80,虛擬機(jī)12調(diào)用它的寫功能32a以把數(shù)據(jù)寫入共享存儲器21。于是,虛擬機(jī)12通過給定要寫入的地址和提供要寫的數(shù)據(jù)把該數(shù)據(jù)寫入共享存儲器。在圖1中所示例子中,數(shù)據(jù)被寫入以地址24D00開始的共享存儲器位置。接下來,虛擬機(jī)12內(nèi)的WQMF 81a通過把工作項目、數(shù)據(jù)地址和數(shù)據(jù)長度寫到工作隊列上,對虛擬機(jī)14和16的工作隊列26b和26c添加了一個工作項目(步驟82)。然后,虛擬機(jī)12內(nèi)的WQMF 81a通過檢驗表24確定虛擬機(jī)14和16當(dāng)前是否空閑(決策84)。在圖1所示例子中,虛擬機(jī)14是空閑的,但虛擬機(jī)16是忙的。于是,對于忙的虛擬機(jī)16,虛擬機(jī)12不再做任何事情去完成這一通信(終止步驟86)。根據(jù)本發(fā)明,虛擬機(jī)12不去中斷忙的虛擬機(jī)16,這是因為在中斷虛擬機(jī)過程中涉及的開鎖。如上文參考圖2解釋的那樣,當(dāng)忙的虛擬機(jī)16完成它的當(dāng)前工作項目時,它將自動檢驗它的工作隊列以尋找另一工作項目(決策48和步驟50)。在那時它將看到來自虛擬機(jī)12的這個工作項目,于是通信將被完成,而無需調(diào)用CP。再次參考決策84,因為虛擬機(jī)14是空閑的,于是根據(jù)本發(fā)明,虛擬機(jī)12向空閑的虛擬機(jī)14發(fā)出“喚醒”型中斷(步驟88)。這個喚醒型中斷告警/調(diào)用空閑虛擬機(jī)14,告知它在其隊列中有一個工作項目。虛擬機(jī)12以發(fā)出這一中斷完成數(shù)據(jù)通信的它的那一部分。該“喚醒”中斷自動地使虛擬機(jī)14調(diào)用(invoke/call)它的調(diào)度器22b以檢驗其工作隊列尋找工作項目。然后調(diào)度器22b實現(xiàn)圖2中所示步驟以檢驗它的工作隊列26b(決策52),然后讀數(shù)據(jù)(步驟54)。
圖4顯示根據(jù)本發(fā)明的邏輯分區(qū)的計算機(jī)系統(tǒng),總體上以110表示。系統(tǒng)110是一個物理計算機(jī)111的一個邏輯分區(qū),該物理計算機(jī)可以是例如IBM zSeries大型機(jī),當(dāng)然本發(fā)明也能在其他服務(wù)器計算機(jī)或個人計算機(jī)中實現(xiàn)。系統(tǒng)110包含邏輯分區(qū)112、114、116。每個邏輯分區(qū)112、114和116向其應(yīng)用提供標(biāo)準(zhǔn)的操作系統(tǒng)功能,如I/O、通信等。每個邏輯分區(qū)112、114和116能并發(fā)執(zhí)行若干不同的應(yīng)用,如圖中所示應(yīng)用132、134和136。作為舉例,應(yīng)用132、134和136能是Telnet,F(xiàn)TP以及Ping(并使用本發(fā)明代替先有技術(shù)的通信機(jī)制)。基礎(chǔ)部分120參與計算機(jī)111及其資源的實際邏輯分區(qū),即對一個或多個CPU分區(qū),對存儲器分區(qū),對I/O分區(qū)等。不同于本發(fā)明的基礎(chǔ)部分120和邏輯分區(qū)112、114及116的一個實例的諸功能在題為“企業(yè)系統(tǒng)/9000 9221處理器操作您的系統(tǒng)—卷2(邏輯分區(qū)方式)”(Enterprise System/9000 9221 ProcessorsOperating Your System-Volume 2(Logically Partitioning Mode))的文檔中描述,出版號為SA24-4351-02,它可從國際商業(yè)機(jī)器公司(PO Box 29570,IBM Publications,Raleigh,North Carolina 27626-0570)或在萬維網(wǎng)上得到,網(wǎng)址為WWW.IBM.com/shop/publications/order。
計算機(jī)111還包括存儲器區(qū)121,它由全部球邏輯分區(qū)112、114、116等共享。作為“被共享的”存儲器區(qū),每個邏輯分區(qū)能直接尋址和訪問該共享存儲器區(qū)121以從中讀取數(shù)據(jù)和向其寫入數(shù)據(jù)。對于由應(yīng)用請求的數(shù)據(jù)或由應(yīng)用產(chǎn)生的數(shù)據(jù),該應(yīng)用向它運行所在的邏輯分區(qū)發(fā)出讀或?qū)懻埱?。這個相應(yīng)的邏輯分區(qū)代表該應(yīng)用訪問該共享存儲器,如下文中參考圖5和圖6解釋的那樣。
每個邏輯分區(qū)112、114和116包括各自的讀功能132a、132b和132c,各自的寫功能142a、142b和142c以及各自的調(diào)度器122a、122b和122c。當(dāng)邏輯分區(qū)在它執(zhí)行的應(yīng)用中遇到寫命令時便調(diào)用寫功能。該寫功能是處于等待狀態(tài)的,所以對寫功能任務(wù)無需排隊。寫功能把數(shù)據(jù)從邏輯分區(qū)寫入共享存儲器,所以不調(diào)用基礎(chǔ)部分120。當(dāng)邏輯分區(qū)在它執(zhí)行的應(yīng)用中遇到讀命令時便調(diào)用讀功能。該讀功能是處于待用狀態(tài)的,所以對讀功能任務(wù)無需排隊。讀功能從共享存儲器中讀數(shù)據(jù)。所以不調(diào)用基礎(chǔ)部分120。還有,數(shù)據(jù)不是從寫方的虛擬地址空間復(fù)制到讀方的虛擬地址空間。每個邏輯分區(qū)當(dāng)完成一個工作項目并因此需要另一個工作項目(如果有的話)時便調(diào)用(call/invoke)它的調(diào)度器。響應(yīng)這一調(diào)用,調(diào)度器檢驗共享存儲器121內(nèi)其相應(yīng)隊列126a、126b或126c上的工作項目。
在共享存儲器121中還存儲表124。該表指出每個邏輯分區(qū)112、114和116的狀態(tài)。每個邏輯分區(qū)112、114和116還包括各自的WQMF 181a、181b或181c,該WQMF當(dāng)出現(xiàn)工作項目時便把它們加到工作隊列中,并把每個邏輯分區(qū)的狀態(tài)更新為“閑”或“不閑”,如下文描述的那樣。表124包括每個邏輯分區(qū)的標(biāo)識和指出各邏輯分區(qū)是否空閑的一個指示。表124還包括用于每個邏輯分區(qū)的指針,指向各自工作隊列126a、126b或126c。當(dāng)狀態(tài)變化時表124也變化。在圖4所示例子中,當(dāng)前邏輯分區(qū)112不空閑,即它當(dāng)前還在執(zhí)行另一個工作項目/任務(wù)。然而,邏輯分區(qū)112在完成它的當(dāng)前工作項目之后在它的工作隊列126a中沒有任何事情要做。邏輯分區(qū)114當(dāng)前是空閑的,但在其隊列126b中有一個工作項目。在隊列126b中的工作項目是讀共享存儲器的內(nèi)容,從位置24D00開始并延伸給定的長度。(在工作項目之后的詞“null(空)”表明該隊列中再沒有工作項目。)邏輯分區(qū)116當(dāng)前不空閑,并在其隊列126c中有一個工作項目。在隊列126c中的工作項目是讀共享存儲器中的內(nèi)容,從位置24D00開始并延伸給定的長度。
圖5是流程圖,顯示每個調(diào)度器的操作,即每個調(diào)度器與其他調(diào)度器分離地實現(xiàn)圖5的步驟。在一個邏輯分區(qū)完成每個工作項目/任務(wù)之后,它調(diào)用它的調(diào)度器去尋找要完成的新的工作項目(決策148)。在該邏輯分區(qū)內(nèi)的調(diào)度器響應(yīng)這一調(diào)用,檢驗相應(yīng)的工作隊列(對調(diào)度器122a是工作隊列126a,對調(diào)度器122b是工作隊列126b,對調(diào)度器122c是工作隊列126c)以查找工作項目(步驟150)。如果在該隊列中存在一個工作項目(決策152),則調(diào)度器對該工作項目進(jìn)行分析(parse),以確定它的性質(zhì)并確定調(diào)用哪個功能來完成該工作項目。在讀請求的情況中,調(diào)度器調(diào)用讀功能,在由該工作項目指出的位置讀消息/數(shù)據(jù)。這樣,能在不產(chǎn)生中斷和不調(diào)用中斷處理的情況下完成這個讀操作。然后,調(diào)度器循環(huán)回到?jīng)Q策152,以再次檢驗工作隊列。如果在決策152的任何循環(huán)期間,在工作隊列中沒有工作項目,則該調(diào)度器在表124中為相應(yīng)的邏輯分區(qū)設(shè)置狀態(tài)字段為“閑”(步驟160)。然后,調(diào)度器通知該邏輯分區(qū)進(jìn)入等待狀態(tài)(步驟162)。在這一等待狀態(tài),該邏輯分區(qū)是處于“睡眠”或“閑”方式,這時它不為應(yīng)用也不為它本身執(zhí)行任何工作項目。該邏輯分區(qū)將保持在這一等待狀態(tài),直到收到一個中斷指出在其工作隊列中有了新的工作項目(決策166)。當(dāng)收到這一中斷時,該邏輯分區(qū)的WQMF在表124中為相應(yīng)的邏輯分區(qū)設(shè)置狀態(tài)字段為“不閑”(步驟168)。接下來,該調(diào)度器循環(huán)回到?jīng)Q策152以檢驗該工作隊列去尋找工作項目。在這時,在該工作隊列中應(yīng)該有一個工作項目。
圖6顯示邏輯分區(qū)之一(例如邏輯分區(qū)112)當(dāng)它想要向另一邏輯分區(qū)(例如邏輯分區(qū)114)發(fā)送一個消息/數(shù)據(jù)時的操作。在步驟180,邏輯分區(qū)112調(diào)用它的寫功能132a以把數(shù)據(jù)寫入共享存儲器121。如前文解釋的那樣,每個邏輯分區(qū)通過提供適當(dāng)?shù)牡刂纺苤苯釉L問共享存儲器。于是,邏輯分區(qū)112的寫功能132a通過給定要寫入的地址和提供要寫的數(shù)據(jù)把該數(shù)據(jù)寫入共享存儲器。接下來,在邏輯分區(qū)112內(nèi)的WQMF 181a通過把一工作項目寫入邏輯分區(qū)114的工作隊列126b使得對工作隊列126b添加了一個工作項目(步驟182)。接下來,WQMF 181a通過檢驗表124確定邏輯分區(qū)114當(dāng)前是否空閑(決策184)。如果不空閑,則該邏輯分區(qū)不再做任何事情去完成這一通信,而且在這一通信過程的任何一點基礎(chǔ)部分120都不被調(diào)用(終止步驟186)。根據(jù)本發(fā)明,邏輯分區(qū)112不去中斷邏輯分區(qū)114,這是因為在中斷邏輯分區(qū)過程中涉及的開銷。如上文參考圖5解釋的那樣,當(dāng)邏輯分區(qū)114完成它的當(dāng)前工作項目時,它將自動調(diào)用(invoke/call)它的調(diào)度器去檢驗其工作隊列以尋找另一個工作項目(決策148和步驟150)。在那時它將看到來自邏輯分區(qū)112的這個工作項目。再參考決策184,如果邏輯分區(qū)114空閑,則根據(jù)本發(fā)明,邏輯分區(qū)112向邏輯分區(qū)114發(fā)出“喚醒”型中怕(步驟188)。這個喚醒型中斷告警/調(diào)用邏輯分區(qū)114,告知它在其隊列126b中有一個工作項目。邏輯分區(qū)112以發(fā)出這一中斷完成數(shù)據(jù)通信的它的那一部分。該“喚醒”中斷自動地使邏輯分區(qū)114啟動其調(diào)度器122b(圖5中的決策148)以檢驗其工作隊列尋找工作項目。然后調(diào)度器22b實現(xiàn)圖5中所示步驟以檢驗它的工作隊列126b(步驟150和決策152),然后讀數(shù)據(jù)(步驟154)。
圖6還顯示邏輯分區(qū)之一(例如邏輯分區(qū)112)當(dāng)它想要與兩個或更多個其他邏輯分區(qū)(例如邏輯分區(qū)114和116)進(jìn)行通信時的操作,在步驟180,邏輯分區(qū)112調(diào)用它的寫功能132a以把數(shù)據(jù)寫入共享存儲器121。于是,邏輯分區(qū)112通過給定要寫入的地址和提交要寫的數(shù)據(jù)把該數(shù)據(jù)寫入共享存儲器。在圖4中所示例子中,數(shù)據(jù)被寫入以地址24D00開始的共享存儲器位置。接下來,邏輯分區(qū)112內(nèi)的WQMF 181a通過把工作項目、數(shù)據(jù)地址和數(shù)據(jù)長度寫到工作隊列上,對邏輯分區(qū)114和116的工作隊列126b和126c添加了一個工作項目(步驟182)。然后,邏輯分區(qū)112內(nèi)的WQMF 181a通過檢驗表124確定邏輯分區(qū)114和116當(dāng)前是否空閑(決策184)。在圖4所示例子中,邏輯分區(qū)114是空閑的,但邏輯分區(qū)116是忙的。于是,對于忙的邏輯分區(qū)116,邏輯分區(qū)112不再做任何事情去完成這一通信(終止步驟186)。根據(jù)本發(fā)明,邏輯分區(qū)112不去中斷忙的邏輯分區(qū)116,這是因為在中斷邏輯分區(qū)過程中涉及的開銷。如上文參考圖5解釋的那樣,當(dāng)忙的邏輯分區(qū)116完成它的當(dāng)前工作項目時,它將自動檢驗它的工作隊列以尋找另一工作項目(決策148和步驟150)。在那時它將看到來自邏輯分區(qū)112的這個工作項目,于是通信將被完成,而無需調(diào)用基礎(chǔ)部分120。再次參考決策184,因為邏輯分區(qū)114是空閑的,于是根據(jù)本發(fā)明,邏輯分區(qū)112向空閑的邏輯分區(qū)114發(fā)出“喚醒”型中斷(步驟188)。這個喚醒型中斷告警/調(diào)用空閑的邏輯分區(qū)114,告知它在其隊列中有一個工作項目。邏輯分區(qū)112以發(fā)出這一中斷完成數(shù)據(jù)通信的它的那一部分。該“喚醒”中斷自動使邏輯分區(qū)114調(diào)用(invoke/call)它的調(diào)度器112b以檢驗其工作隊列尋找工作項目。然后調(diào)度器122b實現(xiàn)圖5中所示步驟以檢驗它的工作隊列126b(決策152),然后讀數(shù)據(jù)(步驟154)。
權(quán)利要求
1.一種在具有共享存儲器的第一和第二計算機(jī)程序之間通信的方法,所述第一計算機(jī)程序具有用于第一工作隊列的第一工作調(diào)度器,所述第二計算機(jī)程序具有用于第二工作隊列的第二工作調(diào)度器,所述方法包含如下步驟從所述第一程序向所述共享存儲器寫用于所述第二程序的消息或數(shù)據(jù),并以一個工作項目更新所述第二工作隊列,該工作項目指出用于所述第二程序的消息或數(shù)據(jù);與所述更新步驟相關(guān)聯(lián),確定所述第二程序當(dāng)前是否忙;如果是,則不因所述消息或數(shù)據(jù)而中斷所述第二程序;以及如果不是,則中斷所述第二程序以處理在其工作隊列上的所述消息或數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,當(dāng)所述第二程序隨后變?yōu)椴幻r,所述第二程序,無需中斷,而接收和執(zhí)行所述工作項目以接收所述消息或數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一程序是一個第一虛擬機(jī)而所述第二程序是一個第二虛擬機(jī)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一和第二工作隊列駐留在由所述第一和第二計算機(jī)程序共享的一個存儲器中。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一和第二工作隊列駐留在所述共享存儲器中。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述共享存儲器是由一個虛擬機(jī)操作系統(tǒng)的公共基礎(chǔ)部分建立的,從而使所述共享存儲器同時駐留在兩個虛擬機(jī)中。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一計算機(jī)程序是一個計算機(jī)系統(tǒng)的一個第一邏輯分區(qū),而所述第二計算機(jī)程序是所述計算機(jī)系統(tǒng)的一個第二邏輯分區(qū)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,進(jìn)一步包含一個由所述第一和第二邏輯分區(qū)共用的基本操作系統(tǒng),并且所述寫和更新步驟不需要調(diào)用所述基本操作系統(tǒng)。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包含由所述第二計算機(jī)程序從所述共享存儲器讀所述消息或數(shù)據(jù)的步驟。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,當(dāng)從所述第一計算機(jī)程序向所述第二計算機(jī)程序傳送所述消息或數(shù)據(jù)時,所述消息或數(shù)據(jù)只被一次寫入所述共享存儲器。
11.一種在具有共享存儲器的第一和第二計算機(jī)程序之間通信的系統(tǒng),所述第一計算機(jī)程序具有用于第一工作隊列的第一工作調(diào)度器,所述第二計算機(jī)程序具有用于第二工作隊列的第二工作調(diào)度器,所述系統(tǒng)包含用于從所述第一程序向所述共享存儲器寫供所述第二程序使用的消息或數(shù)據(jù),并以一個工作項目更新所述第二工作隊列的裝置,該工作項目指出用于所述第二程序的消息或數(shù)據(jù);與所述更新步驟關(guān)聯(lián),用于確定所述第二程序當(dāng)前是否忙,而且如果是忙,則不因所述消息或數(shù)據(jù)而中斷所述第二程序,而如果不是忙,則中斷所述第二程序以處理在其工作隊列上的所述消息或數(shù)據(jù)的裝置。
12.一種用于在具有共享存儲器的第一和第二計算機(jī)程序之間通信的計算機(jī)程序產(chǎn)品,所述第一計算機(jī)程序具有用于第一工作隊列的第一工作調(diào)度器,所述第二計算機(jī)程序具有用于第二工作隊列的第二工作調(diào)度器,所述程序產(chǎn)品包含計算機(jī)可讀介質(zhì);用于從所述第一程序向所述共享存儲器寫消息或數(shù)據(jù)供所述第二程序使用,并以一個工作項目更新所述第二工作隊列的程序指令裝置,該工作項目指出用于所述第二程序的消息或數(shù)據(jù);與所述更新步驟關(guān)聯(lián),用于確定所述第二程序當(dāng)前是否忙,而且如果是忙,則不因所述消息或數(shù)據(jù)而中斷所述第二程序,而如果不是忙,則中斷所述第二程序以處理在其工作隊列上的所述消息或數(shù)據(jù)的程序指令裝置;其中,所述程序指令裝置被記錄在所述介質(zhì)上。
13.一種在具有共享存儲器和公共基礎(chǔ)操作系統(tǒng)的第一和第二虛擬機(jī)之間通信的方法,所述第一虛擬機(jī)具有用于第一工作隊列的第一工作調(diào)度器,所述第二虛擬機(jī)具有用于第二工作隊列的第二工作調(diào)度器,所述第一和第二工作隊列駐留在由所述第一和第二虛擬機(jī)二者共享的存儲器中,所述方法包含如下步驟不調(diào)用所述公共基礎(chǔ)操作系統(tǒng),從所述第一虛擬機(jī)向所述共享存儲器寫用于所述第二虛擬機(jī)的消息或數(shù)據(jù),并以一個工作項目更新所述第二工作隊列,該工作項目指出用于所述第二虛擬機(jī)的消息或數(shù)據(jù)。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,與所述更新步驟相關(guān)聯(lián)并且不調(diào)用所述公共基礎(chǔ)操作系統(tǒng),確定所述第二虛擬機(jī)當(dāng)前是否忙,而且如果是忙,則不因所述消息或數(shù)據(jù)而中斷所述第二虛擬機(jī),而如果不是忙,則中斷所述第二虛擬機(jī)以處理在其工作隊列上的所述消息或數(shù)據(jù)。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于,所述中斷步驟需要調(diào)用所述公共基礎(chǔ)操作系統(tǒng)。
16.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述第一調(diào)度器駐留在所述第一虛擬機(jī)中,所述第二調(diào)度器駐留在所述第二虛擬機(jī)中。
17.根據(jù)權(quán)利要求13所述的方法,其特征在于,進(jìn)一步包含所述第二虛擬機(jī)程序從所述共享存儲器讀所述消息或數(shù)據(jù)的步驟。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于,當(dāng)從所述第一虛擬機(jī)向所述第二虛擬機(jī)傳送所述消息或數(shù)據(jù)時,所述消息或數(shù)據(jù)只被一次寫入所述共享存儲器。
19.一種在具有共享存儲器和公共基礎(chǔ)操作系統(tǒng)的第一和第二計算機(jī)程序之間通信的方法,所述第一計算機(jī)程序具有用于第一工作隊列的第一工作調(diào)度器,所述第二計算機(jī)程序具有用于第二工作隊列的第二工作調(diào)度器,所述第一和第二工作隊列駐留在由所述第一和第二計算機(jī)程序二者共享的存儲器中,所述方法包含如下步驟不調(diào)用所述公共基礎(chǔ)操作系統(tǒng),從所述第一計算機(jī)程序向所述共享存儲器寫用于所述第二計算機(jī)程序的消息或數(shù)據(jù)并以一個工作項目更新所述第二工作隊列,該工作項目指出用于所述第二計算機(jī)程序的消息或數(shù)據(jù)。
20.根據(jù)權(quán)利要求19所述的方法,其特征在于,所述第一計算機(jī)程序是一個第一邏輯分區(qū),所述第二計算機(jī)程序是一個第二邏輯分區(qū)。
21.根據(jù)權(quán)利要求19所述的方法,其特征在于,所述第一和第二工作隊列駐留在由所述第一和第二計算機(jī)程序二者共用的一個或多個存儲器中。
全文摘要
一種在具有共享存儲器的第一和第二計算機(jī)程序之間通信的方法。該第一計算機(jī)程序具有第一工作調(diào)度器用于第一工作隊列。該第二計算機(jī)程序具有第二工作調(diào)度器用于第二工作隊列。無需引起中斷,一個消息或數(shù)據(jù)被從第一程序?qū)懭牍蚕泶鎯ζ鞴┑诙绦蚴褂茫诙ぷ麝犃幸砸粋€工作項目進(jìn)行更新,該工作項目指出用于第二程序的消息或數(shù)據(jù)。與更新步驟相關(guān)聯(lián),確定第二程序當(dāng)前是否忙。如果是,則第二程序不會因為該消息或數(shù)據(jù)而被中斷。當(dāng)其后第二程序變?yōu)椴幻r,該第二程序便無需中斷而接收和執(zhí)行該工作項目去接收該消息或數(shù)據(jù)。如果第二程序當(dāng)前不忙,則第二程序被中斷以處理它的工作隊列上的該消息或數(shù)據(jù)。這給第二程序造成最小負(fù)擔(dān)。
文檔編號G06F9/455GK1497469SQ20031010177
公開日2004年5月19日 申請日期2003年10月23日 優(yōu)先權(quán)日2002年10月24日
發(fā)明者S·S·舒爾茨, X·特卡特壽, S S 舒爾茨, ㄌ厥 申請人:國際商業(yè)機(jī)器公司