一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法、裝置制造方法
【專利摘要】本發(fā)明適用于計算機(jī)【技術(shù)領(lǐng)域】,提供了一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法、裝置,所述方法包括:用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一請求中攜帶有用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù);第一代理模塊接收到第一請求后,通過第一內(nèi)核將第一請求中攜帶的第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到第一內(nèi)存空間;第一代理模塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后的第一數(shù)據(jù),并通過第一內(nèi)核將處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。本發(fā)明,大大減少了上下文切換的開銷。
【專利說明】一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法、裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方 法、裝置。
【背景技術(shù)】
[0002] 目前,處理器已進(jìn)入多核/眾核時代,然而,目前的操作系統(tǒng)僅以對稱多處理器 (Symmetric Multi-Processing, SMP)方式使用多核/眾核處理器,并不能充分利用多核/ 眾核處理器的并行處理能力。實驗證明,當(dāng)處理器超過16個核,現(xiàn)有Linux的性能不再線 性增長反而降低。因此,有必要設(shè)計一種新的操作系統(tǒng)。
[0003] 微內(nèi)核操作系統(tǒng)(Microkernel Operating System)結(jié)構(gòu),是20世紀(jì)80年代后期 發(fā)展起來的?,F(xiàn)代操作系統(tǒng)設(shè)計中的一個突出思想是把操作系統(tǒng)中更多的成分和功能放到 更高的層次(及用戶模式)中去運(yùn)行,而留下一個盡量小的內(nèi)核,用它來完成操作系統(tǒng)最基 本的核心功能,這種技術(shù)被稱為微內(nèi)核技術(shù)。微內(nèi)核的設(shè)計目標(biāo)是將系統(tǒng)服務(wù)的實現(xiàn)和系 統(tǒng)的基本操作規(guī)則分離開來,微內(nèi)核將許多系統(tǒng)服務(wù)放入分離的進(jìn)程,如文件系統(tǒng),設(shè)備驅(qū) 動程序,而進(jìn)程通過消息傳遞調(diào)用系統(tǒng)服務(wù)。這些非常模塊化的用戶態(tài)服務(wù)用于完成操作 系統(tǒng)中比較高級的操作,這樣的設(shè)計使內(nèi)核中最基本的部分的設(shè)計更簡單。一個服務(wù)組件 的出錯并不會導(dǎo)致整個系統(tǒng)的崩潰,內(nèi)核需要做的,僅僅是重新啟動這個組件,而不必影響 其它的部分。
[0004] 基于微內(nèi)核的操作系統(tǒng)具有如下特征:
[0005] 1)足夠小的內(nèi)核
[0006] 在微內(nèi)核操作系統(tǒng)中,內(nèi)核是指精心設(shè)計的、能實現(xiàn)現(xiàn)代0S最基本的核心功能的 部分。微內(nèi)核并非是一個完整的0S,而只是操作系統(tǒng)中最基本的部分,它通常用于 :
[0007] 實現(xiàn)與硬件緊密相關(guān)的處理;
[0008] 實現(xiàn)一些較基本的功能;
[0009] 負(fù)責(zé)客戶和服務(wù)器之間的通信。
[0010] 它們只是為構(gòu)建通用0S提供一個重要基礎(chǔ),這樣就可以確保把操作系統(tǒng)內(nèi)核做 得很小。這樣,在眾核平臺上,可以同時在每個中央處理器(Central Processing Unit, CPU)上運(yùn)行一個內(nèi)核kernel實例,每個CPU進(jìn)入內(nèi)核態(tài)時互不干擾,避免多個CPU爭搶內(nèi) 核鎖產(chǎn)生的性能消耗。
[0011] 2)基于客戶/服務(wù)器模式
[0012] 將操作系統(tǒng)中最基本的部分放入內(nèi)核中,而把操作系統(tǒng)的絕大部分功能都放在微 內(nèi)核外面的一組服務(wù)器中實現(xiàn)。這些系統(tǒng)服務(wù)都是被作為進(jìn)程來實現(xiàn)的,運(yùn)行在用戶態(tài)。因 為用戶態(tài)進(jìn)程間的地址空間是隔離的,所以通常情況下不同進(jìn)程間無法直接進(jìn)行通信。一 旦不同進(jìn)程間需要調(diào)用,例如用戶進(jìn)程和系統(tǒng)服務(wù)、系統(tǒng)服務(wù)間調(diào)用都是借助微內(nèi)核提供 的消息傳遞機(jī)制來實現(xiàn)信息交互的。所以,在用戶看來,這是一種類似客戶/服務(wù)器的模 式,用戶向內(nèi)核發(fā)出請求,內(nèi)核控制相應(yīng)系統(tǒng)服務(wù)給予服務(wù)。
[0013] 現(xiàn)有的微內(nèi)核一般只提供基本的硬件操作接口,它將所有操作系統(tǒng)(Operating System,0S)必須提供的功能通過系統(tǒng)服務(wù)的形式提供,不同的系統(tǒng)服務(wù)運(yùn)行在用戶態(tài);系 統(tǒng)服務(wù)相互之間隔離,即使某個系統(tǒng)服務(wù)出現(xiàn)異常也不會干擾到其他模塊;系統(tǒng)服務(wù)和系 統(tǒng)服務(wù)之間通過進(jìn)程間通信(Inter Process Communication, IPC)的方式工作。
[0014] 現(xiàn)有的微內(nèi)核操作系統(tǒng)都是基于客戶/服務(wù)器模型的,用戶進(jìn)程通過向0S發(fā)送請 求消息通知0S需要使用一種系統(tǒng)服務(wù),0S接收到請求消息后根據(jù)自身的情況調(diào)度相應(yīng)的 系統(tǒng)服務(wù)來完成一次系統(tǒng)服務(wù)。通常用戶編寫自己的應(yīng)用程序,會使用一些系統(tǒng)提供的庫 函數(shù),這些庫大多提供封裝好的系統(tǒng)服務(wù)的接口,用戶只需要根據(jù)自己的需要,填寫相關(guān)的 參數(shù),就可以感覺上直接調(diào)用了一些系統(tǒng)服務(wù),前面所說的功能步驟都是由0S完成。圖1 展示了單核平臺上使用一次系統(tǒng)服務(wù)的過程。
[0015] 在眾核平臺上,由于同時存在多個kernel實例,每個CPU運(yùn)行一個獨(dú)立的kernel 實例,每個kernel實例相互之間不會干擾對方,同時用戶態(tài)的各個進(jìn)程可以隨意被各個 kernel實例運(yùn)行。這種情況下還要考慮各個進(jìn)程可能不在同一個kernel上,這時發(fā)送消 息需要使用核間通信。核間發(fā)送消息需要在每個kernel上開啟一個代理模塊(monitor), 所有消息先匯集到代理,代理查找目標(biāo)核的位置,將消息從本地monitor發(fā)送到對端 monitor,再由對端monitor發(fā)送到對端目標(biāo)進(jìn)程。所以,通常用戶使用一次系統(tǒng)服務(wù)的過 程如圖2所示,可以歸結(jié)為以下幾個步驟 :
[0016] 1)用戶進(jìn)程組裝一個消息,并將消息發(fā)送給內(nèi)核;
[0017] 2)內(nèi)核將消息發(fā)送到本地monitor ;
[0018] 3)本地monitor查找目標(biāo)核的位置,并將消息發(fā)往對端monitor ;
[0019] 4)對端monitor接收到消息后,將消息發(fā)往系統(tǒng)服務(wù);
[0020] 5)系統(tǒng)服務(wù)工作;
[0021] 6)系統(tǒng)服務(wù)完成工作后,將執(zhí)彳了結(jié)果發(fā)往對端monitor ;
[0022] 7)對端monitor將執(zhí)行結(jié)果發(fā)往本地monitor ;
[0023] 8)本地monitor接收到執(zhí)行結(jié)果后,發(fā)給用戶進(jìn)程。
[0024] 從上述過程,可以看出,現(xiàn)有的微內(nèi)核操作系統(tǒng)的服務(wù)辦法性能低下。與宏內(nèi)核操 作系統(tǒng)相比,完成同樣的一次系統(tǒng)服務(wù),微內(nèi)核的開銷比宏內(nèi)核多了幾倍甚至更多。
[0025] 宏內(nèi)核操作系統(tǒng)(以Linux為例)所有的0S提供的系統(tǒng)服務(wù)都以代碼編寫在內(nèi)核 模塊中,完成一次系統(tǒng)服務(wù)所需要的過程是用戶程序陷入內(nèi)核,然后由內(nèi)核執(zhí)行系統(tǒng)服務(wù), 完成后從內(nèi)核態(tài)返回用戶態(tài)。開銷僅為2次上下文切換。而微內(nèi)核操作系統(tǒng),如圖2所示, 完成一次調(diào)用所需的開銷通常是8次上下文切換和2次核間通信。如果系統(tǒng)服務(wù)需要相互 調(diào)用,宏內(nèi)核可以在內(nèi)核中完成不同功能模塊的直接調(diào)用,而微內(nèi)核結(jié)構(gòu)就需要使用消息 通信的方式,使CPU在處于用戶態(tài)的不同系統(tǒng)服務(wù)間來回切換,核間通信和上下文切換帶 來的開銷很大,性能問題就更加嚴(yán)重。
【發(fā)明內(nèi)容】
[0026] 本發(fā)明實施例提供了一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法、裝置,旨在解決 現(xiàn)有技術(shù)使CPU在處于用戶態(tài)的用戶進(jìn)程與系統(tǒng)服務(wù)之間通信時,核間通信和上下文切換 帶來的開銷很大,性能問題就更加嚴(yán)重的問題。
[0027] 第一方面,提供一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法,應(yīng)用于多核平臺,所述 多核平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上運(yùn)行有第 一內(nèi)核,所述第一內(nèi)核上運(yùn)行有第一代理模塊以及一個或多個用戶進(jìn)程,所述第二物理核 上運(yùn)行有第二內(nèi)核,所述第二內(nèi)核上運(yùn)行有第二代理模塊以及系統(tǒng)服務(wù),所述第一代理模 塊上保存有所述系統(tǒng)服務(wù)與所述用戶進(jìn)程共享的共享內(nèi)存地址信息,所述方法包括:
[0028] 所述用戶進(jìn)程通過第一內(nèi)核向所述第一代理模塊發(fā)送第一請求,所述第一請求中 攜帶有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù);
[0029] 所述第一代理模塊接收到第一請求后,通過所述第一內(nèi)核將所述第一請求中攜帶 的所述第一數(shù)據(jù)寫入到與保存的所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;
[0030] 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核以輪詢的方式從所述第一內(nèi)存空間讀取所述第 一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一 內(nèi)存空間;
[0031] 所述第一代理模塊通過所述第一內(nèi)核以輪詢的方式從所述第一內(nèi)存空間讀取所 述處理后的第一數(shù)據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn) 程。
[0032] 在第一種可能的實現(xiàn)方式中,結(jié)合第一方面,在所述第一代理模塊通過所述第一 內(nèi)核以輪詢的方式從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù),并通過所述第一內(nèi)核 將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程之后,還包括:
[0033] 所述第一代理模塊通過所述第一內(nèi)核將所述共享內(nèi)存地址信息發(fā)送給所述用戶 進(jìn)程;
[0034] 所述用戶進(jìn)程根據(jù)所述共享內(nèi)存地址信息建立與所述系統(tǒng)服務(wù)的連接,并
[0035] 保存所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連接信息,所述
[0036] 連接信息包括所述系統(tǒng)服務(wù)的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息。
[0037] 在第二種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,在所述用戶進(jìn)程通過 第一內(nèi)核向所述第一代理模塊發(fā)送第一請求之前,還包括:
[0038] 判斷所述用戶進(jìn)程和所述系統(tǒng)服務(wù)之間是否已經(jīng)建立連接;
[0039] 如果否,則執(zhí)行所述用戶進(jìn)程通過第一內(nèi)核向所述第一代理模塊發(fā)送第一請求以 及該步驟之后的后續(xù)步驟,實現(xiàn)所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間的通信,并建立兩者之 間的連接;
[0040] 如果是,則所述用戶進(jìn)程根據(jù)所述連接信息,寫入需要所述系統(tǒng)服務(wù)處理的第一 數(shù)據(jù)到與所述連接信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;
[0041] 所述系統(tǒng)服務(wù)從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后 的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間;
[0042] 所述用戶進(jìn)程從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)。
[0043] 在第三種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,所述第一代理模塊上 保存有所述系統(tǒng)服務(wù)與所述用戶進(jìn)程共享的共享內(nèi)存地址信息包括:
[0044] 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核向操作系統(tǒng)申請共享內(nèi)存;
[0045] 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核向所述第二代理模塊通知所述系統(tǒng)服務(wù)申請到 的共享內(nèi)存地址信息;
[0046] 所述第二代理模塊向所述第一代理模塊廣播所述共享內(nèi)存地址信息;
[0047] 所述第一代理模塊保存所述共享內(nèi)存地址信息。
[0048] 在第四種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,所述用戶進(jìn)程根據(jù)所 述共享內(nèi)存地址信息建立與所述系統(tǒng)服務(wù)的連接包括:
[0049] 所述系統(tǒng)服務(wù)將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述系統(tǒng)服 務(wù)的虛擬地址空間;
[0050] 所述第一代理模塊將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第 一代理模塊的虛擬地址空間;
[0051] 所述用戶進(jìn)程將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述所述用 戶進(jìn)程的虛擬地址空間。
[0052] 在第五種可能的實現(xiàn)方式中,結(jié)合第一方面,所述第一代理模塊、所述用戶進(jìn)程、 所述第二代理模塊以及所述系統(tǒng)服務(wù)均為用戶態(tài)程序。
[0053] 第二方面,提供一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置,所述裝置包括多核平 臺,所述多核平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上 運(yùn)行有第一內(nèi)核,所述第一內(nèi)核上運(yùn)行有第一代理模塊以及一個或多個用戶進(jìn)程,所述第 二物理核上運(yùn)行有第二內(nèi)核,所述第二內(nèi)核上運(yùn)行有第二代理模塊以及系統(tǒng)服務(wù),所述第 一代理模塊上保存有所述系統(tǒng)服務(wù)與所述用戶進(jìn)程共享的共享內(nèi)存地址信息,所述裝置還 包括存儲器,所述用戶進(jìn)程、所述第一代理模塊、所述第二代理模塊和所述系統(tǒng)服務(wù)均存儲 于所述存儲器中:
[0054] 所述第一內(nèi)核,用于讀取存儲器中存儲的所述第一代理模塊,并向所述第一代理 模塊發(fā)送第一請求,所述第一請求中攜帶有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一數(shù) 據(jù);
[0055] 所述第一內(nèi)核還用于,將所述第一請求中攜帶的所述第一數(shù)據(jù)寫入到與保存的所 述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;
[0056] 所述第二內(nèi)核,用于以輪詢的方式從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn) 行處理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間;
[0057] 所述第一內(nèi)核還用于,以輪詢的方式從所述第一內(nèi)存空間讀取所述處理后的第一 數(shù)據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程。
[0058] 在第一種可能的實現(xiàn)方式中,結(jié)合第一方面,所述所述第一內(nèi)核還用于,將所述共 享內(nèi)存地址信息發(fā)送給所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行根據(jù)所述共享內(nèi)存地址信息建 立與所述系統(tǒng)服務(wù)的連接,并保存所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連 接信息,所述連接信息包括所述系統(tǒng)服務(wù)的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息的方法。
[0059] 在第二種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,所述第一內(nèi)核還用于, 判斷所述用戶進(jìn)程和所述系統(tǒng)服務(wù)之間是否已經(jīng)建立連接,如果否,則先建立和所述系統(tǒng) 服務(wù)之間的連接,并保存兩者之間建立連接時所使用的連接信息,如果是,則讀取存儲器 中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行根據(jù)所述連接信息,寫入需要所述系統(tǒng)服務(wù) 處理的第一數(shù)據(jù)到與所述連接信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間的方 法;
[0060] 所述第二內(nèi)核還用于讀取存儲器中存儲的所述系統(tǒng)服務(wù),由所述系統(tǒng)服務(wù)執(zhí)行從 所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處理 后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間的方法;
[0061] 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行 從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)的方法。
[0062] 在第三種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,所述第二內(nèi)核還用于, 先向操作系統(tǒng)申請共享內(nèi)存,再向所述第二代理模塊通知所述系統(tǒng)服務(wù)申請到的共享內(nèi)存 地址信息由所述第二代理模塊執(zhí)行向所述第一代理模塊廣播所述共享內(nèi)存地址信息的方 法;
[0063] 所述第一內(nèi)核還用于讀取存儲器中存儲的所述第一代理模塊,由所述第一代理模 塊執(zhí)行保存所述共享內(nèi)存地址信息的方法。
[0064] 在第四種可能的實現(xiàn)方式中,根據(jù)第一種可能的實現(xiàn)方式,所述第二內(nèi)核還用于, 讀取存儲器中存儲的系統(tǒng)服務(wù),由所述系統(tǒng)服務(wù)執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一 內(nèi)存空間映射至所述系統(tǒng)服務(wù)的虛擬地址空間的方法;
[0065] 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述第一代理模塊,由所述第一代理 模塊執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第一代理模塊的虛擬 地址空間;
[0066] 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行 將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述用戶進(jìn)程的虛擬地址空間的方 法。
[0067] 在第五種可能的實現(xiàn)方式中,結(jié)合第二方面,所述第一代理模塊、所述用戶進(jìn)程、 所述第二代理模塊以及所述系統(tǒng)服務(wù)均為用戶態(tài)程序。
[0068] 在本發(fā)明實施例,用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一請 求中攜帶有所述用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù);第一代理模塊接收到第一請求 后,通過第一內(nèi)核將第一請求中攜帶的第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的 第一內(nèi)存空間;系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù),并進(jìn) 行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到第一內(nèi)存空間;第一代理模 塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后的第一數(shù)據(jù),并通過第一內(nèi)核將 處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。將現(xiàn)有技術(shù)用戶進(jìn)程與系統(tǒng)服務(wù)進(jìn)行一次通信需要8 次上下文切換+2次核間通信的系統(tǒng)開銷降低到4次上下文切換+2次核間通信,大大減少 了上下文切換的開銷。
【專利附圖】
【附圖說明】
[0069] 圖1是本發(fā)明提供的單核平臺上使用一次系統(tǒng)服務(wù)的過程示意圖;
[0070] 圖2是本發(fā)明提供的微內(nèi)核操作系統(tǒng)完成一次系統(tǒng)服務(wù)調(diào)用的過程示意圖;
[0071] 圖3是本發(fā)明一實施例提供的調(diào)用系統(tǒng)服務(wù)的方法的實現(xiàn)流程;
[0072] 圖4是本發(fā)明又一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法的實現(xiàn)流 程;
[0073] 圖5是本發(fā)明又一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法的實現(xiàn)流 程;
[0074] 圖6是本發(fā)明實施例提供的內(nèi)存的線性地址劃分示意圖;
[0075] 圖7是本發(fā)明實施例提供的共享物理內(nèi)存的劃分示意圖;
[0076] 圖8是本發(fā)明一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置的結(jié)構(gòu)框圖;
[0077] 圖9是本發(fā)明又一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置的結(jié)構(gòu)框 圖。
【具體實施方式】
[0078] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。
[0079] 在本發(fā)明實施例中,用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一 請求中攜帶有所述用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù);第一代理模塊接收到第一請求 后,通過第一內(nèi)核將第一請求中攜帶的第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的 第一內(nèi)存空間;系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù),并進(jìn) 行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到第一內(nèi)存空間;第一代理模 塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后的第一數(shù)據(jù),并通過第一內(nèi)核將 處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。
[0080] 以下結(jié)合具體實施例對本發(fā)明的實現(xiàn)進(jìn)行詳細(xì)描述:
[0081] 圖3示出了本發(fā)明一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法的實現(xiàn) 流程,該方法可以應(yīng)用于多核平臺,其中,該多核平臺包括至少一個第一物理核以及至少一 個第二物理核,第一物理核上運(yùn)行有第一內(nèi)核,第一內(nèi)核上運(yùn)行有第一代理模塊以及一個 或多個用戶進(jìn)程,第二物理核上運(yùn)行有第二內(nèi)核,第二內(nèi)核上運(yùn)行有第二代理模塊以及系 統(tǒng)服務(wù),且第一代理模塊上保存有系統(tǒng)服務(wù)與用戶進(jìn)程共享的共享內(nèi)存地址信息,其中,第 一代理模塊、用戶進(jìn)程、第二代理模塊以及系統(tǒng)服務(wù)均為用戶態(tài)程序。為了便于說明,僅示 出了與本實施例相關(guān)的部分,詳述如下:
[0082] 步驟S301、用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一請求中攜 帶有用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù)。
[0083] 在本發(fā)明實施例中,在操作系統(tǒng)啟動之前,需要將操作系統(tǒng)中的預(yù)設(shè)數(shù)目的內(nèi)核 劃分出來作為系統(tǒng)服務(wù)內(nèi)核,在這些系統(tǒng)服務(wù)內(nèi)核上運(yùn)行特定的系統(tǒng)服務(wù)。通常情況下,這 些系統(tǒng)服務(wù)內(nèi)核上,系統(tǒng)服務(wù)獲得CPU后可以不用釋放,可以減少不必要的上下文切換;除 非有必要,系統(tǒng)服務(wù)可以將CPU控制權(quán)交給系統(tǒng)服務(wù)內(nèi)核,系統(tǒng)服務(wù)內(nèi)核可以運(yùn)行內(nèi)核功 能或者進(jìn)行調(diào)度,運(yùn)行一些其他必要的進(jìn)程,比如,本實施例中,將第二物理核上運(yùn)行的第 二內(nèi)核作為一個系統(tǒng)服務(wù)內(nèi)核,第二內(nèi)核上運(yùn)行有指定的系統(tǒng)服務(wù)。
[0084] 還需要在這些系統(tǒng)服務(wù)內(nèi)核上建立一個monitor,比如,在第二內(nèi)核上運(yùn)行有第二 代理模塊,由于系統(tǒng)服務(wù)都是在操作系統(tǒng)中進(jìn)行過注冊的,monitor除了建立各個內(nèi)核間的 通信外,可以和各個系統(tǒng)服務(wù)建立連接。在本實施例中,讓monitor和系統(tǒng)服務(wù)直接建立用 戶態(tài)的通信。這樣monitor就可以通過用戶態(tài)通信直接調(diào)用系統(tǒng)服務(wù),減少了切換到目標(biāo) 系統(tǒng)服務(wù)的過程。另外,當(dāng)系統(tǒng)服務(wù)發(fā)生遷移時,即系統(tǒng)服務(wù)從一個內(nèi)核遷移到另一個內(nèi)核 時,系統(tǒng)服務(wù)需要向與遷移至的內(nèi)核對應(yīng)的monitor注冊自己。
[0085] 還需要修改操作系統(tǒng)的內(nèi)存管理模塊,將內(nèi)存的線性地址劃分成三個部分,內(nèi)核 空間Kernel Space、用戶空間User Space和共享地址空間。共享地址空間有固定的偏移 offset和大小,這樣共享地址空間就有了固定的物理位置。然后,將共享地址空間劃分成預(yù) 設(shè)個數(shù)的共享物理內(nèi)存Shared Space,如圖6所示,每個共享物理內(nèi)存供不同的系統(tǒng)服務(wù) 使用,為了方便描述,將本實施例中的系統(tǒng)服務(wù)申請到的共享物理內(nèi)存空間稱為第一內(nèi)存 空間。
[0086] 每個共享物理內(nèi)存分成頭部和消息體兩部分,如圖7所示,其中,頭部用于設(shè)置標(biāo) 志位,含有用過used、標(biāo)識ID、標(biāo)簽tags和兩個位圖圖像bitmap,用過位圖used bitmap用 于用戶進(jìn)程請求空閑內(nèi)存空間,預(yù)備位圖ready bitmap用于服務(wù)進(jìn)程讀取消息塊,消息體 被劃分成一個個固定大小的消息塊,如消息塊Msg blockl、消息塊Msg block2等,這些消息 塊與頭部的bitmap中的標(biāo)志位--對應(yīng),比如,Msg blockl與bitmap中的第一個標(biāo)志位 對應(yīng),Msg block2與bitmap中的第二個標(biāo)志位對應(yīng)。
[0087] 操作系統(tǒng)啟動后,每個內(nèi)核上的monitor首先啟動,所有的monitor之間首先建 立全連接;其次,系統(tǒng)服務(wù)啟動,啟動后的系統(tǒng)服務(wù)會發(fā)送啟動消息至本地monitor,本地 monitor發(fā)送啟動消息至所有其它的monitor,然后所有的monitor就可以和該啟動的系 統(tǒng)服務(wù)建立連接。另外,系統(tǒng)服務(wù)進(jìn)程啟動后可以向操作系統(tǒng)申請得到一個共享物理內(nèi) 存,并修改該共享物理內(nèi)存中的一些標(biāo)志位,申明這個共享物理內(nèi)存中的屬于某個系統(tǒng)服 務(wù)使用,并把該共享物理內(nèi)存映射到自己的虛擬地址空間;同時它會廣播消息,告訴每個 kernel上的monitor自己占用的共享物理內(nèi)存,monitor也把該共享物理內(nèi)存映射到自己 的虛擬地址空間,雙方就可以同時操作這塊共享物理內(nèi)存進(jìn)行通信了。
[0088] 步驟S302、第一代理模塊接收到第一請求后,通過第一內(nèi)核將第一請求中攜帶的 第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間。
[0089] 在本發(fā)明實施例中,第一內(nèi)核查詢與該共享內(nèi)存地址信息對應(yīng)的共第一內(nèi)存空 間是否空閑,如果空閑,則在該第一內(nèi)存空間中寫入第一數(shù)據(jù),寫入完畢后,置位ready bitmap中的相應(yīng)標(biāo)志位,表明第一數(shù)據(jù)寫入第一內(nèi)存空間中的哪幾個消息塊中。
[0090] 步驟S303、系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù), 并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間。
[0091] 在本發(fā)明實施例中,第二內(nèi)核輪詢ready bitmap, -旦發(fā)現(xiàn)ready bitmap中的相 應(yīng)標(biāo)志位被置位,則從該第一內(nèi)存空間中讀取第一數(shù)據(jù),并提供相應(yīng)的服務(wù)。系統(tǒng)服務(wù)提供 服務(wù)結(jié)束后,擦除對應(yīng)的ready bitmap和used bitmap中的標(biāo)志位。
[0092] 步驟S304、第一代理模塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后 的第一數(shù)據(jù),并通過第一內(nèi)核將處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。
[0093] 其中,需要說明的是,共享內(nèi)存地址信息中包括與用戶進(jìn)程進(jìn)行通信的系統(tǒng)服務(wù) 所申請到的第一內(nèi)存空間的地址。
[0094] 通過以下步驟可以使得第一代理模塊上保存有系統(tǒng)服務(wù)與用戶進(jìn)程共享的共享 內(nèi)存地址信息:
[0095] 步驟1、系統(tǒng)服務(wù)通過第二內(nèi)核向操作系統(tǒng)申請共享內(nèi)存。
[0096] 其中,也可以通過其它方法申請共享內(nèi)存,只要能申請到一塊共享內(nèi)存就可以了, 在此不作具體限制。
[0097] 步驟2、系統(tǒng)服務(wù)通過第二內(nèi)核向第二代理模塊通知系統(tǒng)服務(wù)申請到的共享內(nèi)存 地址信息。
[0098] 步驟3、第二代理模塊向第一代理模塊廣播該共享內(nèi)存地址信息。
[0099] 其中,第二代理模塊可以通過廣播的方式向所有代理模塊廣播該共享內(nèi)存地址信 息,第一代理模塊可以收聽廣播,獲取到系統(tǒng)服務(wù)所使用的第一內(nèi)存空間的地址。當(dāng)然,第 二代理模塊也可以通過操作系統(tǒng),由操作系統(tǒng)通過管道、郵箱等進(jìn)程間的通信方式將該共 享內(nèi)存地址信息傳輸至第一代理模塊,具體采用何種方式,在此不作限制。
[0100] 步驟4、第一代理模塊保存該共享內(nèi)存地址信息。
[0101] 本實施例,用戶進(jìn)程和系統(tǒng)服務(wù)之間,通過4次上下文切換+2次核間通信即可完 成一次通信,大大減少了上下文切換的開銷。
[0102] 圖4示出了本發(fā)明又一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法的實 現(xiàn)流程,該方法可以應(yīng)用于多核平臺,其中,該多核平臺包括至少一個第一物理核以及至少 一個第二物理核,第一物理核上運(yùn)行有第一內(nèi)核,第一內(nèi)核上運(yùn)行有第一代理模塊以及一 個或多個用戶進(jìn)程,第二物理核上運(yùn)行有第二內(nèi)核,第二內(nèi)核上運(yùn)行有第二代理模塊以及 系統(tǒng)服務(wù),且第一代理模塊上保存有系統(tǒng)服務(wù)與用戶進(jìn)程共享的共享內(nèi)存地址信息,其中, 第一代理模塊、用戶進(jìn)程、第二代理模塊以及系統(tǒng)服務(wù)均為用戶態(tài)程序。為了便于說明,僅 示出了與本實施例相關(guān)的部分,詳述如下:
[0103] 步驟S401、用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一請求中攜 帶有用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù)。
[0104] 步驟S402、第一代理模塊接收到第一請求后,通過第一內(nèi)核將第一請求中攜帶的 第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間。
[0105] 步驟S403、系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù), 并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間。
[0106] 步驟S404、第一代理模塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后 的第一數(shù)據(jù),并通過第一內(nèi)核將處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。
[0107] 步驟S405、第一代理模塊通過第一內(nèi)核將共享內(nèi)存地址信息發(fā)送給用戶進(jìn)程。
[0108] 步驟S406、用戶進(jìn)程根據(jù)共享內(nèi)存地址信息建立與系統(tǒng)服務(wù)的連接,并保存用戶 進(jìn)程與系統(tǒng)服務(wù)之間建立連接時所用的連接信息,該連接信息包括系統(tǒng)服務(wù)的服務(wù)標(biāo)識、 共享內(nèi)存地址信息。
[0109] 其中,用戶進(jìn)程根據(jù)共享內(nèi)存地址信息建立與系統(tǒng)服務(wù)的連接的過程具體包括:
[0110] 步驟11、系統(tǒng)服務(wù)將共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至系統(tǒng)服務(wù)的虛 擬地址空間。
[0111] 步驟12、第一代理模塊將共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至第一代理 模塊的虛擬地址空間。
[0112] 步驟13、用戶進(jìn)程將共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至用戶進(jìn)程的虛 擬地址空間。
[0113] 本實施例,用戶進(jìn)程和系統(tǒng)服務(wù)之間完成一次通信后,第一代理模塊通過第一內(nèi) 核將共享內(nèi)存地址信息發(fā)送給用戶進(jìn)程,用戶進(jìn)程根據(jù)共享內(nèi)存地址信息建立與系統(tǒng)服務(wù) 的連接,并保存用戶進(jìn)程與系統(tǒng)服務(wù)之間建立連接時所用的連接信息,后續(xù),用戶進(jìn)程和系 統(tǒng)服務(wù)即可通過操作該共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間來實現(xiàn)通信。
[0114] 圖5示出了本發(fā)明又一實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法的實 現(xiàn)流程,該方法可以應(yīng)用于多核平臺,其中,該多核平臺包括至少一個第一物理核以及至少 一個第二物理核,第一物理核上運(yùn)行有第一內(nèi)核,第一內(nèi)核上運(yùn)行有第一代理模塊以及一 個或多個用戶進(jìn)程,第二物理核上運(yùn)行有第二內(nèi)核,第二內(nèi)核上運(yùn)行有第二代理模塊以及 系統(tǒng)服務(wù),且第一代理模塊上保存有系統(tǒng)服務(wù)與用戶進(jìn)程共享的共享內(nèi)存地址信息,其中, 第一代理模塊、用戶進(jìn)程、第二代理模塊以及系統(tǒng)服務(wù)均為用戶態(tài)程序。為了便于說明,僅 示出了與本實施例相關(guān)的部分,詳述如下:
[0115] 步驟S501、判斷用戶進(jìn)程和系統(tǒng)服務(wù)之間是否已經(jīng)建立連接,如果否,則依次執(zhí)行 步驟S502至S507,如果是,則依次執(zhí)行步驟S508至S510。
[0116] 步驟S502、用戶進(jìn)程通過第一內(nèi)核向第一代理模塊發(fā)送第一請求,第一請求中攜 帶有用戶進(jìn)程需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù)。
[0117] 步驟S503、第一代理模塊接收到第一請求后,通過第一內(nèi)核將第一請求中攜帶的 第一數(shù)據(jù)寫入到與保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間。
[0118] 步驟S504、系統(tǒng)服務(wù)通過第二內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取第一數(shù)據(jù), 并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間。
[0119] 步驟S505、第一代理模塊通過第一內(nèi)核以輪詢的方式從第一內(nèi)存空間讀取處理后 的第一數(shù)據(jù),并通過第一內(nèi)核將處理后的第一數(shù)據(jù)發(fā)送給用戶進(jìn)程。
[0120] 步驟S506、第一代理模塊通過第一內(nèi)核將共享內(nèi)存地址信息發(fā)送給用戶進(jìn)程。
[0121] 步驟S507、用戶進(jìn)程根據(jù)共享內(nèi)存地址信息建立與系統(tǒng)服務(wù)的連接,并保存用戶 進(jìn)程與系統(tǒng)服務(wù)之間建立連接時所用的連接信息,該連接信息包括系統(tǒng)服務(wù)的服務(wù)標(biāo)識、 共享內(nèi)存地址信息。
[0122] 步驟S508、用戶進(jìn)程根據(jù)連接信息,寫入需要系統(tǒng)服務(wù)處理的第一數(shù)據(jù)到與連接 信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間。
[0123] 步驟S509、系統(tǒng)服務(wù)從第一內(nèi)存空間讀取第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第 一數(shù)據(jù),并將處理后的第一數(shù)據(jù)寫入到第一內(nèi)存空間。
[0124] 步驟S510、用戶進(jìn)程從第一內(nèi)存空間讀取處理后的第一數(shù)據(jù)。
[0125] 本實施例,在用戶進(jìn)程和系統(tǒng)服務(wù)之間進(jìn)行通信之前,先判斷兩者是否建立連接, 如果已經(jīng)建立連接,則根據(jù)用戶進(jìn)程與系統(tǒng)服務(wù)之間建立連接時所用的連接信息中保存的 共享內(nèi)存地址信息,操作該共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間來實現(xiàn)通信,一次通信 過程只需要2次核間通信,大大減少了上下文切換的開銷。
[0126] 圖8示出了本發(fā)明實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置的具體結(jié) 構(gòu)框圖,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分。所述裝置8包括多核平臺, 所述多核平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上運(yùn)行 有第一內(nèi)核,所述第一內(nèi)核上運(yùn)行有第一代理模塊81以及一個或多個用戶進(jìn)程82,所述第 二物理核上運(yùn)行有第二內(nèi)核,所述第二內(nèi)核上運(yùn)行有第二代理模塊83以及系統(tǒng)服務(wù)84,所 述第一代理模塊81上保存有所述系統(tǒng)服務(wù)84與所述用戶進(jìn)程82共享的共享內(nèi)存地址信 息,其中,所述第一代理模塊81、所述用戶進(jìn)程82、所述第二代理模塊83以及所述系統(tǒng)服務(wù) 84均為用戶態(tài)程序。所述用戶進(jìn)程82包括:
[0127] 第一請求發(fā)送單元821,用于通過第一內(nèi)核向所述第一代理模塊發(fā)送第一請求,所 述第一請求中攜帶有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù);
[0128] 所述第一代理模塊81包括:
[0129] 第一第一數(shù)據(jù)寫入單元811,用于接收到第一請求后,通過所述第一內(nèi)核將所述第 一請求中攜帶的所述第一數(shù)據(jù)寫入到與保存的所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空 間;
[0130] 所述系統(tǒng)服務(wù)84包括:
[0131] 第一第一數(shù)據(jù)處理單元841,用于通過所述第二內(nèi)核以輪詢的方式從所述第一內(nèi) 存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù) 據(jù)寫入到所述第一內(nèi)存空間;
[0132] 所述第一代理模塊81還包括:
[0133] 第一第一數(shù)據(jù)讀取單元812,用于通過所述第一內(nèi)核以輪詢的方式從所述第一內(nèi) 存空間讀取所述處理后的第一數(shù)據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給 所述用戶進(jìn)程。
[0134] 進(jìn)一步地,所述第一代理模塊81還包括:
[0135] 共享內(nèi)存地址信息發(fā)送單元,用于通過所述第一內(nèi)核將所述共享內(nèi)存地址信息發(fā) 送給所述用戶進(jìn)程;
[0136] 所述用戶進(jìn)程82還包括:
[0137] 連接建立單元,用于根據(jù)所述共享內(nèi)存地址信息建立與所述系統(tǒng)服務(wù)的連接,并 保存所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連接信息,所述連接信息包括所 述系統(tǒng)服務(wù)的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息。
[0138] 進(jìn)一步地,所述用戶進(jìn)程82還包括:
[0139] 連接判斷單元,用于判斷和所述系統(tǒng)服務(wù)之間是否已經(jīng)建立連接,如果否,則先建 立和所述系統(tǒng)服務(wù)之間的連接,并保存兩者之間建立連接時所使用的連接信息;
[0140] 第二第一數(shù)據(jù)寫入單元,用于如果是,則根據(jù)所述連接信息,寫入需要所述系統(tǒng)服 務(wù)處理的第一數(shù)據(jù)到與所述連接信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;
[0141] 所述系統(tǒng)服務(wù)84還包括:
[0142] 第二第一數(shù)據(jù)處理單元,用于從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處 理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間;
[0143] 所述用戶進(jìn)程82還包括:
[0144] 第二第一數(shù)據(jù)讀取單元,用于從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)。
[0145] 進(jìn)一步地,所述系統(tǒng)服務(wù)84還包括:
[0146] 共享內(nèi)存申請單元842,用于通過所述第二內(nèi)核向操作系統(tǒng)申請共享內(nèi)存;
[0147] 地址信息通知單元843,用于通過所述第二內(nèi)核向所述第二代理模塊通知所述系 統(tǒng)服務(wù)申請到的共享內(nèi)存地址信息;
[0148] 所述第二代理模塊83包括:
[0149] 地址信息廣播單元831,用于向所述第一代理模塊廣播所述共享內(nèi)存地址信息;
[0150] 所述第一代理模塊81包括:
[0151] 地址信息保存單元813,用于保存所述共享內(nèi)存地址信息。
[0152] 進(jìn)一步地,所述系統(tǒng)服務(wù)83還包括:
[0153] 第一映射單元,用于將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述系 統(tǒng)服務(wù)的虛擬地址空間;
[0154] 所述第一代理模塊81還包括:
[0155] 第二映射模塊,用于將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第 一代理模塊的虛擬地址空間;
[0156] 所述用戶進(jìn)程82的連接建立單元包括:
[0157] 第三映射模塊,用于將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述用 戶進(jìn)程的虛擬地址空間。
[0158] 本發(fā)明實施例提供的裝置可以應(yīng)用在前述對應(yīng)的方法實施例中,詳情參見上述方 法實施例的描述,在此不再贅述。
[0159] 圖9示出了本發(fā)明實施例提供的用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置的具體結(jié) 構(gòu)框圖,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分。所述裝置9包括多核平臺, 所述多核平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上運(yùn)行 有第一內(nèi)核91,所述第一內(nèi)核91上運(yùn)行有第一代理模塊以及一個或多個用戶進(jìn)程,所述第 二物理核上運(yùn)行有第二內(nèi)核92,所述第二內(nèi)核92上運(yùn)行有第二代理模塊以及系統(tǒng)服務(wù),所 述第一代理模塊上保存有所述系統(tǒng)服務(wù)所述用戶進(jìn)程共享的共享內(nèi)存地址信息,其中,第 一代理模塊、用戶進(jìn)程、第二代理模塊以及系統(tǒng)服務(wù)均為用戶態(tài)程序,存儲于存儲器93中。
[0160] 其中,第一內(nèi)核91,用于讀取存儲器93中存儲的第一代理模塊,并向所述第一代 理模塊發(fā)送第一請求,所述第一請求中攜帶有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一 數(shù)據(jù);
[0161] 所述第一內(nèi)核91還用于,將所述第一請求中攜帶的所述第一數(shù)據(jù)寫入到與保存 的所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間;
[0162] 第二內(nèi)核92,用于以輪詢的方式從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行 處理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間;
[0163] 第一內(nèi)核91還用于,以輪詢的方式從所述第一內(nèi)存空間讀取所述處理后的第一 數(shù)據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程。
[0164] 進(jìn)一步地,第一內(nèi)核91還用于,將所述共享內(nèi)存地址信息發(fā)送給所述用戶進(jìn)程, 由所述用戶進(jìn)程執(zhí)行根據(jù)所述共享內(nèi)存地址信息建立與所述系統(tǒng)服務(wù)的連接,并保存所述 用戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連接信息,所述連接信息包括所述系統(tǒng)服 務(wù)的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息的方法。
[0165] 進(jìn)一步地,第一內(nèi)核91還用于,判斷所述用戶進(jìn)程和所述系統(tǒng)服務(wù)之間是否已經(jīng) 建立連接,如果否,則先建立和所述系統(tǒng)服務(wù)之間的連接,并保存兩者之間建立連接時所使 用的連接信息,如果是,則讀取存儲器中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行根據(jù)所 述連接信息,寫入需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù)到與所述連接信息中保存的共享內(nèi)存 地址信息對應(yīng)的第一內(nèi)存空間的方法;
[0166] 第二內(nèi)核92還用于,讀取存儲器93中存儲的所述系統(tǒng)服務(wù),由所述系統(tǒng)服務(wù)執(zhí)行 從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處 理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間的方法;
[0167] 第一內(nèi)核91還用于,讀取存儲器93中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行 從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)的方法。
[0168] 進(jìn)一步地,第二內(nèi)核92還用于,先向操作系統(tǒng)申請共享內(nèi)存,再向所述第二代理 模塊通知所述系統(tǒng)服務(wù)申請到的共享內(nèi)存地址信息由所述第二代理模塊執(zhí)行向所述第一 代理模塊廣播所述共享內(nèi)存地址信息的方法;
[0169] 第一內(nèi)核91還用于,讀取存儲器93中存儲的所述第一代理模塊,由所述第一代理 模塊執(zhí)行保存所述共享內(nèi)存地址信息的方法。
[0170] 進(jìn)一步地,第二內(nèi)核92還用于,讀取存儲器93中存儲的系統(tǒng)服務(wù),由所述系統(tǒng)服 務(wù)執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述系統(tǒng)服務(wù)的虛擬地址空 間的方法;
[0171] 第一內(nèi)核91還用于,讀取存儲器93中存儲的所述第一代理模塊,由所述第一代理 模塊執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第一代理模塊的虛擬 地址空間;
[0172] 第一內(nèi)核91還用于,讀取存儲器93中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行 將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述用戶進(jìn)程的虛擬地址空間的方 法。
[0173] 本發(fā)明實施例提供的裝置可以應(yīng)用在前述對應(yīng)的方法實施例中,詳情參見上述方 法實施例的描述,在此不再贅述。
[0174] 值得注意的是,上述裝置實施例中,所包括的各個單元只是按照功能邏輯進(jìn)行劃 分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體 名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。
[0175] 另外,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述各實施例方法中的全部或部分步驟 是可以通過程序來指令相關(guān)的硬件來完成,相應(yīng)的程序可以存儲于一計算機(jī)可讀取存儲介 質(zhì)中,所述的存儲介質(zhì),如R0M/RAM、磁盤或光盤等。
[0176] 以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1. 一種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信方法,其特征在于,應(yīng)用于多核平臺,所述多核 平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上運(yùn)行有第一內(nèi) 核,所述第一內(nèi)核上運(yùn)行有第一代理模塊以及一個或多個用戶進(jìn)程,所述第二物理核上運(yùn) 行有第二內(nèi)核,所述第二內(nèi)核上運(yùn)行有第二代理模塊以及系統(tǒng)服務(wù),所述第一代理模塊上 保存有所述系統(tǒng)服務(wù)與所述用戶進(jìn)程共享的共享內(nèi)存地址信息,所述方法包括: 所述用戶進(jìn)程通過第一內(nèi)核向所述第一代理模塊發(fā)送第一請求,所述第一請求中攜帶 有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù); 所述第一代理模塊接收到第一請求后,通過所述第一內(nèi)核將所述第一請求中攜帶的所 述第一數(shù)據(jù)寫入到與保存的所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間; 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核以輪詢的方式從所述第一內(nèi)存空間讀取所述第一數(shù) 據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存 空間; 所述第一代理模塊通過所述第一內(nèi)核以輪詢的方式從所述第一內(nèi)存空間讀取所述處 理后的第一數(shù)據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程。
2. 如權(quán)利要求1所述的方法,其特征在于,在所述第一代理模塊通過所述第一內(nèi)核以 輪詢的方式從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù),并通過所述第一內(nèi)核將所述 處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程之后,還包括: 所述第一代理模塊通過所述第一內(nèi)核將所述共享內(nèi)存地址信息發(fā)送給所述用戶進(jìn) 程; 所述用戶進(jìn)程根據(jù)所述共享內(nèi)存地址信息建立與所述系統(tǒng)服務(wù)的連接,并保存所述用 戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連接信息,所述連接信息包括所述系統(tǒng)服務(wù) 的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息。
3. 如權(quán)利要求2所述的方法,其特征在于,在所述用戶進(jìn)程通過第一內(nèi)核向所述第一 代理模塊發(fā)送第一請求之前,還包括: 判斷所述用戶進(jìn)程和所述系統(tǒng)服務(wù)之間是否已經(jīng)建立連接; 如果否,則執(zhí)行所述用戶進(jìn)程通過第一內(nèi)核向所述第一代理模塊發(fā)送第一請求以及該 步驟之后的后續(xù)步驟,實現(xiàn)所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間的通信,并建立兩者之間的 連接; 如果是,則所述用戶進(jìn)程根據(jù)所述連接信息,寫入需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù) 到與所述連接信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間; 所述系統(tǒng)服務(wù)從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第 一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間; 所述用戶進(jìn)程從所述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)。
4. 如權(quán)利要求2所述的方法,其特征在于,所述第一代理模塊上保存有所述系統(tǒng)服務(wù) 與所述用戶進(jìn)程共享的共享內(nèi)存地址信息包括: 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核向操作系統(tǒng)申請共享內(nèi)存; 所述系統(tǒng)服務(wù)通過所述第二內(nèi)核向所述第二代理模塊通知所述系統(tǒng)服務(wù)申請到的共 享內(nèi)存地址信息; 所述第二代理模塊向所述第一代理模塊廣播所述共享內(nèi)存地址信息; 所述第一代理模塊保存所述共享內(nèi)存地址信息。
5. 如權(quán)利要求2所述的方法,其特征在于,所述用戶進(jìn)程根據(jù)所述共享內(nèi)存地址信息 建立與所述系統(tǒng)服務(wù)的連接包括: 所述系統(tǒng)服務(wù)將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述系統(tǒng)服務(wù)的 虛擬地址空間; 所述第一代理模塊將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第一代 理模塊的虛擬地址空間; 所述用戶進(jìn)程將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述用戶進(jìn)程的 虛擬地址空間。
6. 如權(quán)利要求1所述的方法,其特征在于,所述第一代理模塊、所述用戶進(jìn)程、所述第 二代理模塊以及所述系統(tǒng)服務(wù)均為用戶態(tài)程序。
7. -種用戶進(jìn)程與系統(tǒng)服務(wù)之間的通信裝置,其特征在于,所述裝置包括多核平臺,所 述多核平臺包括至少一個第一物理核以及至少一個第二物理核,所述第一物理核上運(yùn)行有 第一內(nèi)核,所述第一內(nèi)核上運(yùn)行有第一代理模塊以及一個或多個用戶進(jìn)程,所述第二物理 核上運(yùn)行有第二內(nèi)核,所述第二內(nèi)核上運(yùn)行有第二代理模塊以及系統(tǒng)服務(wù),所述第一代理 模塊上保存有所述系統(tǒng)服務(wù)與所述用戶進(jìn)程共享的共享內(nèi)存地址信息,所述裝置還包括存 儲器,所述用戶進(jìn)程、所述第一代理模塊、所述第二代理模塊和所述系統(tǒng)服務(wù)均存儲于所述 存儲器中: 所述第一內(nèi)核,用于讀取存儲器中存儲的所述第一代理模塊,并向所述第一代理模塊 發(fā)送第一請求,所述第一請求中攜帶有所述用戶進(jìn)程需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù); 所述第一內(nèi)核還用于,將所述第一請求中攜帶的所述第一數(shù)據(jù)寫入到與保存的所述共 享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間; 所述第二內(nèi)核,用于以輪詢的方式從所述第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處 理,得到處理后的第一數(shù)據(jù),并將所述處理后的第一數(shù)據(jù)寫入到所述第一內(nèi)存空間; 所述第一內(nèi)核還用于,以輪詢的方式從所述第一內(nèi)存空間讀取所述處理后的第一數(shù) 據(jù),并通過所述第一內(nèi)核將所述處理后的第一數(shù)據(jù)發(fā)送給所述用戶進(jìn)程。
8. 如權(quán)利要求7所述的裝置,其特征在于,所述所述第一內(nèi)核還用于,將所述共享內(nèi) 存地址信息發(fā)送給所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行根據(jù)所述共享內(nèi)存地址信息建立與 所述系統(tǒng)服務(wù)的連接,并保存所述用戶進(jìn)程與所述系統(tǒng)服務(wù)之間建立連接時所用的連接信 息,所述連接信息包括所述系統(tǒng)服務(wù)的服務(wù)標(biāo)識、所述共享內(nèi)存地址信息的方法。
9. 如權(quán)利要求8所述的裝置,其特征在于,所述第一內(nèi)核還用于,判斷所述用戶進(jìn)程和 所述系統(tǒng)服務(wù)之間是否已經(jīng)建立連接,如果否,則先建立和所述系統(tǒng)服務(wù)之間的連接,并保 存兩者之間建立連接時所使用的連接信息,如果是,則讀取存儲器中存儲的所述用戶進(jìn)程, 由所述用戶進(jìn)程執(zhí)行根據(jù)所述連接信息,寫入需要所述系統(tǒng)服務(wù)處理的第一數(shù)據(jù)到與所述 連接信息中保存的共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間的方法; 所述第二內(nèi)核還用于讀取存儲器中存儲的所述系統(tǒng)服務(wù),由所述系統(tǒng)服務(wù)執(zhí)行從所述 第一內(nèi)存空間讀取所述第一數(shù)據(jù),并進(jìn)行處理,得到處理后的第一數(shù)據(jù),并將所述處理后的 第一數(shù)據(jù)寫入到所述第一內(nèi)存空間的方法; 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行從所 述第一內(nèi)存空間讀取所述處理后的第一數(shù)據(jù)的方法。
10. 如權(quán)利要求8所述的裝置,其特征在于,所述第二內(nèi)核還用于,先向操作系統(tǒng)申請 共享內(nèi)存,再向所述第二代理模塊通知所述系統(tǒng)服務(wù)申請到的共享內(nèi)存地址信息由所述第 二代理模塊執(zhí)行向所述第一代理模塊廣播所述共享內(nèi)存地址信息的方法; 所述第一內(nèi)核還用于讀取存儲器中存儲的所述第一代理模塊,由所述第一代理模塊執(zhí) 行保存所述共享內(nèi)存地址信息的方法。
11. 如權(quán)利要求8所述的裝置,其特征在于,所述第二內(nèi)核還用于,讀取存儲器中存儲 的系統(tǒng)服務(wù),由所述系統(tǒng)服務(wù)執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所 述系統(tǒng)服務(wù)的虛擬地址空間的方法; 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述第一代理模塊,由所述第一代理模塊 執(zhí)行將所述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述第一代理模塊的虛擬地址 空間; 所述第一內(nèi)核還用于,讀取存儲器中存儲的所述用戶進(jìn)程,由所述用戶進(jìn)程執(zhí)行將所 述共享內(nèi)存地址信息對應(yīng)的第一內(nèi)存空間映射至所述用戶進(jìn)程的虛擬地址空間的方法。
12. 如權(quán)利要求7所述的裝置,其特征在于,所述第一代理模塊、所述用戶進(jìn)程、所述第 二代理模塊以及所述系統(tǒng)服務(wù)均為用戶態(tài)程序。
【文檔編號】G06F9/54GK104216862SQ201310207082
【公開日】2014年12月17日 申請日期:2013年5月29日 優(yōu)先權(quán)日:2013年5月29日
【發(fā)明者】詹卿, 王偉 申請人:華為技術(shù)有限公司