用于數(shù)據(jù)通信的編程接口的制作方法
【專利摘要】在用于數(shù)據(jù)通信的編程接口的實施例中,可以從對應(yīng)于應(yīng)用的用戶模式虛擬存儲緩沖器分配請求隊列和完成隊列。該請求隊列和完成隊列可以被鎖定到物理存儲器并且之后被映射到內(nèi)核模式系統(tǒng)地址,從而使得該請求隊列和完成隊列可以由內(nèi)核模式執(zhí)行線程訪問。從應(yīng)用接收請求以便內(nèi)核處理該請求隊列中的數(shù)據(jù),并且向該內(nèi)核發(fā)布系統(tǒng)調(diào)用以便內(nèi)核模式執(zhí)行線程處理該請求。內(nèi)核模式執(zhí)行線程之后可以處理來自該應(yīng)用的附加請求而無需發(fā)布附加的系統(tǒng)調(diào)用。
【專利說明】用于數(shù)據(jù)通信的編程接口
【背景技術(shù)】 [0001]目前,連接高性能聯(lián)網(wǎng)應(yīng)用與計算設(shè)備內(nèi)核的應(yīng)用編程接口(API)不能有效地應(yīng)對聯(lián)網(wǎng)應(yīng)用的增加數(shù)據(jù)處理請求。例如,“Windows Socket^API (即“Winsock”)被配置成促進由應(yīng)用發(fā)布的操作,以便向與物理網(wǎng)絡(luò)設(shè)備通信的內(nèi)核層發(fā)送數(shù)據(jù)并且從內(nèi)核層接收數(shù)據(jù)。一般地,在套接字(socket)的壽命過程期間發(fā)布多次發(fā)送和接收操作。因此,作為整體的發(fā)送和接收處理開銷可以組成網(wǎng)絡(luò)處理的大半并且有可能組成應(yīng)用的大半。
[0002]例如在傳統(tǒng)的Winsock API中,啟動發(fā)送和接收操作涉及做系統(tǒng)調(diào)用來將用戶模式虛擬存儲器鎖定到物理存儲器并且啟動數(shù)據(jù)到內(nèi)核中的傳遞。之后典型地需要附加的系統(tǒng)調(diào)用來獲得傳遞的完成狀態(tài)并且將用戶模式虛擬存儲器從物理存儲器中解鎖。因此,如果應(yīng)用一次又一次地使用相同的存儲器來發(fā)送和接收數(shù)據(jù),那么現(xiàn)有的Winsock發(fā)送和接收API會招致多余的存儲器鎖定(pin)和解鎖(unpin)。
【發(fā)明內(nèi)容】
[0003]本
【發(fā)明內(nèi)容】
被提供來介紹用于數(shù)據(jù)通信的編程接口的簡化概念,并且這些概念將在下文的【具體實施方式】中得到進一步的描述和/或在附圖中被示出。本
【發(fā)明內(nèi)容】
不應(yīng)當(dāng)被看作是描述所要求保護的主題的本質(zhì)特征,也不是用來確定或限制所要求保護的主題的范圍。
[0004]本文描述了用于數(shù)據(jù)通信的編程接口。在實施例中,可以從對應(yīng)于應(yīng)用的用戶模式虛擬存儲緩沖器分配請求隊列。該請求隊列可以被鎖定到物理存儲器并且之后被映射到內(nèi)核模式系統(tǒng)地址從而使得內(nèi)核模式執(zhí)行線程可以訪問該請求隊列??梢詾閮?nèi)核從應(yīng)用接收請求來處理該請求隊列中的數(shù)據(jù),并且為該內(nèi)核模式執(zhí)行線程向內(nèi)核發(fā)布(issue)系統(tǒng)調(diào)用來處理該請求。該內(nèi)核模式執(zhí)行線程之后可以處理來自該應(yīng)用的附加請求而無需發(fā)布附加的系統(tǒng)調(diào)用。例如,I/O請求可以是一個系統(tǒng)調(diào)用,但是不需要任何存儲器鎖定開銷,并且該I/O的完成將無需任何系統(tǒng)調(diào)用開銷而發(fā)生??梢宰蕴捉幼謥韺?shù)據(jù)請求從應(yīng)用提供到內(nèi)核。在實施例中,注冊套接字包含向該套接字識別完成隊列、從用戶模式虛擬存儲緩沖器分配請求隊列,以及將該請求隊列鎖定到物理存儲器。
[0005]在其它的實施例中,將用戶模式虛擬存儲緩沖器注冊為與應(yīng)用對應(yīng)。從該用戶模式虛擬存儲緩沖器分配完成隊列并將該完成隊列鎖定到物理存儲器。之后將該完成隊列映射到內(nèi)核中的內(nèi)核模式系統(tǒng)地址。該完成隊列經(jīng)由內(nèi)核模式系統(tǒng)地址接收來自內(nèi)核模式執(zhí)行線程的完成通知,并且使得該應(yīng)用經(jīng)由用戶模式虛擬存儲緩沖器能夠訪問該完成通知而無需任何內(nèi)核進行用戶系統(tǒng)調(diào)用的開銷。
【專利附圖】
【附圖說明】
[0006]參考下列附圖來描述用于數(shù)據(jù)通信的編程接口的實施例。在附圖中使用相同的數(shù)字來標記圖中示出的類似特征和組件,其中:
圖1圖示了一個示例計算設(shè)備,其中可以實現(xiàn)用于數(shù)據(jù)通信的編程接口的實施例。[0007]圖2圖示了根據(jù)一個或多個實施例,到內(nèi)核的數(shù)據(jù)請求的一個示例。
[0008]圖3圖示了根據(jù)一個或多個實施例,用于數(shù)據(jù)通信的編程接口的(多個)示例方法。
[0009]圖4圖示了根據(jù)一個或多個實施例,用于數(shù)據(jù)通信的編程接口的(多個)附加示例方法。
[0010]圖5圖示了可以實現(xiàn)用于數(shù)據(jù)通信的編程接口的多個實施例的一個示例設(shè)備的各種組件。
【具體實施方式】
[0011]本文描述了一種用于數(shù)據(jù)通信的編程接口。可以在計算設(shè)備的軟件中實現(xiàn)“通信?!眮斫?jīng)由網(wǎng)絡(luò)通信數(shù)據(jù)。典型的通信棧包含其中實現(xiàn)聯(lián)網(wǎng)應(yīng)用的應(yīng)用層和其中實現(xiàn)操作系統(tǒng)內(nèi)核的內(nèi)核層。所述應(yīng)用層為應(yīng)用暴露從該通信棧的底層細節(jié)中抽象出來的接口。所述內(nèi)核層與被配置成在網(wǎng)絡(luò)上通信數(shù)據(jù)的聯(lián)網(wǎng)設(shè)備交互。
[0012]典型地,為了在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù),應(yīng)用推送數(shù)據(jù)通過用戶模式應(yīng)用編程接口(API),之后聯(lián)網(wǎng)棧對該數(shù)據(jù)進行處理來構(gòu)造(frame)用戶模式和內(nèi)核模式二者中的協(xié)議。根據(jù)本文所述,用戶模式指的是一種執(zhí)行模式,其中對諸如物理存儲器和I/O設(shè)備之類的系統(tǒng)資源的訪問受到操作系統(tǒng)的保護,以便在運行于同一系統(tǒng)中的多個應(yīng)用之間提供隔離。根據(jù)本文所述,內(nèi)核模式指的是一種執(zhí)行模式,其中提供對所有系統(tǒng)資源的訪問但是僅僅允許操作系統(tǒng)代碼的特定部分運行在內(nèi)核模式中。該數(shù)據(jù)之后被移動到內(nèi)核層中的諸如網(wǎng)卡(NIC)之類的聯(lián)網(wǎng)設(shè)備,該聯(lián)網(wǎng)設(shè)備促進數(shù)據(jù)在網(wǎng)絡(luò)上的通信。NIC是一種由系統(tǒng)使用來在網(wǎng)絡(luò)上發(fā)送和接收數(shù)據(jù)的硬件設(shè)備。
[0013]因此,應(yīng)當(dāng)指出的是,為了使應(yīng)用在網(wǎng)絡(luò)上通信數(shù)據(jù),該應(yīng)用必須首先將數(shù)據(jù)從應(yīng)用層傳輸?shù)絻?nèi)核層。編程接口(比如微軟公司的“Windows Socket”,即“Winsock”)被配置成連接應(yīng)用層與內(nèi)核層并且可以被用于促進應(yīng)用層和內(nèi)核層之間的數(shù)據(jù)傳遞。
[0014]在傳統(tǒng)的Winsock API中,啟動(initiate)發(fā)送和接收操作涉及做系統(tǒng)調(diào)用來將用戶模式虛擬存儲器鎖定到物理存儲器并且啟動數(shù)據(jù)到內(nèi)核中的傳遞。如本文所述,“系統(tǒng)調(diào)用”指的是用于用戶模式代碼向運行在內(nèi)核模式中的系統(tǒng)代碼發(fā)布請求的一種機制。這就是用戶模式應(yīng)用如何以受保護的方式獲取訪問系統(tǒng)資源的權(quán)限并且使用系統(tǒng)資源的方式。另外,典型地使用附加的系統(tǒng)調(diào)用來得到該傳遞的完成狀態(tài)并且之后從物理存儲器解鎖用戶模式虛擬存儲器。因此,如果該應(yīng)用一次又一次地使用相同的存儲器來發(fā)送和接收數(shù)據(jù),那么現(xiàn)有的Winsock發(fā)送和接收API將招致多余的存儲器鎖定和解鎖。
[0015]對內(nèi)核的系統(tǒng)調(diào)用的高頻率通常導(dǎo)致內(nèi)核上沉重的處理負載,該內(nèi)核也許不能有效地應(yīng)對高容量的聯(lián)網(wǎng)數(shù)據(jù)處理請求,特別是對于聯(lián)網(wǎng)應(yīng)用的高速數(shù)據(jù)處理需求來說更是如此。因此,通信延遲(也被稱作等待時間)通常由應(yīng)用層和內(nèi)核層之間的數(shù)據(jù)通信所導(dǎo)致。另外,聯(lián)網(wǎng)應(yīng)用在數(shù)據(jù)通信期間會經(jīng)歷抖動、等待時間的變化。
[0016]在實施例中,描述了一種與現(xiàn)有通信棧、應(yīng)用和網(wǎng)絡(luò)協(xié)議兼容的編程接口。在使得能夠?qū)崿F(xiàn)高速數(shù)據(jù)通信方面的在先嘗試已經(jīng)嘗試修改整個通信棧。應(yīng)該理解本文描述的編程接口可以被實現(xiàn)為現(xiàn)有編程接口的修改,并且不會影響通信棧。該編程接口的實施例通過降低對內(nèi)核的系統(tǒng)調(diào)用的數(shù)量,改進了處理器負載,縮短了網(wǎng)絡(luò)通信的等待時間,并且減少了抖動。[0017]該編程接口將用戶模式虛擬存儲器到物理存儲器的鎖定和導(dǎo)出同數(shù)據(jù)傳遞請求啟動和完成處理分離開來。因此,用戶模式應(yīng)用只要注冊用戶模式虛擬存儲緩沖器一次(這可能涉及該存儲緩沖器到該物理存儲器位置的鎖定),之后就可以將所注冊的用戶模式虛擬存儲緩沖器用于多個數(shù)據(jù)傳遞請求而無需再注冊或解鎖該存儲緩沖器。通過將數(shù)據(jù)傳遞啟動和完成與存儲器的鎖定和解鎖分離開來,該編程接口使得能夠?qū)崿F(xiàn)數(shù)據(jù)傳遞啟動和完成處理而無需做多次系統(tǒng)調(diào)用。
[0018]在實施例中,該編程接口使用請求隊列來請求啟動并且使用完成隊列來用于找回(retrieve)請求完成。該請求隊列和完成隊列可以從對應(yīng)于該應(yīng)用的用戶模式虛擬存儲緩沖器被分配并且被鎖定物理存儲器。之后可以將該請求隊列和完成隊列映射到內(nèi)核模式系統(tǒng)地址來使得內(nèi)核模式執(zhí)行線程能夠訪問請求隊列和完成隊列。
[0019]這種配置使得用戶模式應(yīng)用能夠連續(xù)將各個請求排隊到請求隊列中,同時內(nèi)核模式執(zhí)行線程(諸如系統(tǒng)線程或中斷)連續(xù)從該請求隊列中排出各個請求來處理各請求。由于在內(nèi)核模式中完成各個請求,因此內(nèi)核模式執(zhí)行線程可以將完成通知排隊到到完成隊列中。之后用戶模式應(yīng)用可以直接將這些完成通知從完成隊列中出列(dequeue)。應(yīng)當(dāng)指出的是,之后該編程接口只需要在沒有內(nèi)核模式執(zhí)行線程已經(jīng)被指派來處理來自請求隊列的已排隊請求時發(fā)布系統(tǒng)調(diào)用。
[0020]盡管用于數(shù)據(jù)通信的編程接口的特征和概念可以實現(xiàn)在任何數(shù)目的不同設(shè)備、系統(tǒng)、環(huán)境、網(wǎng)絡(luò)和/或配置中,但是在下文中的示例設(shè)備、系統(tǒng)和方法的背景下來描述用于數(shù)據(jù)通信的編程接口的實施例。
[0021]圖1圖示了一個示例計算設(shè)備100,在其中可以實現(xiàn)用于數(shù)據(jù)通信的編程接口的各種實施例。該示例計算設(shè)備100可以被配置成任何類型的計算設(shè)備或服務(wù)器,并且可以采用任何數(shù)目的不同組件和不同組件的組合來實現(xiàn),這將參考圖5中的示例設(shè)備來進一步描述。例如,計算設(shè)備100可以被實現(xiàn)為服務(wù)器、電視客戶端設(shè)備、計算設(shè)備、游戲系統(tǒng)、電器設(shè)備、電子設(shè)備,和/或任何其它類型的可以實現(xiàn)在網(wǎng)絡(luò)上發(fā)送和接收數(shù)據(jù)的設(shè)備中的一種或其組合。因此,該計算設(shè)備100還可以實現(xiàn)為被實現(xiàn)來接收和/或通信無線數(shù)據(jù)的無線設(shè)備,諸如移動電話(例如蜂窩式、VoIP、WiFi等等)、便攜式計算機設(shè)備、媒體播放器設(shè)備,和/或任何其它能夠發(fā)送和接收數(shù)據(jù)的無線設(shè)備中的一種或其組合。
[0022]計算設(shè)備100可以經(jīng)由網(wǎng)絡(luò)102通信數(shù)據(jù),該網(wǎng)絡(luò)102可以被實現(xiàn)為包含促進數(shù)據(jù)通信的有線和/或無線網(wǎng)絡(luò)。也可以通過使用任何類型的網(wǎng)絡(luò)拓撲和/或通信協(xié)議來實現(xiàn)該網(wǎng)絡(luò),并且該網(wǎng)絡(luò)可以被表示或者否則被實現(xiàn)為兩個或更多網(wǎng)絡(luò)的組合。該網(wǎng)絡(luò)也可以包含由移動運營商管理的移動運營商網(wǎng)絡(luò),諸如通信服務(wù)提供商、手機提供商,和/或因特網(wǎng)服務(wù)提供商之類。移動運營商可以促進用于任何類型的無線設(shè)備或移動電話(例如蜂窩式、VoIP、WiFi等等)的移動數(shù)據(jù)和/或語音通信。
[0023]計算設(shè)備100可以包含一個或多個處理器104(例如微處理器、控制器等等中的任一設(shè)備),其處理各種計算機可執(zhí)行指令來控制該設(shè)備的工作。該設(shè)備還包含一個或多個使得能夠?qū)崿F(xiàn)數(shù)據(jù)存儲的存儲器設(shè)備106 (例如計算機可讀存儲介質(zhì))。存儲器設(shè)備可以被實現(xiàn)為任何類型的存儲器、存儲介質(zhì),和/或合適的電子數(shù)據(jù)存儲裝置。
[0024]計算設(shè)備100還可以包含編程接口 108,其被配置成將各種應(yīng)用110 (例如聯(lián)網(wǎng)應(yīng)用)與通信棧的底層細節(jié)連接。該應(yīng)用可以被實現(xiàn)成經(jīng)由網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。該編程接口 108還被配置成將內(nèi)核112 (例如操作系統(tǒng)內(nèi)核)與聯(lián)網(wǎng)設(shè)備114 (諸如網(wǎng)卡之類)連接來在網(wǎng)絡(luò)上通信數(shù)據(jù)。該編程接口可以被實現(xiàn)為計算機可執(zhí)行指令(諸如軟件應(yīng)用之類),并且由該計算設(shè)備的所述一個或多個處理器執(zhí)行來實現(xiàn)本文描述的各種實施例。
[0025]在一個實施例中,編程接口 108被實現(xiàn)成接收諸如來自應(yīng)用110的注冊請求來在網(wǎng)絡(luò)102上通信數(shù)據(jù)。為了在網(wǎng)絡(luò)上通信數(shù)據(jù),由內(nèi)核112處理該數(shù)據(jù),該內(nèi)核112被實現(xiàn)成促進數(shù)據(jù)到聯(lián)網(wǎng)設(shè)備114的通信來進行在網(wǎng)絡(luò)上的通信。編程接口 108被實現(xiàn)成接收注冊請求并且之后通過注冊用戶模式虛擬地址和長度二者來注冊對應(yīng)于應(yīng)用110的用戶模式虛擬存儲緩沖器116。注冊用戶模式虛擬存儲緩沖器還可以包含向應(yīng)用發(fā)送注冊識別符,在數(shù)據(jù)傳遞請求期間該應(yīng)用可以使用該注冊識別符。
[0026]編程接口 108還可以被實現(xiàn)成從用戶模式虛擬存儲緩沖器116分配完成隊列。該完成隊列被分配得足夠大以在該注冊請求中保持由應(yīng)用110指定的完成條目(entry)的數(shù)目。分配該完成隊列后,該編程接口可以將完成隊列鎖定到物理存儲器118并且將該完成隊列映射到內(nèi)核112中的內(nèi)核模式系統(tǒng)地址(例如在虛擬存儲器空間中)。
[0027]通過將物理存儲器118的相同區(qū)域映射到用戶模式虛擬存儲緩沖器116和內(nèi)核模式系統(tǒng)地址二者,編程接口 108使得應(yīng)用110和內(nèi)核112能夠同時訪問該完成隊列。該完成隊列能夠經(jīng)由內(nèi)核模式系統(tǒng)地址從由內(nèi)核112啟動的內(nèi)核模式執(zhí)行線程接收完成通知,并且使得應(yīng)用110能夠經(jīng)由用戶模式虛擬存儲緩沖器訪問該完成通知。該完成隊列可以被實現(xiàn)為環(huán)形FIFO隊列,其使得內(nèi)核能夠向完成隊列公布完成,其之后可以由該應(yīng)用找回。
[0028]編程接口 108還可以注冊從應(yīng)用110向內(nèi)核112提供數(shù)據(jù)請求的套接字。在一個實施例中,該編程接口注冊現(xiàn)有的套接字,比如Winsock API。注冊該套接字包括從用戶模式虛擬存儲緩沖器116分配請求隊列。該請求隊列被分配得足夠大來保持由該應(yīng)用指定的請求條目的數(shù)目。注冊該套接字還包含將該請求隊列鎖定到物理存儲器118,以及將該請求隊列映射到內(nèi)核模式系統(tǒng)地址。通過將物理存儲器的相同區(qū)域映射到用戶模式虛擬存儲緩沖器和內(nèi)核模式系統(tǒng)地址二者,該編程接口使得應(yīng)用110和內(nèi)核112能夠同時訪問該請求隊列。
[0029]該請求隊列可以經(jīng)由用戶模式虛擬存儲緩沖器從應(yīng)用接收數(shù)據(jù),并且使得內(nèi)核模式執(zhí)行線程能夠經(jīng)由內(nèi)核模式系統(tǒng)地址訪問數(shù)據(jù)。該請求隊列也可以被實現(xiàn)為環(huán)形FIFO隊列,其使得該應(yīng)用能夠在該請求隊列中公布請求,其之后可以由內(nèi)核找回。作為注冊進程的一個部分,該編程接口還被實現(xiàn)成向該套接字識別完成隊列,比如通過將該完成隊列的位置和長度傳送到該套接字。
[0030]圖2圖示了根據(jù)用于數(shù)據(jù)通信的編程接口的多個實施例的到內(nèi)核的數(shù)據(jù)請求的一個示例200。該示例200包含已經(jīng)參考圖1描述的應(yīng)用110、用戶模式虛擬存儲緩沖器116,以及內(nèi)核模式虛擬存儲器120。如圖2所示,應(yīng)用110和用戶模式虛擬存儲緩沖器116位于應(yīng)用層202中,并且內(nèi)核模式虛擬存儲器120位于內(nèi)核層204中。
[0031]在這個示例中并且根據(jù)上文的討論,編程接口 108已經(jīng)注冊了能夠從應(yīng)用向內(nèi)核提供數(shù)據(jù)請求的套接字。例如,該編程接口可以從用戶模式虛擬存儲緩沖器116分配請求隊列206,并且將該請求隊列映射到內(nèi)核模式虛擬存儲器120中(例如在內(nèi)核模式系統(tǒng)地址處)的對應(yīng)請求隊列208。另外,該編程接口可以從該用戶模式虛擬存儲緩沖器分配完成隊列210,并且將該完成隊列映射到該內(nèi)核模式虛擬存儲器中(例如在內(nèi)核模式系統(tǒng)地址處)的對應(yīng)完成隊列212。
[0032]在一個實施例中,編程接口 108被實現(xiàn)成從應(yīng)用110接收請求以供該內(nèi)核處理請求隊列206中的數(shù)據(jù)。該請求可以由該應(yīng)用通過在請求隊列206中放置數(shù)據(jù)并且之后為該編程接口識別請求隊列206來生成,比如通過包含請求隊列206的注冊識別符,該注冊識別符之前由該編程接口發(fā)送到該應(yīng)用。
[0033]編程接口 108被實現(xiàn)成確定是否指派內(nèi)核模式執(zhí)行線程214 (諸如系統(tǒng)線程或中斷)來處理該請求。該編程接口可以發(fā)布系統(tǒng)調(diào)用到內(nèi)核,以便內(nèi)核模式執(zhí)行線程214處理該請求。一旦該內(nèi)核模式執(zhí)行線程被啟動來處理該請求,則該應(yīng)用能夠連續(xù)地將請求排隊到該請求隊列中,而該內(nèi)核模式執(zhí)行線程獲取來自該請求隊列的請求來處理來請求。因此,如果已經(jīng)指派一個內(nèi)核模式執(zhí)行線程來處理位于該請求隊列的請求,那么該編程接口不需要發(fā)布隨后的系統(tǒng)調(diào)用,因為該內(nèi)核模式執(zhí)行線程被實現(xiàn)成自動處理各請求。
[0034]內(nèi)核模式執(zhí)行線程214被實現(xiàn)成通過經(jīng)由內(nèi)核模式系統(tǒng)地址(例如在虛擬存儲器空間中)從請求隊列208找回數(shù)據(jù)來處理請求。例如,如圖2中的箭頭所示,由應(yīng)用110放置在請求隊列206中的數(shù)據(jù)被映射到內(nèi)核模式虛擬存儲器120中的請求隊列208,在那里它可以由該內(nèi)核模式執(zhí)行線程找回和處理。處理該數(shù)據(jù)后,內(nèi)核模式執(zhí)行線程214被實現(xiàn)成在內(nèi)核模式虛擬存儲器120中的完成隊列212中公布完成通知。例如,該內(nèi)核模式執(zhí)行線程可以在處理該數(shù)據(jù)后通過處理該請求并且將該請求提供給促進網(wǎng)絡(luò)上的數(shù)據(jù)通信的聯(lián)網(wǎng)設(shè)備(比如網(wǎng)卡)來公布完成通知。
[0035]應(yīng)用110被實現(xiàn)成經(jīng)由用戶模式虛擬存儲緩沖器116監(jiān)視完成隊列210來探測由該內(nèi)核模式執(zhí)行線程公布的完成通知。例如,如圖2中的箭頭所示,由該內(nèi)核模式執(zhí)行線程放置在完成隊列212中的完成通知被映射到在用戶模式虛擬存儲緩沖器116中的完成隊列210,在那里它被應(yīng)用110探測到。該完成通知向該應(yīng)用指示該請求已經(jīng)由內(nèi)核模式執(zhí)行線程所處理。在探測到該完成通知后,該應(yīng)用隨后可以將該完成通知從該完成隊列出列并且重用請求隊列206 (即剛剛由最近完成的請求使用的請求隊列)來用于附加的請求。在一個實施例中,如果在該請求被處理后應(yīng)用先前請求過發(fā)送信號,那么該內(nèi)核模式執(zhí)行線程被實現(xiàn)成在處理該請求后直接向該應(yīng)用發(fā)送信號。
[0036]在一個實施例中,編程接口 108被實現(xiàn)成從應(yīng)用110接收附加請求,以便內(nèi)核處理請求隊列206中的附加數(shù)據(jù)。例如,在該應(yīng)用探測到完成通知后,該應(yīng)用可以將附加數(shù)據(jù)放置在該請求隊列中。在這個實例中,已經(jīng)指派內(nèi)核模式執(zhí)行線程214來處理該請求,并且該內(nèi)核模式執(zhí)行線程之后可以處理該附加請求而無需發(fā)布附加系統(tǒng)調(diào)用到內(nèi)核。
[0037]在一個實施例中,該編程接口可以被實現(xiàn)成檢查已經(jīng)被放置在該請求和完成隊列中的數(shù)據(jù)來避免系統(tǒng)級損壞(例如避免損壞其它應(yīng)用或系統(tǒng)狀態(tài))。例如,應(yīng)當(dāng)指出的是,當(dāng)用戶模式應(yīng)用代碼直接訪問該請求或完成隊列時,它可能具有通過改變該隊列的內(nèi)容來損壞該隊列的完整性的能力。因此,通過執(zhí)行檢查,該編程接口確保了用戶模式應(yīng)用至多只能夠損壞它自身的完整性,但是不會影響其它應(yīng)用的完整性或該系統(tǒng)的完整性。
[0038]根據(jù)用于數(shù)據(jù)通信的編程接口的一個或多個實施例,分別參考圖3和圖4來描述示例方法300和400。一般地,通過使用軟件、固件、硬件(例如固定邏輯電路)、手工處理,或其任何組合可以實現(xiàn)本文描述的任何服務(wù)、功能、方法、步驟、組件和模塊。軟件實現(xiàn)代表當(dāng)由計算機處理器執(zhí)行時實現(xiàn)特定任務(wù)的程序代碼??梢栽谟嬎銠C可執(zhí)行指令的一般背景下描述(多種)示例方法,其可以包含軟件、應(yīng)用、例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)、步驟、模塊、功能等等。該程序代碼可以被存儲在一個或多個計算機可讀存儲介質(zhì)設(shè)備中,該計算機可讀存儲介質(zhì)可以在計算機處理器本地和/或遠離計算機處理器。該方法也可以在分布式計算環(huán)境中由多個計算機設(shè)備實施。此外,本文描述的特征是獨立于平臺的,并且可以在具有各種處理器的各種計算平臺上實現(xiàn)。
[0039]圖3圖示了用于數(shù)據(jù)通信的編程接口的(多個)示例方法300,并且參考圖1和圖2中示出的編程接口 108來描述該方法。方法框被描述的順序不旨在被解釋為一種限制,并且任何數(shù)目的所描述的方法框都可以以任何順序組合來實現(xiàn)方法或可替換的方法。
[0040]在框302處,注冊對應(yīng)于一個應(yīng)用的用戶模式虛擬存儲緩沖器。例如,編程接口108 (圖1)注冊對應(yīng)于應(yīng)用110的用戶模式虛擬存儲緩沖器116。在框304處,從該用戶模式虛擬存儲緩沖器分配完成隊列并且將該完成隊列鎖定到物理存儲器。例如,編程接口 108從用戶模式虛擬存儲緩沖器116分配完成隊列210 (圖2)并且將該完成隊列鎖定到物理存儲器118。
[0041]在框306處,將該完成隊列映射到內(nèi)核中的內(nèi)核模式系統(tǒng)地址。例如,編程接口108將完成隊列210映射到內(nèi)核112中的內(nèi)核模式系統(tǒng)地址。該完成隊列可以經(jīng)由內(nèi)核模式系統(tǒng)地址從內(nèi)核模式執(zhí)行線程214接收完成通知并且使得應(yīng)用能夠經(jīng)由用戶模式虛擬存儲緩沖器訪問該完成通知。在框308處,注冊一個從該應(yīng)用向內(nèi)核提供數(shù)據(jù)請求的套接字。例如,編程接口 108注冊一個從應(yīng)用110向內(nèi)核112提供數(shù)據(jù)請求的套接字。在實施例中,注冊套接字可以包含在框310、312和314處描述的特征。
[0042]在框310處,從用戶模式虛擬存儲緩沖器分配請求隊列并且將該請求隊列鎖定到物理存儲器。例如,編程接口 108從用戶模式虛擬存儲緩沖器116分配請求隊列206并且將該請求隊列鎖定到物理存儲器118。在框312處,將該請求隊列映射到內(nèi)核中的內(nèi)核模式系統(tǒng)地址。例如,編程接口 108將請求隊列206映射到內(nèi)核112中的內(nèi)核模式系統(tǒng)地址。該請求隊列被實現(xiàn)成經(jīng)由該用戶模式虛擬存儲緩沖器從該應(yīng)用接收數(shù)據(jù)并且使得該內(nèi)核模式執(zhí)行線程能夠經(jīng)由該內(nèi)核模式系統(tǒng)地址訪問該數(shù)據(jù)。在框314處,向該套接字識別該完成隊列。例如,編程接口 108向套接字識別完成隊列210。
[0043]圖4圖示了用于數(shù)據(jù)通信的編程接口的(多個)示例方法400,并且參考圖1和圖2中示出的編程接口 108來描述該方法。在實施例中,參考圖4描述的示例方法框在圖3的方法框已經(jīng)完成后開始(例如在框314處向套接字識別完成隊列后)。方法框被描述的順序不旨在被解釋為一種限制,并且任何數(shù)目的所描述的方法框都可以以任何順序組合來實現(xiàn)方法或可替換的方法。
[0044]在框402處,從應(yīng)用接收請求以便該內(nèi)核處理請求隊列中的數(shù)據(jù)。例如,編程接口108 (圖1)從應(yīng)用110接收請求以便該內(nèi)核112處理該請求隊列中的數(shù)據(jù)。該請求可以包含注冊識別符。在框404處,向內(nèi)核發(fā)布系統(tǒng)調(diào)用以便內(nèi)核模式執(zhí)行線程處理該請求。例如,編程接口 108發(fā)布系統(tǒng)調(diào)用給內(nèi)核112以便內(nèi)核模式執(zhí)行線程214處理該請求。
[0045]在框406處,在完成隊列中接收完成通知。例如,當(dāng)來自該應(yīng)用的請求被處理時,內(nèi)核模式執(zhí)行線程214可以經(jīng)由內(nèi)核模式虛擬存儲緩沖器120在完成隊列210中公布完成通知。
[0046]在框408處,從該應(yīng)用接收附加請求,以便該內(nèi)核處理請求隊列中的附加數(shù)據(jù),并且在框410處,內(nèi)核模式執(zhí)行線程處理該附加請求而無需發(fā)布系統(tǒng)調(diào)用。例如,編程接口108從應(yīng)用110接收附加請求以便內(nèi)核112處理請求隊列206中的附加數(shù)據(jù),并且指派內(nèi)核模式執(zhí)行線程214來處理該附加請求。該內(nèi)核模式執(zhí)行線程被實現(xiàn)成處理附加請求而無需向內(nèi)核發(fā)布附加的系統(tǒng)調(diào)用。
[0047]圖5圖示了一個示例設(shè)備500的各種組件,其可以被實現(xiàn)為參考圖1-4描述的任何設(shè)備或由設(shè)備實現(xiàn)的服務(wù)。在實施例中,該設(shè)備可以以任何形式的用電設(shè)備(consumer)、計算機、服務(wù)器、便攜式設(shè)備、用戶、通信、電話、導(dǎo)航、電視、電器、游戲設(shè)備、媒體回放設(shè)備和/或電子設(shè)備被實現(xiàn)為固定或移動設(shè)備中的任何一種或組合。該設(shè)備還可以與用戶(即人)和/或操作該設(shè)備的實體相關(guān)聯(lián),從而使得設(shè)備描述包含用戶、軟件、固件、硬件和/或設(shè)備的組合的邏輯設(shè)備。
[0048]設(shè)備500包含通信設(shè)備502,其使得能夠?qū)崿F(xiàn)設(shè)備數(shù)據(jù)504的有線和/或無線通信,設(shè)備數(shù)據(jù)504例如是所接收的數(shù)據(jù)、正在被接收的數(shù)據(jù)、預(yù)定用于廣播的數(shù)據(jù)、數(shù)據(jù)的數(shù)據(jù)包等等。該設(shè)備數(shù)據(jù)或其它設(shè)備內(nèi)容可以包含該設(shè)備的配置設(shè)置、該設(shè)備上存儲的媒體內(nèi)容、和/或與該設(shè)備的用戶相關(guān)聯(lián)的信息。存儲在該設(shè)備上的媒體內(nèi)容可以包含任何類型的音頻、視頻和/或圖像數(shù)據(jù)。該設(shè)備包含一個或多個數(shù)據(jù)輸入506,經(jīng)由該數(shù)據(jù)輸入506可以接收任何類型的數(shù)據(jù)、媒體內(nèi)容和/或輸入,比如用戶可選擇輸入、消息、通信、音樂、電視內(nèi)容、錄制的視頻內(nèi)容,以及接收自任何內(nèi)容和/或數(shù)據(jù)來源的其它任何類型的音頻、視頻和/或圖像數(shù)據(jù)。
[0049]設(shè)備500還包含通信接口 508,諸如串行、并行、網(wǎng)絡(luò)或無線接口中的任何一種或多種。該通信接口提供該設(shè)備與網(wǎng)絡(luò)之間的連接和/或通信鏈路,通過該網(wǎng)絡(luò)其它電子的、計算的和通信設(shè)備與該設(shè)備通信數(shù)據(jù)。
[0050]設(shè)備500包含一個或多個處理器510 (例如任何微處理器、控制器等等),其處理各種計算機可執(zhí)行指令來控制該設(shè)備的工作??商鎿Q地或附加地,該設(shè)備可以由與處理和控制電路有關(guān)地實現(xiàn)的軟件、硬件、固件或固定邏輯電路中的任何一種或其組合來實現(xiàn),其一般地被指示為512。盡管未示出,該設(shè)備可以包含在該設(shè)備內(nèi)耦合各種組件的系統(tǒng)總線或數(shù)據(jù)傳遞系統(tǒng)。系統(tǒng)總線可以包含不同總線結(jié)構(gòu)中的任何一種或其組合,比如存儲總線或存儲控制器、外圍總線、通用串行總線、和/或利用各種總線架構(gòu)中的任何種類的處理器或局部總線。
[0051]設(shè)備500還包含一個或多個使得能夠?qū)崿F(xiàn)數(shù)據(jù)存儲的存儲器設(shè)備(例如計算機可讀存儲介質(zhì))514,諸如隨機讀取存儲器(RAM)、非易失性存儲器(例如只讀存儲器(ROM)、閃速存儲器等等),以及磁盤存儲設(shè)備。磁盤存儲設(shè)備可以被實現(xiàn)為任何類型的磁或光學(xué)存儲設(shè)備,比如硬盤驅(qū)動器、可刻錄的和/或可重寫的盤等等。該設(shè)備還可以包含海量存儲媒體設(shè)備。
[0052]計算機可讀介質(zhì)可以是任何由計算設(shè)備訪問的可用媒介或介質(zhì)。作為示例而非限制,計算機可讀介質(zhì)可以包括存儲介質(zhì)和通信介質(zhì)。存儲介質(zhì)包含實現(xiàn)在用于信息存儲的任何方法或技術(shù)中的易失性和非易失性、可移動和不可移動的介質(zhì),這些信息為比如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。存儲介質(zhì)包含但是不限于RAM、R0M、EEPR0M、閃速存儲器或其它存儲技術(shù)、CD-ROM、數(shù)字多功能光盤(DVD)或其它光學(xué)存儲裝置、磁盒、磁帶、磁盤存儲裝置或其它磁存儲設(shè)備,或任何其它能夠被用于存儲信息并且可由計算機訪問的媒介。
[0053]通信介質(zhì)典型地包含計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它在調(diào)制數(shù)據(jù)信號中的數(shù)據(jù),比如載波或其它運輸機制。通信介質(zhì)還包含任何信息輸送介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號”意味著一種信號,它的一種或多種特性可以以在該信號中編碼信息的方式而被設(shè)置或改變。作為示例而非限制,通信介質(zhì)包含諸如有線網(wǎng)絡(luò)或直接有線連接之類的有線介質(zhì)和諸如超聲、RF、紅外或其它無線介質(zhì)之類的無線介質(zhì)。
[0054]存儲裝置514提供數(shù)據(jù)存儲機制來存儲設(shè)備數(shù)據(jù)504、其它類型的信息和/或數(shù)據(jù),以及各種設(shè)備應(yīng)用516。例如,操作系統(tǒng)518可以保持作為具有存儲裝置并在處理器上被執(zhí)行的軟件應(yīng)用。該設(shè)備應(yīng)用還可以包含設(shè)備管理器(比如任何形式的控制應(yīng)用)、軟件應(yīng)用、信號處理和控制模塊、源于特定設(shè)備的代碼、針對特定設(shè)備的硬件抽象層等等。在這個示例中,設(shè)備應(yīng)用516包含被示出作為軟件模塊和/或計算機應(yīng)用的編程接口 520。可替換地或附加地,該編程接口可以被實現(xiàn)為硬件、軟件、固件、固定邏輯或其任何組合。
[0055]設(shè)備500還包含音頻和/或視頻處理系統(tǒng)522,其為音頻系統(tǒng)524生成音頻數(shù)據(jù)和/或為顯示系統(tǒng)526生成顯示數(shù)據(jù)。該音頻系統(tǒng)和/或顯示系統(tǒng)可以包含處理、顯示和/或否則再現(xiàn)音頻、視頻、顯示和/或圖像數(shù)據(jù)的任何設(shè)備??梢越?jīng)由RF (射頻)鏈路、S端子輸出(S-video)鏈路、復(fù)合視頻鏈路、分量視頻鏈路(component video link)、DVI (數(shù)字視頻接口)、模擬音頻連接,或其它類似的通信鏈路將顯示數(shù)據(jù)和音頻信號通信到音頻設(shè)備和/或顯示設(shè)備。在實現(xiàn)中,該音頻系統(tǒng)和/或顯示系統(tǒng)可以是該設(shè)備的外部組件??商鎿Q地,該音頻系統(tǒng)和/或顯示系統(tǒng)是該示例設(shè)備的集成組件。
[0056]盡管已經(jīng)以具體到特征和/或方法的語言描述了用于數(shù)據(jù)通信的編程接口的各個實施例,但是隨附的權(quán)利要求的主題不一定被限制為所描述的具體特征或方法。相反地,具體特征和方法作為用于數(shù)據(jù)通信的編程接口的示例實現(xiàn)而被公開。
【權(quán)利要求】
1.一種計算機實現(xiàn)的方法,包括: 注冊對應(yīng)于應(yīng)用的用戶模式虛擬存儲緩沖器; 從用戶模式虛擬存儲緩沖器分配完成隊列并且將該完成隊列鎖定到物理存儲器; 將完成隊列映射到內(nèi)核中的第一內(nèi)核模式系統(tǒng)地址,該完成隊列被配置成經(jīng)由該內(nèi)核模式系統(tǒng)地址從內(nèi)核模式執(zhí)行線程接收完成通知并且使得該應(yīng)用能夠經(jīng)由該用戶模式虛擬存儲緩沖器訪問該完成通知; 注冊被配置成從應(yīng)用向內(nèi)核提供數(shù)據(jù)請求的套接字,所述注冊套接字包括: 從用戶模式虛擬存儲緩沖器分配請求隊列并且將該請求隊列鎖定到物理存儲器;將請求隊列映射到第二內(nèi)核模式系統(tǒng)地址,該請求隊列被配置成經(jīng)由該用戶模式虛擬存儲緩沖器從該應(yīng)用接收數(shù)據(jù)并且使得內(nèi)核模式執(zhí)行線程能夠經(jīng)由第二內(nèi)核模式系統(tǒng)地址訪問該數(shù)據(jù);以及 向該套接字識別該完成隊列。
2.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)的方法,其中所述注冊用戶模式虛擬存儲緩沖器還包括向應(yīng)用發(fā)送該緩沖器的注冊識別符。
3.根據(jù)權(quán)利要求2所述的計算機實現(xiàn)的方法,進一步包括: 從該應(yīng)用接收請求以便內(nèi)核處理請求隊列中的數(shù)據(jù),該請求包含緩沖器的注冊識別符;以及 發(fā)布系統(tǒng)調(diào)用到內(nèi)核以便內(nèi) 核模式執(zhí)行線程處理該請求。
4.根據(jù)權(quán)利要求3所述的計算機實現(xiàn)的方法,其中所述內(nèi)核模式執(zhí)行線程被配置成通過經(jīng)由第二內(nèi)核模式系統(tǒng)地址從請求隊列找回數(shù)據(jù)來處理該請求。
5.根據(jù)前面權(quán)利要求3所述的計算機實現(xiàn)的方法,進一步包括接收完成隊列中的完成通知,當(dāng)請求被處理時,由內(nèi)核模式執(zhí)行線程經(jīng)由內(nèi)核模式虛擬存儲緩沖器在完成隊列中公布該完成通知。
6.根據(jù)權(quán)利要求5所述的計算機實現(xiàn)的方法,其中所述應(yīng)用被配置用于: 經(jīng)由用戶模式虛擬存儲緩沖器監(jiān)視完成隊列來探測由內(nèi)核模式執(zhí)行線程公布的完成通知,該完成通知向應(yīng)用指示該請求已經(jīng)由內(nèi)核模式執(zhí)行線程所處理;以及為響應(yīng)于探測到完成通知,而針對附加請求重用該請求隊列。
7.根據(jù)權(quán)利要求3所述的計算機實現(xiàn)的方法,進一步包括從應(yīng)用接收附加請求以便內(nèi)核處理請求隊列中的附加數(shù)據(jù),并且內(nèi)核模式執(zhí)行線程處理該附加請求而無需向內(nèi)核發(fā)布附加系統(tǒng)調(diào)用。
8.一種計算設(shè)備,包括: 至少存儲器和處理器來實現(xiàn)編程接口,該編程接口被配置成: 從對應(yīng)于應(yīng)用的用戶模式虛擬存儲緩沖器分配請求隊列和完成隊列; 將該請求隊列和該完成隊列鎖定到物理存儲器;以及 將該請求隊列和完成隊列映射到內(nèi)核中的內(nèi)核模式系統(tǒng)地址來使得內(nèi)核模式執(zhí)行線程能夠訪問該請求隊列和完成隊列。
9.根據(jù)權(quán)利要求8所述的計算設(shè)備,其中所述編程接口被進一步配置成: 從應(yīng)用接收請求以便內(nèi)核處理請求隊列中的數(shù)據(jù);以及 向內(nèi)核發(fā)布系統(tǒng)調(diào)用以便內(nèi)核模式執(zhí)行線程處理該請求,該內(nèi)核模式執(zhí)行線程被進一步配置成處理來自該應(yīng)用的附加請求。
10.根據(jù)權(quán)利要求9所述的計算設(shè)備,其中所述內(nèi)核模式執(zhí)行線程被配置成通過從請求隊列找回數(shù)據(jù)來處理來自該應(yīng)用的請求,并且其中所述內(nèi)核模式執(zhí)行線程被進一步配置成處理來自該應(yīng)用的附加請求 而無需編程接口發(fā)布附加的系統(tǒng)調(diào)用。
【文檔編號】G06F9/06GK103608767SQ201280030914
【公開日】2014年2月26日 申請日期:2012年6月13日 優(yōu)先權(quán)日:2011年6月23日
【發(fā)明者】O.N.埃爾圖蓋, K.E.霍爾頓, J.尼維爾特 申請人:微軟公司