一種進(jìn)程間通信的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種進(jìn)程間通信的方法和裝置。
【背景技術(shù)】
[0002]進(jìn)程是計(jì)算機(jī)正在運(yùn)行的程序?qū)嵗?,不同進(jìn)程間由于相互協(xié)作而存在相應(yīng)的通信需求。在操作系統(tǒng)研究中,進(jìn)程間通信(Interprocess Communicat1n,簡(jiǎn)稱IPC)是一個(gè)重要的研究課題,提高IPC的效率對(duì)整個(gè)操作系統(tǒng)的性能尤為重要。常用的IPC方法有消息傳輸、共享內(nèi)存、零拷貝等。傳統(tǒng)操作系統(tǒng)被劃分為宏內(nèi)核和微內(nèi)核,近年,半導(dǎo)體制造工藝飛速發(fā)展,單處理器芯片的主頻已逐漸逼近極限,單靠提升處理器芯片的主頻已經(jīng)無(wú)法使處理器的運(yùn)算速度繼續(xù)沿著摩爾定律不斷提升。因此人們將多個(gè)處理器核集成在一個(gè)芯片上形成片上多處理器(Chip Mult1-Processor,簡(jiǎn)稱CMP)系統(tǒng)。目前片上多處理器系統(tǒng)已成為當(dāng)前微處理器發(fā)展的主流。CMP又可以分為多核(MuIt1-Core)和眾核(Many-Core),通常把8個(gè)Core以下的CMP稱為多核,8個(gè)Core以上的CMP稱為眾核。隨著眾核的出現(xiàn),同時(shí)出現(xiàn)了 Barrelfish等新型操作系統(tǒng)。Barrelfish操作系統(tǒng)是一個(gè)微內(nèi)核(micro kernel)操作系統(tǒng),同時(shí)也是多內(nèi)核(mult1-kernel)操作系統(tǒng),主要面向多核(Mult1-core)、眾核(Many-core)平臺(tái)。
[0003]現(xiàn)有技術(shù)中的基于Barre I f i sh操作系統(tǒng)的內(nèi)核內(nèi)和內(nèi)核間零拷貝方案,為了將消息內(nèi)存映射進(jìn)自己的地址空間,接收端需要進(jìn)出內(nèi)核空間,這樣會(huì)造成相應(yīng)的時(shí)間開(kāi)銷;同時(shí),接收端進(jìn)出內(nèi)核空間會(huì)造成接收端高速緩存的擾動(dòng)。第二代微內(nèi)核系統(tǒng)的L4系統(tǒng)中的內(nèi)核內(nèi)零拷貝方案,由于采用同步IPC,使得編程不夠靈活;同時(shí),接收端仍然需要進(jìn)出內(nèi)核空間,并且只適用于單內(nèi)核系統(tǒng)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實(shí)施例提供一種進(jìn)程間通信的方法和裝置,實(shí)現(xiàn)了在零拷貝方案中接收端不用進(jìn)出內(nèi)核空間便可對(duì)消息進(jìn)行讀取,避免了接收端進(jìn)出內(nèi)核空間的時(shí)間開(kāi)銷,同時(shí)減少了對(duì)接收端高速緩存的擾動(dòng)。
[0005]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006]第一方面,提供一種進(jìn)程間通信的方法,包括:
[0007]發(fā)送端建立與接收端的通信通道;
[0008]通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,并將所述通信通道的通道號(hào)和第一參數(shù)寫入所述內(nèi)核空間;
[0009]根據(jù)所述通信通道的通道號(hào),獲得所述接收端的共享頁(yè)表;
[0010]其中,所述共享頁(yè)表為所述頁(yè)目錄對(duì)應(yīng)的頁(yè)表中用于映射所述消息所在內(nèi)存頁(yè)面的物理地址的頁(yè)表;
[0011]將獲取的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述接收端的共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址;
[0012]將所述消息的新虛擬地址和所述第一參數(shù)存入所述接收端的消息通知區(qū)中,以便于所述接收端讀取所述消息通知區(qū)獲得所述消息的新虛擬地址和所述第一參數(shù),并根據(jù)所述新虛擬地址讀取具有相應(yīng)長(zhǎng)度的所述消息;
[0013]其中,所述消息通知區(qū)是所述通信通道建立過(guò)程中分配的。
[0014]在第一種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面,所述第一參數(shù)包括:所述能力引用、能力引用偏移、所述消息頁(yè)內(nèi)偏移和所述消息的長(zhǎng)度,所述通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,并將所述通信通道的通道號(hào)和第一參數(shù)寫入所述內(nèi)核空間之前,還包括:
[0015]獲取存儲(chǔ)所述消息的內(nèi)存對(duì)應(yīng)的能力引用和能力引用偏移。
[0016]在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面,所述根據(jù)所述通信通道的通道號(hào),獲得所述接收端的共享頁(yè)表,包括:
[0017]根據(jù)所述通信通道的通道號(hào),獲取所述接收端對(duì)應(yīng)的進(jìn)程控制塊;
[0018]根據(jù)所述進(jìn)程控制塊中的所述接收端的頁(yè)目錄地址,獲得所述接收端的第一共享頁(yè)表。
[0019]在第三種可能的實(shí)現(xiàn)方式中,結(jié)合第二種可能的實(shí)現(xiàn)方式,所述根據(jù)所述通信通道的通道號(hào),獲取接收端對(duì)應(yīng)的進(jìn)程控制塊,包括:
[0020]根據(jù)所述通信通道的通道號(hào),獲得接收端;
[0021]根據(jù)所述接收端對(duì)應(yīng)的進(jìn)程與進(jìn)程控制塊之間的關(guān)系映射表,獲得所述接收端對(duì)應(yīng)的進(jìn)程控制塊;
[0022]其中,所述接收端對(duì)應(yīng)的進(jìn)程與進(jìn)程控制塊之間的關(guān)系映射表是預(yù)先存儲(chǔ)在內(nèi)核空間中的。
[0023]在第四種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或第一種可能的實(shí)現(xiàn)方式,所述將獲取的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述接收端的共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址,包括:
[0024]檢查所述接收端的共享頁(yè)表的頁(yè)表項(xiàng),獲得能容納所述消息的連續(xù)空閑頁(yè)表項(xiàng);
[0025]將獲得的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址。
[0026]在第五種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面,
[0027]所述第一參數(shù)包括:所述消息的虛擬地址和所述消息的長(zhǎng)度,所述消息所在內(nèi)存頁(yè)面的物理地址是根據(jù)所述消息的虛擬地址和所述消息的長(zhǎng)度獲得的。
[0028]在第六種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或第四種可能的實(shí)現(xiàn)方式,
[0029]所述共享頁(yè)表為第一共享頁(yè)表;
[0030]其中,所述第一共享頁(yè)表為用于進(jìn)行物理地址列表映射的頁(yè)表,所述發(fā)送端的第一共享頁(yè)表和所述接收端的第一共享頁(yè)表在所述內(nèi)核空間中共用同一物理內(nèi)存頁(yè)面或者不同物理內(nèi)存頁(yè)面。
[0031]在第七種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或第四種可能的實(shí)現(xiàn)方式,
[0032]所述共享頁(yè)表為第二共享頁(yè)表;
[0033]其中,所述第二共享頁(yè)表為用于進(jìn)行物理地址列表映射的頁(yè)表,所述發(fā)送端的第二共享頁(yè)表和所述接收端的第二共享頁(yè)表在所述內(nèi)核空間中共用同一物理內(nèi)存頁(yè)面。
[0034]在第八種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或第一種可能的實(shí)現(xiàn)方式,所述方法還包括:
[0035]從內(nèi)存空間中獲取一個(gè)頁(yè)面大小的空間作為共享頁(yè)表;
[0036]將所述共享頁(yè)表映射入所述發(fā)送端和所述接收端的的頁(yè)目錄中,或,將所述共享頁(yè)表映射入所述接收端的的頁(yè)目錄中。
[0037]第二方面,提供一種進(jìn)程間通信的裝置,包括:
[0038]創(chuàng)建單元,用于建立與接收端通信的通信通道;
[0039]處理單元,用于通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,并將所述通信通道的通道號(hào)和第一參數(shù)寫入所述內(nèi)核空間;
[0040]獲取單元,用于根據(jù)所述通信通道的通道號(hào),獲得所述接收端的共享頁(yè)表;
[0041]其中,所述共享頁(yè)表為所述頁(yè)目錄對(duì)應(yīng)的頁(yè)表中用于映射所述消息所在內(nèi)存頁(yè)面的物理地址的頁(yè)表;
[0042]所述處理單元,還用于將獲取的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述接收端的共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址;
[0043]存儲(chǔ)單元,用于將所述消息的新虛擬地址和所述第一參數(shù)存入所述接收端的消息通知區(qū)中,以便于所述接收端讀取所述消息通知區(qū)獲得所述消息的新虛擬地址和所述第一參數(shù),并根據(jù)所述新虛擬地址讀取具有相應(yīng)長(zhǎng)度的所述消息;
[0044]其中,所述消息通知區(qū)是所述通信通道建立過(guò)程中分配的。
[0045]在第一種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面,所述第一參數(shù)包括:能力引用、能力引用偏移、所述消息頁(yè)內(nèi)偏移和所述消息的長(zhǎng)度,
[0046]所述獲取單元,還用于獲取存儲(chǔ)所述消息的內(nèi)存對(duì)應(yīng)的能力引用和能力引用偏移。
[0047]在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面,所述獲取單元包括:
[0048]第一獲取模塊,用于根據(jù)所述通信通道的通道號(hào),獲取所述接收端對(duì)應(yīng)的進(jìn)程控制塊;
[0049]第二獲取模塊,用于根據(jù)所述進(jìn)程控制塊中的所述接收端的頁(yè)目錄地址,獲得所述接收端的第一共享頁(yè)表。
[0050]在第三種可能的實(shí)現(xiàn)方式中,結(jié)合第一種可能的實(shí)現(xiàn)方式,所述第一獲取模塊具體用于:
[0051]根據(jù)所述通信通道的通道號(hào),獲得接收端;
[0052]根據(jù)所述接收端對(duì)應(yīng)的進(jìn)程與進(jìn)程控制塊之間的關(guān)系映射表,獲得所述接收端對(duì)應(yīng)的進(jìn)程控制塊;
[0053]其中,所述接收端對(duì)應(yīng)的進(jìn)程與進(jìn)程控制塊之間的關(guān)系映射表是預(yù)先存儲(chǔ)在內(nèi)核空間中的。
[0054]在第四種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或第一種可能的實(shí)現(xiàn)方式,所述處理單元包括:
[0055]檢測(cè)模塊,用于檢查所述接收端的共享頁(yè)表的頁(yè)表項(xiàng),獲得能容納所述消息的連續(xù)空閑頁(yè)表項(xiàng);
[0056]第三獲取模塊,用于將獲得的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址。
[0057]在第五種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面,
[0058]所述第一參數(shù)包括:所述消息的虛擬地址和所述消息的長(zhǎng)度,所述消息所在內(nèi)存頁(yè)面的物理地址是根據(jù)所述消息的虛擬地址和所述消息的長(zhǎng)度獲得的。
[0059]在第六種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或第四種可能的實(shí)現(xiàn)方式,
[0060]所述共享頁(yè)表為第一共享頁(yè)表;
[0061]其中,所述第一共享頁(yè)表為用于進(jìn)行物理地址列表映射的頁(yè)表,所述發(fā)送端的第一共享頁(yè)表和所述接收端的第一共享頁(yè)表在所述內(nèi)核空間中共用同一物理內(nèi)存頁(yè)面或者不同物理內(nèi)存頁(yè)面。
[0062]在第七種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或第四種可能的實(shí)現(xiàn)方式,
[0063]所述共享頁(yè)表為第二共享頁(yè)表;
[0064]其中,所述第二共享頁(yè)表為用于進(jìn)行物理地址列表映射的頁(yè)表,所述發(fā)送端的第二共享頁(yè)表和所述接收端的第二共享頁(yè)表在所述內(nèi)核空間中共用同一物理內(nèi)存頁(yè)面。
[0065]在第八種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或第一種可能的實(shí)現(xiàn)方式,
[0066]所述獲取單元,還用于從內(nèi)存中獲取一個(gè)頁(yè)面大小的空間作為共享頁(yè)表;
[0067]所述處理單元,還用于將所述共享頁(yè)表映射入所述發(fā)送端和所述接收端的頁(yè)目錄中,或,將所述共享頁(yè)表映射入所述接收端的的頁(yè)目錄中。
[0068]第三方面,提供一種進(jìn)程間通信的裝置,包括:至少一個(gè)處理器、存儲(chǔ)器、通信接口和總線,所述至少一個(gè)處理器、存儲(chǔ)器和通信接口通過(guò)總線連接并完成相互間的通信,所述存儲(chǔ)器用于存儲(chǔ)程序代碼,其中:
[0069]所述處理器,用于調(diào)用存儲(chǔ)器中的程序代碼,用以執(zhí)行以下操作:
[0070]發(fā)送端建立與接收端的通信通道;
[0071]通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,并將所述通信通道的通道號(hào)和第一參數(shù)寫入所述內(nèi)核空間;
[0072]根據(jù)所述通信通道的通道號(hào),獲得所述接收端的共享頁(yè)表;
[0073]其中,所述共享頁(yè)表為所述頁(yè)目錄對(duì)應(yīng)的頁(yè)表中用于映射所述消息所在內(nèi)存頁(yè)面的物理地址的頁(yè)表;
[0074]將獲取的所述消息所在內(nèi)存頁(yè)面的物理地址映射到所述接收端的共享頁(yè)表的連續(xù)空閑頁(yè)表項(xiàng)中,得到消息的新虛擬地址;
[0075]將所述消息的新虛擬地址和所述第一參數(shù)存入所述接收端的消息通知區(qū)中,以便于所述接收端讀取所述消息通知區(qū)獲得所述消息的新虛擬地址和所述第一參數(shù),并根據(jù)所述新虛擬地址讀取具有相應(yīng)長(zhǎng)度的所述消息;
[0076]其中,所述消息通知區(qū)是所述通信通道建立過(guò)程中分配的。
[0077]在第一種可能的實(shí)現(xiàn)方式中,結(jié)合第三方面,所述第一參數(shù)包括:所述能力引用、能力引用偏移、所述消息頁(yè)內(nèi)偏移和所述消息的長(zhǎng)度,所述處理器還用于執(zhí)行以下操作:
[0078]獲取存儲(chǔ)所述消息的內(nèi)存對(duì)應(yīng)的能力引用和能力引用偏移。
[0079]在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第三方面,所述處理器具體用于執(zhí)行以下步驟:
[0080]根據(jù)所述通信通道的通道號(hào),獲取所述接收端對(duì)應(yīng)的進(jìn)程控制塊;
[0081]根據(jù)所述進(jìn)程控制塊中的所述接收端的頁(yè)目錄地址,獲得所述接收端的第一共享頁(yè)表。
[0082]在第三種可能的實(shí)現(xiàn)方式中,結(jié)合第二種可能的實(shí)現(xiàn)方式,所述處理器具體用于執(zhí)行以下步驟:
[0083]根據(jù)所述通信通道的通道號(hào),獲得接收端;
[0084]根據(jù)所述接收端對(duì)應(yīng)的進(jìn)程與進(jìn)程控制塊之間的關(guān)