專利名稱:用于在計算環(huán)境中執(zhí)行線程的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明總體上涉及線程,并且特別地,涉及用于在計算環(huán)境中執(zhí)行線程的技木。
背景技術:
術語“公用計算”用于指代這樣的計算模型,其中處理、存儲和網絡資源、軟件以及數據根據需要可用于客戶計算機系統(tǒng)和其他客戶端設備(例如,移動電話或媒體播放器),非常類似于熟悉的居民設施服務,比如水和電。在一些實現中,被分配用于由客戶端設備訪問和使用的特定計算資源(例如,服務器、存儲驅動等等)由設施計算提供方與其客戶之間的服務協(xié)議指定。在通常稱為“云計算”的其他實現中,潛在的信息技術(IT)基礎設施對于公用計算客戶是透明的。 云計算通過對遠程計算網站(例如,通過互聯網或私有公司網絡)的簡單訪問而被支持,并且通常所采取的形式是云消費者通過web瀏覽器可以訪問和使用的基于web的資源、工具或應用,如同該資源、工具或應用是安裝在云消費者的計算機系統(tǒng)上的本地程序。通常,期望商業(yè)云實現滿足服務質量(QoS)要求,QoS要求可以在服務級別協(xié)議(SLA)中被指定。在典型的云實現中,云消費者消耗作為服務的計算資源且僅為使用的資源付費。公用計算的采用已由對虛擬化的廣泛使用而得到支持,虛擬化是創(chuàng)建操作系統(tǒng)、服務器、存儲設備、網絡資源等計算資源的虛擬(并非真實)版本。例如,虛擬機(VM),也稱為邏輯分區(qū)(LPAR),是實現執(zhí)行類似物理機的指令的物理機(例如,計算機系統(tǒng))的軟件。虛擬機可以分類為系統(tǒng)虛擬機或進程虛擬機。系統(tǒng)虛擬機提供支持執(zhí)行完整的操作系統(tǒng)的完整的系統(tǒng)平臺,比如Windows、Linux、AIX、Android等等,以及其相關的應用。另一方面,進程虛擬機通常設計用于運行單個程序以及支持單個進程。在這兩種情況下,運行在VM上的任何應用軟件被限制于VM提供的資源和抽象。因此,共同IT基礎設施提供的實際資源可以通過部署多個VM被有效管理和利用,可能與多個不同的公用計算消費者相關。實際IT資源的虛擬化和VM的管理通常由稱為VM監(jiān)視器(VMM)或管理器的軟件提供。在各種實現中,VMM可以運行在裸硬件(類型I或本機VMM)上或者運行在操作系統(tǒng)(類型2或托管的VMM)上。在典型的虛擬化計算環(huán)境中,VM可以互相通信以及與利用常規(guī)網絡協(xié)議的公用計算環(huán)境的IT基礎設施中的物理實體通信。如本領域所知,常規(guī)網絡協(xié)議通常前提是公知的7層開放系統(tǒng)互連(OSI)模型,其包括(按升序)物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。VM能夠與其他網絡實體通信,就像通過對常規(guī)物理層連接的虛擬網絡連接的替代,VM是物理網絡元件一祥。UNIX 操作系統(tǒng)(OS)被設計用于移動的、多任務和多用戶OS。UNIX的特征在于使用普通文本用于存儲數據;分級的文件系統(tǒng);將設備和某些類型的進程間通信(IPCs)作為文件對待;以及使用大量軟件工具。UNIX包括多種公用和主控制程序,即UNIX內核。UNIX內核提供服務以啟動和停止程序,處理文件系統(tǒng)和大多數程序共享的其他共同的低級別任務,以及如果多個程序試圖同時訪問同一資源或設備,調度對硬件的訪問以避免沖突。由于UNIX公認的安全、移動性和功能性,已開發(fā)了大量相似的操作系統(tǒng),包括Linux 、Minix 、Mac OS 、FreeBSD 、NetBSD 、OpenBSD 、AIX 、Solaris 和 HP/UX 。所有這些操作系統(tǒng),與UNIX —起,在此處稱為“UNIX類”操作系統(tǒng)。UNIX類操作系統(tǒng)可以安裝在很多種硬件上,例如,移動電話、平板電腦、視頻游戲控制臺、聯網器件、主機以及超級計算機。在計算機科學中,執(zhí)行線程(線程)通常是可被OS調度的最小處理單元。線程通常產生于計算機程序分叉為兩個或更多同時運行的任務。線程和進程的實現在OS之間可以不同,但是在大多數情況下線程被包括在進程中。多個線程可以存在于同一進程中并且共享資源(例如,存儲器),不同的進程不共享相同的資源。在單處理器系統(tǒng)上,通過時分復用(即,處理器在執(zhí)行的不同線程之間切換)實現多線程。在多處理器或多核系統(tǒng)中,多個線程可以同時運行在不同處理器或處理器核上。很多現代OS用進程調度器直接支持時間片和多處理器線程。OS的內核允許程序員通過系統(tǒng)調用接ロ操作線程。
·
用于UNIX的移動操作系統(tǒng)接ロ(POSIX)是ー系列相關標準的名稱,這些標準定義用于與Unix類型操作系統(tǒng)兼容的軟件的應用編程接ロ(API)以及外殼和公用接ロ。POSIX線程(P線程)是指符合線程的POSIX標準的線程(即,POSIX lc(IEEE 1003. lc-1995),其定義用于創(chuàng)建和操作線程的API)。POSIX API的實現在很多UNIX類符合POSIX的OS上可用,例如,FreeBSD , NetBSD , GNU/Linux , Mac OS XTM 以及 Solaris 。
發(fā)明內容
一種用于以非搶占方式執(zhí)行進程的常規(guī)可中斷線程的技術,包括響應于與針對第一線程的第一消息相關聯的第一條目到達運行隊列的開端,由第一線程接收第一喚醒信號。響應于接收該喚醒信號,第一線程等待全局鎖。響應于第一線程接收全局鎖,第一線程從相關聯的消息隊列中獲取第一消息并且處理獲取的第一消息。響應于完成第一消息的處理,第一線程向第二線程發(fā)送第二喚醒信號,該第二線程的相關聯條目是運行隊列中的下ー個。最后,在發(fā)送第二喚醒信號之后,第一線程釋放全局鎖。
圖I是根據一個實施方式的數據處理環(huán)境的高級框圖;圖2所示為根據一個實施方式在圖I的示范數據處理環(huán)境中虛擬和物理資源的分層;圖3是根據一個實施方式的數據處理系統(tǒng)的高級框圖;圖4是根據一個實施方式配置的部署物理網絡交換機的數據處理環(huán)境的一部分的聞級框圖;圖5是根據一個實施方式配置的物理網絡交換機的有關部分的框圖;圖6是運行根據ー個實施方式配置的物理網絡交換機的操作系統(tǒng)(OS)調度器的示范方法的高級邏輯流程圖;圖7是在根據ー個實施方式配置的物理網絡交換機中執(zhí)行線程間通信的示范方法的高級邏輯流程圖;以及圖8是在根據ー個實施方式配置的物理網絡交換機中執(zhí)行線程的示范方法的高級邏輯流程圖。
具體實施例方式根據本公開,公開了ー種技術,其支持在例如Linux的UNIX類操作系統(tǒng)上運行舊有軟件(即,舊有裸金屬OS)的技木。在各種情況下,在UNIX類操作系統(tǒng)之上運行舊有軟件支持對某些舊有代碼的復用(reuse),同時通過訪問多核、多處理器OS提高可擴展性。雖然這里的討論涉及針對在實現在虛擬化計算環(huán)境中的物理網絡交換機中在UNIX類操作系統(tǒng)之上運行舊有軟件,但是可以想到,這里公開的技術廣泛適用于虛擬化的和非虛擬化的計算環(huán)境以及可以實現在除物理網絡交換機之外的設備中。如這里所使用的,“主干線程”(stem thread)是指舊有專有用戶空間線程,這些線程以串行方式按照消息被發(fā)布到主干消息隊列(由舊有軟件提供的)的順序非搶占式地(即不可中斷的)運行。舊有軟件還實現主干分派器,其負責處理主干消息以及調度主干線程。如這里所用,術語“P線程”(pthread)本身是指這樣的Unix類OS線程,其按照優(yōu)先級類中的非特定順序搶占式(即,可中斷的)運行,并且通常完全由UNIX類操作系統(tǒng)的OS調度器來控制。此外,如這里 所用,“主干線程”是已被轉換為與P線程類似的主干線程。為了保證應用代碼的兼容性,對主干P線程施加限制以便將主干P線程與P線程相區(qū)別。一個限制通過采用全局互斥(互斥體)對主干P線程進行串行化,全局互斥充當ー個全局鎖,以便使主干P線程像主干線程ー樣運行(即,作為不可中斷線程)。也即,在任何給定時刻,只有一個主干P線程(即,具有全局鎖的主干P線程)可以處理消息。另ー限制使得主干P線程通過在執(zhí)行消息處理之前等待(在被喚醒后)全局鎖而進行自調節(jié)。為了保證主干P線程按照與消息被發(fā)布的相同順序得到調度(以仿真舊有軟件),針對具有待處理消息的所有主干P線程而維護ー個運行隊列。在各種實施方式中,所有主干P線程休目民,同時等待相關聯的消息到達運行隊列的開端。在一個或多個實施方式中,每個主干P線程被配置用于運行等待全局鎖的連續(xù)入口函數;在接收到全局鎖時處理相關聯消息隊列中的ー個消息;繼而放棄全局鎖。在活躍主干P線程返回休眠之前,活躍主干P線程被配置用于檢查運行隊列,并且喚醒與運行隊列中下一條目相關聯的主干P線程。這保證了當全局鎖被活躍主干P線程釋放時,與運行隊列中的下一條目相關聯的主干P線程獲取全局鎖并且開始執(zhí)行相關聯的消息處理功能。在活躍主干P線程返回休眠之前,活躍主干P線程還配置用于檢查相關聯的消息隊列,并且如果活躍主干P線程具有其他消息要處理,則活躍主干P線程將針對該其他消息之一的條目排隊在運行隊列的結尾。當其他消息在后續(xù)時間到達運行隊列的開端吋,主干P線程接收喚醒信號并且開始處理該其他消息。例如,運行隊列中的條目可以對應于給定主干P線程的全局標識符(ID)。與上文討論的舊有軟件不同,根據本公開配置的軟件不實現主干線程分派器代碼,因為UNIX類操作系統(tǒng)調度器執(zhí)行基本線程調度。度。UNIX類操作系統(tǒng)調度器維護關于所調度線程的各種背景信息,并且API層(在UNIX類操作系統(tǒng)調度器之上執(zhí)行)維護事務信息(例如,調度的線程是主干P線程還是P線程)。根據本公開,每個線程(即,主干P線程和P線程)包括配置用于處理相關聯消息隊列和消息的代碼。針對系統(tǒng)而編寫的任何新模塊可以使用(通常)不受限制的P線程。例如,如果P線程實現其自己的鎖,則P線程可以獨立地運行在不與公共數據結構共享的代碼部分之上。如果P線程需要訪問與主干P線程共享的任何數據結構,則可以通過在P線程被喚醒時將P線程放在運行隊列上并且等待全局鎖而將該P線程暫時序列化。可以以多種不同方式實現P線程與主干P線程之間的通信。例如,可以使用主干消息(其包括命令和消息)、OS接ロ(OSIX)事件發(fā)送調用(其包括命令和具有單個相關消息隊列的線程的消息指針)或OSIX事件隊列發(fā)送調用(其包括命令和具有多個相關消息隊列的線程的消息指針)而在發(fā)送側實現線程間通信。在多種實施方式中,發(fā)送線程被配置用于將針對接收線程的消息存儲在與該接收線程相關聯的消息隊列中。在確定用于接收 線程的消息隊列時,發(fā)送線程例如可以利用API從數據結構(例如表格,其可由運行于UNIX類操作系統(tǒng)調度器之上的API層保持)中獲取該接收線程的全局線程ID (它例如還指示用于該接收線程的消息隊列的位置)。在一個或多個實施方式中,主干P線程從封裝(wrapper)例程接收消息(即,主干消息或OSIX消息),封裝例程將來自主干P線程的相關聯消息隊列的消息去隊列化,并且以該消息作為參數調用主干P線程的入口例程。封裝例程例如可以實現為UNIX類操作系統(tǒng)模塊。在一個或多個實施方式中,P線程在接收到消息時等待阻塞條件變量。當阻塞條件變量被信號傳送吋,P線程讀取事件并且獲取對相關聯消息隊列的消息指針。在各種實施方式中,P線程使用OSIX事件接收調用或OSIX事件隊列接收調用來獲取消息指針。為了實現從應用層角度的透明線程通信,應用可被配置用于向任何類型的接收方(即,主干P線程或P線程)發(fā)送主干消息或OSIX消息。當主干消息以P線程為目的地吋,主干消息由主干發(fā)送例程(其可以實現為UNIX類操作系統(tǒng)模塊)轉換為OSIX事件條件和OSIX隊列消息。當OSIX消息以主干P線程為目的地吋,OSIX消息由OSIX發(fā)送例程(其可以實現為UNIX類操作系統(tǒng)模塊)轉換為主干消息。這保證了主干P線程和P線程可以將其接收處理保持在未修改狀態(tài)。因為消息轉換相對于應用代碼被隱藏,因此無需修改應用代碼?,F在參考附圖并且具體參考圖1,示出了根據本公開的ー個實施方式的示范數據處理環(huán)境100的高級框圖。如圖所示,數據處理環(huán)境100,其在所示實施方式中是云計算環(huán)境,包括通常稱為云102的計算資源集合。云102中的計算資源相互連接以用于通信,并且可以被物理地或虛擬地分組(未示出)在一個或多個網絡中,例如私有網絡、社區(qū)網絡、公有網絡或混合云或其組合。以此方式,數據處理環(huán)境100可以提供基礎設施、平臺和/或軟件作為客戶端設備110可用的服務,客戶端設備110例如個人(例如,臺式、筆記本、上網本、平板或手持)計算機110a,智能電話110b,服務器計算機系統(tǒng)IlOc和消費電子110d,例如媒體播放器(例如,機頂盒、數字多功能盤(DVD)播放器或數字錄像機(DVR))。應該理解,圖I所示客戶端設備110的類型僅是示意的且客戶端設備110可以是任何類型的電子設備能通過分組網絡與計算資源通信和獲取服務。圖2所示為根據一個實施方式駐留在圖I的云102集合中的虛擬和物理資源的層圖。應該理解,圖2所示的計算資源、層和功能僅用于示意且所要求的發(fā)明的實施方式不限于此。如圖所示,云102包括物理層200、虛擬化層202、管理層204以及工作負荷層206。物理層200包括可用于例示云服務提供方及其消費者使用的虛擬實體的多種物理硬件和軟件組件。作為示例,硬件組件可包括主機(例如IBM zSeries 系統(tǒng)),精簡指令集計算機(Rise)架構服務器(例如,IBMpSeries 系統(tǒng)),iBMxSeries 系統(tǒng),IBMBlade Center 系統(tǒng),存儲設備(例如,閃存驅動器,磁驅動器,光驅動器,帶驅動器等等),物理網絡以及聯網組件(例如,路由器、交換機等等)。軟件組件可包括操作系統(tǒng)軟件(例如,AIX、Windows、Linux等等),網絡應用服務器軟件(例如,IBM Web Sphere 應用服務器軟件,其包括web服務器軟件),以及數據庫軟件(例如,IBMDB2 數據庫軟件)。IBM、zSeries、pSeries、xSeries、BladeCenter、WebSphere 和 DB2 是國際商業(yè)機器公司在世界范圍注冊■很多管轄權的商標。駐留在云102物理層200中的計算資源由一個或多個虛擬機監(jiān)視器(VMM)或稱管理器進行虛擬化和管理。VMM展現虛擬化層202,其包括虛擬實體(例如,虛擬服務器、虛擬存儲、虛擬網絡(包括虛擬私有網絡))、虛擬應用和虛擬客戶端。如前所述,這些虛擬實體是對物理層200中的下層資源的抽象,可以被云消費者的客戶端設備110按需訪問。VMM還支持實現云102的各種管理功能的管理層204。這些管理功能可以被VMM和/或運行在VMM上的ー個或多個管理或服務VM直接實現,并且可以提供例如資源供應、測量和定價、安全、用戶門戶服務、服務級別管理以及SLA計劃和履行等功能。資源供應功 能提供用于在云計算環(huán)境中執(zhí)行任務的計算資源和其他資源的動態(tài)獲得。測量和定價功能提供成本跟蹤(由于資源在云計算環(huán)境中被提供和利用)和為使用的資源的消耗記賬或開發(fā)票。作為ー個示例,使用的資源可包括應用軟件許可。安全功能提供云消費者和任務的身份驗證,以及保護數據和其他資源。用戶門戶功能為消費者和系統(tǒng)管理員提供對云計算環(huán)境的訪問。服務級別管理功能提供云計算資源分配和管理使得滿足所需的服務級別。例如,安全功能或服務級別管理功能可被配置用于限制虛擬機(VM)映像部署/遷移到被指示為云消費者可接受的地理位置。服務級別協(xié)議(SLA)計劃和履行功能為云計算資源提供預先安排和采購,其未來需求根據SLA被期望。工作負荷層206可以由ー個或多個消費者VM實現,提供功能性的示例,可以針對這些功能性而使用云計算環(huán)境。工作負荷的示例和工作負荷層206可提供的功能包括映射和導航;軟件開發(fā)和生命周期管理;虛擬教室教育遞送;數據分析處理以及事務處理?,F在參考圖3,示出了示范數據處理系統(tǒng)300的高級框圖,其可用于實現圖2的物理層200中的物理主計算平臺或圖I的客戶端設備110。在所示示范實施方式中,數據處理系統(tǒng)300包括一個或多個網絡接ロ 304,允許數據處理系統(tǒng)300與云102中一個或多個計算資源通過線纜和/或ー個或多個有線網或無線網、公有網絡或私有網絡、局域網絡或廣域網絡(包括互聯網)通信。數據處理系統(tǒng)300還包括一個或多個處理器302,用于處理數據和程序代碼,例如管理、訪問和操作數據處理環(huán)境100中的數據或軟件。數據處理系統(tǒng)300還包括輸入/輸出(I/O)設備306,諸如端ロ、顯示器和附屬設備等等,其接收輸入并且提供由數據處理系統(tǒng)300和/或數據處理環(huán)境100中的其他資源執(zhí)行的處理的輸出。最后,數據處理系統(tǒng)300包括數據存儲310,其可以包括一個或多個易失或非易失存儲設備,包括存儲器、固態(tài)驅動器、光或磁盤驅動器、帶驅動器等等。數據存儲310可存儲,例如,物理層200中的軟件和/或軟件,例如web瀏覽器,其實現對工作負荷層206和/或管理層204的訪問?,F在參考圖4,示出了根據本公開的ー個或多個實施方式配置的部署物理網絡交換機的數據處理環(huán)境400的一部分的高級框圖。例如,數據處理環(huán)境400可以實現圖I所不的云102的一部分。在所示實施方式中,數據處理環(huán)境400包括因特網協(xié)議(IP)網絡402,其包括若干網段404a、404b,其中每ー個耦合到物理網絡交換機406a、406b中相應的ー個。如圖所示,每個物理網絡交換機406a、406b包括相應的數據結構(例如,相應的轉發(fā)表(F)) 407a、407b,物理網絡交換機406a、406b通過該數據結構、基于例如包含在分組中的OSI 2層(例如,媒體訪問控制(MAC))地址而將傳入的數據分組轉發(fā)給該分組的目的地。如將參考圖8詳述的,物理網絡交換機406a、406b被配置用于在UNIX類操作系統(tǒng)之上運行舊有軟件。如上所述,舊有主干線程被轉換為主干P線程,并且新模塊被編寫以實現P線程。物理主機410a、410b耦合到網段404a,物理主機410c耦合到網段404b。每個物理主機410a_410c例如可以使用圖3所示的數據處理系統(tǒng)300來實現。每個物理主機410a_410c執(zhí)行VMM 412a_412c中對應的ー個,其虛擬化并管理其相應的物理主機410的資源,例如,在人和/或通過IP網絡402耦合到在物理主機 410a-410c的管理控制臺420的自動云管理員的指示下。物理主機410a上的VMM 412a支持VM414a-414b的執(zhí)行,物理主機410b上的VMM 412b支持VM 414c_414d的執(zhí)行,以及物理主機410c上的VMM 412c支持VM 414e_414f的執(zhí)行。應理解,雖然示出2個VM被部署在每個物理主機410a-410c上,但是ー個物理主機上可以部署多于或少于2個VM。在多種實施方式中,VM 414a_414f可以包括一個或多個云消費者和/或云提供方的VM。在所不的實施方式中,每個VM 414具有ー個(以及可以包括多個)虛擬網絡接ロ控制器VNIC1-VNIC6,其至少提供OSI模型的2層和3層處的網絡連通性。VM 414a利用VNICl通過虛擬交換機432a的第一端ロ實現通信,VM 414b利用VNIC2通過虛擬交換機432a的第二端ロ實現通信。例如,當虛擬交換機432a的第一端ロ和第二端ロ被配置作為虛擬以太網橋(VEB)端ロ時,VM 414a和VM 414b之間的通信可以完全經由軟件(例如,使用存儲器拷貝操作)來路由。作為另ー示例,當虛擬交換機432a的第一端口和第二端ロ被配置作為虛擬以太網端ロ匯聚器(VEPA)端ロ吋,VM 414a和VM414b之間的通信通過物理NIC 420a在網段404a上被路由到物理交換機406a,物理交換機406a通過網段404a和物理NIC 420a將通信路由回虛擬交換機432a。類似地,VM 414c和VM 414d分別使用VNIC3和VNIC4以經由虛擬交換機432b的不同端ロ來支持通信。同樣,VM 414e和VM 414f分別使用VNIC5和VNIC6以經由虛擬交換機432c的不同端ロ來支持通ィ目?,F在參考圖5,根據本公開的ー個實施方式示出圖4的數據處理環(huán)境400中的物理網絡交換機406的有關部分。如圖所示,物理網絡交換機406包括4個端ロ(標記為P1-P4)、交叉開關交換機520、處理器502以及數據存儲(例如,存儲器子系統(tǒng))504。盡管所示物理網絡交換機406具有4個端ロ吋,但是應當理解,根據本公開配置的物理網絡交換機可以包括多于或少于4個端ロ。處理器502耦合到交叉開關交換機510,控制交叉開關交換機520在端ロ P1-P4之間切換業(yè)務流。數據存儲504包括舊有OS 508,其運行在UNIX類操作系統(tǒng)(此后假設為Linux OS506,其實現采用全局互斥體(GM) 517作為全局鎖的調度器512)之上,并且實現適當數目的應用518。處理器502執(zhí)行進程519,進程519被示為包括5個線程T1-T5。線程Tl被示出與線程Tl和T3通信。例如,當線程T2具有ー個消息而該消息的關聯條目是運行隊列516中的下ー個時,線程Tl可以向線程T2傳送喚醒信號(見圖8)。作為另ー示例,根據圖7的過程,線程Tl可以與線程Τ3通信(通過將用于線程Τ3的消息存儲在與線程Τ3相關聯的消息隊列510中)。如圖所示,2個消息隊列510a、510b以及運行隊列516 (被Linux OS 506)被分配在數據存儲504中。盡管圖5中僅示出2個消息隊列510a、510b,應當理解,多于或少于2個消息隊列可以實現在根據本公開配置的物理網絡交換機中。在典型的情況下,每個被調度的線程具有至少ー個分配的消息隊列。根據本公開,消息隊列510被用于存儲用于主干P線程的消息(并且可被用于存儲用于已被序列化的Linux P線程的消息)。在一個或多個實施方式中,調度器512實現在任何給定時刻向單個線程分配GM517的例程。GM 517充當全局鎖,以使主干P線程(其通常是可中斷線程)和已被序列化的Linux P線程(例如,用于訪問一個或多個主干P線程的公共數據結構)像主干線程ー樣運行(即,作為不可中斷的、序列化的線程)。如運行隊列516所示(在分解視圖中),運行隊列516包括針對進程519中所包括的4個線個線程(即,線程T1-T4)的5個信息的關聯條目。在所示的示例中,線程T5代表常規(guī)Linux線程,其被包括在保持為可中斷的進程 519中。如圖所示,與針對線程Tl的第一消息相關聯的條目被分配(例如,被調度器512)在運行隊列516的開端(用箭頭表示),與針對線程Tl的第二消息相關聯的條目被分配在運行隊列516的結尾。針對線程T2、T3和T4的關聯條目分別是被分配在運行隊列516中的(由調度器512分配)、在運行隊列516的開始與結尾之間的條目。這將在圖8中詳述,用于線程T1-T4的消息按照關聯的條目在運行隊列516中的順序被連續(xù)處理。如上所述,為了保證與應用518的兼容性,將向主干P線程施加限制,該限制將主干P線程與Linux P線程區(qū)分開。為了保證主干P線程按照與消息被發(fā)布的相同順序被調度(仿真舊有軟件),針對需要處理的每個主干P線程消息而維護運行隊列516中的關聯條目。在一個或多個實施方式中,主干P線程(或序列化的Linux P線程)可以具有不止ー個關聯消息隊列510,其中的每ー個具有不同的優(yōu)先級。在這種情況下,具有較高優(yōu)先級的消息可被路由(例如由發(fā)送線程)到較高優(yōu)先級的消息隊列,并且具有較低優(yōu)先級的消息可被路由到較低優(yōu)先級的消息隊列。在這種情況下,較高優(yōu)先級的消息隊列中的消息(如果有),在較低優(yōu)先級的消息隊列中的消息之前被處理。實現在Linux OS 506中的調度器512維護有關所調度線程的各種背景信息,并且API層(在調度器512之上執(zhí)行)維護事務信息(例如,調度的線程是主干P線程還是LinuxP線程)。如上所述,根據本公開的ー個或多個方面,當線程是主干P線程吋,線程總是需要序列化。根據本公開,每個線程(即,主干P線程和Linux P線程)包括配置用于處理信息隊列510中的信息的代碼。如上所述,被添加到物理網絡交換機406的新軟件模塊可以采用Linux P線程。如上所述,當Linux p線程需要訪問與主干p線程共享的任何數據結構時,可以通過在運行隊列516中創(chuàng)建針對該Linux p線程的條目而將該Linux p線程暫時序列化。例如,線程Tl和T4可以是主干P線程,線程T2和T3可以是被序列化的Linux p線程?,F在參考圖6,示出了根據本公開的ー個實施方式確定計算環(huán)境中的線程是否需要序列化的示范方法的高級邏輯流程圖。如上所述,需要序列化的線程可以是需要訪問與主干P線程共享的數據結構的主干P線程或Linux P線程。圖6的流程圖所示出的是邏輯步驟而不是嚴格的時間先后順序。因此,至少一些實施方式,在邏輯流程圖的至少ー些步驟可以按照與所示不同的順序或同時執(zhí)行。圖6所示的進程可以被圖4的數據處理環(huán)境400中的每個物理網絡交換機406的Linux OS 506執(zhí)行。過程 開始于框600,而后進行到判斷框602,在此Linux OS 506確定要調度的線程是否需要序列化。響應于在框602中不需要序列化的線程,控制轉移到框608。響應于在框602中需要序列化的線程,控制轉移到框604。在框604中,Linux OS 506在運行隊列516中分配用于線程的條目。然后,在框606,Linux OS 506分配用于該線程的ー個或多個消息隊列510。例如,當線程不接收具有不同優(yōu)先級的消息時,可以分配單個消息隊列。作為另一示例,當線程接收具有2個不同優(yōu)先級的消息時,可以分配高優(yōu)先級消息隊列和低優(yōu)先級消息隊列。在框606之后,控制傳遞到框608,圖6所示的過程結束。現在參考圖7,示出了在根據ー個實施方式在計算環(huán)境中執(zhí)行線程間通信的示范方法的高級邏輯流程圖。在這種情況下,序列化的線程可以是需要訪問與主干P線程共享的數據結構的主干P線程或Linux P線程。圖7的流程圖所示出的是邏輯步驟而不是嚴格的時間先后順序。因此,至少一些實施方式,在邏輯流程圖的至少ー些步驟可以按照與所示不同的順序或同時執(zhí)行。圖7所示的進程可以被,例如,圖4的數據處理環(huán)境400中的每個物理網絡交換機406執(zhí)行。過程開始于框700,并且繼而進行到判斷框702,在此發(fā)送線程(例如,線程Tl)確定是否指示線程間通信(例如,共享數據)。響應于在框702中沒有指示線程間通信,控制轉移到框710,在此圖7所示的過程結束。響應于在框702中指示了線程間通信,控制轉移到框704,在此發(fā)送線程獲取(例如,從調度器512)接收線程(例如,線程T3)的全局ID (其指示特定的消息隊列510)。接下來,在框706,發(fā)送線程確定是否指示了通信的優(yōu)先級(即,線程是否具有多個相關聯的消息隊列510)。然后,在框708,發(fā)送線程將針對接收線程的消息存儲在接收線程的消息隊列510中。例如,如果指示了低優(yōu)先級消息(例如,基于業(yè)務流類型),針對接收線程的消息被存儲(被發(fā)送線程)在低優(yōu)先級消息隊列中。類似地,如果指示高優(yōu)先級消息(例如,基于流量類型),針對接收線程的消息被存儲(被發(fā)送線程)在高優(yōu)先級消息隊列中。在框708之后,控制傳遞到框710,在此圖7所示的過程結束?,F在參考圖8,示出了在根據本公開的ー個實施方式的計算環(huán)境中執(zhí)行序列化的線程的示范方法的高級邏輯流程圖。序列化的線程可以是需要序列化以例如訪問與主干P線程共享的數據結構的主干P線程或Linux P線程。圖8的流程圖所示出的是邏輯步驟而不是嚴格的時間先后順序。因此,至少一些實施方式,在邏輯流程圖的至少ー些步驟可以按照與所示不同的順序或同時執(zhí)行。圖8所示的進程可以被例如圖4的數據處理環(huán)境400中的每個物理網絡交換機406執(zhí)行。過程開始于框800,并且繼而進行到判斷框802,在此休眠線程(例如,進程519的線程Tl,其可以是已被序列化的主干P線程或Linux P線程)確定是否已接收到喚醒信號(例如,從另ー線程)。如上所述,響應于針對ー個消息的關聯條目達到運行隊列516的開端,休眠線程接收喚醒信號以處理該消息。在各種實施方式中,用于休眠線程的喚醒信號在ー個事件(例如,從另ー線程收到針對第一線程的消息,針對第一線程的分組到達,與第一線程相關的定時器到吋,或者用于第一線程的鏈接被建立)之后被觸發(fā),并且在用針對休眠進程的消息的關聯條目到達運行隊列516的開端之后被生成。接下來,在框804,休眠進程響應于收到喚醒信號而醒來從而變成活躍線程。然后,在框806,活躍線程等待接收來自調度器512的全局鎖(GM 517)。當從調度器512接收到GM 517吋,活躍線程在框810從相關聯的消息隊列510獲取消息,并且在框810處理獲取的消息。接下來,在框812,活躍線程檢查運行隊列516的其他條目。然后,在框814,活躍線程確定運行隊列516是否為空。響應于在框814運行隊列516為空,控制轉移到判斷框818。響應于在框814運行隊列516不為空,控制轉移到框816,在此活躍線程喚醒具有與運行隊列516中的下一條目相關聯的消息的另ー線程(例如,線程T2)。在框816之后,控制轉移到框818。在框818,活躍線程確定其在相關消息隊列510中是否具有另ー消息要處理。響應于在框818活躍線程沒有另ー消息要處理,控制轉移到框826,在此活躍線程釋放全局鎖。響應于在框818活躍線程有另ー消息要處理,控制轉移到框820,在此活躍線程將該消息的關聯條目排隊到運行隊列516的結尾。接下來,在判斷框822,活躍線程確定它是否是具有運行隊列516中的條目的唯一線程。響應于活躍線程確定它是具有運行隊列516中的條目的唯一線程,在框808,活躍線程繼續(xù)圖8的過程,在此獲取用于活躍線程的相關消息隊列510中的下一消息。響應于活躍線程確定它不是具有運行隊列516中的條目的唯一線程,控制轉移到框826,在此活躍線·程釋放全局鎖。接下來,在框828,活躍線程休眠。在框828之后,控制傳遞到框830,在此圖8所示的過程結束。如果即使在當前沒有其他線程具有要處理的消息并且活躍線程當前具有要處理的另ー消息時仍然期望活躍線程釋放全局鎖,則框822和824可以省略。在這種情況下,框820的輸出被直接導向框826。因此,這里已公開了在單個進程中的多個不同種類的執(zhí)行線程之間實現無縫通信的技木。公開的技術還將運行的Linux P線程實現為自由可調度的線程或主干線程(即,Linux P線程可以被序列化為不不可中斷的)。 雖然已經參考ー個或多個優(yōu)選實施方式具體說明了本發(fā)明,但是本領域技術人員應理解其中可做出各種形式和細節(jié)的改變而不背離本發(fā)明的精神和范圍。例如,應該理解,雖然這里提供的詳細說明提供了云計算環(huán)境的多個實施方式,這里公開的教程不限于云計算環(huán)境。而且,實施方式可以實現為現在已知的或以后開發(fā)的任何其他類型的計算環(huán)境,包括客戶-服務器和對等計算環(huán)境。公開的技術廣泛應用于虛擬化和非虛擬化的計算環(huán)境,以及可以實現在除物理網絡交換機之外的設備(例如,主機平臺)中。而且,雖然已針對執(zhí)行指導這里所述功能的程序代碼的計算機系統(tǒng)說明了各方面,應該理解,實施方式可以可替換地實現為程序產品,包括存儲數據處理系統(tǒng)可處理以使數據處理系統(tǒng)執(zhí)行一個或多個所述功能的程序代碼的存儲介質(例如,數據存儲310)。
權利要求
1.一種以非搶占式方式執(zhí)行進程的常規(guī)可中斷線程的方法,包括 響應于與針對第一線程的第一消息相關聯的第一條目到達運行隊列的開端,由所述第一線程接收第一喚醒信號; 響應于接收所述喚醒信號,由所述第一線程等待全局鎖; 響應于所述第一線程接收所述全局鎖,由所述第一線程從關聯的消息隊列獲取所述第一消息; 由所述第一線程處理獲取的所述第一消息; 響應于完成對所述第一消息的所述處理,由所述第一線程向第二線程發(fā)送第二喚醒信號,所述第二線程的關聯條目是所述運行隊列中的下一個;以及 在所述第二喚醒信號的所述發(fā)送之后,由所述第一線程釋放所述全局鎖。
2.根據權利要求I所述的方法,還包括 由所述第一線程針對用于所述第一線程的第二消息而檢查所述關聯的消息隊列;以及 響應于所述關聯的消息隊列包括所述第二消息,將與所述第二消息相關聯第二條目排隊到所述運行隊列的結尾。
3.根據權利要求I所述的方法,其中所述第二線程是需要對與所述第一線程共享的數據結構的訪問的Linux P線程。
4.根據權利要求I所述的方法,其中所述第一喚醒信號在一個事件之后被觸發(fā)。
5.根據權利要求4所述的方法,其中所述事件對應于以下之一從另一線程接收針對所述第一線程的所述第一消息,針對所述第一線程的分組到達,與所述第一線程相關聯的定時器到時,以及建立針對所述第一線程的鏈接。
6.根據權利要求I所述的方法,其中所述第一線程和第二線程中的一個是主干P線程,并且所述第一線程和第二線程中的另一個是已被序列化的Linux P線程。
7.根據權利要求I所述的方法,其中所述第一線程和第二線程是主干P線程。
8.一種數據處理系統(tǒng),配置用于以非搶占式方式執(zhí)行進程的常規(guī)可中斷線程,所述數據處理系統(tǒng)包括 包括程序代碼的數據存儲;以及 耦合到所述數據存儲的處理器,其中當所述程序代碼由所述處理器執(zhí)行時將所述處理器配置用于 響應于與第一線程的第一消息相關聯的第一條目到達運行隊列的開端,由所述第一線程接收第一喚醒信號; 響應于接收所述喚醒信號,由所述第一線程等待全局鎖; 響應于所述第一線程接收所述全局鎖,由所述第一線程從關聯的消息隊列中獲取所述第一消息; 由所述第一線程處理獲取的所述第一消息; 響應于完成對所述第一消息的所述處理,由第一線程向第二線程發(fā)送第二喚醒信號,所述第二線程的關聯條目是所述運行隊列中的下一個;以及 在所述第二喚醒信號的所述發(fā)送之后,由所述第一線程釋放所述全局鎖。
9.根據權利要求8所述的數據處理系統(tǒng),其中當所述程序代碼由所述處理器執(zhí)行時進一步將所述處理器配置用于由所述第一線程針對用于所述第一線程的第二消息而檢查所述關聯的消息隊列;以及響應于所述關聯的消息隊列包括所述第二消息,將與所述第二消息相關聯的第二條目排隊到所述運行隊列的結尾。
10.根據權利要求8所述的數據處理系統(tǒng),其中所述第二線程是需要對與所述第一線程共享的數據結構的訪問的Linux P線程。
11.根據權利要求8所述的數據處理系統(tǒng),其中所述第一喚醒信號在一個事件之后被觸發(fā)。
12.根據權利要求11所述的數據處理系統(tǒng),其中所述事件對應于以下之一從另一線程接收針對所述第一線程的所述第一消息,針對所述第一線程的分組到達,與所述第一線程相關聯的定時器到時,以及建立針對所述第一線程的鏈接。
13.根據權利要求8所述的數據處理系統(tǒng),其中所述第一線程和第二線程中的一個是主干P線程,并且所述第一線程和第二線程中的另一個是已被序列化的Linux P線程。
14.根據權利要求8所述的數據處理系統(tǒng),其中所述第一線程和第二線程是主干P線程。
全文摘要
本發(fā)明涉及用于在計算環(huán)境中執(zhí)行線程的方法和系統(tǒng)。公開了一種用于以非搶占式方式執(zhí)行進程的常規(guī)可中斷線程的技術,包括響應于與針對第一線程的第一消息相關聯的第一條目到達運行隊列的開端,由第一線程接收第一喚醒信號。響應于接收喚醒信號,由第一線程等待全局鎖。響應于第一線程接收全局鎖,由第一線程從關聯的消息隊列獲取第一消息并處理獲取的第一消息。響應于完成對第一消息的處理,第一線程向第二線程發(fā)送第二喚醒信號,該第二線程的關聯條目是運行隊列中的下一個。最后,在發(fā)送第二喚醒信號之后,第一線程釋放全局鎖。
文檔編號G06F9/48GK102841810SQ201210147169
公開日2012年12月26日 申請日期2012年5月11日 優(yōu)先權日2011年5月14日
發(fā)明者D·G·卡瑪斯, N·格霍施, D-R·魯, N·穆克赫杰, V·潘迪 申請人:國際商業(yè)機器公司