專(zhuān)利名稱(chēng):對(duì)共享內(nèi)存進(jìn)行控制的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及對(duì)網(wǎng)卡上的數(shù)據(jù)進(jìn)行處理的技術(shù),特別的本發(fā)明涉及網(wǎng)卡、計(jì)算機(jī)設(shè)備、對(duì)網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法及對(duì)網(wǎng)卡進(jìn)行調(diào)度的方法。
背景技術(shù):
分布式應(yīng)用程序是指應(yīng)用程序分布在不同計(jì)算機(jī)節(jié)點(diǎn)上,通過(guò)網(wǎng)絡(luò)來(lái)共同完成一項(xiàng)任務(wù)(Task)。所述任務(wù)可能被分割成多個(gè)進(jìn)程(Process),不同的進(jìn)程可能分布于不同的計(jì)算機(jī)節(jié)點(diǎn)上。多個(gè)進(jìn)程之間經(jīng)常需要相互調(diào)用,或?qū)ο嗤瑪?shù)據(jù)執(zhí)行多次讀寫(xiě)操作。分布在不同節(jié)點(diǎn)的分布式應(yīng)用程序的進(jìn)程通常使用TCP/IP協(xié)議進(jìn)行網(wǎng)絡(luò)通信。TCP/IP是一種通用通信協(xié)議,用以在傳輸層/網(wǎng)絡(luò)層上支持幾乎各種應(yīng)用程序的通信。當(dāng)然TCP/IP協(xié)議并沒(méi)有為分布式應(yīng)用程序定制專(zhuān)門(mén)的協(xié)議架構(gòu)。傳統(tǒng)的計(jì)算機(jī)節(jié)點(diǎn)體系結(jié)構(gòu),為每個(gè)計(jì)算機(jī)節(jié)點(diǎn)上的分布式應(yīng)用程序分配獨(dú)立的程序緩沖區(qū)。每個(gè)分布式程序的進(jìn)程獨(dú)立的對(duì)所述程序緩沖區(qū)進(jìn)行操作,并且通過(guò)TCP/IP網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的傳輸。按照傳統(tǒng)的體系結(jié)構(gòu),數(shù)據(jù)在經(jīng)網(wǎng)絡(luò)傳輸前需要經(jīng)過(guò)多層的封裝過(guò)程,并且在經(jīng)網(wǎng)絡(luò)傳輸后也需要多層的解封裝過(guò)程。上述封裝與解封裝的過(guò)程導(dǎo)致在整個(gè)數(shù)據(jù)傳輸過(guò)程中多次出現(xiàn)延遲,并且造成了很多不必要的系統(tǒng)開(kāi)銷(xiāo)。圖I示出了現(xiàn)有技術(shù)中在兩個(gè)計(jì)算機(jī)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的系統(tǒng)示意圖。具體而言在圖I所示的例子中,計(jì)算機(jī)節(jié)點(diǎn)A請(qǐng)求向計(jì)算機(jī)節(jié)點(diǎn)B讀取一段數(shù)據(jù)。計(jì)算機(jī)節(jié)點(diǎn)A的體系結(jié)構(gòu)中包括應(yīng)用程序進(jìn)程(ProcessM、語(yǔ)言運(yùn)行庫(kù)(Runtime)A,網(wǎng)絡(luò)協(xié)議堆棧(Network Stack) A、設(shè)備驅(qū)動(dòng)模塊(Device Driver) A、網(wǎng)卡(NIC) A 和程序緩沖區(qū)(ProgramBuffer)A,所述程序緩沖區(qū)通常駐留于計(jì)算機(jī)節(jié)點(diǎn)的物理內(nèi)存(Physical Memory)中。計(jì)算機(jī)節(jié)點(diǎn)A中還可以包括圖I中未示出的其它裝置,比如CPU。計(jì)算機(jī)節(jié)點(diǎn)B的體系結(jié)構(gòu)與計(jì)算機(jī)節(jié)點(diǎn)A的體系結(jié)構(gòu)一致。在步驟SI中,應(yīng)用程序進(jìn)程A通過(guò)專(zhuān)用編程接口向語(yǔ)言運(yùn)行庫(kù)A發(fā)出讀數(shù)據(jù)請(qǐng)求;在步驟S2中,語(yǔ)言運(yùn)行庫(kù)A將所述讀數(shù)據(jù)請(qǐng)求轉(zhuǎn)換成網(wǎng)絡(luò)數(shù)據(jù)發(fā)送請(qǐng)求,并交給網(wǎng)絡(luò)協(xié)議堆棧A處理;在步驟S3中,網(wǎng)絡(luò)協(xié)議堆棧A對(duì)數(shù)據(jù)進(jìn)行TCP/IP封裝后,調(diào)用設(shè)備驅(qū)動(dòng)模A以啟動(dòng)網(wǎng)卡A的直接存儲(chǔ)器存取(DMA)操作;在步驟S4中,網(wǎng)卡A通過(guò)DMA操作將程序緩沖區(qū)A的地址復(fù)制到網(wǎng)卡A上的網(wǎng)卡內(nèi)存(Memory,圖中未示出)內(nèi);在步驟S5中,網(wǎng)卡A將其網(wǎng)卡內(nèi)存中的內(nèi)容發(fā)送到另一計(jì)算機(jī)節(jié)點(diǎn)B的網(wǎng)卡B ;在步驟S6中,網(wǎng)卡B收到來(lái)自網(wǎng)卡A的數(shù)據(jù)請(qǐng)求包之后形成中斷信號(hào),并通知設(shè)備驅(qū)動(dòng)模塊B ;在步驟S7中,設(shè)備驅(qū)動(dòng)模塊B將數(shù)據(jù)請(qǐng)求包從網(wǎng)卡B的網(wǎng)卡內(nèi)存復(fù)制到程序緩沖區(qū)B中;在步驟S8中,設(shè)備驅(qū)動(dòng)模塊B將數(shù)據(jù)請(qǐng)求包到來(lái)事件通知給網(wǎng)絡(luò)協(xié)議堆棧B,并請(qǐng)求網(wǎng)絡(luò)協(xié)議堆棧B對(duì)到來(lái)的數(shù)據(jù)請(qǐng)求包進(jìn)行分析;在步驟S9中,網(wǎng)絡(luò)協(xié)議堆棧B通過(guò)解析數(shù)據(jù)請(qǐng)求包獲知其中的內(nèi)容是讀數(shù)據(jù)請(qǐng)求,并通過(guò)語(yǔ)言運(yùn)行庫(kù)B通知應(yīng)用程序進(jìn)程B ;在步驟SlO中,應(yīng)用程序進(jìn)程B讀取計(jì)算機(jī)節(jié)點(diǎn)A所需要的數(shù)據(jù),并構(gòu)造網(wǎng)絡(luò)應(yīng)答通知,之后再調(diào)用語(yǔ)言運(yùn)行庫(kù)B以請(qǐng)求傳輸所述數(shù)據(jù);在步驟Sll中,語(yǔ)言運(yùn)行庫(kù)B將所述網(wǎng)絡(luò)應(yīng)答通知交給網(wǎng)絡(luò)協(xié)議堆棧B以形成網(wǎng)絡(luò)、信息發(fā)送請(qǐng)求;在步驟S12中,網(wǎng)絡(luò)協(xié)議堆棧B對(duì)數(shù)據(jù)進(jìn)行TCP/IP協(xié)議封裝后,調(diào)用設(shè)備驅(qū)動(dòng)模塊B并指明需要傳輸?shù)臄?shù)據(jù)所在的程序緩沖區(qū)B的地址以啟動(dòng)網(wǎng)卡B進(jìn)行DMA操作;在步驟S13中,網(wǎng)卡B通過(guò)DMA操作將數(shù)據(jù)從程序緩沖區(qū)B中復(fù)制到網(wǎng)卡B上的網(wǎng)卡內(nèi)存;在步驟S14中,網(wǎng)卡B將數(shù)據(jù)發(fā)送到計(jì)算機(jī)節(jié)點(diǎn)A的網(wǎng)卡A ;在步驟S15中,網(wǎng)卡A從網(wǎng)絡(luò)收到數(shù)據(jù)后,形成中斷信號(hào),并通知設(shè)備驅(qū)動(dòng)模塊A ;在步驟S16中,設(shè)備驅(qū)動(dòng)模塊A將數(shù)據(jù)從網(wǎng)卡A的網(wǎng)卡內(nèi)存復(fù)制到網(wǎng)絡(luò)協(xié)議堆棧A中;在步驟S17中,設(shè)備驅(qū)動(dòng)模塊A將數(shù)據(jù)到來(lái)事件通知給網(wǎng)絡(luò)協(xié)議堆棧A以請(qǐng)求網(wǎng)絡(luò)協(xié)議堆棧A對(duì)到來(lái)的數(shù)據(jù)進(jìn)行解析;在步驟S18中,網(wǎng)絡(luò)協(xié)議堆棧A通過(guò)解析數(shù)據(jù)包獲知其內(nèi)容為讀數(shù)據(jù)請(qǐng)求的應(yīng)答信息,并通過(guò)語(yǔ)言運(yùn)行庫(kù)A通知應(yīng)用程序進(jìn)程A,從而使得應(yīng)用程序進(jìn)程A最終獲得結(jié)果。
發(fā)明內(nèi)容
本發(fā)明的發(fā)明人發(fā)現(xiàn),在上述數(shù)據(jù)讀取過(guò)程中,步驟S8、S9、S17、S18會(huì)產(chǎn)生較明 顯的延遲。其中在步驟S8和S17中會(huì)產(chǎn)生操作系統(tǒng)的調(diào)度延遲,只有操作系統(tǒng)調(diào)度目標(biāo)應(yīng)用程序運(yùn)行時(shí),才能完成數(shù)據(jù)接收,這一延遲很難估計(jì),一般介于I 1000毫秒之間。而在步驟S9和S18中則會(huì)產(chǎn)生語(yǔ)言運(yùn)行庫(kù)的調(diào)度延遲,這一延遲在最壞情況可能長(zhǎng)達(dá)數(shù)秒。除了時(shí)間上的延遲以外,整個(gè)數(shù)據(jù)讀取過(guò)程還會(huì)造成大量的網(wǎng)絡(luò)數(shù)據(jù)包包頭/包尾開(kāi)銷(xiāo)(overhead)。因?yàn)樵谡麄€(gè)數(shù)據(jù)的讀取過(guò)程中,網(wǎng)絡(luò)協(xié)議堆棧都將負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行TCP/IP封裝和解封裝。圖2A示出了現(xiàn)有技術(shù)中網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)幀的封裝結(jié)構(gòu)示意圖。在圖2A的示意圖中可以看出數(shù)據(jù)在網(wǎng)絡(luò)上傳輸經(jīng)過(guò)了 TCP、IP、物理層三層封裝過(guò)程。TCP包的包頭與包尾共20字節(jié),IP包的包頭與包尾共20字節(jié),物理層的包頭和包尾共26字節(jié)。因此,經(jīng)過(guò)網(wǎng)絡(luò)協(xié)議堆棧處理后,在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包如果原來(lái)的數(shù)據(jù)只有I個(gè)字節(jié),最終形成的網(wǎng)絡(luò)層數(shù)據(jù)幀包含67(20+20+26+1)字節(jié)。對(duì)于分布式應(yīng)用程序而言,需要頻繁在幾個(gè)特定的計(jì)算機(jī)節(jié)點(diǎn)上進(jìn)行共享數(shù)據(jù)的傳輸和同步,從而需要頻繁地在多個(gè)計(jì)算節(jié)點(diǎn)之間進(jìn)行通信,在每個(gè)計(jì)算節(jié)點(diǎn)上完成程序緩沖區(qū)和網(wǎng)卡內(nèi)存進(jìn)行傳遞。顯然,對(duì)于分布式應(yīng)用程序任務(wù)而言,其主要目的是使得各個(gè)計(jì)算節(jié)點(diǎn)上應(yīng)用程序進(jìn)程之間獲得一致的數(shù)據(jù)視圖,保證數(shù)據(jù)更新的一致性。TCP/IP協(xié)議堆棧的處理不僅是不必要的,還帶來(lái)了額外的處理和存儲(chǔ)開(kāi)銷(xiāo)。針對(duì)分布式應(yīng)用程序的上述特點(diǎn),本發(fā)明提出了一種在網(wǎng)卡上應(yīng)用共享內(nèi)存的技術(shù)方案。具體而言,本發(fā)明提供了一種網(wǎng)卡,包括共享內(nèi)存,被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)訪問(wèn),以及微控制器,被配置為對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作的控制。此外,本發(fā)明還提供了一種計(jì)算機(jī)設(shè)備,包括上述網(wǎng)卡,以及設(shè)備驅(qū)動(dòng)模塊,被配置為為所述網(wǎng)卡上的共享內(nèi)存進(jìn)行物理層的封裝。此外,本發(fā)明還提供了一種對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法,其中所述共享內(nèi)存被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)上所訪問(wèn),所述方法包括判斷本地網(wǎng)卡上是否配置有支持所述讀寫(xiě)操作的共享內(nèi)存,以及在本地網(wǎng)卡上配置有支持所述讀寫(xiě)操作的共享內(nèi)存的情況下,對(duì)本地網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作。此外,本發(fā)明還提供了一種對(duì)網(wǎng)卡進(jìn)行調(diào)用的方法,所述方法包括提供所述分布式應(yīng)用程序的程序緩沖區(qū),通過(guò)語(yǔ)言運(yùn)行庫(kù)上的專(zhuān)用接口調(diào)用語(yǔ)言運(yùn)行庫(kù),調(diào)用設(shè)備驅(qū)動(dòng)模塊以進(jìn)行物理層的封裝,以及通過(guò)所述網(wǎng)卡上的專(zhuān)用接口對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制,其中所述共享內(nèi)存被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)上所訪問(wèn)。采用本發(fā)明所提供的技術(shù)方案,繞過(guò)了網(wǎng)絡(luò)協(xié)議堆棧的處理過(guò)程,而直接由語(yǔ)言運(yùn)行庫(kù)對(duì)設(shè)備驅(qū)動(dòng)模塊進(jìn)行調(diào)用,因此可以避免圖I中步驟S8、S9、S17、S18所帶來(lái)的時(shí)間延遲。此外本發(fā)明中由于繞過(guò)了網(wǎng)絡(luò)協(xié)議堆棧的處理過(guò)程,也無(wú)需對(duì)數(shù)據(jù)包進(jìn)行TCP/IP封裝,而僅需要進(jìn)行物理層封裝,以便數(shù)據(jù)包可以按照現(xiàn)有的物理層傳輸模式進(jìn)行傳輸。大大節(jié)省了 TCP/IP層數(shù)據(jù)封裝所帶來(lái)的額外包頭包尾開(kāi)銷(xiāo)。
本說(shuō)明中所參考的附圖只用于示例本發(fā)明的典型實(shí)施例,不應(yīng)該認(rèn)為是對(duì)本發(fā)明范圍的限制。 圖I示出了現(xiàn)有技術(shù)中在兩個(gè)計(jì)算機(jī)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的系統(tǒng)示意圖。圖2A示出了現(xiàn)有技術(shù)中網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)幀的封裝結(jié)構(gòu)示意圖。圖2B示出了按照本發(fā)明的一個(gè)實(shí)施例在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)幀的封裝結(jié)構(gòu)示意圖。圖3示出了現(xiàn)有技術(shù)中網(wǎng)卡內(nèi)部結(jié)構(gòu)示意圖。圖4A示出了按照本發(fā)明的一個(gè)實(shí)施例的網(wǎng)卡結(jié)構(gòu)示意圖。圖4B示出了按照本發(fā)明的另一個(gè)實(shí)施例的網(wǎng)卡結(jié)構(gòu)示意圖。圖5A示出了按照本發(fā)明的一種實(shí)施例的命令端口的字段結(jié)構(gòu)示意圖。圖5B示出了按照本發(fā)明的一種實(shí)施例的命令端口的寫(xiě)操作實(shí)例結(jié)構(gòu)示意圖。圖5C示出的按照本發(fā)明的又一個(gè)實(shí)施例的命令端口的分配操作實(shí)例結(jié)構(gòu)示意圖。圖6示出了按照本發(fā)明的一種實(shí)施例的共享內(nèi)存中分配表的結(jié)構(gòu)示意圖。圖7A示出了按照RFC894以太網(wǎng)網(wǎng)絡(luò)傳輸標(biāo)準(zhǔn)傳輸?shù)奈锢韺訑?shù)據(jù)幀示意圖。圖7B示出了按照RFC1042以太網(wǎng)網(wǎng)絡(luò)傳輸標(biāo)準(zhǔn)傳輸?shù)奈锢韺訑?shù)據(jù)幀示意圖。圖8示出了按照本發(fā)明的一個(gè)實(shí)施例的在兩個(gè)計(jì)算機(jī)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的系統(tǒng)示意圖。圖9示出了按照本發(fā)明的另一個(gè)實(shí)施例的在兩個(gè)計(jì)算機(jī)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的系統(tǒng)不意圖。圖10示出了對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法流程圖。圖11示出了按照本發(fā)明的一個(gè)實(shí)施例判斷本地是否配置有支持讀寫(xiě)操作的共享內(nèi)存的方法流程圖。圖12示出了按照本發(fā)明的一個(gè)實(shí)施例對(duì)網(wǎng)卡進(jìn)行調(diào)用的方法流程圖。
具體實(shí)施例方式下列討論中,提供大量具體的細(xì)節(jié)以幫助徹底了解本發(fā)明。然而,很顯然對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),即使沒(méi)有這些具體細(xì)節(jié),并不影響對(duì)本發(fā)明的理解。并且應(yīng)該認(rèn)識(shí)到,使用如下的任何具體術(shù)語(yǔ)僅僅是為了方便描述,因此,本發(fā)明不應(yīng)當(dāng)局限于只用在這樣的術(shù)語(yǔ)所表示和/或暗示的任何特定 應(yīng)用中。圖3示出了現(xiàn)有技術(shù)中網(wǎng)卡內(nèi)部結(jié)構(gòu)示意圖。現(xiàn)有技術(shù)中的網(wǎng)卡包括控制器(Control Logic)、網(wǎng)卡內(nèi)存(NIC Memory), DMA 接口(DMAInterface)以及介質(zhì)訪問(wèn)單兀(Medium Access Unit)。其中控制器可以被配置為可編程芯片(programmable chip)以控制DMA操作,從而實(shí)現(xiàn)對(duì)網(wǎng)卡內(nèi)存的數(shù)據(jù)讀寫(xiě)。DMA接口對(duì)外與計(jì)算機(jī)節(jié)點(diǎn)的總線連接以執(zhí)行DMA操作。介質(zhì)訪問(wèn)單元負(fù)責(zé)從網(wǎng)絡(luò)接收數(shù)據(jù)幀,及向網(wǎng)絡(luò)發(fā)送網(wǎng)卡內(nèi)存中的數(shù)據(jù)幀。網(wǎng)卡內(nèi)存是數(shù)據(jù)幀的臨時(shí)存儲(chǔ)單元。圖4A示出了按照本發(fā)明的一個(gè)實(shí)施例的網(wǎng)卡結(jié)構(gòu)示意圖。圖4A的網(wǎng)卡在保持現(xiàn)有的網(wǎng)卡結(jié)構(gòu)不變的基礎(chǔ)上增加了共享內(nèi)存(Shared Memory)和微控制器(MicroController)。其中所述共享內(nèi)存被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)訪問(wèn)。所述微控制器被配置為對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作的控制。進(jìn)一步所述微控制器被配置為判斷所述共享內(nèi)存是否支持所接收到的讀寫(xiě)請(qǐng)求,在判斷所述共享內(nèi)存支持所接收到的讀寫(xiě)請(qǐng)求的情況下,對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作。所述微控制器可以?xún)H由簡(jiǎn)單的現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)實(shí)現(xiàn),而不一定設(shè)計(jì)成一種復(fù)雜的通用處理器。網(wǎng)卡的原有控制器通過(guò)特定端口與上層的設(shè)備驅(qū)動(dòng)模塊通信,相似的,微控制器也可以通過(guò)特定端口與上層的設(shè)備驅(qū)動(dòng)模塊通信。通常情況下與控制器通信的設(shè)備驅(qū)動(dòng)模塊和與微控制器通信的設(shè)備驅(qū)動(dòng)模塊為不同的設(shè)備驅(qū)動(dòng)模塊。按照本發(fā)明的一個(gè)實(shí)施例,網(wǎng)卡內(nèi)存可以被配置為緩沖所述共享內(nèi)存所讀寫(xiě)的數(shù)據(jù)。按照本發(fā)明的另一個(gè)實(shí)施例所述共享內(nèi)存直接與所述本機(jī)物理內(nèi)存中的程序緩沖區(qū)進(jìn)行讀寫(xiě)操作而無(wú)需網(wǎng)卡內(nèi)存進(jìn)行緩沖。具體的緩沖過(guò)程將在下文中進(jìn)行更加詳細(xì)的描述。按照本發(fā)明的一種實(shí)施例,網(wǎng)卡上還包括命令端口 CMD (圖中未示出),所述命令端口與所述微控制器和上層的設(shè)備驅(qū)動(dòng)模塊相連,并且所述命令端口被配置為向微控制器發(fā)送控制命令以實(shí)現(xiàn)共享內(nèi)存的讀寫(xiě)操作。進(jìn)一步,網(wǎng)卡上還可以包括狀態(tài)端口 STAT(圖中未示出),所述狀態(tài)端口與所述微控制器和上層的設(shè)備驅(qū)動(dòng)模塊相連,負(fù)責(zé)提供網(wǎng)卡上共享內(nèi)存的數(shù)據(jù)讀寫(xiě)操作狀態(tài)結(jié)果,供設(shè)備驅(qū)動(dòng)模塊讀取檢查。命令端口與狀態(tài)端口一起實(shí)現(xiàn)對(duì)為控制器的控制。在不同的體系結(jié)構(gòu)上可采用不同的1/0原語(yǔ)來(lái)完成端口讀寫(xiě)。例如,以IA32體系結(jié)構(gòu)為例,假定CMD和STAT的端口地址分別為0x4A0和0x4Al,那么由驅(qū)動(dòng)程序發(fā)出的如下指令可以完成端口讀與MOV cmd_word, EAX #將命令字放入EAX寄存器OUT 0x4A0, EAX# 將命令字寫(xiě)到 CMD 端口IN EAX,0x4Al # 從 STAT 端口讀入狀態(tài)字按照本發(fā)明的一種實(shí)施例,在具體硬件實(shí)現(xiàn)中,CMD端口可以是16位或32位的寄存器,通過(guò)不同的位來(lái)控制片上存儲(chǔ)模塊的讀寫(xiě)。圖5A示出了按照本發(fā)明的一種實(shí)施例的命令端口的字段結(jié)構(gòu)示意圖。在圖5A的實(shí)施例中CMD端口實(shí)現(xiàn)為32位寄存器。其包括TID字段、SIZE/KEY字段、UNIT字段、OP字段以及FLAGS字段。其中位24-31的TID字段用于指示任務(wù)識(shí)別碼(TID),所述任務(wù)識(shí)別碼用于指示所讀寫(xiě)的數(shù)據(jù)屬于分布式應(yīng)用程序的哪個(gè)任務(wù)。一個(gè)分布式應(yīng)用程序可以包含多個(gè)任務(wù),本發(fā)明可以為每個(gè)任務(wù)都應(yīng)用網(wǎng)卡上的共享內(nèi)存進(jìn)行數(shù)據(jù)的共享,也可以為一個(gè)或多個(gè)任務(wù)應(yīng)用網(wǎng)卡上的共享內(nèi)存進(jìn)行數(shù)據(jù)的共享。并且對(duì)于多個(gè)計(jì)算機(jī)節(jié)點(diǎn)而言,既可以由一個(gè)計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡為所有任務(wù)提供一個(gè)公共的共享內(nèi)存,也可以由不同計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡為不同的任務(wù)分別提供共享內(nèi)存。位8-11的OP字段用來(lái)指示操作類(lèi)型,如0011表示對(duì)共享內(nèi)存執(zhí)行數(shù)據(jù)讀操作,0100表示對(duì)共享內(nèi)存執(zhí)行數(shù) 據(jù)寫(xiě)操作,0001表示對(duì)共享內(nèi)存執(zhí)行內(nèi)存分配操作,0010表示對(duì)共享內(nèi)存執(zhí)行內(nèi)存釋放操作。其中,讀操作和寫(xiě)操作是數(shù)據(jù)的兩項(xiàng)基本操作。分配操作用于在數(shù)據(jù)讀寫(xiě)操作前先要求分配一段內(nèi)存空間,釋放操作用于在數(shù)據(jù)讀寫(xiě)操作后釋放先前分配的內(nèi)存空間。對(duì)于不同的操作類(lèi)型,命令端口位16-23的SIZE/KEY字段含義可能也有所不同。如對(duì)于分配操作而言,位16-23存儲(chǔ)的是請(qǐng)求共享內(nèi)存分配的存儲(chǔ)空間大小。每個(gè)經(jīng)分配的共享內(nèi)存存儲(chǔ)空間都將被賦予一個(gè)鍵值KEY,用以標(biāo)識(shí)某一段被占用的存儲(chǔ)空間。對(duì)于寫(xiě)操作、讀操作和釋放操作而言,位16-23存儲(chǔ)的所述鍵值用以表示寫(xiě)操作、讀操作和釋放操作所對(duì)應(yīng)的共享內(nèi)存的存儲(chǔ)空間。命令端口位12-15的UNIT字段用來(lái)表示分配粒度。在分配操作中,由于位16_23只有8個(gè)字節(jié),其所能表示的請(qǐng)求共享內(nèi)存分配的存儲(chǔ)空間的大小是很有限的。因此UNIT字段可以實(shí)現(xiàn)對(duì)存儲(chǔ)空間的大小進(jìn)行擴(kuò)展。按照本發(fā)明的一種實(shí)施例,UNIT字段用來(lái)表示字段SIZE的倍數(shù)。比如對(duì)于分配操作而言,如果位16-23間存儲(chǔ)的是00000001,那么當(dāng)命令端口位12-15中存儲(chǔ)的是0001時(shí),表示請(qǐng)求分配的共享內(nèi)存的存儲(chǔ)空間大小為1X1 ;當(dāng)命令端口位12-15中存儲(chǔ)的是0010時(shí),表示請(qǐng)求分配的共享內(nèi)存的存儲(chǔ)空間大小為1X2 ;當(dāng)命令端口位12-15中存儲(chǔ)的是0011時(shí),表示請(qǐng)求分配的共享內(nèi)存的存儲(chǔ)空間大小為1X3,以此類(lèi)推。按照本發(fā)明的另一種實(shí)施例,UNIT字段用來(lái)表示字段SIZE的多個(gè)倍數(shù)。例如,當(dāng)位12-15中存儲(chǔ)的是0001時(shí),表示請(qǐng)求分配的共享內(nèi)存的存儲(chǔ)空間大小為1X1 ;當(dāng)位12-15中存儲(chǔ)的是0010時(shí),表示請(qǐng)求分配的共享內(nèi)存的存儲(chǔ)空間大小為1X8等等,以此類(lèi)推??蛇x的,命令端口位0-7的FLAGS字段用來(lái)表示其它控制選項(xiàng),包括所分配的共享內(nèi)存的存儲(chǔ)空間是否允許修改等等。圖5B示出了按照本發(fā)明的一種實(shí)施例的命令端口的寫(xiě)操作實(shí)例結(jié)構(gòu)示意圖。其中 TID 字段為 00000011,KEY 字段為 00000001,UNIT 字段為 0001,OP 字段為 0100,F(xiàn)LAGS字段為00000000。圖4B表示對(duì)于任務(wù)識(shí)別碼TID為3的任務(wù)而言,其要通過(guò)CMD端口執(zhí)行向共享內(nèi)存鍵值為I的一段存儲(chǔ)空間寫(xiě)數(shù)據(jù)操作的命令端口實(shí)例。圖5C示出的按照本發(fā)明的又一個(gè)實(shí)施例的命令端口的分配操作實(shí)例結(jié)構(gòu)示意圖。其中TID字段為00000011, SIZE字段為00001010,UNIT字段為000L0P字段為0001,F(xiàn)LAGS字段為00000000。圖4C表示對(duì)于任務(wù)識(shí)別碼為3的任務(wù)而言,其要通過(guò)CMD端口要求共享內(nèi)存分配10個(gè)字節(jié)的共享內(nèi)存的存儲(chǔ)空間。CMD端口的結(jié)構(gòu)設(shè)計(jì)可以根據(jù)具體應(yīng)用的不同進(jìn)行調(diào)整,而不限于上述列舉的幾種實(shí)例。STAT端口的結(jié)構(gòu)設(shè)計(jì)也可以根據(jù)具體應(yīng)用的不同進(jìn)行調(diào)整,在本發(fā)明的一個(gè)實(shí)施例中STAT端口的結(jié)構(gòu)中包含KEY字段與TID字段,用以表示某一讀寫(xiě)命令的執(zhí)行狀態(tài),比如某一讀寫(xiě)操作是否被成功執(zhí)行,或者某一讀寫(xiě)操作是否調(diào)用了遠(yuǎn)程的計(jì)算機(jī)節(jié)點(diǎn)等。本發(fā)明對(duì)STAT端口的格式?jīng)]有特別的限定。
圖6示出了按照本發(fā)明的一種實(shí)施例的共享內(nèi)存中分配表的結(jié)構(gòu)示意圖。為了實(shí)現(xiàn)對(duì)網(wǎng)卡內(nèi)的共享內(nèi)存進(jìn)行有效控制,按照本發(fā)明的一種實(shí)施例,共享內(nèi)存中維護(hù)一張分配表。所述分配表記錄了本共享內(nèi)存所支持的任務(wù)。具體而言,圖6中的分配表包括TID字段、KEY字段、ADDR字段、LEN字段、以及FLAGS字段。其中TID字段記錄了本共享內(nèi)存所支持的任務(wù)識(shí)別碼,KEY字段記錄了本共享內(nèi)存為該任務(wù)分配的存儲(chǔ)空間所對(duì)應(yīng)的鍵值,ADDR字段記錄了所述鍵值對(duì)應(yīng)的共享內(nèi)存起始地址,LEN字段記錄了所述鍵值對(duì)應(yīng)的共享內(nèi)存的存儲(chǔ)空間大小,F(xiàn)LAGS字段記錄了其它有關(guān)信息。這樣微控制器通過(guò)查詢(xún)所述分配表就可以得知本地的共享內(nèi)存是否存在可分配空間,是否可以支持設(shè)備驅(qū)動(dòng)模塊所要求的讀寫(xiě)操作。按照本發(fā)明的一個(gè)實(shí)施例,網(wǎng)卡上可以進(jìn)一步配置有狀態(tài)開(kāi)關(guān),所述狀態(tài)開(kāi)關(guān)指示本地網(wǎng)卡內(nèi)是否配置有處于有效工作狀態(tài)的共享內(nèi)存。所述微控制器可以進(jìn)一步被配置為根據(jù)所述狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存模塊。并且所述狀態(tài)開(kāi)關(guān)中的狀態(tài)可以被改變以表示本地網(wǎng)卡上的共享內(nèi)存是否處于有效(enable)還是無(wú)效(disable)工作狀態(tài)。進(jìn)一步,如果本地網(wǎng)卡上配置有共享內(nèi)存,則所述微控制器可以根據(jù)上述分配表中的所述任務(wù)識(shí)別碼TID判斷本地網(wǎng)卡上配置的共享內(nèi)存是否支持某次讀寫(xiě)操作。這一功能在多個(gè)計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡上都配備有不同的共享內(nèi)存用以支持不同分布式程序任務(wù)的情況下尤其有用,微控制器可以借此判斷本地網(wǎng)卡上配置的共享內(nèi)存是否是某次讀寫(xiě)操作所針對(duì)的共享內(nèi)存。為了表明寫(xiě)操作是要向共享內(nèi)存而非網(wǎng)卡內(nèi)存寫(xiě)入數(shù)據(jù),或?yàn)榱吮砻髯x操作是要從共享內(nèi)存而非網(wǎng)卡內(nèi)存讀出數(shù)據(jù),設(shè)備驅(qū)動(dòng)模塊在執(zhí)行物理層數(shù)據(jù)封裝時(shí)為物理層數(shù)據(jù)的幀結(jié)構(gòu)中寫(xiě)入特殊的標(biāo)識(shí)符以表明所述數(shù)據(jù)是由共享內(nèi)存進(jìn)行存儲(chǔ)的。在本發(fā)明的一種實(shí)施例中所述特殊的標(biāo)識(shí)符被記錄在所述數(shù)據(jù)的物理層包頭的類(lèi)型字段中。圖7A示出了按照RFC894以太網(wǎng)網(wǎng)絡(luò)傳輸標(biāo)準(zhǔn)傳輸?shù)奈锢韺訑?shù)據(jù)幀示意圖。圖7B示出了按照RFC1042以太網(wǎng)網(wǎng)絡(luò)傳輸標(biāo)準(zhǔn)傳輸?shù)奈锢韺訑?shù)據(jù)幀示意圖。兩種傳輸標(biāo)準(zhǔn)中都包含兩個(gè)字節(jié)的類(lèi)型字段。設(shè)備驅(qū)動(dòng)模塊向共享內(nèi)存寫(xiě)數(shù)據(jù)之前,先要設(shè)置物理層網(wǎng)絡(luò)幀的幀類(lèi)型,以標(biāo)識(shí)與普通網(wǎng)絡(luò)數(shù)據(jù)包的區(qū)別。比如通常情況下類(lèi)型字段為0x0800時(shí),表示數(shù)據(jù)幀中承載的是IP包。本發(fā)明可以通過(guò)設(shè)置類(lèi)型字段為OxOOFF使共享內(nèi)存存儲(chǔ)數(shù)據(jù)包與網(wǎng)絡(luò)數(shù)據(jù)包相區(qū)別。在本發(fā)明的其它實(shí)施例中,也可以利用物理層幀結(jié)構(gòu)包頭的其它字段記錄所述特殊的標(biāo)識(shí)符,或者對(duì)物理層幀結(jié)構(gòu)進(jìn)行改變以增加特殊的標(biāo)識(shí)符字段。正如上文中所描述的,本發(fā)明既可以?xún)H由多個(gè)計(jì)算機(jī)節(jié)點(diǎn)中的一個(gè)計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡為所有任務(wù)提供一個(gè)公共的共享內(nèi)存,也可以由不同計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡為不同的任務(wù)提供不同的共享內(nèi)存。在前一種實(shí)施例中,多個(gè)計(jì)算機(jī)節(jié)點(diǎn)僅有一個(gè)計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡同時(shí)配備有共享內(nèi)存和微控制器,而其它計(jì)算機(jī)節(jié)點(diǎn)的網(wǎng)卡僅配備有微控制器用于實(shí)現(xiàn)對(duì)遠(yuǎn)程共享內(nèi)存的讀寫(xiě)操作的控制。圖4B示出了按照本發(fā)明的另一個(gè)實(shí)施例的網(wǎng)卡結(jié)構(gòu)示意圖。圖4B的網(wǎng)卡包括控制器、網(wǎng)卡內(nèi)存、介質(zhì)訪問(wèn)單元、DMA接口以及微控制器。與圖4A所不同的是,圖4B的網(wǎng)卡中不包含共享內(nèi)存。圖4B中的微控制器僅用于實(shí)現(xiàn)對(duì)遠(yuǎn)程的計(jì)算機(jī)節(jié)點(diǎn)的共享內(nèi)存進(jìn)行控制,而不用于控制本地的共享內(nèi)存。具體細(xì)節(jié)將在下文中進(jìn)行更詳細(xì)的描述。下面結(jié)合計(jì)算機(jī)節(jié)點(diǎn)的體系結(jié)構(gòu)對(duì)上述兩種實(shí)施例中不同的數(shù)據(jù)流程進(jìn)行詳細(xì)描述。實(shí)施例1,多個(gè)計(jì)算機(jī)節(jié)點(diǎn)中僅有一個(gè)計(jì)算機(jī)節(jié)點(diǎn)配置有共享內(nèi)存:以圖8為例,計(jì)算機(jī)節(jié)點(diǎn)A的網(wǎng)卡A內(nèi)配置有共享內(nèi)存A,而計(jì)算機(jī)節(jié)點(diǎn)B的網(wǎng)卡B內(nèi)沒(méi)有配置有共享內(nèi)存。實(shí)施例I.1,由配置有共享內(nèi)存的計(jì)算機(jī)節(jié)點(diǎn)的應(yīng)用程序進(jìn)程發(fā)出讀寫(xiě)請(qǐng)求:以圖8為例,假設(shè)計(jì)算機(jī)節(jié)點(diǎn)A的應(yīng)用程序進(jìn)程A發(fā)出數(shù)據(jù)讀寫(xiě)請(qǐng)求。
_2] 實(shí)施例I. I. I發(fā)出的讀寫(xiě)請(qǐng)求為寫(xiě)數(shù)據(jù)請(qǐng)求:以圖8為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求,請(qǐng)求將程序緩沖區(qū)A中的一段數(shù)據(jù)寫(xiě)入共享內(nèi)存。對(duì)于應(yīng)用程序而言,是否使用共享內(nèi)存進(jìn)行數(shù)據(jù)的存儲(chǔ)是透明的。首先,應(yīng)用程序進(jìn)程A提供分布式應(yīng)用程序的程序緩沖區(qū)A的地址,所述程序緩沖區(qū)A中存儲(chǔ)著待寫(xiě)入共享內(nèi)存的數(shù)據(jù)。并且應(yīng)用程序進(jìn)程A通過(guò)語(yǔ)言運(yùn)行庫(kù)A上的專(zhuān)用接口調(diào)用語(yǔ)言運(yùn)行庫(kù)A,以執(zhí)行數(shù)據(jù)的分割。語(yǔ)言運(yùn)行庫(kù)A調(diào)用設(shè)備驅(qū)動(dòng)模塊A,以將數(shù)據(jù)封裝成物理層的數(shù)據(jù)幀,包括封裝物理層數(shù)據(jù)幀的包頭和包尾。其中所述設(shè)備驅(qū)動(dòng)模塊A是專(zhuān)用于進(jìn)行共享內(nèi)存存儲(chǔ)的設(shè)備驅(qū)動(dòng)模塊。除此以外,計(jì)算機(jī)節(jié)點(diǎn)A中還包括與網(wǎng)卡A中的控制器所對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)模塊(圖中未示出),也就是傳統(tǒng)網(wǎng)卡中所使用的設(shè)備驅(qū)動(dòng)模塊。接下來(lái),設(shè)備驅(qū)動(dòng)模塊A將調(diào)用該傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊,從而將數(shù)據(jù)由程序緩沖區(qū)A復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。作為上述實(shí)施例的一個(gè)變形,也可以由所述傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊執(zhí)行數(shù)據(jù)的物理層封裝。下面,由微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。那么由于多個(gè)計(jì)算機(jī)節(jié)點(diǎn)中只有一個(gè)計(jì)算機(jī)節(jié)點(diǎn)配置有共享內(nèi)存,因此上述數(shù)據(jù)寫(xiě)請(qǐng)求所執(zhí)行的對(duì)象就是本地網(wǎng)卡上的共享內(nèi)存。接下來(lái)微控制器A將數(shù)據(jù)包從網(wǎng)卡A上的網(wǎng)卡內(nèi)存復(fù)制到共享內(nèi)存A中。上述步驟有多種實(shí)施方式,在一種實(shí)施方式中,將數(shù)據(jù)包的包頭和包尾去掉,并將其中的有效數(shù)據(jù)部分復(fù)制到共享內(nèi)存A中。在另一種實(shí)施方式中,將整個(gè)數(shù)據(jù)包復(fù)制到共享內(nèi)存A中。為了支持?jǐn)?shù)據(jù)的共享,共享內(nèi)存的存儲(chǔ)空間通常會(huì)比較大,可能會(huì)比網(wǎng)卡內(nèi)存的存儲(chǔ)空間大很多。在這種情況下,如果進(jìn)行大量數(shù)據(jù)的寫(xiě)入操作,可能無(wú)法將全部待寫(xiě)入數(shù)據(jù)復(fù)制進(jìn)網(wǎng)卡內(nèi)存。因此,還需要對(duì)大塊數(shù)據(jù)進(jìn)行拆分,從而將拆分后的數(shù)據(jù)逐份從程序緩沖區(qū)A經(jīng)網(wǎng)卡內(nèi)存寫(xiě)入共享內(nèi)存A。在本實(shí)施例中可以看出網(wǎng)卡內(nèi)存相當(dāng)于共享內(nèi)存的緩沖區(qū)。從程序緩沖區(qū)A中讀出的數(shù)據(jù)都是經(jīng)過(guò)網(wǎng)卡內(nèi)存的緩沖才最終寫(xiě)入共享內(nèi)存A的。作為本實(shí)施例的一個(gè)變形,設(shè)備驅(qū)動(dòng)模塊A也可以直接通過(guò)寫(xiě)微控制器A的命令端口將數(shù)據(jù)從程序緩沖區(qū)A中復(fù)制到共享內(nèi)存A。比如,命令端口中的KEY字段可以用來(lái)描述待寫(xiě)入數(shù)據(jù)在程序緩沖區(qū)A的地址,這樣微控制器才能夠控制將所述地址下的數(shù)據(jù)從程序緩沖區(qū)A復(fù)制到共享內(nèi)存A。上述方式可以實(shí)現(xiàn)程序緩沖區(qū)和共享內(nèi)存間的直接數(shù)據(jù)交 換,但是也會(huì)帶來(lái)額外的控制成本。
實(shí)施例1. I. 2發(fā)出的讀寫(xiě)請(qǐng)求為讀數(shù)據(jù)請(qǐng)求:以圖8為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出讀數(shù)據(jù)請(qǐng)求,請(qǐng)求讀取共享內(nèi)存中的數(shù)據(jù)以寫(xiě)入程序緩沖區(qū)A中。首先應(yīng)用程序進(jìn)程A提供用于接收數(shù)據(jù)的程序緩沖區(qū)A的地址。并且應(yīng)用程序進(jìn)程A通過(guò)語(yǔ)言運(yùn)行庫(kù)A的專(zhuān)用接口調(diào)用語(yǔ)言運(yùn)行庫(kù)A。語(yǔ)言運(yùn)行庫(kù)A調(diào)用設(shè)備驅(qū)動(dòng)模塊A以將程序緩沖區(qū)A的地址封裝成簡(jiǎn)單的物理層數(shù)據(jù)幀。并且設(shè)備驅(qū)動(dòng)模塊A調(diào)用與網(wǎng)卡A中的網(wǎng)卡內(nèi)存對(duì)應(yīng)的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將程序緩沖區(qū)A的地址復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。接下來(lái)微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。由于多個(gè)計(jì)算機(jī)節(jié)點(diǎn)中只有一個(gè)計(jì)算機(jī)節(jié)點(diǎn)配置有共享內(nèi)存,因此上述數(shù)據(jù)讀請(qǐng)求所執(zhí)行的對(duì)象就是本地網(wǎng)卡上的共享內(nèi)存。接下來(lái),微控制器A將數(shù)據(jù)從共享內(nèi)存A復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存,再由網(wǎng)卡A的控制器根據(jù)網(wǎng)卡內(nèi)存中存儲(chǔ)的程序緩沖區(qū)A的地址,將數(shù)據(jù)從網(wǎng)卡內(nèi)存復(fù)制到程序緩沖區(qū)A中。作為本實(shí)施例的一個(gè)變形,設(shè)備驅(qū)動(dòng)模塊A也可以通過(guò)寫(xiě)微控制器A的命令端口將數(shù)據(jù)從共享內(nèi)存A直接復(fù)制到程序緩沖區(qū)A中。在這種方式下,命令端口的結(jié)構(gòu)中應(yīng)當(dāng)增加程序緩沖區(qū)地址的字段,以指明數(shù)據(jù)寫(xiě)入的地址。實(shí)施例I.2,由未配置有共享內(nèi)存的計(jì)算機(jī)節(jié)點(diǎn)的應(yīng)用程序進(jìn)程發(fā)出讀寫(xiě)請(qǐng)求:以圖8為例,假設(shè)計(jì)算機(jī)節(jié)點(diǎn)B的應(yīng)用程序進(jìn)程B發(fā)出數(shù)據(jù)讀寫(xiě)請(qǐng)求。實(shí)施例I. 2. I發(fā)出的讀寫(xiě)請(qǐng)求為寫(xiě)數(shù)據(jù)請(qǐng)求:以圖8為例,假設(shè)應(yīng)用程序進(jìn)程B發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求,請(qǐng)求將程序緩沖區(qū)B中的一段數(shù)據(jù)寫(xiě)入共享內(nèi)存A。首先,應(yīng)用程序進(jìn)程B提供分布式應(yīng)用程序的程序緩沖區(qū)B的地址,所述程序緩沖區(qū)B中存儲(chǔ)著待寫(xiě)入共享內(nèi)存的數(shù)據(jù)。并且應(yīng)用程序進(jìn)程B通過(guò)語(yǔ)言運(yùn)行庫(kù)B上的專(zhuān)用接口調(diào)用語(yǔ)言運(yùn)行庫(kù)B,以執(zhí)行數(shù)據(jù)的分割。語(yǔ)言運(yùn)行庫(kù)B調(diào)用設(shè)備驅(qū)動(dòng)模塊B,以將數(shù)據(jù)封裝成物理層的數(shù)據(jù)幀。其中所述設(shè)備驅(qū)動(dòng)模塊B是專(zhuān)用于進(jìn)行共享內(nèi)存存儲(chǔ)的設(shè)備驅(qū)動(dòng)模塊。除此以外,計(jì)算機(jī)節(jié)點(diǎn)B中還包括與網(wǎng)卡B中的控制器所對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)模塊(圖中未示出),也就是傳統(tǒng)網(wǎng)卡中所采用的設(shè)備驅(qū)動(dòng)模塊。接下來(lái),設(shè)備驅(qū)動(dòng)模塊B將調(diào)用該傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊,從而將數(shù)據(jù)由程序緩沖區(qū)B復(fù)制到網(wǎng)卡B的網(wǎng)卡內(nèi)存上(圖中未示出)。作為上述實(shí)施例的一個(gè)變形,也可以由所述傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊執(zhí)行數(shù)據(jù)的物理層封裝。下面,由微控制器B根據(jù)網(wǎng)卡B上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器B經(jīng)過(guò)判斷確定本地網(wǎng)卡上不存在共享內(nèi)存。接下來(lái),由微控制器B調(diào)用網(wǎng)卡B上的控制器,從而將網(wǎng)卡B的網(wǎng)卡內(nèi)存中的數(shù)據(jù)通過(guò)介質(zhì)訪問(wèn)單元(圖中未示出)發(fā)送到其他計(jì)算機(jī)節(jié)點(diǎn),在本實(shí)施例中為計(jì)算機(jī)節(jié)點(diǎn)A。之后,計(jì)算機(jī)節(jié)點(diǎn)A的網(wǎng)卡A接收到數(shù)據(jù)并復(fù)制到共享內(nèi)存A中。具體而言,網(wǎng)卡A接收數(shù)據(jù)后,由網(wǎng)卡A的控制器通過(guò)查詢(xún)數(shù)據(jù)幀中的特殊的標(biāo)識(shí),比如類(lèi)型字段,判斷該數(shù)據(jù)是否是要被寫(xiě)入共享內(nèi)存的數(shù)據(jù)。如果該數(shù)據(jù)要被寫(xiě)入共享內(nèi)存,那么由微控制器A進(jìn)一步根據(jù)自己網(wǎng)卡上的狀態(tài)開(kāi)關(guān)判斷本地是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A判斷本地配置有共享內(nèi)存A,由于多個(gè)計(jì)算機(jī)節(jié)點(diǎn)中只有一個(gè)計(jì)算機(jī)節(jié)點(diǎn)配置有共享內(nèi)存,因此上述數(shù)據(jù)寫(xiě)請(qǐng)求所執(zhí)行的對(duì)象就是網(wǎng)卡A上的共享內(nèi)存。接下來(lái),微控制器A將數(shù)據(jù)寫(xiě)入本地的共享內(nèi)存A中。需要說(shuō)明的是,在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)幀可以包含任務(wù)標(biāo)識(shí)符字段TID和鍵值字段KEY。所述TID和KEY可以記錄在圖7A、7B所示的數(shù)據(jù)字段內(nèi)。并且所述TID和KEY的值將被記錄在共享內(nèi)存的分配表中。關(guān)于分配表的結(jié)構(gòu),參見(jiàn)上文對(duì)圖6的說(shuō)明。實(shí)施例I. 2. I發(fā)出的讀寫(xiě)請(qǐng)求為讀數(shù)據(jù)請(qǐng)求:
以圖8為例,假設(shè)應(yīng)用程序進(jìn)程B發(fā)出讀數(shù)據(jù)請(qǐng)求,請(qǐng)求讀取共享內(nèi)存中的數(shù)據(jù)以寫(xiě)入程序緩沖區(qū)B中。首先,應(yīng)用程序進(jìn)程B提供用于接收數(shù)據(jù)的程序緩沖區(qū)B的地址。并且應(yīng)用程序進(jìn)程B通過(guò)語(yǔ)言運(yùn)行庫(kù)B的專(zhuān)用接口調(diào)用語(yǔ)言運(yùn)行庫(kù)B。之后,語(yǔ)言運(yùn)行庫(kù)B調(diào)用設(shè)備驅(qū)動(dòng)模塊B以將程序緩沖區(qū)B的地址封裝成簡(jiǎn)單的物理層數(shù)據(jù)幀。并且設(shè)備驅(qū)動(dòng)模塊B調(diào)用與網(wǎng)卡B中的網(wǎng)卡內(nèi)存對(duì)應(yīng)的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將程序緩沖區(qū)B的地址復(fù)制到網(wǎng)卡B的網(wǎng)卡內(nèi)存上(圖中未示出)。下面,微控制器B根據(jù)網(wǎng)卡B上的狀態(tài)開(kāi)關(guān)判斷本地是否配置有共享內(nèi)存。在本實(shí)施例中微控制器B經(jīng)過(guò)判斷確定本地網(wǎng)卡上不存在共享內(nèi)存,于是設(shè)備驅(qū)動(dòng)模塊B通過(guò)寫(xiě)微控制器B的命令端口將讀數(shù)據(jù)請(qǐng)求發(fā)送到其他計(jì)算機(jī)節(jié)點(diǎn),在本實(shí)施例中為計(jì)算機(jī)節(jié)點(diǎn)A。接下來(lái),網(wǎng)卡A中的控制器可以通過(guò)數(shù)據(jù)幀中的類(lèi)型字段判斷所請(qǐng)求的數(shù)據(jù)是否是在共享內(nèi)存中存儲(chǔ)的數(shù)據(jù)。如果是,微控制器A進(jìn)一步判斷本地是否配置有共享內(nèi)存。如果有,微控制器A解析所述讀數(shù)據(jù)請(qǐng)求并將共享內(nèi)存A中的數(shù)據(jù)構(gòu)造成物理層網(wǎng)絡(luò)幀。之后網(wǎng)卡A將數(shù)據(jù)發(fā)送到計(jì)算機(jī)節(jié)點(diǎn)B。計(jì)算機(jī)節(jié)點(diǎn)B收到數(shù)據(jù)后,在網(wǎng)卡B的控制器的控制下,將數(shù)據(jù)復(fù)制到程序緩沖區(qū)B中,從而完成數(shù)據(jù)讀操作。
_9] 實(shí)施例2,多個(gè)計(jì)算機(jī)節(jié)點(diǎn)上都配置共享內(nèi)存以支持不同任務(wù):以圖9為例,計(jì)算機(jī)節(jié)點(diǎn)A的網(wǎng)卡A內(nèi)配置有共享內(nèi)存A,且計(jì)算機(jī)節(jié)點(diǎn)B的網(wǎng)卡B內(nèi)配置有共享內(nèi)存B。共享內(nèi)存A和共享內(nèi)存B支持不同的任務(wù)。下面僅對(duì)實(shí)施例2中與實(shí)施例I不同的部分進(jìn)行詳細(xì)描述,而對(duì)于與實(shí)施例I中各個(gè)實(shí)施例一致的部分僅做簡(jiǎn)要描述。實(shí)施例2. I,對(duì)本地共享內(nèi)存發(fā)出讀寫(xiě)請(qǐng)求:以圖9為例,假設(shè)計(jì)算機(jī)節(jié)點(diǎn)A的應(yīng)用程序進(jìn)程A發(fā)出數(shù)據(jù)讀寫(xiě)請(qǐng)求,請(qǐng)求對(duì)本地共享內(nèi)存進(jìn)行讀寫(xiě)操作。實(shí)施例2. I. I發(fā)出的讀寫(xiě)請(qǐng)求為寫(xiě)數(shù)據(jù)請(qǐng)求:以圖9為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求,請(qǐng)求將程序緩沖區(qū)A中的一段數(shù)據(jù)寫(xiě)入共享內(nèi)存A。首先,應(yīng)用程序進(jìn)程A提供分布式應(yīng)用程序的程序緩沖區(qū)A的地址。并且應(yīng)用程序進(jìn)程A調(diào)用語(yǔ)言運(yùn)行庫(kù)A。語(yǔ)言運(yùn)行庫(kù)A又調(diào)用設(shè)備驅(qū)動(dòng)模塊A,以將數(shù)據(jù)封裝成物理層的數(shù)據(jù)幀。然后,設(shè)備驅(qū)動(dòng)模塊A將調(diào)用網(wǎng)卡A的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將數(shù)據(jù)由程序緩沖區(qū)A復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。下面,由微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。接下來(lái),微控制器A進(jìn)一步根據(jù)所述共享內(nèi)存A的分配表中存儲(chǔ)的任務(wù)識(shí)別碼TID來(lái)判斷本地網(wǎng)卡上配置的共享內(nèi)存A是否支持所述寫(xiě)操作,也就是是否要向共享內(nèi)存A中,而不是其它計(jì)算機(jī)節(jié)點(diǎn)的共享內(nèi)存中,寫(xiě)入數(shù)據(jù)。具體而言,微控制器A可以通過(guò)比較分配表中的任務(wù)識(shí)別碼TID和通過(guò)網(wǎng)卡A的命令端口獲得的寫(xiě)命令的TID字段,來(lái)判斷所述寫(xiě)操作是否要針對(duì)本地共享內(nèi)存執(zhí)行。在本實(shí)施例中,微控制器A經(jīng)判斷確定對(duì)本地的共享內(nèi)存A執(zhí)行寫(xiě)操作。接下來(lái),微控制器A將數(shù)據(jù)從網(wǎng)卡A上的網(wǎng)卡內(nèi)存復(fù)制到共享內(nèi)存A中。實(shí)施例2. I. 2發(fā)出的讀寫(xiě)請(qǐng)求為讀數(shù)據(jù)請(qǐng)求:以圖9為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出讀數(shù)據(jù)請(qǐng)求,請(qǐng)求讀取共享內(nèi)存中的數(shù)據(jù)以寫(xiě)入程序緩沖區(qū)A中。首先應(yīng)用程序進(jìn)程A提供用于接收數(shù)據(jù)的程序緩沖區(qū)A的地址。并且應(yīng)用程序進(jìn) 程A調(diào)用語(yǔ)言運(yùn)行庫(kù)A。然后,語(yǔ)言運(yùn)行庫(kù)A調(diào)用設(shè)備驅(qū)動(dòng)模塊A以將程序緩沖區(qū)A的地址封裝成簡(jiǎn)單的物理層數(shù)據(jù)幀。并且設(shè)備驅(qū)動(dòng)模塊A調(diào)用與網(wǎng)卡A中的網(wǎng)卡內(nèi)存對(duì)應(yīng)的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將程序緩沖區(qū)A的地址復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。接下來(lái),微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。然后,微控制器A進(jìn)一步根據(jù)所述共享內(nèi)存A的分配表中存儲(chǔ)的任務(wù)識(shí)別碼TID來(lái)判斷本地網(wǎng)卡上配置的共享內(nèi)存A是否支持所述讀操作,也就是是否要從共享內(nèi)存A中,而不是其它計(jì)算節(jié)點(diǎn)上的共享內(nèi)存中,讀出數(shù)據(jù)。下面,微控制器A將數(shù)據(jù)從共享內(nèi)存A復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存,再由網(wǎng)卡A的控制器根據(jù)網(wǎng)卡內(nèi)存中存儲(chǔ)的程序緩沖區(qū)A的地址,將數(shù)據(jù)從網(wǎng)卡內(nèi)存復(fù)制到程序緩沖區(qū)A中,從而完成所述數(shù)據(jù)讀操作。實(shí)施例2. 2,對(duì)遠(yuǎn)稈共享內(nèi)存發(fā)出讀寫(xiě)請(qǐng)求:以圖9為例,假設(shè)計(jì)算機(jī)節(jié)點(diǎn)A的應(yīng)用程序進(jìn)程A發(fā)出數(shù)據(jù)讀寫(xiě)請(qǐng)求,請(qǐng)求對(duì)遠(yuǎn)程共享內(nèi)存B進(jìn)行讀寫(xiě)操作。實(shí)施例2. 2. I發(fā)出的讀寫(xiě)請(qǐng)求為寫(xiě)數(shù)據(jù)請(qǐng)求:以圖9為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求,請(qǐng)求將程序緩沖區(qū)A中的一段數(shù)據(jù)寫(xiě)入共享內(nèi)存B。首先,應(yīng)用程序進(jìn)程A提供分布式應(yīng)用程序的程序緩沖區(qū)A的地址,所述程序緩沖區(qū)A中存儲(chǔ)著待寫(xiě)入共享內(nèi)存的數(shù)據(jù)。并且應(yīng)用程序進(jìn)程A調(diào)用語(yǔ)言運(yùn)行庫(kù)A。然后,語(yǔ)言運(yùn)行庫(kù)A再調(diào)用設(shè)備驅(qū)動(dòng)模塊A,以將數(shù)據(jù)封裝成物理層的數(shù)據(jù)幀。接下來(lái),設(shè)備驅(qū)動(dòng)模塊A將調(diào)用網(wǎng)卡A中控制器所對(duì)應(yīng)的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將數(shù)據(jù)由程序緩沖區(qū)A復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。下面,由微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。接下來(lái),微控制器A進(jìn)一步根據(jù)所述共享內(nèi)存A的分配表中存儲(chǔ)的任務(wù)識(shí)別碼TID來(lái)判斷本地網(wǎng)卡上配置的共享內(nèi)存A是否支持所述寫(xiě)操作,也就是是否要向共享內(nèi)存A中,而不是其它計(jì)算機(jī)節(jié)點(diǎn)的共享內(nèi)存中,寫(xiě)入數(shù)據(jù)。在本實(shí)施例中,應(yīng)用程序進(jìn)程A要向共享內(nèi)存B寫(xiě)入數(shù)據(jù)。
于是由微控制器A調(diào)用網(wǎng)卡A上的控制器,從而將網(wǎng)卡A的網(wǎng)卡內(nèi)存中的數(shù)據(jù)通過(guò)介質(zhì)訪問(wèn)單元(圖中未示出)發(fā)送到計(jì)算機(jī)節(jié)點(diǎn)B。之后,由計(jì)算機(jī)節(jié)點(diǎn)B的網(wǎng)卡B接收數(shù)據(jù)并復(fù)制到共享內(nèi)存B中。具體而言,網(wǎng)卡B接收數(shù)據(jù)后,由網(wǎng)卡B的控制器通過(guò)查詢(xún)數(shù)據(jù)幀中的特殊的標(biāo)識(shí),比如類(lèi)型字段,判斷該數(shù)據(jù)是否是要被寫(xiě)入共享內(nèi)存的數(shù)據(jù)。如果該數(shù)據(jù)要被寫(xiě)入共享內(nèi)存,那么由微控制器B進(jìn)一步根據(jù)自己網(wǎng)卡上的狀態(tài)開(kāi)關(guān)判斷本地是否配置有共享內(nèi)存。在本實(shí)施例中,微控制器B判斷本地配置有共享內(nèi)存B。接下來(lái),微控制器B進(jìn)一步根據(jù)所述共享內(nèi)存B的分配表中存儲(chǔ)的任務(wù)識(shí)別碼TID來(lái)判斷本地網(wǎng)卡上配置的共享內(nèi)存B是否支持所述寫(xiě)操作,也就是是否要向共享內(nèi)存B中而不是其它計(jì)算機(jī)節(jié)點(diǎn)的共享內(nèi)存中寫(xiě)入數(shù)據(jù)。如果所述判斷結(jié)果為是,則微控制器B將數(shù)據(jù)寫(xiě)入本地的共享內(nèi)存B中。實(shí)施例2. 2. 2發(fā)出的讀寫(xiě)請(qǐng)求為讀數(shù)據(jù)請(qǐng)求: 以圖9為例,假設(shè)應(yīng)用程序進(jìn)程A發(fā)出讀數(shù)據(jù)請(qǐng)求,請(qǐng)求讀取共享內(nèi)存B中的數(shù)據(jù)以寫(xiě)入程序緩沖區(qū)A中。首先,應(yīng)用程序進(jìn)程A提供用于接收數(shù)據(jù)的程序緩沖區(qū)A的地址。并且應(yīng)用程序進(jìn)程A調(diào)用語(yǔ)言運(yùn)行庫(kù)A。之后,語(yǔ)言運(yùn)行庫(kù)A調(diào)用設(shè)備驅(qū)動(dòng)模塊A以將程序緩沖區(qū)A的地址封裝成簡(jiǎn)單的物理層數(shù)據(jù)幀。并且設(shè)備驅(qū)動(dòng)模塊A調(diào)用與網(wǎng)卡A中的網(wǎng)卡內(nèi)存對(duì)應(yīng)的傳統(tǒng)設(shè)備驅(qū)動(dòng)模塊(圖中未示出),從而將程序緩沖區(qū)A的地址復(fù)制到網(wǎng)卡A的網(wǎng)卡內(nèi)存上(圖中未示出)。下面,微控制器A根據(jù)網(wǎng)卡A上的狀態(tài)開(kāi)關(guān)判斷本地是否配置有共享內(nèi)存。在本實(shí)施例中微控制器A經(jīng)過(guò)判斷確定本地網(wǎng)卡上存在共享內(nèi)存。接下來(lái),微控制器A進(jìn)一步根據(jù)所述共享內(nèi)存A的分配表中存儲(chǔ)的任務(wù)識(shí)別碼TID來(lái)判斷本地網(wǎng)卡上配置的共享內(nèi)存A是否支持所述讀操作,也就是是否要從共享內(nèi)存A中而不是其它計(jì)算機(jī)節(jié)點(diǎn)的共享內(nèi)存中讀出數(shù)據(jù)。在本實(shí)施例中,應(yīng)用程序進(jìn)程A要從共享內(nèi)存B讀出數(shù)據(jù)。于是網(wǎng)卡A將數(shù)據(jù)讀請(qǐng)求發(fā)送到網(wǎng)卡B。接下來(lái),網(wǎng)卡B中的控制器可以根據(jù)數(shù)據(jù)幀中的類(lèi)型字段判斷是否是對(duì)共享內(nèi)存的讀寫(xiě)請(qǐng)求,即所請(qǐng)求的數(shù)據(jù)是否是在共享內(nèi)存中存儲(chǔ)的數(shù)據(jù)。如果是,微控制器B進(jìn)一步判斷本地是否配置有共享內(nèi)存。如果有,微控制器B解析所述讀數(shù)據(jù)請(qǐng)求并將共享內(nèi)存B中的數(shù)據(jù)構(gòu)造成物理層網(wǎng)絡(luò)幀。之后網(wǎng)卡B將數(shù)據(jù)發(fā)送到計(jì)算機(jī)節(jié)點(diǎn)A。計(jì)算機(jī)節(jié)點(diǎn)A收到數(shù)據(jù)后,在網(wǎng)卡A的控制器的控制下,將數(shù)據(jù)復(fù)制到程序緩沖區(qū)A中,從而完成數(shù)據(jù)讀操作。結(jié)合圖8和圖9描述的上述各種實(shí)施例僅僅示意性描述出本發(fā)明有關(guān)讀寫(xiě)操作的一些步驟,關(guān)于內(nèi)存的分配與釋放等更詳細(xì)的步驟由于在前文中已經(jīng)進(jìn)行了概括性描述,在此不再展開(kāi)贅述。圖10示出了對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法流程圖。在步驟1001中,判斷本地是否配置有支持所述讀寫(xiě)操作的共享內(nèi)存。在步驟1003中,在本地配置有支持所述讀寫(xiě)操作的共享內(nèi)存的情況下,對(duì)本地的所述共享內(nèi)存進(jìn)行讀寫(xiě)操作。進(jìn)行讀寫(xiě)操作的詳細(xì)流程已經(jīng)在前文中描述過(guò)了,在此不再贅述。進(jìn)一步,在本地沒(méi)有配置有支持所述讀寫(xiě)操作的共享內(nèi)存的情況下,請(qǐng)求由遠(yuǎn)程的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作。如果所述讀寫(xiě)操作為寫(xiě)操作,則還要對(duì)對(duì)待寫(xiě)入的數(shù)據(jù)進(jìn)行物理層的封裝,并且所述請(qǐng)求由遠(yuǎn)程的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作的步驟進(jìn)一步包括將封裝后的待寫(xiě)入的數(shù)據(jù)向遠(yuǎn)程的共享內(nèi)存發(fā)送。如果所述讀寫(xiě)操作為讀操作,則對(duì)待讀出的數(shù)據(jù)所要寫(xiě)入的程序緩沖區(qū)的程序緩沖區(qū)地址進(jìn)行物理層的封裝以作為向遠(yuǎn)程發(fā)送的讀數(shù)據(jù)請(qǐng)求的一部分,并且所述請(qǐng)求由遠(yuǎn)程的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作的步驟進(jìn)一步包括將所述封裝后的讀數(shù)據(jù)請(qǐng)求向遠(yuǎn)程的共享內(nèi)存發(fā)送。關(guān)于上述操作的詳細(xì)流程已經(jīng)在前文中描述過(guò)了,在此不再贅述。圖11示出了按照本發(fā)明的一個(gè)實(shí)施例判斷本地是否配置有支持讀寫(xiě)操作的共享內(nèi)存的方法流程圖。首先,在步驟1101中根據(jù)網(wǎng)卡上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存,然后在步驟1103中,如果本地網(wǎng)卡上配置有共享內(nèi)存,則進(jìn)一步根據(jù)所述共享內(nèi)存上存儲(chǔ)的任務(wù)識(shí)別碼判斷本地網(wǎng)卡上配置的共享內(nèi)存是否支持所述讀寫(xiě)操作。上述兩個(gè)判斷步驟的更詳細(xì)說(shuō)明已經(jīng)在前文描述過(guò)了,在此不再贅述。圖12示出了按照本發(fā)明的一個(gè)實(shí)施例對(duì)網(wǎng)卡進(jìn)行調(diào)用的方法流程圖。在步驟1201中,提供所述分布式應(yīng)用程序的程序緩沖區(qū);在步驟1203中,通過(guò)語(yǔ)言運(yùn)行庫(kù)上的專(zhuān) 用接口調(diào)用語(yǔ)言運(yùn)行庫(kù);在步驟1205中,調(diào)用設(shè)備驅(qū)動(dòng)模塊以進(jìn)行物理層的封裝;在步驟1207中,通過(guò)上述方法對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制。上述多個(gè)步驟的更詳細(xì)說(shuō)明已經(jīng)在前文描述過(guò)了,在此不再贅述。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,除明確說(shuō)明以外,本發(fā)明可以體現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,除明確說(shuō)明以外,本發(fā)明可以具體實(shí)現(xiàn)為以下形式,即,可以是完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等)、或者本文一般稱(chēng)為“電路”、“模塊”或“系統(tǒng)”的軟件部分與硬件部分的組合。此外,本發(fā)明還可以采取體現(xiàn)在任何有形的表達(dá)介質(zhì)(medium of expression)中的計(jì)算機(jī)程序產(chǎn)品的形式,該介質(zhì)中包含計(jì)算機(jī)可用的程序碼。可以使用一個(gè)或多個(gè)計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)的任何組合。計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)例如可以是——但不限于——電的、磁的、光的、電磁的、紅外線的、或半導(dǎo)體的系統(tǒng)、裝置、器件或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的更具體的例子(非窮舉的列表)包括以下有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤(pán)、硬盤(pán)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊磁盤(pán)只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、諸如支持因特網(wǎng)或內(nèi)部網(wǎng)的傳輸介質(zhì)、或者磁存儲(chǔ)器件。注意計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)甚至可以是上面印有程序的紙張或者其它合適的介質(zhì),這是因?yàn)椋缈梢酝ㄟ^(guò)電掃描這種紙張或其它介質(zhì),以電子方式獲得程序,然后以適當(dāng)?shù)姆绞郊右跃幾g、解釋或處理,并且必要的話在計(jì)算機(jī)存儲(chǔ)器中存儲(chǔ)。在本文件的語(yǔ)境中,計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)可以是任何含有、存儲(chǔ)、傳達(dá)、傳播、或傳輸供指令執(zhí)行系統(tǒng)、裝置或器件使用的或與指令執(zhí)行系統(tǒng)、裝置或器件相聯(lián)系的程序的介質(zhì)。計(jì)算機(jī)可用的介質(zhì)可包括在基帶中或者作為載波一部分傳播的、由其體現(xiàn)計(jì)算機(jī)可用的程序碼的數(shù)據(jù)信號(hào)。計(jì)算機(jī)可用的程序碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括-但不限于-無(wú)線、電線、光纜、RF等等。用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序碼,可以以一種或多種程序設(shè)計(jì)語(yǔ)言的任何組合來(lái)編寫(xiě),所述程序設(shè)計(jì)語(yǔ)言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言-諸如Java、Smalltalk、C++之類(lèi),還包括常規(guī)的過(guò)程式程序設(shè)計(jì)語(yǔ)言-諸如”C”程序設(shè)計(jì)語(yǔ)言或類(lèi)似的程序設(shè)計(jì)語(yǔ)言。程序碼可以完全地在用戶(hù)的計(jì)算上執(zhí)行、部分地在用戶(hù)的計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶(hù)的計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一種情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任何種類(lèi)的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)-連接到用戶(hù)的計(jì)算機(jī),或者,可以(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng))連接到外部計(jì)算機(jī)。以下參照按照本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。要明白的是,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行的這些指令,產(chǎn)生實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在能指令計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生一個(gè)包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instruction means)的制造品。也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置上,使得在計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程,從而在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令就提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過(guò)程。附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專(zhuān)用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專(zhuān)用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。本文中所用的術(shù)語(yǔ),僅僅是為了描述特定的實(shí)施例,而不意圖限定本發(fā)明。本文中所用的單數(shù)形式的“一”和“該”,旨在也包括復(fù)數(shù)形式,除非上下文中明確地另外指出。還要知道,“包含”一詞在本說(shuō)明書(shū)中使用時(shí),說(shuō)明存在所指出的特征、整體、步驟、操作、單元和/或組件,但是并不排除存在或增加一個(gè)或多個(gè)其它特征、整體、步驟、操作、單元和/或組件,以及/或者它們的組合。
權(quán)利要求中的對(duì)應(yīng)結(jié)構(gòu)、材料、操作以及所有功能性限定的裝置(means)或步驟的等同替換,旨在包括任何用于與在權(quán)利要求中具體指出的其它單元相組合地執(zhí)行該功能的結(jié)構(gòu)、材料或操作。所給出的對(duì)本發(fā)明的描述其目的在于示意和描述,并非是窮盡性的,也并非是要把本發(fā)明限定到所表述的形式。對(duì)于所屬技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不偏離本發(fā)明范圍和精神的情況下,顯然可以作出許多修改和變型。對(duì)實(shí)施例的選擇和說(shuō)明,是為了最好地解釋本發(fā)明的原理和實(shí)際應(yīng)用,使所屬技術(shù)領(lǐng)域的普通技術(shù)人員能夠明了,本發(fā)明可以有適合所要的特定用途的具有各種改變的各種實(shí)施方式。
權(quán)利要求
1.一種網(wǎng)卡,包括 共享內(nèi)存,被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)訪問(wèn),以及 微控制器,被配置為對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作的控制。
2.一種如權(quán)利要求I所述的網(wǎng)卡,其中所述微控制器進(jìn)ー步被配置為 判斷所述共享內(nèi)存是否支持所接收到的讀寫(xiě)請(qǐng)求,以及 在所述共享內(nèi)存支持所接收到的讀寫(xiě)請(qǐng)求的情況下,對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作。
3.一種如權(quán)利要求I或2所述的網(wǎng)卡,包括 命令端ロ,其中所述命令端ロ與所述微控制器相連,并且所述命令端ロ被配置為向微控制器發(fā)送控制命令。
4.一種如權(quán)利要求3所述的網(wǎng)卡,其中所述控制命令包含字段用于控制所述共享內(nèi)存進(jìn)行下列各項(xiàng)操作之一讀操作、寫(xiě)操作、分配操作、釋放操作。
5.一種如權(quán)利要求I或2所述的網(wǎng)卡,進(jìn)一歩包括 狀態(tài)開(kāi)關(guān),并且 所述微控制器進(jìn)ー步被配置為根據(jù)所述狀態(tài)開(kāi)關(guān)判斷所述網(wǎng)卡上是否配置有共享內(nèi)存。
6.一種如權(quán)利要求5所述的網(wǎng)卡,其中所述共享內(nèi)存中存儲(chǔ)有任務(wù)識(shí)別碼,并且 如果所述網(wǎng)卡上配置有共享內(nèi)存,則所述微控制器進(jìn)ー步被配置為根據(jù)所述任務(wù)識(shí)別碼判斷所述共享內(nèi)存是否支持所接收到的讀寫(xiě)請(qǐng)求。
7.—種如權(quán)利要求I或2所述的網(wǎng)卡,其中所述共享內(nèi)存中存儲(chǔ)的數(shù)據(jù)的幀結(jié)構(gòu)中包含標(biāo)識(shí)符以表明所述數(shù)據(jù)是由所述共享內(nèi)存存儲(chǔ)的。
8.—種如權(quán)利要求7所述的網(wǎng)卡,其中所述特殊的標(biāo)識(shí)符被記錄在所述數(shù)據(jù)的物理層包頭的類(lèi)型字段中。
9.一種如權(quán)利要求I或2所述的網(wǎng)卡,進(jìn)一歩包括 網(wǎng)卡內(nèi)存,被配置為緩沖所述共享內(nèi)存所讀寫(xiě)的數(shù)據(jù)。
10.一種如權(quán)利要求I或2所述的網(wǎng)卡,其中所述共享內(nèi)存進(jìn)一歩被配置為直接與所述網(wǎng)卡外部的程序緩沖區(qū)進(jìn)行讀寫(xiě)操作。
11.一種計(jì)算機(jī)設(shè)備,包括如權(quán)利要求1-10所述的網(wǎng)卡。
12.—種對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法,其中所述共享內(nèi)存被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)所訪問(wèn),所述方法包括 判斷本地網(wǎng)卡上是否配置有支持所述讀寫(xiě)操作的共享內(nèi)存,以及 在本地網(wǎng)卡上配置有支持所述讀寫(xiě)操作的共享內(nèi)存的情況下,對(duì)本地網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作。
13.—種如權(quán)利要求12所述的方法,其中判斷本地網(wǎng)卡上是否配置有支持所述讀寫(xiě)操作的共享內(nèi)存的步驟包括 根據(jù)網(wǎng)卡上的狀態(tài)開(kāi)關(guān)判斷本地網(wǎng)卡上是否配置有共享內(nèi)存。
14.一種如權(quán)利要求13所述的方法,其中判斷本地網(wǎng)卡上是否配置有支持所述讀寫(xiě)操作的共享內(nèi)存的步驟進(jìn)一歩包括如果本地網(wǎng)卡上配置有共享內(nèi)存,則進(jìn)一歩根據(jù)所述本地網(wǎng)卡上的共享內(nèi)存上存儲(chǔ)的任務(wù)識(shí)別碼判斷本地網(wǎng)卡上配置的共享內(nèi)存是否支持所述讀寫(xiě)操作。
15.一種如權(quán)利要求12所述的方法,進(jìn)ー步包括 在本地網(wǎng)卡上沒(méi)有配置有支持所述讀寫(xiě)操作的共享內(nèi)存的情況下,請(qǐng)求由遠(yuǎn)程網(wǎng)卡上的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作。
16.一種如權(quán)利要求15所述的方法,如果所述讀寫(xiě)操作為寫(xiě)操作,則所述請(qǐng)求由遠(yuǎn)程網(wǎng)卡上的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作的步驟進(jìn)一歩包括 將待寫(xiě)入的數(shù)據(jù)向遠(yuǎn)程網(wǎng)卡上的共享內(nèi)存發(fā)送。
17.—種如權(quán)利要求15所述的方法,如果所述讀寫(xiě)操作為讀操作,則所述請(qǐng)求由遠(yuǎn)程網(wǎng)卡上的共享內(nèi)存進(jìn)行所述讀寫(xiě)操作的步驟進(jìn)一歩包括 將讀數(shù)據(jù)請(qǐng)求向遠(yuǎn)程網(wǎng)卡上的共享內(nèi)存發(fā)送。
18.一種如權(quán)利要求12所述的方法,其中所述網(wǎng)卡進(jìn)ー步包括網(wǎng)卡內(nèi)存,并且其中對(duì)本地網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作的步驟進(jìn)一歩包括 經(jīng)由所述本地網(wǎng)卡的內(nèi)存的緩沖對(duì)本地網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作。
19.一種如權(quán)利要求12所述的方法,其中對(duì)本地網(wǎng)卡上的共享內(nèi)存進(jìn)行讀寫(xiě)操作的步驟進(jìn)一歩包括 直接在所述本地網(wǎng)卡上的共享內(nèi)存與本地網(wǎng)卡外部的程序緩沖區(qū)間進(jìn)行所述讀寫(xiě)操作。
20.一種如權(quán)利要求12所述的方法,進(jìn)ー步包括 如果所述讀寫(xiě)操作為寫(xiě)操作,則對(duì)待寫(xiě)入的數(shù)據(jù)進(jìn)行物理層的封裝。
21.一種如權(quán)利要求12所述的方法,進(jìn)ー步包括 如果所述讀寫(xiě)操作為讀操作,則對(duì)待讀出的數(shù)據(jù)所要寫(xiě)入的程序緩沖區(qū)的程序緩沖區(qū)地址進(jìn)行物理層的封裝。
22.—種對(duì)網(wǎng)卡進(jìn)行調(diào)用的方法,所述方法包括 提供所述分布式應(yīng)用程序的程序緩沖區(qū), 通過(guò)語(yǔ)言運(yùn)行庫(kù)上的專(zhuān)用接ロ調(diào)用語(yǔ)言運(yùn)行庫(kù), 調(diào)用設(shè)備驅(qū)動(dòng)模塊以進(jìn)行物理層的封裝,以及 通過(guò)權(quán)利要求12-21所述的方法對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制。
全文摘要
針對(duì)分布式應(yīng)用程序的特點(diǎn),本發(fā)明提出了一種在網(wǎng)卡上應(yīng)用共享內(nèi)存的技術(shù)方案。具體而言,本發(fā)明提供了一種網(wǎng)卡,包括共享內(nèi)存,被配置為為分布式應(yīng)用程序的任務(wù)提供共享的存儲(chǔ)空間,并且所述共享內(nèi)存可以被運(yùn)行同一任務(wù)的多個(gè)計(jì)算節(jié)點(diǎn)訪問(wèn),以及微控制器,被配置為對(duì)所述共享內(nèi)存進(jìn)行讀寫(xiě)操作的控制。此外本發(fā)明還提供了一種包括上述網(wǎng)卡的計(jì)算機(jī)設(shè)備,一種對(duì)網(wǎng)卡的共享內(nèi)存進(jìn)行讀寫(xiě)操作控制的方法,和一種對(duì)網(wǎng)卡進(jìn)行調(diào)用的方法。采用本發(fā)明所提供的技術(shù)方案,繞過(guò)了網(wǎng)絡(luò)協(xié)議堆棧的處理過(guò)程,避免了網(wǎng)絡(luò)協(xié)議堆棧所帶來(lái)的時(shí)間延遲,本發(fā)明無(wú)需對(duì)數(shù)據(jù)包進(jìn)行TCP/IP封裝,大大節(jié)省了TCP/IP層數(shù)據(jù)封裝所帶來(lái)的額外包頭包尾開(kāi)銷(xiāo)。
文檔編號(hào)H04L12/02GK102651690SQ20111004798
公開(kāi)日2012年8月29日 申請(qǐng)日期2011年2月28日 優(yōu)先權(quán)日2011年2月28日
發(fā)明者李嚴(yán), 滕啟明, 王華勇, 陳瀅 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司