專利名稱:靈活協(xié)議堆棧的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及協(xié)議堆棧及協(xié)議堆棧內(nèi)的協(xié)議層,尤其涉及諸如移動(dòng)電話,膝上計(jì)算機(jī)及基站的通信終端,但不限于此。
背景技術(shù):
諸如移動(dòng)電話,膝上計(jì)算機(jī)及基站的通信設(shè)備越來(lái)越需要支持具有不同結(jié)構(gòu)的多協(xié)議堆棧以允許支持多個(gè)無(wú)線接入網(wǎng)絡(luò)標(biāo)準(zhǔn)(同時(shí)潛在),其潛在地支持不同可選特性。例如,膝上計(jì)算機(jī)可能需要支持無(wú)線局域網(wǎng),GSM或UMTS以及藍(lán)牙上的安全和非安全因特網(wǎng)訪問(wèn)。除鏈路層上的加密之外被提供為IP協(xié)議堆棧內(nèi)VPN特性的一部分的安全性,被提供為協(xié)議堆棧內(nèi)的不同選項(xiàng)。然而,重要的是非加密分組不被傳送到其它非安全性(或低安全性)堆棧。因此,需要在安全框架上提供支持這些不同通信標(biāo)準(zhǔn)的協(xié)議堆棧。理想地,這些協(xié)議堆棧應(yīng)當(dāng)可重構(gòu),以允許通過(guò)下載新協(xié)議軟件模塊來(lái)支持新通信標(biāo)準(zhǔn)或選項(xiàng),和對(duì)現(xiàn)有標(biāo)準(zhǔn)的擴(kuò)展。另外,通信設(shè)備越來(lái)越需要能夠高效使用不充足電池和射頻資源。
因此,需要能夠安裝通信軟件以允許新空中接口技術(shù)和可選特性,和對(duì)那些技術(shù)的擴(kuò)展,包含附加功能,諸如增強(qiáng)安全性,性能或功耗優(yōu)化。
通常,協(xié)議堆棧的重新配置需要進(jìn)行協(xié)議堆棧軟件的模塊化(modularisation),使得層之間的接口不動(dòng)態(tài)變化,并且是明確定義的。協(xié)議堆棧和網(wǎng)絡(luò)接口驅(qū)動(dòng)軟件框架存在于許多操作系統(tǒng)中,以檢查協(xié)議(或驅(qū)動(dòng)程序)模塊符合這些接口定義的正確版本,并且接著使用執(zhí)行環(huán)境(操作系統(tǒng))特定機(jī)構(gòu)把模塊安裝到系統(tǒng)中。也可以進(jìn)行測(cè)量以驗(yàn)證軟件,并且對(duì)由協(xié)議軟件執(zhí)行的功能實(shí)施限制。然而,這些限制通常不考慮上述協(xié)議堆棧方案的上下文,這些方案根據(jù)支持的服務(wù)類型可以對(duì)安全性(執(zhí)行環(huán)境)保護(hù)措施和操作具有不同要求。并且,這些現(xiàn)有方案不考慮使用多個(gè)執(zhí)行環(huán)境實(shí)現(xiàn)協(xié)議堆棧方案。
通常,移動(dòng)通信設(shè)備的協(xié)議堆棧由單個(gè)廠商提供。將來(lái),終端設(shè)備將需要更加靈活的協(xié)議堆棧以支持不同通信技術(shù),并且多個(gè)廠商可以參與協(xié)議堆棧解決方案。這在可能需要支持具有許多可選特性的若干標(biāo)準(zhǔn)的無(wú)線終端中尤其重要。因此,允許協(xié)議堆棧的增量更新是非常吸引人的。
協(xié)議堆棧由一組層構(gòu)成,其中每個(gè)層可以被視作對(duì)所接收的分組或消息執(zhí)行一系列預(yù)定步驟(對(duì)應(yīng)于協(xié)議)的軟件進(jìn)程,并且與某個(gè)協(xié)議實(shí)現(xiàn)相關(guān)。多個(gè)邏輯協(xié)議堆棧可以在指定系統(tǒng)中被實(shí)例化,例如使用多線程,以同時(shí)支持相同基本類型的多個(gè)傳輸類或網(wǎng)絡(luò)接口。相同協(xié)議堆棧的多個(gè)邏輯實(shí)例通常通過(guò)對(duì)所有這些邏輯協(xié)議堆棧實(shí)例使用單個(gè)軟件(協(xié)議堆棧配置)方案來(lái)實(shí)現(xiàn)。然而,這限制了對(duì)不同邏輯實(shí)例提供不同安全性以及執(zhí)行環(huán)境優(yōu)化的靈活性。
如果所有模塊根據(jù)所需時(shí)間性(timeliness)和使用的協(xié)議定義成功交互,則僅實(shí)現(xiàn)協(xié)議堆棧的期望特性。當(dāng)多數(shù)協(xié)議依賴不同設(shè)備上協(xié)議堆棧之間的交互以建立和維護(hù)通信連接時(shí),這還將取決于多個(gè)設(shè)備上的協(xié)議堆棧實(shí)現(xiàn)。允許軟件層的動(dòng)態(tài)插入替換或修改的靈活協(xié)議堆棧總是易受欺騙軟件(可以是惡意的,或僅是運(yùn)轉(zhuǎn)不良的)的攻擊,這些軟件通過(guò)不服從協(xié)議定義,發(fā)送分組到錯(cuò)誤接收方,破壞分組,形成不正確或無(wú)效分組,或截取和傳送分組以故意竊聽(eavesdrop)或獲得對(duì)安全連接的訪問(wèn),或簡(jiǎn)單停轉(zhuǎn)(掛起),能夠影響協(xié)議堆棧的總體操作或安全性。
這個(gè)問(wèn)題現(xiàn)在的解決辦法是使用操作系統(tǒng)特定機(jī)構(gòu)約束協(xié)議軟件的功能,以最小化欺騙行為的影響,并且允許檢測(cè)和清除違規(guī)模塊。
WO 02/28052公開了具有可調(diào)整協(xié)議的無(wú)線網(wǎng)絡(luò)接口,所述協(xié)議使用參數(shù)定義可編程協(xié)議堆棧行為。這允許通過(guò)使用不同參數(shù)進(jìn)行限量的重新配置。然而不允許動(dòng)態(tài)插入新協(xié)議軟件模塊或?qū)?。使用參?shù)定義可編程協(xié)議堆棧行為的可調(diào)整協(xié)議具有更加可預(yù)測(cè)的行為,因?yàn)閮H可以進(jìn)行限量的重新配置。它們提供的靈活性不及允許動(dòng)態(tài)插入新協(xié)議軟件模塊的協(xié)議堆棧。
US 5751972公開了運(yùn)行期間動(dòng)態(tài)配置計(jì)算機(jī)以使用網(wǎng)絡(luò)上的不同協(xié)議建立數(shù)據(jù)傳送路徑。通過(guò)使用操作系統(tǒng)特定鏈接機(jī)構(gòu),實(shí)現(xiàn)協(xié)議堆棧的組成(composition)。這限制了協(xié)議堆棧的靈活性,即每個(gè)協(xié)議堆棧模塊必須符合特定操作系統(tǒng)相關(guān)接口定義。并且,只有有限范圍的協(xié)議模塊可以用來(lái)保證層之間的交互是明確定義的,以便堆棧會(huì)成功操作。
WO 01/88707公開了靈活協(xié)議堆棧結(jié)構(gòu),其在協(xié)議堆棧的每個(gè)層之間使用活動(dòng)編程接口層,該堆棧在協(xié)議層上面和下面之間提供靈活鏈路,使得鏈路在運(yùn)行時(shí)刻可以變化。然而,這些附加中間層增加了堆棧的復(fù)雜性,并且如果需要實(shí)現(xiàn)混合執(zhí)行環(huán)境,則會(huì)嚴(yán)重降低其性能。并且,軟件模塊的鏈接以特定于執(zhí)行環(huán)境和編程語(yǔ)言的方式(Java虛擬機(jī))進(jìn)行,并且為利用Java中的動(dòng)態(tài)類加載概念而進(jìn)行優(yōu)化,以允許協(xié)議堆棧的動(dòng)態(tài)重新配置。
發(fā)明內(nèi)容
概括地講,在一個(gè)方面,本發(fā)明提供一種靈活協(xié)議堆棧,其對(duì)用于協(xié)議堆棧軟件層之間的交互的特定于執(zhí)行環(huán)境和/或編程語(yǔ)言的特性進(jìn)行抽象,因而允許不同軟件層在不同執(zhí)行環(huán)境中執(zhí)行,并且用不同編程語(yǔ)言編寫。這通過(guò)以下方式來(lái)實(shí)現(xiàn),即實(shí)現(xiàn)為工作存儲(chǔ)器中的代碼模塊的層傳遞在信號(hào)內(nèi),或作為模塊入口點(diǎn)函數(shù)參數(shù)的一組執(zhí)行環(huán)境函數(shù)指針,以允許模塊自身能夠發(fā)送信號(hào)到其它模塊,而無(wú)需直接執(zhí)行不同模塊(協(xié)議層),或模塊和操作系統(tǒng)之間的鏈接。這與使操作系統(tǒng)“了解”每個(gè)模塊的格式的方式相反,該方式需要模塊的非常具體的格式以能夠被鏈接。因而各層是“語(yǔ)言無(wú)關(guān)”的,并且能夠使用由執(zhí)行環(huán)境函數(shù)指針提供的公共操作系統(tǒng)函數(shù)彼此交互。
針對(duì)說(shuō)明書的目的,術(shù)語(yǔ)協(xié)議堆棧層或軟件層是指功能實(shí)體,其能夠?qū)崿F(xiàn)為載入到工作存儲(chǔ)器并且由執(zhí)行環(huán)境執(zhí)行或“運(yùn)行”的代碼塊或模塊,并且其基于預(yù)定步驟集合(對(duì)應(yīng)于協(xié)議)處理傳入信號(hào)或分組。該層輸出已經(jīng)基于這個(gè)協(xié)議進(jìn)行處理的信號(hào)或分組。協(xié)議堆棧中層的概念是本領(lǐng)域技術(shù)人員所知的,OSI標(biāo)準(zhǔn)給出所述概念的最優(yōu)例子,該標(biāo)準(zhǔn)為支持此概念根據(jù)其角色定義了通信協(xié)議堆棧內(nèi)的軟件層。
模塊被定義成在諸如包含工作存儲(chǔ)器,相關(guān)處理器及操作系統(tǒng)的硬件平臺(tái)的執(zhí)行環(huán)境(以及可選的虛擬機(jī)環(huán)境)中編譯或可執(zhí)行的程序代碼塊(特別是對(duì)象或執(zhí)行代碼)。在這個(gè)說(shuō)明書中,模塊將通常對(duì)應(yīng)于協(xié)議堆棧中的功能層。因而,模塊將基于與相應(yīng)層相關(guān)的協(xié)議對(duì)傳入信號(hào)執(zhí)行一或多個(gè)預(yù)定步驟或處理。
邏輯層實(shí)例(L.L.I)是層軟件(模塊)的邏輯實(shí)例,例如對(duì)應(yīng)于單線程。對(duì)應(yīng)于相同層軟件的多個(gè)LLI是可實(shí)現(xiàn)的,例如使用具有相關(guān)代碼模塊的多個(gè)線程。在本發(fā)明中可以不同地配置(及優(yōu)化)每個(gè)LLI。
在一個(gè)實(shí)施例中,函數(shù)指針包括操作系統(tǒng)函數(shù)表,其中模塊可以調(diào)用該表以執(zhí)行諸如“create_new_LLI”的函數(shù)及其它操作指定函數(shù),以便與其它模塊或?qū)蛹爸T如存儲(chǔ)器內(nèi)分配和訪問(wèn)信號(hào)的數(shù)據(jù)交互。
在另一個(gè)實(shí)施例中,使用虛擬操作系統(tǒng)函數(shù)表,該函數(shù)表的每個(gè)函數(shù)映射到若干不同執(zhí)行環(huán)境(操作系統(tǒng))中的相應(yīng)函數(shù)。因而,通過(guò)使用虛擬操作系統(tǒng)函數(shù)表,軟件層和模塊可以是操作系統(tǒng)或執(zhí)行環(huán)境無(wú)關(guān)的,以及語(yǔ)言無(wú)關(guān)的。
具體在一個(gè)方面,本發(fā)明提供一種靈活協(xié)議堆棧,包括若干軟件層,每個(gè)層包括綁定消息處理程序,用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它堆棧層交互,使得該堆棧動(dòng)態(tài)可配置(并且通過(guò)再次使用綁定消息重新綁定而可重新配置)。因而,對(duì)一個(gè)層的綁定命令指示該一個(gè)層應(yīng)當(dāng)將其輸出傳送到的另一層。以編程語(yǔ)言無(wú)關(guān),最好是執(zhí)行環(huán)境無(wú)關(guān)的方式支持先前提到的交互,使得層之間接口能夠以不如先前嚴(yán)格的方式重新定義。這獨(dú)立地支持層軟件的動(dòng)態(tài)升級(jí)(例如不需要公共層接口定義的升級(jí)),并且支持多個(gè)廠商的協(xié)議堆棧的提供。
這個(gè)方案避免了在一些已知結(jié)構(gòu)中使用的每個(gè)協(xié)議堆棧層之間特定于語(yǔ)言或執(zhí)行環(huán)境的中間接口層的必要性。接口層的限制在于,函數(shù)調(diào)用約定(參數(shù)傳遞機(jī)制)和參數(shù)語(yǔ)法必須被明確定義,并且被所有軟件模塊正確理解和實(shí)現(xiàn)。因?yàn)檫@些機(jī)制普遍依賴于操作系統(tǒng)和編程語(yǔ)言,并且甚至也依賴于編譯器,因此限制了這種解決方案在異構(gòu)環(huán)境中的靈活性。因此,本發(fā)明還允許使用用不同語(yǔ)言編寫和/或在異構(gòu)處理環(huán)境中操作的軟件層。
具體在另一方面,提供了一種提供用于在處理設(shè)備中處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括加載軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)(generic function)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于該通用函數(shù)的通用函數(shù)指針;加載函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的設(shè)備特定函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)設(shè)備特定函數(shù);基于映射的設(shè)備特定函數(shù)執(zhí)行該模塊,以便基于該協(xié)議層處理所接收信號(hào)。
最好該模塊被設(shè)置成與其它模塊交換對(duì)應(yīng)于信號(hào)的協(xié)議消息,所述其它模塊被設(shè)置成基于對(duì)應(yīng)于其它層的一組通用函數(shù)處理信號(hào)。
最好該方法還包括加載其它軟件模塊到存儲(chǔ)器中,其它模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;針對(duì)每個(gè)其它模塊加載函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的設(shè)備特定函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)設(shè)備特定函數(shù);基于所映射的設(shè)備特定函數(shù)執(zhí)行該其它模塊,以便基于該協(xié)議層處理所接收信號(hào)。
最好該方法還包括接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息的所述或每個(gè)加載的軟件模塊,第一模塊被設(shè)置成與由所述綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該模塊具有用于處理協(xié)議消息的不同配置選項(xiàng)。
最好該綁定消息包括用于確定在模塊執(zhí)行中實(shí)現(xiàn)哪個(gè)配置選項(xiàng)的標(biāo)識(shí)符。
最好該協(xié)議消息,綁定消息和通用函數(shù)指針具有公共通用格式。
最好該方法還包括加載第二軟件模塊到存儲(chǔ)器中,該第二模塊被設(shè)置成基于對(duì)應(yīng)于層中的第二層的一組通用函數(shù)接收和處理信號(hào),該第二模塊在第二函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二設(shè)備特定函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二設(shè)備特定函數(shù);基于所映射的第二設(shè)備特定函數(shù)執(zhí)行該第二模塊,以便基于所述協(xié)議層處理所接收信號(hào);使得所述第一和第二模塊在不同執(zhí)行或特定于設(shè)備的環(huán)境中被執(zhí)行。
最好該模塊是語(yǔ)言無(wú)關(guān)的。
最好該方法還包括提供高級(jí)軟件語(yǔ)言代碼,用于基于對(duì)應(yīng)于所述層的所述一組通用函數(shù)處理該信號(hào);以及將該代碼編譯成語(yǔ)言無(wú)關(guān)的軟件模塊。
最好該方法還包括基于所述映射的設(shè)備特定函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供該模塊的2個(gè)邏輯實(shí)例。
最好該方法還包括加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二設(shè)備特定函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二設(shè)備特定函數(shù);以及除所述第一執(zhí)行過(guò)程之外,基于所述映射的第二設(shè)備特定函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供所述模塊的2個(gè)邏輯實(shí)例,使得該模塊的2個(gè)實(shí)例基于不同函數(shù)映射對(duì)象被執(zhí)行。
最好2個(gè)執(zhí)行過(guò)程在不同執(zhí)行或特定于設(shè)備的環(huán)境中執(zhí)行。
最好該方法還包括接收包括另一模塊的標(biāo)識(shí)符的第二綁定消息的被加載軟件模塊的第二實(shí)例,第一模塊的第二實(shí)例被設(shè)置成與由第二綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該模塊具有用于處理所述協(xié)議消息的、針對(duì)每個(gè)所述實(shí)例的不同配置選項(xiàng),并且其中每個(gè)所述綁定消息包括用于確定在所述相應(yīng)模塊實(shí)例的執(zhí)行中實(shí)現(xiàn)哪些配置選項(xiàng)的標(biāo)識(shí)符。
最好所述或每個(gè)模塊在一個(gè)單獨(dú)執(zhí)行過(guò)程中被執(zhí)行。最好每個(gè)執(zhí)行過(guò)程是線程。
最好所述協(xié)議消息的交換是由來(lái)自模塊執(zhí)行的過(guò)程中的單獨(dú)執(zhí)行過(guò)程來(lái)進(jìn)行。
最好所述消息被投送(post)到存儲(chǔ)器的永久消息隊(duì)列中,并且從該隊(duì)列中取出。
最好該方法還包括加載中間函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象在第一函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)和一或多個(gè)特定于設(shè)備的函數(shù)的中間函數(shù)指針,以便在第一函數(shù)映射對(duì)象中把所述通用函數(shù)映射到一或多個(gè)中間函數(shù)指針,并且還映射到一或多個(gè)特定于設(shè)備的函數(shù)。
最好該協(xié)議是通信協(xié)議堆棧,并且最好是無(wú)線通信協(xié)議堆棧。
具體在另一方面,本發(fā)明提供了一種提供用于在處理設(shè)備中處理信號(hào)的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的方法,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該協(xié)議堆棧包括若干軟件模塊,被載入到存儲(chǔ)器中,每個(gè)模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在相應(yīng)函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;若干函數(shù)映射對(duì)象,被載入存儲(chǔ)器中,所述對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到相應(yīng)模塊中的一或多個(gè)特定于設(shè)備的函數(shù);基于所映射的特定于設(shè)備的函數(shù)執(zhí)行所述模塊,以便基于相應(yīng)協(xié)議層處理所接收信號(hào);該方法包括每個(gè)模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,該接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該方法還包括加載升級(jí)軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;加載函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);基于所映射的特定于設(shè)備的函數(shù)執(zhí)行模塊,以便基于該協(xié)議層處理所接收信號(hào);所述模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,所述接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
具體在另一方面,本發(fā)明提供一種基于協(xié)議處理信號(hào)的方法,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào);把通用函數(shù)映射到特定于設(shè)備的函數(shù);執(zhí)行所映射的特定于設(shè)備的函數(shù)以便基于所述協(xié)議層處理所接收信號(hào)。
最好該方法還包括基于對(duì)應(yīng)于其它所述層的一組通用函數(shù)接收和處理所述信號(hào);把通用函數(shù)映射到特定于設(shè)備的函數(shù);執(zhí)行所映射的特定于設(shè)備的函數(shù)以便基于所述其它協(xié)議層處理所接收信號(hào)。
最好接收和處理被設(shè)置成使得通用函數(shù)的順序?qū)?yīng)于協(xié)議堆棧。
最好該方法還包括接收綁定消息以便確定處理所述信號(hào)所依據(jù)的通用函數(shù)的順序。
最好基于每個(gè)層的通用函數(shù)的接收和處理通過(guò)執(zhí)行軟件模塊來(lái)實(shí)現(xiàn)。
最好該方法還包括把通用函數(shù)映射到中間函數(shù),接著映射該中間函數(shù)到所述特定于設(shè)備的函數(shù)。
在另一方面,本發(fā)明提供一種提供用于處理信號(hào)的通信協(xié)議的設(shè)備,該設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括用于加載軟件模塊到存儲(chǔ)器中的裝置,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;用于加載函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
最好該模塊被設(shè)置成與其它模塊交換對(duì)應(yīng)于信號(hào)的協(xié)議消息,所述其它模塊被設(shè)置成基于對(duì)應(yīng)于其它層的一組通用函數(shù)處理信號(hào)。
最好該設(shè)備還包括用于加載其它軟件模塊到存儲(chǔ)器中的裝置,所述其它模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;用于針對(duì)每個(gè)其它模塊加載函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行所述其它模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
最好該設(shè)備還包括用于向所述或每個(gè)加載的軟件模塊發(fā)送包括另一所述模塊的標(biāo)識(shí)符的綁定消息的裝置,第一模塊被設(shè)置成與由所述綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該模塊具有用于處理協(xié)議消息的不同配置選項(xiàng)。
最好該綁定消息包括用于確定在模塊執(zhí)行中實(shí)現(xiàn)哪個(gè)配置選項(xiàng)的標(biāo)識(shí)符。
最好該協(xié)議消息,綁定消息和通用函數(shù)指針具有公共通用格式。
最好該設(shè)備還包括用于加載第二軟件模塊到存儲(chǔ)器中的裝置,該第二模塊被設(shè)置成基于對(duì)應(yīng)于所述層中的第二層的一組通用函數(shù)接收和處理信號(hào),該第二模塊在第二函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;用于加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);用于基于所映射的第二特定于設(shè)備的函數(shù)執(zhí)行該第二模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置;使得所述第一和第二模塊在不同執(zhí)行或特定于設(shè)備的環(huán)境中被執(zhí)行。
最好該模塊是語(yǔ)言無(wú)關(guān)的。
最好該設(shè)備還包括用于將基于對(duì)應(yīng)于所述層的所述一組通用函數(shù)來(lái)處理信號(hào)的高級(jí)軟件語(yǔ)言代碼編譯成所述語(yǔ)言無(wú)關(guān)軟件模塊的裝置。
最好該設(shè)備還包括用于基于所述映射的特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供該模塊的2個(gè)邏輯實(shí)例的裝置。
最好該設(shè)備還包括用于加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);以及除所述第一執(zhí)行裝置之外,用于基于所述映射的第二特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供所述模塊的2個(gè)邏輯實(shí)例,使得該模塊的2個(gè)實(shí)例基于不同函數(shù)映射對(duì)象被執(zhí)行的裝置。
最好所述2個(gè)執(zhí)行過(guò)程在不同執(zhí)行或特定于設(shè)備的環(huán)境中執(zhí)行。
最好該設(shè)備還包括接收包括另一模塊的標(biāo)識(shí)符的第二綁定消息的所加載軟件模塊的第二實(shí)例,第一模塊的第二實(shí)例被設(shè)置成與由第二綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該模塊具有用于處理所述協(xié)議消息、針對(duì)每個(gè)所述實(shí)例的不同配置選項(xiàng),并且其中每個(gè)所述綁定消息包括用于確定在所述相應(yīng)模塊實(shí)例的執(zhí)行中實(shí)現(xiàn)哪個(gè)所述配置選項(xiàng)的標(biāo)識(shí)符。
最好所述或每個(gè)模塊在一個(gè)單獨(dú)執(zhí)行過(guò)程中被執(zhí)行。最好每個(gè)執(zhí)行裝置包括線程。
最好該設(shè)備還包括用于加載中間函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象在第一函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)和一或多個(gè)特定于設(shè)備的函數(shù)的中間函數(shù)指針,以便在第一函數(shù)映射對(duì)象中把所述通用函數(shù)映射到一或多個(gè)中間函數(shù)指針,并且還映射到一或多個(gè)特定于設(shè)備的函數(shù)。
最好該設(shè)備是通信終端,基站或網(wǎng)絡(luò)設(shè)備;尤其是無(wú)線相關(guān)設(shè)備。
具體在另一方面,本發(fā)明提供一種用于提供在處理設(shè)備中處理信號(hào)的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的設(shè)備,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括若干軟件模塊,被載入到存儲(chǔ)器中,每個(gè)模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在相應(yīng)函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;若干函數(shù)映射對(duì)象,被載入存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到相應(yīng)模塊中的一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊,以便基于所述相應(yīng)協(xié)議層處理所接收信號(hào)的裝置。
最好該設(shè)備還包括用于向每個(gè)模塊發(fā)送包括另一所述模塊的標(biāo)識(shí)符的綁定消息的裝置,所述接收模塊被設(shè)置成與由所述相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
最好該設(shè)備還包括用于加載升級(jí)軟件模塊到存儲(chǔ)器中的裝置,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于該通用函數(shù)的通用函數(shù)指針;用于加載函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置;所述模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,所述接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
具體在另一方面,提供一種用于基于協(xié)議處理信號(hào)的設(shè)備,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括用于基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào)的裝置;用于映射通用函數(shù)到特定于設(shè)備的函數(shù)的裝置;用于執(zhí)行所映射的特定于設(shè)備的函數(shù),以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
最好該設(shè)備還被設(shè)置成基于對(duì)應(yīng)于所述層的其它層的一組通用函數(shù)處理該信號(hào);用于映射通用函數(shù)到特定于設(shè)備的函數(shù)的裝置;用于執(zhí)行所映射的特定于設(shè)備的函數(shù),以便基于所述其它協(xié)議層處理所接收信號(hào)的裝置。
最好接收和處理被設(shè)置成使得通用函數(shù)的順序?qū)?yīng)于協(xié)議堆棧。最好該設(shè)備還包括用于接收綁定消息以便確定處理所述信號(hào)所依據(jù)的通用函數(shù)的順序的裝置。
最好基于每個(gè)層的通用函數(shù)的接收和處理通過(guò)執(zhí)行軟件模塊來(lái)實(shí)現(xiàn)。
最好該設(shè)備還包括用于把通用函數(shù)映射到中間函數(shù),接著映射該中間函數(shù)到所述特定于設(shè)備的函數(shù)的裝置。
還提供一種計(jì)算機(jī)或處理設(shè)備程序,用于控制處理設(shè)備以執(zhí)行任意以上所定義的方法。還提供一種基于任意以上所定義的設(shè)備進(jìn)行配置的可配置設(shè)備。還提供了一種攜帶處理器控制代碼的承載介質(zhì),所述代碼用于實(shí)現(xiàn)基于任意以上定義的方法或設(shè)備。
還提供了基于以上定義的軟件模塊,其適于執(zhí)行或?qū)崿F(xiàn)以上所定義的方法和設(shè)備。實(shí)現(xiàn)協(xié)議層和映射對(duì)象的模塊可以可選地被實(shí)現(xiàn)為其它數(shù)據(jù)結(jié)構(gòu)。
還提供可以實(shí)現(xiàn)為軟件模塊的配置管理器,并且該配置管理器被配置成發(fā)送綁定消息到實(shí)現(xiàn)協(xié)議堆棧的所述層的模塊。配置管理器也可以被配置成加載該模塊到工作存儲(chǔ)器并且傳遞相應(yīng)映射對(duì)象到加載的模塊。
管理器也可以被配置成下載用于實(shí)現(xiàn)修改的協(xié)議堆棧的新的或替換模塊,通過(guò)傳遞綁定消息到新的或替換模塊,并且在適當(dāng)?shù)那闆r下傳遞到被替換的模塊,重新配置該協(xié)議堆棧。
還提供編譯器,用于編譯高級(jí)程序代碼為模塊和/或映射對(duì)象,以及配置管理器。
還提供一種方法和設(shè)備,用于發(fā)送用于以上所定義的方法和設(shè)備的模塊。還提供一種方法和設(shè)備,用于發(fā)送對(duì)應(yīng)于用于以上所定義的方法和設(shè)備的模塊的程序代碼;并且可選地,用于編譯該代碼以產(chǎn)生相應(yīng)模塊。
具體在另一個(gè)方面,提供了一種靈活協(xié)議堆棧,包括若干協(xié)議軟件層,每個(gè)層包括用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它協(xié)議堆棧層交互,使得該堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可配置的裝置。
最好該交互包括發(fā)送和/或接收來(lái)自其它所述層的協(xié)議消息。
最好該綁定消息包括與其它層相關(guān)、唯一標(biāo)識(shí)協(xié)議消息被發(fā)送到的位置的標(biāo)識(shí)符。
最好該綁定和協(xié)議消息具有公共通用格式。
最好每個(gè)層還包括通用函數(shù)和用于把該函數(shù)映射到對(duì)應(yīng)于運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
最好該裝置包括在運(yùn)行時(shí)刻接收綁定消息中的操作系統(tǒng)表。
最好該表具有從每個(gè)通用函數(shù)到相應(yīng)特定于執(zhí)行環(huán)境的函數(shù)的指針。
可選地,該表具有對(duì)應(yīng)于每個(gè)通用函數(shù)的特定于執(zhí)行環(huán)境的函數(shù)。
最好所述層的至少兩個(gè)層在不同執(zhí)行環(huán)境中運(yùn)行,或用不同編程語(yǔ)言編寫。
最好所述層的所述或每個(gè)執(zhí)行環(huán)境被設(shè)置成為每個(gè)層分配標(biāo)準(zhǔn)操作系統(tǒng),或定制執(zhí)行線程或進(jìn)程。
最好該綁定消息還包括所述層的配置信息。
最好所述層被實(shí)現(xiàn)為所述層的若干邏輯層實(shí)例之一。每個(gè)邏輯層實(shí)例在不同執(zhí)行環(huán)境中可唯一標(biāo)識(shí),可配置以及可執(zhí)行。
還提供了包括基于以上定義的一或多個(gè)協(xié)議堆棧的通信設(shè)備。
最好該協(xié)議堆棧提供一種無(wú)線通信鏈路或網(wǎng)絡(luò)。
還提供了實(shí)現(xiàn)基于以上定義的協(xié)議堆棧的方法。
還提供了實(shí)現(xiàn)基于以上定義的協(xié)議堆棧的設(shè)備。
還提供了一種用于靈活協(xié)議堆棧的協(xié)議軟件層,該協(xié)議堆棧包括若干協(xié)議軟件層,該協(xié)議軟件層包括用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它協(xié)議軟件層交互,使得該堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可配置的裝置。
具體在另一方面,提供一種靈活協(xié)議堆棧,包括若干協(xié)議軟件層,每個(gè)層包括通用函數(shù)和用于把所述函數(shù)映射到對(duì)應(yīng)于將運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
最好該映射裝置包括用于在運(yùn)行時(shí)刻接收包含操作系統(tǒng)函數(shù)映射的消息的裝置。
最好該映射具有從每個(gè)通用函數(shù)到相應(yīng)的特定于執(zhí)行環(huán)境的函數(shù)的指針或其它引用裝置。
最好該映射具有對(duì)應(yīng)于每個(gè)通用函數(shù)的特定于執(zhí)行環(huán)境的函數(shù)。
最好該映射具有從每個(gè)通用函數(shù)到相應(yīng)虛擬操作系統(tǒng)映射的指針或其它引用形式,其中虛擬操作系統(tǒng)映射允許特定于執(zhí)行環(huán)境的函數(shù)被調(diào)用。
可選地,該映射具有對(duì)應(yīng)于每個(gè)所述通用函數(shù)的虛擬操作系統(tǒng)函數(shù),每個(gè)虛擬操作系統(tǒng)函數(shù)對(duì)應(yīng)于特定于執(zhí)行環(huán)境的函數(shù)。
最好所述堆棧還包括用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它協(xié)議軟件層交互,使得所述堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可配置的裝置。
最好該交互包括發(fā)送和/或接收來(lái)自其它所述層的協(xié)議消息。
最好該綁定消息包括與所述其它層相關(guān)、指示協(xié)議消息被發(fā)送到的位置的標(biāo)識(shí)符。
最好該綁定和協(xié)議消息具有公共通用格式。
最好所述層的至少兩個(gè)層在不同執(zhí)行環(huán)境中運(yùn)行和/或用不同編程語(yǔ)言編寫。
最好所述層的所述或每個(gè)執(zhí)行環(huán)境被設(shè)置成為每個(gè)層分配標(biāo)準(zhǔn)操作系統(tǒng),或定制執(zhí)行線程或進(jìn)程。
最好該綁定消息還包括所述層的配置信息。
最好所述層被實(shí)現(xiàn)為所述層的若干邏輯層實(shí)例之一。每個(gè)邏輯層實(shí)例在不同執(zhí)行環(huán)境中被可唯一標(biāo)識(shí),可配置以及可執(zhí)行。
最好相同層的不同層實(shí)例能夠在不同執(zhí)行環(huán)境被運(yùn)行。
最好相同層的不同層實(shí)例能夠被不同地配置。
還提供了包括基于以上定義的一或多個(gè)協(xié)議堆棧的通信設(shè)備。
最好該協(xié)議堆棧提供一種無(wú)線通信鏈路或網(wǎng)絡(luò)。
還提供了實(shí)現(xiàn)基于以上定義的協(xié)議堆棧的方法。
還提供了實(shí)現(xiàn)基于以上定義的協(xié)議堆棧的設(shè)備。
還提供一種用于靈活協(xié)議堆棧的協(xié)議軟件層,該靈活協(xié)議堆棧包括若干協(xié)議軟件層,該協(xié)議軟件層包括通用函數(shù)和用于把所述函數(shù)映射到對(duì)應(yīng)于運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
具體在另一方面,還提供一種用于基于動(dòng)態(tài)可配置協(xié)議堆棧處理信號(hào)的設(shè)備;該設(shè)備包括若干處理裝置,用于基于所述協(xié)議堆棧的層處理對(duì)應(yīng)于該信號(hào)的分組;第一處理裝置,被設(shè)置成傳遞基于堆棧的所述第一協(xié)議層處理的分組到用于基于堆棧的另一協(xié)議層進(jìn)行處理的另一處理裝置;該第一處理裝置具有用于動(dòng)態(tài)改變分組所傳遞到的其它處理裝置,使得該第一處理裝置在改變期間繼續(xù)處理分組的裝置。
最好所述處理裝置是在由處理器和存儲(chǔ)器裝置提供的執(zhí)行環(huán)境中執(zhí)行的軟件代碼模塊。
最好用于動(dòng)態(tài)改變的裝置包括用于接收包括對(duì)應(yīng)于傳遞分組到達(dá)的其它模塊的標(biāo)識(shí)符的綁定消息,該標(biāo)識(shí)符由所述第一模塊用以傳送基于堆棧的所述第一協(xié)議層處理的分組到其它模塊,以基于堆棧的另一協(xié)議層進(jìn)行處理。
具體在另一方面,還提供用于基于動(dòng)態(tài)可配置協(xié)議堆棧處理信號(hào)的設(shè)備;該設(shè)備包括處理器和存儲(chǔ)器裝置,用于執(zhí)行若干協(xié)議層軟件模塊,每個(gè)所述軟件模塊被設(shè)置成用以基于協(xié)議堆棧的協(xié)議層處理對(duì)應(yīng)于所述信號(hào)的分組;為處理器和存儲(chǔ)器裝置配置的執(zhí)行環(huán)境軟件模塊,該模塊適于執(zhí)行一或多個(gè)協(xié)議模塊;第一模塊被設(shè)置成在運(yùn)行時(shí)刻接收映射標(biāo)識(shí)符,用于把所述協(xié)議模塊中的指令映射到執(zhí)行環(huán)境模塊中的相應(yīng)指令,以便使用處理器和存儲(chǔ)器裝置運(yùn)行該協(xié)議模塊。
具體在另一方面,提供了一種用于提供在處理設(shè)備中提供處理信號(hào)的動(dòng)態(tài)可重構(gòu)通信協(xié)議的方法,該處理設(shè)備具有存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括加載軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組函數(shù)接收和處理所述信號(hào),該模塊接收對(duì)應(yīng)于存儲(chǔ)器中的另一軟件模塊的目的模塊標(biāo)識(shí)符,該另一軟件模塊被設(shè)置成基于對(duì)應(yīng)于所述層中另一層的另一組函數(shù)接收和處理所處理的信號(hào);該第一模塊被設(shè)置成發(fā)送所處理的信號(hào)到對(duì)應(yīng)于該標(biāo)識(shí)符的其它模塊;執(zhí)行該第一模塊,使得所接收的信號(hào)被該模塊處理,并且被發(fā)送到對(duì)應(yīng)于所述目的模塊標(biāo)識(shí)符的其它模塊。
這允許協(xié)議堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可重構(gòu),而不需要中間層。
具體在另一方面,提供一種靈活協(xié)議堆棧,包括若干協(xié)議軟件層,每個(gè)層包括通用函數(shù)和用于把所述函數(shù)映射到對(duì)應(yīng)于將運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
具體在另一方面,提供了一種用于在處理設(shè)備中提供用于處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括加載軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)的通用函數(shù)指針;加載函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);執(zhí)行該模塊以便基于該協(xié)議層處理所接收信號(hào)。
信號(hào)格式可以使用可擴(kuò)展模板定義來(lái)定義,并且也使用通用函數(shù)來(lái)產(chǎn)生信號(hào)及訪問(wèn)其數(shù)據(jù)單元。用于產(chǎn)生和訪問(wèn)信號(hào)數(shù)據(jù)單元的通用函數(shù)的行為可以由在運(yùn)行時(shí)刻提供的模板確定。因而允許數(shù)據(jù)存儲(chǔ)機(jī)構(gòu)和格式針對(duì)特定執(zhí)行環(huán)境而優(yōu)化,但不用使用知道其特定細(xì)節(jié)的信號(hào)數(shù)據(jù)的軟件模塊。
這允許實(shí)現(xiàn)協(xié)議堆棧的所述層的模塊是平臺(tái)和/或語(yǔ)言無(wú)關(guān)的。
通常而言,在另一方面,本發(fā)明提供一種具有若干協(xié)議層的協(xié)議堆棧,該堆棧被設(shè)置成使得存在與每個(gè)LLI相關(guān)的一個(gè)主操作系統(tǒng)執(zhí)行線程。
換句話說(shuō),當(dāng)該(所處理)分組從一個(gè)LLI傳遞到另一LLI時(shí),它只是通過(guò)通常被稱為線程消息傳遞的方法從一個(gè)線程傳送到另一個(gè)。這使得易于動(dòng)態(tài)升級(jí)或替換在協(xié)議堆棧中的一個(gè)層,而不影響協(xié)議堆棧內(nèi)的其它LLI。LLI之間傳遞的消息可以使用永久存儲(chǔ)器存儲(chǔ)機(jī)構(gòu)來(lái)排隊(duì),以允許不丟失分組地實(shí)時(shí)動(dòng)態(tài)重新配置。
具體在一個(gè)方面,提供一種用于處理信號(hào)的協(xié)議堆棧,該堆棧包括若干協(xié)議軟件層,用單獨(dú)進(jìn)程(例如線程)執(zhí)行每個(gè)層,并且每個(gè)層被設(shè)置成通過(guò)與所述進(jìn)程無(wú)關(guān)的消息來(lái)傳遞部分處理的信號(hào)到另一層。
通過(guò)提供多個(gè)執(zhí)行環(huán)境進(jìn)程以執(zhí)行一個(gè)層,可以提供每個(gè)層的多個(gè)邏輯層實(shí)例(LLI),每個(gè)LLI能夠或具有不同配置選項(xiàng),并且可選地,在不同執(zhí)行環(huán)境中執(zhí)行。
最好每個(gè)層還包括通用函數(shù)和用于把該函數(shù)映射到對(duì)應(yīng)于將運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
最好該裝置包括在運(yùn)行時(shí)刻接收綁定消息中的操作系統(tǒng)表。
最好該表具有從每個(gè)通用函數(shù)到相應(yīng)特定于執(zhí)行環(huán)境的函數(shù)的指針。
最好該表具有對(duì)應(yīng)于每個(gè)通用函數(shù)的特定于執(zhí)行環(huán)境的函數(shù)。
最好所述層的至少兩個(gè)層在不同執(zhí)行環(huán)境中運(yùn)行或用不同編程語(yǔ)言編寫。
最好所述層的所述或每個(gè)執(zhí)行環(huán)境被設(shè)置成為每個(gè)層分配標(biāo)準(zhǔn)操作系統(tǒng),或定制執(zhí)行線程或進(jìn)程。
每個(gè)所述層被實(shí)現(xiàn)為所述層的若干邏輯層實(shí)例之一。每個(gè)邏輯層實(shí)例在不同執(zhí)行環(huán)境中可唯一標(biāo)識(shí),可配置以及可執(zhí)行。
最好所述堆棧還包括用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它協(xié)議軟件層交互,使得所述堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可配置的裝置。
最好該交互包括發(fā)送和/或接收來(lái)自其它所述層的協(xié)議消息。
最好該綁定消息包括與所述其它層相關(guān)的、指示協(xié)議消息被發(fā)送到的位置的標(biāo)識(shí)符。
最好該綁定和協(xié)議消息具有公共通用格式。
最好該綁定消息還包括所述層的配置信息。
具體在另一方面,提供了一種用于在處理設(shè)備中提供用于處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義,其中每個(gè)協(xié)議層對(duì)應(yīng)于該存儲(chǔ)器中的軟件模塊;該方法包括針對(duì)每個(gè)所述層,加載被設(shè)置成基于對(duì)應(yīng)于所述層的一組函數(shù)接收和處理所述信號(hào)的軟件模塊,并且發(fā)送所述處理的信號(hào)到另一模塊;將每個(gè)所述模塊作為獨(dú)立進(jìn)程(例如線程)來(lái)執(zhí)行,從而所述處理信號(hào)獨(dú)立于所述進(jìn)程地被發(fā)送到所述其它模塊。
這允許不同模塊在不同執(zhí)行環(huán)境更加容易地操作,并且提供通過(guò)所述模塊的更好分組流。
通常而言,在另一方面,本發(fā)明提供具有若干協(xié)議層的一或多個(gè)協(xié)議堆棧,所述層可以被多次實(shí)例化為單獨(dú)邏輯實(shí)例,例如使用不同線程。
所述多個(gè)LLI可以用不同選項(xiàng)配置,例如無(wú)論加密是否被允許。所述相同層的多個(gè)實(shí)例也可以被配置成在不同執(zhí)行環(huán)境執(zhí)行,諸如在不同操作系統(tǒng)進(jìn)程內(nèi),或甚至在不同操作系統(tǒng)中。通過(guò)允許不同層實(shí)例在具有不同安全性和性能配置的不同執(zhí)行環(huán)境中運(yùn)行,這提供了額外的安全性或性能。
因而2個(gè)協(xié)議堆棧實(shí)例可以包括相同軟件協(xié)議層的不同LLI,其中每個(gè)LLI直接與其相應(yīng)堆棧內(nèi)上面和/或下面的LLI交互。
LLI之間的交互包含使用在支持相應(yīng)LLI的所述執(zhí)行環(huán)境內(nèi)容易得到支持的方法傳遞或傳送協(xié)議消息,以及也具有合適的性能特性。所使用的機(jī)構(gòu)可以針對(duì)不同LLI而不同。因此,公共命名約定和通用可擴(kuò)展消息數(shù)據(jù)格式對(duì)于所述協(xié)議和控制消息是需要的,以保證互操作性。
具體在一個(gè)方面,提供一組2個(gè)協(xié)議堆棧,每個(gè)協(xié)議堆棧包括若干協(xié)議層,其包含具有配置選項(xiàng)的公共層,所述公共層被實(shí)例化為每個(gè)所述堆棧的邏輯層實(shí)例;其中每個(gè)實(shí)例具有不同配置。
最好每個(gè)層還包括通用函數(shù)和用于把該函數(shù)映射到對(duì)應(yīng)于將運(yùn)行所述層的執(zhí)行環(huán)境的特定于執(zhí)行環(huán)境的函數(shù)的裝置。
最好該裝置包括在運(yùn)行時(shí)刻接收綁定消息中的操作系統(tǒng)表。
最好該表具有從每個(gè)通用函數(shù)到相應(yīng)特定于執(zhí)行環(huán)境的函數(shù)的指針。
最好該表具有對(duì)應(yīng)于每個(gè)通用函數(shù)的特定于執(zhí)行環(huán)境的函數(shù)。
最好所述層的至少兩個(gè)層在不同執(zhí)行環(huán)境中運(yùn)行或用不同編程語(yǔ)言編寫。
最好所述層的所述或每個(gè)執(zhí)行環(huán)境被設(shè)置成為每個(gè)層分配標(biāo)準(zhǔn)操作系統(tǒng),或定制執(zhí)行線程或進(jìn)程。
每個(gè)所述層被實(shí)現(xiàn)為所述層的若干邏輯層實(shí)例之一。每個(gè)邏輯層實(shí)例在不同執(zhí)行環(huán)境中可唯一標(biāo)識(shí),可配置以及可執(zhí)行。
最好所述堆棧還包括用于在運(yùn)行時(shí)刻接收綁定消息以確定與哪個(gè)其它協(xié)議軟件層交互,使得所述堆棧在運(yùn)行時(shí)刻動(dòng)態(tài)可配置的裝置。
最好該交互包括發(fā)送和/或接收來(lái)自其它所述層的協(xié)議消息。
最好該綁定消息包括與其它層相關(guān)、指示協(xié)議消息被發(fā)送到的位置的標(biāo)識(shí)符。
最好該綁定和協(xié)議消息具有公共通用格式。
最好該綁定消息還包括所述層的配置信息。
具體在另一方面,提供了一種用于在處理設(shè)備中提供用于處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義,其中每個(gè)協(xié)議層對(duì)應(yīng)于該存儲(chǔ)器中的軟件模塊;該方法包括針對(duì)每個(gè)層,加載被設(shè)置成基于所述層接收和處理所述信號(hào)的軟件模塊,至少一個(gè)所述模塊具有配置選項(xiàng);通過(guò)提供2個(gè)獨(dú)立執(zhí)行進(jìn)程以執(zhí)行模塊,提供具有配置選項(xiàng)的所述模塊的2個(gè)邏輯實(shí)例;針對(duì)所述模塊提供對(duì)應(yīng)于不同配置選項(xiàng)的2個(gè)配置對(duì)象;使用所述2個(gè)獨(dú)立執(zhí)行進(jìn)程執(zhí)行所述模塊,每個(gè)進(jìn)程使用不同配置對(duì)象,使得所述模塊的每個(gè)邏輯實(shí)例所接收的信號(hào)被不同地處理。
這避免了不得不進(jìn)行的所述代碼模塊的兩次拷貝,基于所述不同選項(xiàng)略微修改每個(gè)拷貝。也允許在不同執(zhí)行環(huán)境中執(zhí)行所述堆棧的所述不同實(shí)例,以允許使用不同性能和安全性措施。
通常而言,在另一方面,本發(fā)明提供一種用于包括實(shí)現(xiàn)為模塊的若干協(xié)議層的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的配置管理器,所述管理器被設(shè)置成發(fā)送綁定消息到所述模塊,以向該模塊指示與哪個(gè)其它模塊進(jìn)行交互。
通常而言,在另一方面,本發(fā)明提供一種用于包括實(shí)現(xiàn)為模塊的若干協(xié)議層的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的配置管理器,其中模塊包括通用函數(shù)指針,所述管理器被設(shè)置成在執(zhí)行環(huán)境中加載所述模塊并且把一組執(zhí)行環(huán)境函數(shù)與每個(gè)所述模塊相關(guān)聯(lián),以便所述通用函數(shù)指針對(duì)應(yīng)于所述相關(guān)的執(zhí)行環(huán)境函數(shù)。
上面提供的本發(fā)明的各方面可以被實(shí)現(xiàn)為方法或設(shè)備。本發(fā)明還提供程序代碼或軟件對(duì)象,諸如當(dāng)在適當(dāng)平臺(tái)(硬件,包含處理器和存儲(chǔ)器,以及操作系統(tǒng)或平臺(tái)內(nèi)核,及可選的虛擬機(jī)環(huán)境)上實(shí)現(xiàn)時(shí)提供這些方法和設(shè)備的所述功能的模塊。這個(gè)代碼可以是對(duì)象,字節(jié)代碼或可執(zhí)行代碼塊或模塊的形式,或某些其它數(shù)據(jù)結(jié)構(gòu)的形式。所述代碼也可以是用諸如C或Java的高級(jí)語(yǔ)言編寫的源代碼的形式。
本發(fā)明還提供一種能夠把所述高級(jí)程序代碼轉(zhuǎn)換成適于實(shí)現(xiàn)本發(fā)明各方面的對(duì)象代碼模塊或數(shù)據(jù)結(jié)構(gòu)的編譯器。所述編譯器可以直接編譯高級(jí)代碼成適用于本發(fā)明的實(shí)施例的對(duì)象代碼,或可以編譯所述高級(jí)代碼成中間形式。在這種情況下,提供另一編譯器以轉(zhuǎn)換所述中間形式代碼成適用于本發(fā)明的實(shí)施例的對(duì)象代碼模塊。
現(xiàn)在參照下列附圖描述實(shí)施例,其僅作為例子并且不旨在限制本發(fā)明,其中圖1示出通信協(xié)議堆棧;圖2示出圖1的通信堆棧的抽象層;圖3示出實(shí)現(xiàn)動(dòng)態(tài)重新可配置通信協(xié)議堆棧的已知結(jié)構(gòu);圖4示出基于實(shí)施例的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的結(jié)構(gòu);圖5圖解了綁定消息;圖6圖解了函數(shù)指針表;圖7圖解了協(xié)議消息;圖8,9,10和11圖解了層軟件以及特定于操作系統(tǒng)的映射對(duì)象的多個(gè)實(shí)施例;圖12圖解了基于實(shí)施例的層的多個(gè)實(shí)例化;圖13圖解了基于所述實(shí)施例的協(xié)議堆棧中的軟件層的實(shí)例化和綁定;圖14圖解了實(shí)施例的塊代碼說(shuō)明;圖15圖解了基于實(shí)施例的虛擬操作系統(tǒng);圖16和17分別針對(duì)C代碼示出已知?jiǎng)討B(tài)鏈接方法和操作系統(tǒng)函數(shù)表傳遞方法;圖18和19分別針對(duì)Java代碼示出已知?jiǎng)討B(tài)鏈接方法和操作系統(tǒng)函數(shù)表傳遞方法;圖20示出每個(gè)消息協(xié)議堆棧結(jié)構(gòu)的已知線程;圖21示出示意性存儲(chǔ)器結(jié)構(gòu),用于圖16和17的所述實(shí)施例;圖22圖解基于實(shí)施例的每層結(jié)構(gòu)的線程;圖23示出示意性存儲(chǔ)器結(jié)構(gòu),用于圖20的所述實(shí)施例;圖24和25示出編譯高級(jí)源代碼成實(shí)施例中使用的模塊的兩種方法;圖26圖解了基于實(shí)施例的BluetoothTM復(fù)雜協(xié)議堆棧的例子實(shí)現(xiàn);以及圖27圖解了升級(jí)BluetoothTM協(xié)議堆棧。
具體實(shí)施例方式
圖1圖解了本領(lǐng)域的技術(shù)人員熟悉的通信協(xié)議堆棧。所述協(xié)議堆棧包括若干軟件或協(xié)議層L1-L7,其中通過(guò)這些層處理信號(hào)或協(xié)議消息。例如,應(yīng)用程序(L7)可以是Web瀏覽器或用于GSM語(yǔ)音呼叫的控制器,應(yīng)用程序(L7)產(chǎn)生的信號(hào)和消息向下通過(guò)低層L1-L6處理,以便通過(guò)諸如無(wú)線電波,銅線或光纜的一些物理鏈路與傳送到另一個(gè)應(yīng)用程序。
圖2示出通信堆棧層之一的簡(jiǎn)化的例子。每個(gè)層怎樣工作的實(shí)際細(xì)節(jié)將取決于所使用的特定協(xié)議。層接收諸如部分語(yǔ)音呼叫或Web頁(yè)的分組。層是對(duì)所接收的分組執(zhí)行一系列預(yù)定步驟(協(xié)議)的軟件進(jìn)程。第一步驟執(zhí)行校驗(yàn)和計(jì)算并且在必要時(shí)拒絕分組,然后消除分組頭,并且另一個(gè)步驟解密其數(shù)據(jù)有效負(fù)載。在其它步驟中,在向外傳遞修改的并且更大的分組到更高層之前,層可以接著累積若干所接收的分組的數(shù)據(jù)內(nèi)容。這個(gè)累積可以(并且通常)在共享的緩沖區(qū)(或隊(duì)列)中執(zhí)行,以避免不必要的存儲(chǔ)器拷貝。通常,通信層還將在從層的較高到較低級(jí)的相反方向處理分組。在原理上,兩個(gè)相鄰層不需要“了解”其它層在做什么或怎樣做;但實(shí)際上,層之間的接口需要根據(jù)所傳遞的數(shù)據(jù)(分組)內(nèi)容的準(zhǔn)確格式和緩沖區(qū)存儲(chǔ)結(jié)構(gòu),以及其怎樣實(shí)現(xiàn)來(lái)進(jìn)行定義,例如了解傳遞這個(gè)數(shù)據(jù)到哪個(gè)層,和怎樣啟動(dòng)這個(gè)處理所傳遞數(shù)據(jù)的層。這限制了前面針對(duì)已知方案描述的堆棧的靈活性。
通常,在移動(dòng)電話等等中的常規(guī)不可重構(gòu)通信協(xié)議堆棧在制造時(shí)被設(shè)置,在工作存儲(chǔ)器中實(shí)例化各種軟件層所需的軟件代碼在電話內(nèi)是固定的,并且被存儲(chǔ)為例如固件。這意味著如果層之一需要升級(jí),則協(xié)議堆棧需要停機(jī),并且全部代碼,或至少升級(jí)層代碼被改寫到通信設(shè)備中,并且接著終端重新啟動(dòng),并且所升級(jí)的協(xié)議堆棧重新實(shí)例化。這需要終止通信設(shè)備上的任何活動(dòng)呼叫,并且使設(shè)備將呼叫斷開。這個(gè)方法的另一個(gè)問(wèn)題是不同的層通常用非常特定的方式互相接口,以使協(xié)議堆棧的工作象一些上面的參照文獻(xiàn)中一樣。這意味著新或升級(jí)的軟件的提供商需要事先確切知道對(duì)于特定實(shí)現(xiàn)和平臺(tái),怎樣與上層和下層交互。這再次限制了堆棧的靈活性。
在運(yùn)行時(shí)刻支持協(xié)議堆棧的重新配置的其它所提出的方法允許下載協(xié)議軟件,并且使用特定于執(zhí)行環(huán)境和編程語(yǔ)言的機(jī)構(gòu),通過(guò)暫時(shí)掛起堆棧執(zhí)行并鏈接新軟件到現(xiàn)有堆棧,從而動(dòng)態(tài)插入?yún)f(xié)議軟件到現(xiàn)有協(xié)議堆棧中。這再次需要活躍通信會(huì)話的臨時(shí)掛起,以及需要新軟件的提供商在提供特定于語(yǔ)言和操作系統(tǒng)的命令及數(shù)據(jù)格式方面,知道與哪個(gè)其它堆棧軟件進(jìn)行接口,特定于有關(guān)層的共享分組緩沖區(qū)結(jié)構(gòu),以及怎樣去做。這些方法還具有風(fēng)險(xiǎn),即如果軟件運(yùn)轉(zhuǎn)不良,則它能夠破壞許多活躍通信會(huì)話,直到問(wèn)題被檢測(cè)以及欺騙軟件被消除。并且,允許新模塊的插入的層間接口不能容易地升級(jí)或單獨(dú)配置,以約束協(xié)議軟件的不同邏輯實(shí)例之間的交互,因?yàn)檫壿媽?shí)例對(duì)通用接口層是不可見的。
另外,可能需要這樣的特性,使得各層以不同于其它層的軟件語(yǔ)言來(lái)編寫。例如靠近物理層的層需要快速處理,因此可以預(yù)編譯成高度優(yōu)化的特定于硬件的機(jī)器語(yǔ)言以便快速執(zhí)行,而堆棧中較高的層可以是平臺(tái)無(wú)關(guān)的,因此在虛擬機(jī)環(huán)境或解釋器上運(yùn)轉(zhuǎn),因此更慢但更有靈活性,以便允許平臺(tái)無(wú)關(guān),因此鼓勵(lì)第三方開發(fā)新應(yīng)用程序。然而,使用不同語(yǔ)言的兩個(gè)層在特定于語(yǔ)言的數(shù)據(jù)結(jié)構(gòu),命名約定(名稱解析約定(name mangling convention))以及函數(shù)調(diào)用(參數(shù)傳遞)約定方面不能使用已知公共語(yǔ)言。
當(dāng)前方法的另一個(gè)問(wèn)題是,當(dāng)每個(gè)層被接口定義(包含共享緩沖區(qū)結(jié)構(gòu))緊密限制時(shí),它們限制了升級(jí)堆棧的能力,其中所述接口定義支持其上面和下面的層之間的交互,此交互通常是特定于語(yǔ)言和操作系統(tǒng)(執(zhí)行環(huán)境)的。這種情況在可能出現(xiàn)的情況下被惡化,即在將來(lái)協(xié)議堆棧的不同層將由不同廠商提供,這些廠商將不得不針對(duì)其需要與之接口的層,提供使用相同語(yǔ)言(和甚至在某些情況下,相同的編譯器)和接口函數(shù)以及共享緩沖區(qū)格式的接口。
在圖3圖解了提供動(dòng)態(tài)靈活Java協(xié)議堆棧的一個(gè)已知方法,其利用每個(gè)協(xié)議堆棧層(L1-L4)之間的接口層。這對(duì)應(yīng)于在WO 01/88707中的公開內(nèi)容。兩個(gè)協(xié)議堆棧層之間實(shí)例化其接口格式被其上層和下層“已知”的接口或中間層。接口層查找一個(gè)表以確定它應(yīng)當(dāng)與哪個(gè)更高協(xié)議層接口,并且接著使用已知(Java)接口。因而在所示出的例子中,升級(jí)的協(xié)議層L2′被實(shí)例化,并且接口層I1根據(jù)查找表確定它現(xiàn)在應(yīng)當(dāng)把來(lái)自層L1的分組傳送到層L2′而不是層L2。層L2′接著傳送分組到接口層I2,接口層I2重定向這些分組到協(xié)議堆棧層L3。因而通過(guò)使用每個(gè)協(xié)議堆棧層(L1-L4)之間的這些接口層(I1-I3)和查找表,協(xié)議堆棧能夠被動(dòng)態(tài)重新配置。然而仍然需要明確定義接口和協(xié)議層之間的鏈接(各層都在JVM中,或并且使用諸如類加載,繼承,類創(chuàng)建和銷毀的Java語(yǔ)言特性,以及方法標(biāo)識(shí)和調(diào)用約定),以及在必要時(shí)被執(zhí)行以提供正確接口的轉(zhuǎn)換(封裝函數(shù))。并且,當(dāng)接口層同步支持相鄰層之間的交互時(shí),它不支持用于存儲(chǔ)分組的共享的緩沖區(qū)結(jié)構(gòu),當(dāng)在不同層之間傳遞消息時(shí),這能夠?qū)е逻^(guò)多分組數(shù)據(jù)拷貝和存儲(chǔ)器需求。另外,雖然這個(gè)方法足夠用于單語(yǔ)言協(xié)議堆棧,然而在不同語(yǔ)言的層被用作各種函數(shù)調(diào)用,并且格式化數(shù)據(jù)必須在特定于語(yǔ)言的格式和命名約定之間進(jìn)行轉(zhuǎn)換的情況下,它將變得麻煩,所述轉(zhuǎn)換極其消耗處理器和存儲(chǔ)器。
圖4圖解了基于實(shí)施例的協(xié)議堆棧。堆棧包括若干協(xié)議層(L1-L4),在它們之間傳遞諸如信號(hào)分組的協(xié)議消息(圖7)。雖然這些層從低到高層進(jìn)行示出,然而會(huì)理解,相同原理同樣適用于向下通過(guò)堆棧的信號(hào)進(jìn)程。每個(gè)層接收綁定消息(圖5)并且包括從綁定消息確定向哪個(gè)其它層傳送輸出的綁定處理程序。
輸出被傳送到的下一層由唯一標(biāo)識(shí)符(綁定引用(bind ref.))指示。在層之間傳遞消息的優(yōu)選方法使用永久消息隊(duì)列,但其被執(zhí)行以及怎樣把執(zhí)行從一個(gè)層傳遞到另一個(gè)層的方式的具體細(xì)節(jié)是從下面更詳細(xì)描述的協(xié)議層軟件抽象出的。
參考圖5,綁定消息包含例如L2的唯一LLI名或標(biāo)識(shí)符(instance.ref)。在相同層的多個(gè)邏輯層實(shí)例(LLI)被并行使用(例如在處理不同調(diào)用的另一個(gè)堆棧實(shí)例中)的情況下,該LLI名唯一標(biāo)識(shí)與相同層的其它實(shí)例相比的該層實(shí)例;例如L21以及L22。在下面更詳細(xì)描述層的多實(shí)例化。
該綁定消息也可以包括特定于語(yǔ)言的函數(shù)表,該表表示操作系統(tǒng)應(yīng)用程序員接口(API),該接口能夠被動(dòng)態(tài)封裝成Java或C++“協(xié)議堆棧操作系統(tǒng)”類,或包含在C結(jié)構(gòu)中,以及用于在層軟件內(nèi)訪問(wèn)它們的一組封裝函數(shù)(wrapper function)。該函數(shù)表包括預(yù)定組的基本操作系統(tǒng)函數(shù),諸如新LLI實(shí)例創(chuàng)建(create_new_LLI)和LLI消息傳送(send_message.receive_message)。所提供的表將取決于將運(yùn)行該層(或甚至該層的多個(gè)LLI之一)的執(zhí)行環(huán)境。換句話說(shuō),函數(shù)自身是特定于操作系統(tǒng)或虛擬機(jī)(例如JVM)環(huán)境的,然而,因?yàn)樵诮壎〞r(shí)間它們被傳遞到該層(實(shí)例),這意味該層(實(shí)例)自身是操作系統(tǒng)和執(zhí)行環(huán)境無(wú)關(guān)的,并且使用該函數(shù)表以適當(dāng)方式與其堆棧中的其它層交互。
在候選方案中,該綁定消息包含指針(function.pointer),其指向例如被存儲(chǔ)在共享存儲(chǔ)器的表中的所需的特定于操作系統(tǒng)的函數(shù)。
在圖6的圖解中,由各層使用的預(yù)定通用函數(shù)(Func#1-Func#n)被映射到特定于操作系統(tǒng)的函數(shù)(op.sys.func1.-op.sys.funcn)。示出一些典型的示例性函數(shù),例如create_new_LLI,操作系統(tǒng)代表該層執(zhí)行這些函數(shù)。
因而,每個(gè)層將包括通用函數(shù)調(diào)用(Func#1-Func#n),這些調(diào)用允許該層與其它層互操作,但是當(dāng)特定于操作系統(tǒng)的函數(shù)在綁定時(shí)間被傳遞到該層時(shí),不知道它將在哪個(gè)操作系統(tǒng)環(huán)境中執(zhí)行。這也可以從實(shí)現(xiàn)為代碼模塊的軟件層抽象出用于支持LLI之間交互的特定類型的進(jìn)程間通信(消息傳送)以及安全機(jī)制。唯一的要求是層的廠商必須使用適當(dāng)?shù)念A(yù)定通用函數(shù)調(diào)用-例如使用Func#1以啟動(dòng)新LLI,使用Func#2以發(fā)送消息到另一個(gè)LLI,使用Func#3以接收來(lái)自另一個(gè)LLI的消息,等等。類似地,當(dāng)兩個(gè)LLI將被傳送相同特定操作系統(tǒng)函數(shù)時(shí),它們將能夠通過(guò)使用相同消息傳遞函數(shù)來(lái)相互接口。
進(jìn)一步地,兩個(gè)LLI能夠被傳遞不同的特定于操作系統(tǒng)的函數(shù),并且從而使用如下更詳細(xì)描述的虛擬操作系統(tǒng)函數(shù)表在不同執(zhí)行環(huán)境中操作。通過(guò)這種方式,各層是操作系統(tǒng)及語(yǔ)言無(wú)關(guān)的。與堆棧的其余部分互操作所需的特定于操作系統(tǒng)的函數(shù)在綁定/重綁定時(shí)傳遞給它們。
相同層的不同實(shí)例通過(guò)用其綁定消息被傳遞具有不同的特定于操作系統(tǒng)的函數(shù)的不同函數(shù)表,能夠在不同環(huán)境中執(zhí)行。因而,僅僅通過(guò)使不同類型的特定于操作系統(tǒng)的函數(shù)映射到每個(gè)LLI中的通用send_message和receive_message函數(shù),單段代碼(模塊)能夠與代碼(模塊)的其它位不同地交互(例如在一個(gè)中進(jìn)行函數(shù)調(diào)用而在其它中進(jìn)行異步消息傳遞)。這是由于用于映射通用send_message函數(shù)到相應(yīng)特定于操作系統(tǒng)的函數(shù)的表是逐個(gè)LLI地執(zhí)行的。然而,如果你希望LLI與另一個(gè)LLI成功通信,則需要使用從通用send_message和receive_message函數(shù)到操作系統(tǒng)函數(shù)的相同映射,否則接收LLI在LLI執(zhí)行send_message時(shí)將不再接收任何內(nèi)容。
綁定消息也可以包含層實(shí)例配置信息(config_1到config_n),以向?qū)拥脑撨壿媽?shí)例適當(dāng)配置層的實(shí)例。例如允許或禁止不同可選協(xié)議特性。
通過(guò)使用這個(gè)通用和非特定于層的綁定機(jī)構(gòu),每個(gè)邏輯層實(shí)例通過(guò)發(fā)送另一個(gè)綁定消息到與之交互的新邏輯層實(shí)例,能夠動(dòng)態(tài)(在運(yùn)行時(shí)刻)地被導(dǎo)向該實(shí)例。可以發(fā)現(xiàn),這可以包含新層的動(dòng)態(tài)插入,并且還允許層之間的語(yǔ)言無(wú)關(guān)的交互。
參考圖7,協(xié)議消息在層之間傳遞,以在協(xié)議堆棧上下傳送信號(hào)或分組信息。基于與發(fā)送層相關(guān)并且通過(guò)其綁定消息提供給發(fā)送層(參見圖5)的bind.ref標(biāo)識(shí)符,每個(gè)協(xié)議消息將被從該發(fā)送層(例如層1)傳送到目的層(例如層2)。協(xié)議消息也會(huì)包括信號(hào)數(shù)據(jù)或指向共享存儲(chǔ)器中的信號(hào)數(shù)據(jù)的信號(hào)指針。再次地,信號(hào)數(shù)據(jù)(或指針)和標(biāo)識(shí)符(send.inst.ref和dest.inst.ref)具有公共通用共享數(shù)據(jù)格式。
協(xié)議和綁定消息是在協(xié)議堆棧實(shí)體(各種LLI)之間傳遞的信號(hào),并且這個(gè)信號(hào)傳遞可以使用諸如函數(shù)調(diào)用或線程消息傳送機(jī)構(gòu)的不同機(jī)構(gòu)來(lái)執(zhí)行。通常,線程消息傳送在不同操作系統(tǒng)線程之間進(jìn)行,并且消息被放在隊(duì)列中,并且接著操作系統(tǒng)喚醒(調(diào)度)接收線程從隊(duì)列讀取消息。
通用函數(shù)(諸如send_message和receive_message)被用于允許以任何適合于用于該特定交互的目標(biāo)平臺(tái)的方法進(jìn)行消息傳遞。代碼自身不需要了解使用什么方法。然而,調(diào)用send_message函數(shù)需要被發(fā)送的消息具有通用格式并且以預(yù)定的方式傳遞到send_message函數(shù)。消息可以通過(guò)使用create_message函數(shù)(也在特定于操作系統(tǒng)的函數(shù)的表內(nèi)提供)被動(dòng)態(tài)產(chǎn)生和識(shí)別,其中通用create_message函數(shù)產(chǎn)生可以在send_message函數(shù)內(nèi)使用的消息的句柄(或引用)。傳遞消息到send_message函數(shù)的優(yōu)選方法是通過(guò)引用傳遞消息(指向消息的指針在函數(shù)調(diào)用中被傳遞)。這最小化必須進(jìn)行的數(shù)據(jù)拷貝的量,因?yàn)榉駝t消息數(shù)據(jù)將被從堆(或共享)存儲(chǔ)器復(fù)制到棧存儲(chǔ)器,并且接著返回到堆或共享存儲(chǔ)器。優(yōu)選方法是高效的,并且不涉及消息數(shù)據(jù)的過(guò)多拷貝。事實(shí)上,如果消息數(shù)據(jù)總是保持在堆或共享存儲(chǔ)器中,則根本不需要拷貝。
因而層軟件(模塊)不需要任何有關(guān)其正發(fā)送消息到的軟件層(模塊)內(nèi)使用什么語(yǔ)言或甚至什么調(diào)用約定的知識(shí),因?yàn)樗恍枰缹?duì)它可用的send_message和create_message函數(shù)的調(diào)用約定。并且同樣地,接收軟件層(模塊)僅需要知道有關(guān)receive_message函數(shù)的情況。接著必須訪問(wèn)實(shí)際消息內(nèi)容,并且公共通用共享數(shù)據(jù)存儲(chǔ)方法和特定于語(yǔ)言的訪問(wèn)函數(shù)一起被用以訪問(wèn)這個(gè)數(shù)據(jù)。通過(guò)相同方式,綁定消息或協(xié)議消息(分組)可以被每個(gè)層以通用方式訪問(wèn),而不考慮編程語(yǔ)言和執(zhí)行環(huán)境。
用于訪問(wèn)數(shù)據(jù)的函數(shù)可以作為綁定消息內(nèi)特定于操作系統(tǒng)的函數(shù)的一部分被傳遞到軟件層(代碼模塊)。為允許通過(guò)不同編程語(yǔ)言高效訪問(wèn)的消息(或信號(hào)),配置和共享數(shù)據(jù),并且也為了允許升級(jí),格式必須是可擴(kuò)展的。例如,通過(guò)使用唯一標(biāo)識(shí)符標(biāo)識(shí)數(shù)據(jù)單元及其相應(yīng)數(shù)據(jù)類型,可擴(kuò)展標(biāo)記語(yǔ)言(XML)或其它(諸如抽象語(yǔ)法表示ASN.1)模板定義可以被用于定義數(shù)據(jù)格式,以及在運(yùn)行時(shí)刻訪問(wèn)共享數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。特定于語(yǔ)言的數(shù)據(jù)訪問(wèn)函數(shù)可以高效獲得所需單元。這允許協(xié)議軟件的不同版本使用相同數(shù)據(jù)。舊版本會(huì)不需要訪問(wèn)新數(shù)據(jù)成員,并且不會(huì)嘗試訪問(wèn)它們。也可以在新軟件版本中消除有關(guān)過(guò)時(shí)數(shù)據(jù)成員的知識(shí),但數(shù)據(jù)模板定義會(huì)仍然具有過(guò)時(shí)數(shù)據(jù)成員的位置標(biāo)志符(placeholder),以支持舊軟件模塊版本。唯一標(biāo)識(shí)數(shù)據(jù)成員(包括所有過(guò)時(shí)數(shù)據(jù)成員)的標(biāo)識(shí)符在軟件模塊內(nèi)使用,以訪問(wèn)這些數(shù)據(jù)成員。然而,由于特定于語(yǔ)言的數(shù)據(jù)訪問(wèn)函數(shù)提供的間接尋址(indirection),實(shí)際數(shù)據(jù)可以被全部存儲(chǔ)在公共共享存儲(chǔ)器區(qū)域中,并且采取適當(dāng)安全措施(諸如使用讀、寫鎖定機(jī)構(gòu)的數(shù)據(jù)類型或單元級(jí)授權(quán))以阻止個(gè)別LLI未經(jīng)授權(quán)地訪問(wèn)數(shù)據(jù)。
這些函數(shù)可以被封裝在更加復(fù)雜的接口定義語(yǔ)言(IDL)模式內(nèi),以允許發(fā)掘現(xiàn)有或新部件技術(shù)的特性。特定于語(yǔ)言的IDL定義也可以允許發(fā)掘復(fù)雜數(shù)據(jù)類型的能力,其中復(fù)雜數(shù)據(jù)類型不能方便地在不同語(yǔ)言之間進(jìn)行映射(例如一組Java類和Java層的部件接口,以及C++層的一組C++接口類,等等)。針對(duì)XML或ASN.1模板的特定IDL的映射將需要由這個(gè)附加部件接口軟件來(lái)處理。為改進(jìn)使用公共存儲(chǔ)器結(jié)構(gòu)對(duì)大量共享數(shù)據(jù)的訪問(wèn)速度,標(biāo)識(shí)符可以按層次結(jié)構(gòu)被排列在鏈表中,或順序排列在數(shù)組內(nèi),以最小化定位期望單元所需的查找時(shí)間。
編程語(yǔ)言無(wú)關(guān)的數(shù)據(jù)模板定義的例子分別是可擴(kuò)展標(biāo)記語(yǔ)言(XML)模式或抽象語(yǔ)法表示(ASN)標(biāo)記或數(shù)據(jù)序列定義。數(shù)據(jù)單元(或?qū)傩?訪問(wèn)函數(shù)可以利用間接尋址(存儲(chǔ)器指針)訪問(wèn)數(shù)據(jù)單元序列內(nèi)的實(shí)際項(xiàng),以改進(jìn)訪問(wèn)性能,如下表中所示。通過(guò)這種方式,數(shù)據(jù)單元的解析變成查找操作,以及模板中定義的結(jié)果到所需數(shù)據(jù)格式的投射casting或轉(zhuǎn)換結(jié)果為強(qiáng)制類型轉(zhuǎn)換(casting)或轉(zhuǎn)換。
其中例子ASN-1定義為Message∷=SEQUENCE{Message_Number INTEGER OPTIONAL,Message_Name STRING}用于訪問(wèn)消息數(shù)據(jù)的通用函數(shù)也可以包含在與綁定消息一起傳遞的函數(shù)的通用操作系統(tǒng)表內(nèi),以允許針對(duì)平臺(tái)優(yōu)化數(shù)據(jù)訪問(wèn)函數(shù)的實(shí)際實(shí)現(xiàn)。例如對(duì)于具有唯一標(biāo)識(shí)符“1243”的數(shù)據(jù)單元,軟件層調(diào)用通用層函數(shù)get_attribute(“1243”)。層軟件需要知道在XML或ASN.1模板格式中定義的單元的數(shù)據(jù)類型。對(duì)應(yīng)于層軟件使用的配置數(shù)據(jù)和消息的模板需要被通用get_attribute和set_attribute函數(shù)知道,以便允許所需的類型轉(zhuǎn)換。因此,get_attribute和set_attribute函數(shù)以針對(duì)模板定義的句柄(引用)作為參數(shù)。句柄(或引用)由通用load_template函數(shù)產(chǎn)生。通用函數(shù)get_attribute和set_attribute也將得到配置數(shù)據(jù)或消息句柄(或引用)并且保存查找表,以便能夠存儲(chǔ)特定數(shù)據(jù)單元的存儲(chǔ)器指針引用并且記錄其唯一標(biāo)識(shí)符引用。
另一個(gè)選項(xiàng)是使兩個(gè)屬性標(biāo)識(shí)符指向相同實(shí)際數(shù)據(jù)單元。當(dāng)不同標(biāo)識(shí)符實(shí)際上對(duì)應(yīng)于相同數(shù)據(jù)單元但具有不同轉(zhuǎn)換類型時(shí),這對(duì)避免數(shù)據(jù)復(fù)制有吸引力。例如,如果數(shù)據(jù)單元標(biāo)識(shí)符″1243″對(duì)應(yīng)于在模板內(nèi)指定作為“消息名”并且是null結(jié)束的Unicode串的數(shù)據(jù)單元。屬性標(biāo)識(shí)符″1244″也可以對(duì)應(yīng)于相同“消息名”但具有不同格式,例如255字節(jié)ASCII字符串。類型轉(zhuǎn)換可以通過(guò)get_attribute函數(shù)對(duì)軟件層。因此,如果Java軟件模塊調(diào)用get_attribute,則它將使用標(biāo)識(shí)符″1243″并且得到Unicode串,并且如果C++模塊希望訪問(wèn)數(shù)據(jù)單元,則它可以對(duì)“1244”單元調(diào)用get_attribute并且得到255字節(jié)ASCII字符串。
在優(yōu)選實(shí)施例中,相同模板被用于全部消息數(shù)據(jù),而不考慮正發(fā)送和接收消息的LLI。這提供了所謂的通用服務(wù)接入點(diǎn)(GSAP)給LLI,該LLI獨(dú)立于LLI內(nèi)的協(xié)議功能。GSAP的可能例子通用模板定義在下面示出。
--枚舉和類型定義GPI_PRIMITIVETYPE∷=ENUMERATED{GPI_BIND(1),GPI_REBIND(2),GPI_SUSPEND(3),GPI_RESUME(4),GPI_UNBIND(5),GPI_TERMINATE(6),GPI_UPGRADE(7),GPI_OPTIMISE(8),GPI_OK(9),GPI_ERR(10)};--針對(duì)通用MAC層GPI_MACTYPE∷=ENUMERATED{GPI_CSMACA(0),GPI_CSMACD(1),GPI_TPB(2),GPI_TPR(3),GPI_TDMA(4)};GPI_CRCTYPE∷=ENUMERATED{GPI_CRC32(0),GPI_CRC16(1),GPI_CRC24(2)};GPI_ARQTYPE∷=ENUMERATED{GPI_SAW(0),GPI_GBN(1),GPI_SEL(2),GPI_NONE(3)};GPI_HARQTYPE∷=ENUMERATED{GPI_TYPEI(0),GPI_TYPE2(1),GPI_NONE(2)};GPI_HARQCODETYPE∷=ENUMERATED{GPI_GOLAY(0),GPI_RS(1),GPI_NONE(2)};GPI_CRYPTOTYPE∷=ENUMERATED{GPI_RSA(0),GPI_DES(1),GPI_3DES(2),GPI_GEA3(3),GPI_NONE(4)};--針對(duì)綁定原語(yǔ)GPI_QOSTYPE∷=ENUMERATED{GPI_CO(0),GPI_CL(1)};
--面向連接和無(wú)連接GPI_SECURITYLEVEL∷=ENUMERATED{GPI_HIGH(0),GPI_MEDIUM(1),GPI_LOW(2)};--針對(duì)通用數(shù)據(jù)分組原語(yǔ)GPI_PACKETTYPE∷=ENUMERATED{GPI_IP(0),GPI_ETHER(1),GPI_PPP(2)};GPI_DIRECTION∷=ENUMERATED{GPI_UP(0),GPI_DOWN(1)};GPI_TFTYPE∷=SEQUENCE{--通用傳送格式類型定義GPI_MOD GPI_MODTYPE[調(diào)制類型],GPI_CODING GPI_CODINGTYPE[信道編碼類型],GPI_BLOCKSIZE INTEGER[傳送分組字節(jié)長(zhǎng)度],GPI_ANTENNA INTEGER OPTIONAL[關(guān)于使用何天線的指示]}--原語(yǔ)定義GPI_MANPRIMITIVE∷=SEQUENCE{--通用GPI管理原語(yǔ)GPI_PRIMITIVE GPI_PRIMITIVETYPE[這是特定協(xié)議消息原語(yǔ)類型],--協(xié)議模塊無(wú)關(guān)部分GPI_REQUESTOR GPI_LL_IDENT[這是請(qǐng)求方LLI],--取決于原語(yǔ)類型的可選部分-綁定包含附加信息GPI_BIND GPI_BINDPRIMITIVE OPTIONAL[用于綁定,再綁定,優(yōu)化]}GPI_BINDPRIMITIVE∷=SEQUENCE{GPI_UPPER_SAP STRING[這是LLI之上的服務(wù)接入點(diǎn)名],
GPI_UPPER_USER_GPI_LL_IDENT[這是使用SAP并且分組被接收和發(fā)送到的LLI的唯一標(biāo)識(shí)符],GPI_LOWER_SAP_STRING[這是LLI之下的服務(wù)接入點(diǎn)名],GPI_LOWER_USER_GPI_LL_IDENT[這是使用SAP并且分組被接收和發(fā)送到的LLI的唯一標(biāo)識(shí)符],GPI_GSAP_GPI_GSAP_TABLE[這是(虛擬)操作系統(tǒng)表,其設(shè)置LLI的環(huán)境以允許以安全方式在GSAP邊界上進(jìn)行語(yǔ)言無(wú)關(guān)的性能優(yōu)化和交互],--QoS屬性,以用通用方式配置LLIGPI_QOS GPI_QOSTYPE[與LLI相關(guān)的QoS],GPI_RCV_THROUGH_TARGET INTEGER[以k位每秒為單位的目標(biāo)接收吞吐率],GPI_RCV_THROUGH_ACCEPT INTEGER[以k位每秒為單位的可接受接收吞吐率],GPI_RCV_TRANSDELAY_TARGET INTEGER[以毫秒為單位的目標(biāo)接收時(shí)延],GPI_RCV TRANSDELAY ACCEPT INTEGER[以毫秒為單位的可接受接收時(shí)延],GPI_XMT_THROUGH_TARGET INTEGER[以k位每秒為單位的目標(biāo)發(fā)送吞吐率],GPI_XMT_THROUGH_ACCEPT INTEGER[以k位每秒為單位的可接受發(fā)送吞吐率],GPI_XMT_TRANSDELAY_TARGET INTEGER[以毫秒為單位的目標(biāo)發(fā)送時(shí)延],GPI_XMT_TRANSDELAY_ACCEPT INTEGER[以毫秒為單位的可接受發(fā)送時(shí)延],GPI_PRIORITY_MIN INTEGER(0..100)[傳輸類/連接的最小優(yōu)先級(jí)],
GPI_PROTECTION_MIN INTEGER[GPI_NONE,GPI_MONITOR,GPI_MAXIMUM],GPI_PRIORITY_MAX INTEGER(0..100)[傳輸類/連接的最大優(yōu)先級(jí)],GPI_PROTECTION_MAX INTEGER[GPI_NONE,GPI_MONITOR,GPI_MAXIMUM],GPI_RESILIENCE_DISC_PROB INTEGER(0..10000)[對(duì)斷開的恢復(fù)能力],GPI_RESILIENCE_RESET_PROB INTEGER(0..10000)[對(duì)連接復(fù)位的恢復(fù)能力],GPI_RESIDUAL_SUCCESS INTEGER(0..10000000)[差錯(cuò)率的殘留成功率倒數(shù)],--可選成本及功耗,資源利用及安全性要求GPI_RCV_COST_TARGET INTEGER OPTIONAL[以貨幣為單位在目標(biāo)吞吐率下每分鐘的目標(biāo)接收成本],GPI_RCV_COST_ACCEPT INTEGER OPTIONAL[每分鐘的可接受接收成本],GPI_XMT_COST_TARGET INTEGER OPTIONAL[以貨幣為單位在目標(biāo)吞吐率下每分鐘的目標(biāo)發(fā)送成本],GPI_XMT_COST_ACCEPT INTEGER OPTIONAL[每分鐘的可接受發(fā)送成本],GPI_POWER_CONSUMPTION_TARGET INTEGEROPTIONAL(0..100)[作為允許實(shí)現(xiàn)可接受電池壽命的最大功耗的百分比的目標(biāo)最大功耗],GPI_SECURITY GPI_SECURITYLEVEL OPTIONAL[所需安全等級(jí)],GPI_MEMORY_TARGET INTEGER(0..100)OPTIONAL[總使用的目標(biāo)最大存儲(chǔ)器使用百分比],GPI_PROCESSOR_TARGET INTEGER(0..100)OPTIONAL[總使用的目標(biāo)最大處理器使用百分比],--LLI特定部分-這里使用的屬性主要依賴于LLI的類型GPI_MAC_GPI_MACTYPE OPTIONAL[這指示MAC的類型],GPI_MAC_AIFS INTEGER OPTIONAL[以時(shí)隙為單位的仲裁幀間間隔],GPI_MAC_SLOTTIME INTEGER OPTIONAL[以微秒為單位的基于CSMA和TDMA的MAC的時(shí)隙時(shí)間],GPI_MAC_FRAMESIZE INTEGER OPTIONAL[以時(shí)隙為單位的幀長(zhǎng)度],GPI_MAC_BACKOFFWINDOW INTEGER OPTIONAL[以時(shí)隙為單位的初始補(bǔ)償窗口尺寸],GPI_HEADER_CRC GPI_CRCTYPE OPTIONAL[通用組頭CRC的設(shè)置],GPI_PAYLOAD_CRC GPI_CRCTYPE OPTIONAL[通用有效負(fù)載CRC的設(shè)置],GPI_HEADER_CRC_GEN INTEGER OPTIONAL[組頭CRC的生成多項(xiàng)式],GPI_PAYLOAD_CRC_GEN INTEGER OPTIONAL[有效負(fù)載CRC的生成多項(xiàng)式],GPI_ARQ GPI_ARQ_TYPE OPTIONAL[ARQ的設(shè)置],GPI_ARQ_BLOCKSIZE INTEGER OPTIONAL[以字節(jié)為單位的重發(fā)分組長(zhǎng)度],GPI_ARQ_WINDOWSIZE INTEGER OPTIONAL[用于GBN和選擇性的重發(fā)窗口尺寸],GPI_HARQ GPI_HARQTYPE OPTIONAL[混合ARQ的設(shè)置],GPI_HARQ_CODE GPI_HARQCODETYPE OPTIONAL[混合ARQ編碼的設(shè)置],
--加密/解密設(shè)置-用于通用加密LLIGPI_CRYPTO GPI_CRYPTOTYPE OPTIONAL[加密/解密的設(shè)置],GPI_CRYPTO_IV GPI_IV OPTIONAL[加密的初始化向量],GPI_CRYPTO_KEY GPI_KEY OPTIONAL[加密/解密的會(huì)話密鑰]GPI_PACKET∷=SEQUENCE{--通用數(shù)據(jù)分組(或幀)定義--強(qiáng)制分組信息GPI_PACKET GPI_PACKETTYPE[這是分組類型],GPI_PACKET_HEADER_PTR GPI_PACKET_HEADER[特定于協(xié)議的格式中的實(shí)際分組頭],GPI_PACKET_PAYLOAD_PTR GPI_PACKET_PAYLOAD[特定于協(xié)議的格式中的實(shí)際分組有效負(fù)載],GPI_PACKET_HEADER_LEN INTEGER[以字節(jié)為單位的組頭長(zhǎng)度],GPI_PACKET_PAYLOAD_LEN INTEGER[以字節(jié)為單位的有效負(fù)載長(zhǎng)度],--可選分組信息GPI_TRCH GPI_TRCH_IDENT OPTIONAL[傳送信道標(biāo)識(shí)符],GPI_TF GPI_TFTYPE OPTIONAL[傳送格式],GPI_DEST_MAC GPI_MAC_ADDRESS OPTIONAL[目的MAC地址],GPI_SRC_MAC GPI_MAC_ADDRESS OPTIONAL[源MAC地址],GPI_DEST_IP GPI_IP_ADDRESS OPTIONAL[目的IP地址],GPI_SRC_IP GPI_IP_ADDRESS OPTIONAL[源IP地址],GPI_DEST PORT INTEGER OPTIONAL[目的端口號(hào)],
GPI_SRC_PORT INTEGER OPTIONAL[源端口號(hào)],GPI_SN INTEGER OPTIONAL[序列號(hào)],GPI_IP_HEADER_CHKSUMGPI_IP_HEADER_CHECK_SUM OPTIONAL[IP校驗(yàn)和],GPI_TRAFFICCLASS INTEGER OPTIONAL[傳輸類型的標(biāo)識(shí)符],GPI_PACKETDIRECTION GPI_DIRECTION OPTIONAL(協(xié)議堆棧中的分組的方向]各層中通用函數(shù)之間的映射和其執(zhí)行環(huán)境中LLI調(diào)用的特定于操作系統(tǒng)的函數(shù),可以用若干方式實(shí)現(xiàn)。參考圖8,每個(gè)軟件層(例如L2)包括若干預(yù)定的通用函數(shù)。假定L2層的廠商使用預(yù)定的通用函數(shù),則這個(gè)層將與協(xié)議堆棧內(nèi)的其它層互操作(interoperate)。支持協(xié)議堆棧的各層的執(zhí)行環(huán)境與操作系統(tǒng)表(OS1),或有效地將與各層相關(guān)的通用函數(shù)映射到將在該特定執(zhí)行環(huán)境中執(zhí)行通用函數(shù)的特定于操作系統(tǒng)的函數(shù)的其它對(duì)象相關(guān)聯(lián)。在示出的例子中,L2中的通用函數(shù)1,例如receive_message,被轉(zhuǎn)換為基于UNIX POSIX執(zhí)行環(huán)境的等價(jià)函數(shù)。
操作系統(tǒng)表(OS)或映射對(duì)象可以由例如協(xié)議堆棧的操作方,或諸如執(zhí)行環(huán)境提供方的某些其它實(shí)體來(lái)提供。
圖9示出一種候選方案,其中軟件層L2包括特定于該層的函數(shù),其能夠被操作系統(tǒng)表(OS2)或其它映射對(duì)象直接從其L2格式映射到本地操作系統(tǒng)格式。因而,例如L2函數(shù)1(對(duì)應(yīng)于send_message)被操作系統(tǒng)表OS2映射到receive_message函數(shù)的本地基于UNIX POSIX的執(zhí)行環(huán)境函數(shù)。在這個(gè)特定方案中,L2軟件層的廠商可能也會(huì)提供針對(duì)UNIX操作系統(tǒng)環(huán)境的相應(yīng)操作系統(tǒng)表OS2或映射對(duì)象。L2廠商可以能夠針對(duì)不同類型的操作系統(tǒng)提供若干操作系統(tǒng)表,以便解釋廠商提供的L2軟件層。
圖10示意性示出虛擬操作系統(tǒng)的使用(VOS),其可以用于把通用函數(shù)調(diào)用引向適當(dāng)操作系統(tǒng)-在示出的例子中為UNIX(OS1)或Microsoft Windows(RTM)(OS2)。因而,例如在不止一個(gè)操作系統(tǒng)或執(zhí)行環(huán)境選項(xiàng)被用于驅(qū)動(dòng)例如基站或終端的裝置或設(shè)備上的普通協(xié)議層的情況下,VOS可以將通用函數(shù)調(diào)用從例如軟件層L2引向UNIX或Microsoft Windows(RTM)操作系統(tǒng)表(OS1或OS2分別)或映射對(duì)象。在相同軟件層的兩個(gè)實(shí)例在不同操作環(huán)境中執(zhí)行的情況下,VOS可以映射相同通用函數(shù)(例如通用函數(shù)1)到例如第一LLI的UNIX操作系統(tǒng)表(OS1),以及第二LLI的Microsoft Windows(RTM)操作系統(tǒng)表(OS3),其中相同通用函數(shù)分別相應(yīng)到op.sys函數(shù)x及op.sys函數(shù)a。因?yàn)檐浖覮2正使用通用函數(shù),L2的廠商只需要提供實(shí)際層軟件(模塊),并且不需要參與VOS或操作系統(tǒng)表軟件。VOS的操作在下面進(jìn)一步更詳細(xì)地描述。
現(xiàn)在參照?qǐng)D11,廠商提供的L2軟件層包括特定于層的函數(shù),所述函數(shù)接著被虛擬操作系統(tǒng)(VOS)映射,其中虛擬操作系統(tǒng)也可以由L2廠商提供,其可以使用特定于操作系統(tǒng)的表(OS2,OS4,OS5)或映射對(duì)象在不同操作系統(tǒng)之間映射特定于L2的函數(shù),所述特定于操作系統(tǒng)的表(OS2,OS4,OS5)或映射對(duì)象也可以由L2廠商提供,以便分別映射特定于L2的函數(shù)到例如UNIX和Microsoft Windows(RTM)的相應(yīng)操作系統(tǒng)函數(shù)。因而各種實(shí)施例可以被實(shí)現(xiàn),以實(shí)現(xiàn)語(yǔ)言和/或操作系統(tǒng)無(wú)關(guān)的協(xié)議層軟件。
圖11還圖解了例如均對(duì)應(yīng)于不同LLI的兩個(gè)線程怎樣可以被映射到不同操作系統(tǒng)表,以便在不同執(zhí)行環(huán)境中執(zhí)行。線程1被特定于L2的函數(shù)(L2函數(shù)1)引向VOS表或映射中的特定項(xiàng),并且于是被引向UNIX操作系統(tǒng)表OS2中的特定項(xiàng),該項(xiàng)對(duì)應(yīng)于可以在UNIX環(huán)境中執(zhí)行的函數(shù)(op.sys.function.x)。線程1接著返回到在層L2模塊中的下一個(gè)函數(shù)指針(L2函數(shù)2)。在不同實(shí)施例中,線程1可以被VOS引向Window的操作系統(tǒng)表OS4,以便在Window的環(huán)境中執(zhí)行對(duì)應(yīng)于層L2模塊中的特定于L2的函數(shù)指針(L2函數(shù)1)的特定于Windows的函數(shù)(op.sys.function.a)。
線程2可以對(duì)應(yīng)于相同層L2的不同LLI,該LLI在不同的Linux執(zhí)行環(huán)境中執(zhí)行。在這個(gè)情景中,特定于L2的函數(shù)指針(例如L2函數(shù)3)被映射到被執(zhí)行的特定于Linux的函數(shù)(op.sys.function.m),并且接著線程2返回到其在層L2模塊中的下一個(gè)函數(shù)指針(L2函數(shù)4)。
圖12示出在多個(gè)協(xié)議堆棧中層的多個(gè)實(shí)例。UMTS視頻呼叫和兩個(gè)WLAN因特網(wǎng)瀏覽器協(xié)議堆棧被同時(shí)示出為活躍的。因特網(wǎng)堆棧之一支持無(wú)限制的因特網(wǎng)瀏覽,而另一個(gè)堆棧支持瀏覽內(nèi)部網(wǎng),并且同樣地必須支持加密(例如基于虛擬專用網(wǎng)VPN協(xié)議)。兩個(gè)瀏覽器堆棧均具有4個(gè)被連接到WLAN的協(xié)議層實(shí)例(分別為L(zhǎng)41-L11,和L42-L12),然而層2實(shí)例(L21和L22)均被不同地配置在每個(gè)堆棧中。這由在因特網(wǎng)堆棧中、指示支持加密的層2的第二實(shí)例的L22(sec),以及在因特網(wǎng)堆棧中、指示不支持加密的層次2的第一實(shí)例的L21(non-sec)來(lái)圖解。這些配置將由發(fā)送到這個(gè)層的每個(gè)實(shí)例(L21和L22)的原始綁定消息來(lái)確定。兩個(gè)瀏覽器堆棧的層1,3和4相同,并且包含單獨(dú)(各為L(zhǎng)11,L31,L41,以及L12,L32,L42)但相同配置的相應(yīng)層的實(shí)例。
用于執(zhí)行安全堆棧層實(shí)例的執(zhí)行環(huán)境可以配置為阻止非安全實(shí)例對(duì)消息或配置數(shù)據(jù)的任何可能的訪問(wèn)。例如,這可以通過(guò)使用操作系統(tǒng)函數(shù)表實(shí)現(xiàn),其中操作系統(tǒng)函數(shù)表執(zhí)行所有存儲(chǔ)器訪問(wèn)和消息傳送操作的授權(quán),以使它們與安全堆棧實(shí)例隔離。例如,通過(guò)VOS和/或操作系統(tǒng)映射對(duì)象提供方希望函數(shù)做什么,確定send_message函數(shù)的底層實(shí)現(xiàn)。因此,如果例如軟件層是不可信的,則在send_message和receive_message函數(shù)中執(zhí)行的功能將具有更多有意識(shí)的安全性。例如這可以包含連接到基本檢索數(shù)據(jù)函數(shù)的授權(quán)函數(shù)。在其它例子中,create_LLT函數(shù)產(chǎn)生具有其自身存儲(chǔ)器區(qū)域的分立進(jìn)程,以保證沒有可能存在能夠訪問(wèn)由可信軟件模塊使用的存儲(chǔ)器的層。如果認(rèn)為操作系統(tǒng)自身不夠可信,則它甚至可以在分立操作系統(tǒng)環(huán)境中執(zhí)行。
每個(gè)層也可以用不同性能優(yōu)化來(lái)實(shí)現(xiàn),例如為執(zhí)行高強(qiáng)度加密操作的堆棧實(shí)例提供優(yōu)先。
層2的(L22)的第二LLI使用相同代碼模塊(層2)作為第一LLI(L21),但是是新邏輯實(shí)體(在這種情況下,操作系統(tǒng)執(zhí)行線程或進(jìn)程),而不是載入工作存儲(chǔ)器的代碼模塊的其它拷貝。例如,第二LLI(L22)可以是在這個(gè)代碼模塊內(nèi)的第二執(zhí)行線程,其中第二線程由操作系統(tǒng)控制并且具有其自身的唯一標(biāo)識(shí)符和相關(guān)配置。這個(gè)配置信息只可被邏輯層的該LLI(例如線程),以及設(shè)置每個(gè)實(shí)例的配置的控制實(shí)體(在下面更詳細(xì)地描述的CM)訪問(wèn)。LLI之間的交互還由CM來(lái)配置,并且可以阻止不需要交互的LLI進(jìn)行交互(通過(guò)執(zhí)行環(huán)境配置措施)。
此外,盡管層2的兩個(gè)LLI(L21和L22)支持公共功能,然而它們可以被不同地配置。在這個(gè)例子中,L22支持加密/解密,而L21不支持。這些配置設(shè)置由綁定消息設(shè)置,并且可以被存儲(chǔ)在堆?;蚬ぷ鞔鎯?chǔ)器的表中與每個(gè)實(shí)例(LLI)相關(guān)的適當(dāng)位置。
層2軟件的第二LLI會(huì)具有不同LLI標(biāo)識(shí)符[instance.ref],以及將其鏈接到不同輸出層的不同綁定引用[bind.ref]。由[function.ref]標(biāo)識(shí)的操作系統(tǒng)函數(shù)表(或操作系統(tǒng)類)可以是如層2的第一LLI所使用的相同操作系統(tǒng)表,除非其在不同執(zhí)行環(huán)境中工作,在這種情況下它將需要不同的操作系統(tǒng)函數(shù)表,以將通用函數(shù)映射到在其相應(yīng)執(zhí)行環(huán)境內(nèi)執(zhí)行這些函數(shù)所需的特定于操作系統(tǒng)的函數(shù)。第二LLI也可以具有其自身的執(zhí)行堆棧(L22堆棧)和堆存儲(chǔ)器。每個(gè)LLI會(huì)具有相同的可用配置選項(xiàng),不過(guò)可以不同地使能/禁止這些。這些可以作為參數(shù)存儲(chǔ)在其相應(yīng)LLI配置中。
每個(gè)層會(huì)使用預(yù)定的通用函數(shù)調(diào)用,這些調(diào)用會(huì)包含線程管理以及存儲(chǔ)器管理函數(shù)。接著在運(yùn)行時(shí)刻這些函數(shù)被映射到目的設(shè)備上的特定于操作系統(tǒng)的函數(shù)的組。由不止一個(gè)LLI訪問(wèn)的數(shù)據(jù)(諸如操作系統(tǒng)函數(shù)表和信號(hào)分組)被以預(yù)定格式提供,該預(yù)定格式允許每個(gè)LLI使用預(yù)定函數(shù)調(diào)用組訪問(wèn)這個(gè)信息。
綁定信號(hào)[bind.para]可以在任何時(shí)候被LLI接收,包含在原始綁定信號(hào)之后,并且因而允許LLI的配置選項(xiàng)被改變,并且此外允許LLI通過(guò)改變bind.ref參數(shù)而被綁定到另一個(gè)LLI,因而允許動(dòng)態(tài)重新綁定協(xié)議堆棧。
協(xié)議層的LLI可以通過(guò)實(shí)例化操作系統(tǒng)線程來(lái)產(chǎn)生,該操作系統(tǒng)線程具有其自身的執(zhí)行堆棧,以提供一定程度的控制和與其它執(zhí)行線程的隔離(例如能夠在不同線程之間終止和提供基于優(yōu)先級(jí)的多任務(wù))。可選地,不同LLI可以被實(shí)例化成不同操作系統(tǒng)進(jìn)程,以通過(guò)為每個(gè)進(jìn)程提供其自身的存儲(chǔ)器堆并阻止其它LLI的訪問(wèn),提供更高程度的隔離和控制。然而,這在執(zhí)行基于優(yōu)先級(jí)的多任務(wù)(即與線程相對(duì)的進(jìn)程之間的上下文切換)時(shí)導(dǎo)致增加管理開銷的代價(jià)。最后,可以在相同的操作系統(tǒng)線程內(nèi)實(shí)例化LLI。這樣的好處是,在建立和控制LLI方面存在最小管理開銷,但是不存在分立?;蚨?,因此如果依賴操作系統(tǒng)安全措施,則對(duì)數(shù)據(jù)(諸如LLI配置)的訪問(wèn)和對(duì)其執(zhí)行的控制(即劃分優(yōu)先級(jí)(prioritisation)等)會(huì)很大程度上依賴父線程。在后者的情況下,如果LLI使用的編程語(yǔ)言和執(zhí)行環(huán)境與其父線程相同,則是優(yōu)選的,但是這不是強(qiáng)制的。
除上述操作系統(tǒng)執(zhí)行環(huán)境之外,也可以在諸如FPGA或DSP的外部可編程設(shè)備中實(shí)例化LLI。這些執(zhí)行環(huán)境與在相同操作系統(tǒng)的控制下在單(或多)處理器方案內(nèi)的環(huán)境非常不同。然而,虛擬操作系統(tǒng)函數(shù)表(VOS)能夠允許從在不同設(shè)備上實(shí)現(xiàn)LLI的軟件模塊抽象出設(shè)備間通信復(fù)雜性。
通過(guò)上述方式,可以在不同執(zhí)行環(huán)境中使用不同執(zhí)行線程或進(jìn)程產(chǎn)生多個(gè)邏輯層實(shí)例。此外,每個(gè)LLI可以用不同協(xié)議特性(配置選項(xiàng))來(lái)配置,但是可以使用公共數(shù)據(jù)訪問(wèn)機(jī)構(gòu)訪問(wèn)信號(hào)消息數(shù)據(jù)和其它共享數(shù)據(jù)。當(dāng)如上所述不止一個(gè)LLI在相同線程內(nèi)產(chǎn)生時(shí),出現(xiàn)一種特殊情況。
如已經(jīng)討論的,可以在不同執(zhí)行環(huán)境中執(zhí)行(相同或不同)協(xié)議堆棧層的不同LLI,以提供不同層次的安全性以及性能。例如,藍(lán)牙堆棧可以支持安全高速連接和非安全低速連接。處理安全高速連接的LLI的執(zhí)行環(huán)境可以針對(duì)安全性和性能而優(yōu)化,并且支持低速連接的LLI可以在較低安全性和較少優(yōu)化的執(zhí)行環(huán)境中得到支持。
這個(gè)方案限制LLI之間的交互并且在對(duì)每個(gè)LLI必要時(shí)(具有適當(dāng)安全措施)使用不同執(zhí)行環(huán)境適當(dāng)隔離它們。通過(guò)這種方式,高度可信軟件可以被允許有更大自由,并且可以在沒有執(zhí)行嚴(yán)格運(yùn)行時(shí)刻安全性檢查或沒有限制功能的更加優(yōu)化的執(zhí)行環(huán)境中執(zhí)行,而在對(duì)與其它LLI進(jìn)行的允許交互有更多限制的環(huán)境中執(zhí)行使用較低可信軟件的LLI。這些措施還將不僅依賴于軟件內(nèi)的可信等級(jí),還依賴于涉及LLI支持的服務(wù)的類型的完整性和其它安全性要求(諸如隱私和保密)。
圖13圖解了建立和升級(jí)情景,用于實(shí)例化各層并且用于綁定一個(gè)軟件層到例如蜂窩電話中的另一個(gè)軟件層。電話存儲(chǔ)或下載若干軟件代碼模塊,這些軟件代碼模塊被直接(即天然地)或者使用虛擬機(jī)環(huán)境機(jī)構(gòu)(諸如Java類加載原理)及標(biāo)識(shí)的入口點(diǎn)載入工作存儲(chǔ)器。在示出的例子中,其包含層1-3及配置管理器(CM),配置管理器通過(guò)加載對(duì)應(yīng)于軟件層的代碼模塊到工作存儲(chǔ)器中,調(diào)用入口點(diǎn)并發(fā)送適當(dāng)綁定消息以配置或重新配置各層,從而控制協(xié)議堆棧的結(jié)構(gòu)。例如發(fā)送到層1的綁定消息指示它“綁定”到層2。
在層2被層2′替代的升級(jí)情景中,層2′軟件層文件或代碼模塊被載入工作存儲(chǔ)器(L2′),并且配置管理器(CM)調(diào)用新層的層入口點(diǎn)。它接著發(fā)出綁定消息到層2′,以傳送其輸出到層3并且設(shè)置適當(dāng)協(xié)議選項(xiàng)。配置管理器還傳送綁定消息到層1以重定向其輸出從層2到層2′。這個(gè)升級(jí)重新配置在運(yùn)行時(shí)刻發(fā)生,并且只需要實(shí)現(xiàn)相對(duì)簡(jiǎn)單的綁定消息。它還允許經(jīng)過(guò)(舊)層2(L2)的任何分組繼續(xù)得到處理并且傳遞到層3(L3),使得相關(guān)會(huì)話不被動(dòng)態(tài)重新配置終止。因而在堆棧重新配置期間不需要會(huì)話終止,其中假定新實(shí)例訪問(wèn)舊實(shí)例的配置(包含狀態(tài))數(shù)據(jù)。
參考圖14,例如為實(shí)例化層2的第一實(shí)例(L21),配置管理器(CM)加載層2代碼模塊到工作存儲(chǔ)器(或虛擬機(jī)環(huán)境)的程序代碼區(qū)。接著,通過(guò)在本地(native)軟件模塊的情況下直接調(diào)用工作存儲(chǔ)器中的代碼入口點(diǎn)(層入口點(diǎn)),或在虛擬機(jī)環(huán)境中調(diào)用層入口點(diǎn)成員函數(shù)(運(yùn)行方法),配置管理器啟動(dòng)LLI。
CM調(diào)用加載過(guò)程,并且因此對(duì)于Java,意味著加載類文件,并且對(duì)于本地層,意味著以適于執(zhí)行環(huán)境的方式加載部分代碼到存儲(chǔ)器。因?yàn)镃M知道執(zhí)行環(huán)境,它知道加載模塊,和傳遞默認(rèn)適當(dāng)VOS和/或操作系統(tǒng)表(OS)的方式。在下面更詳細(xì)地描述這些例子。在本地代碼層中,這需要通過(guò)定位和執(zhí)行入口點(diǎn)函數(shù)來(lái)調(diào)用入口點(diǎn)。入口點(diǎn)函數(shù)需要具有允許接收綁定消息的默認(rèn)行為。例如,在Java類中,這可以調(diào)用加載默認(rèn)VOS和/或特定于操作系統(tǒng)的類到JVM中,以便能夠接著調(diào)用receive_message函數(shù)。在本地層中,入口點(diǎn)可以包含參數(shù),即指向默認(rèn)VOS和/或特定于操作系統(tǒng)的(OS)表的指針。一旦模塊入口點(diǎn)被初始化(例如可以調(diào)用VOS或OS表的拷貝并且分配一些工作或堆存儲(chǔ)器),則它調(diào)用VOS(或操作系統(tǒng)函數(shù)表)中的receive_message函數(shù)并且接著不做任何事情,直到綁定消息被接收。
如上所述的初始化函數(shù)只是獲取默認(rèn)VOS(或操作系統(tǒng))表,在必要時(shí)對(duì)其進(jìn)行拷貝(或指向其在共享存儲(chǔ)器中的位置)并且調(diào)用receive_message函數(shù)的啟動(dòng)引導(dǎo)方法。
receive_message函數(shù)在VOS或操作系統(tǒng)表(OS)中,并且因此VOS或OS確定消息怎樣被發(fā)送(通過(guò)函數(shù)調(diào)用或者操作系統(tǒng)線程消息傳送等)。綁定消息是特定消息類型的(全部消息具有唯一標(biāo)識(shí)符以允許確定消息類型)。因此,其它消息(除通常強(qiáng)制清理退出的終止消息外)在等待綁定消息時(shí)被忽略。
綁定處理程序簡(jiǎn)單地調(diào)用create_new_LLI,它也是可以調(diào)用新線程或進(jìn)程實(shí)例,或?qū)嶋H上可以不進(jìn)行這些而僅修改LLI表的VOS或OS函數(shù)。然而,來(lái)自綁定消息的配置信息被傳遞到create_new_LLI函數(shù)以便允許針對(duì)該LLI設(shè)置配置。這包含對(duì)將由LLI使用的特定VOS和/或OS表的引用。這可能不同于由初始化函數(shù)復(fù)制或使用的VOS和/或OS表,例如如果層需要傳遞協(xié)議消息到不同執(zhí)行環(huán)境中的層。新線程調(diào)用特定VOS(或操作系統(tǒng)表)內(nèi)的receive_message函數(shù)以等待要處理的消息。
如上所述,綁定消息包含交互或接口信息以傳送層的輸出到下一層。綁定消息也可以包括必要函數(shù)調(diào)用以做這個(gè)(函數(shù)表)。例如,根據(jù)針對(duì)相關(guān)LLI選擇的配置選項(xiàng)和/或其執(zhí)行環(huán)境,函數(shù)或函數(shù)指針的初始化模板可以被傳遞到模塊入口點(diǎn),而處理函數(shù)的更特定模板可以通過(guò)綁定消息被傳遞到模塊。CM則可以指示特定于執(zhí)行環(huán)境的安全機(jī)構(gòu)允許從新LLI到允許的其它LLI的交互,并且可以可選地在共享配置數(shù)據(jù)上設(shè)置訪問(wèn)控制機(jī)構(gòu)以允許只訪問(wèn)由新LLI允許的部分配置數(shù)據(jù)。
綁定消息配置選項(xiàng)可以通過(guò)使用針對(duì)安全性,性能和功耗的通用配置偏好來(lái)確定要啟用的特性,例如是否啟用層內(nèi)加密。如果多個(gè)協(xié)議堆棧實(shí)例被同時(shí)使用,則每個(gè)層可以有多個(gè)LLI,并且用唯一實(shí)例標(biāo)識(shí)符(instance.ref)標(biāo)識(shí)這些。相同層的不同LLI可以具有不同配置,其中一些支持加密,而一些不支持。
以不考慮實(shí)現(xiàn)的特定細(xì)節(jié)的通用方式支持入口點(diǎn)調(diào)用和參數(shù)傳遞。優(yōu)選地,ANSI標(biāo)準(zhǔn)C(也稱作Cdecl)約定被用于傳遞本地軟件模塊的參數(shù),例如(function.pointer)或(start.pointer),到入口點(diǎn),該入口點(diǎn)提供諸如線程建立的執(zhí)行環(huán)境相關(guān)函數(shù)以及消息相關(guān)函數(shù)(包含配置數(shù)據(jù)訪問(wèn)函數(shù))。然而,對(duì)于Java層,軟件層的Java類擴(kuò)展了線程Java類,并且當(dāng)層被載入JVM時(shí)自動(dòng)調(diào)用運(yùn)行方法。如果本地層入口點(diǎn)被調(diào)用以實(shí)例化新線程,則在新執(zhí)行線程中產(chǎn)生新實(shí)例并且入口點(diǎn)返回。
可選地,(尤其當(dāng)各層在虛擬機(jī)環(huán)境中執(zhí)行時(shí),但不限于這些層)可以在伴隨層軟件模塊的聲明(manifest)(元)信息文件中指示入口點(diǎn)類(或位置)。當(dāng)綁定消息被處理時(shí),使用create_new_LLI產(chǎn)生新實(shí)例線程,并且新實(shí)例線程現(xiàn)在使用receive_message函數(shù)等待協(xié)議消息。
每個(gè)層實(shí)例配置數(shù)據(jù)將包含涉及下一個(gè)層實(shí)例的信息以發(fā)送分組或協(xié)議消息,諸如[signal.pointer]。因而,當(dāng)層要求發(fā)送分組(包含在協(xié)議消息內(nèi))到下一個(gè)層時(shí),針對(duì)綁定引用(bind.ref)的get_attribute函數(shù)被用于根據(jù)LLI配置數(shù)據(jù)獲得發(fā)送消息到的下一個(gè)層實(shí)例。
當(dāng)實(shí)例化相同層的多個(gè)LLI時(shí),綁定處理程序?qū)⑨槍?duì)新層實(shí)例(L22堆棧中)用配置數(shù)據(jù)形成新實(shí)例。先前所述的配置數(shù)據(jù)將包含實(shí)例的唯一標(biāo)識(shí)符,并且一旦已經(jīng)產(chǎn)生新線程實(shí)例,則返回確認(rèn)到CM,CM則可以設(shè)置適當(dāng)執(zhí)行環(huán)境安全措施。綁定消息可以被CM直接發(fā)送到LLI以改變實(shí)例的配置。
如前所述,傳入綁定消息包括實(shí)例號(hào)[instance.ref]。綁定引用[bind.ref]標(biāo)識(shí)在應(yīng)當(dāng)傳送輸出協(xié)議消息到的當(dāng)前LLI之上的層的LLI。函數(shù)指針[function.pointers]標(biāo)識(shí)適合于特定LLI的操作系統(tǒng)函數(shù)表(OS及可能VOS),使得當(dāng)層調(diào)用預(yù)定數(shù)量的函數(shù)之一(例如“create_new_LLI”)時(shí),函數(shù)指針指向適當(dāng)位置和存儲(chǔ)器,其包含針對(duì)LLI所工作的特定執(zhí)行環(huán)境或操作系統(tǒng)而正確格式化的針對(duì)這個(gè)函數(shù)的函數(shù)調(diào)用。換句話說(shuō),操作系統(tǒng)函數(shù)表映射LLI內(nèi)的“通用”函數(shù)調(diào)用到由操作系統(tǒng)使用的語(yǔ)言和操作系統(tǒng)相關(guān)函數(shù),以執(zhí)行這些函數(shù)。函數(shù)表通常會(huì)包含存儲(chǔ)器訪問(wèn)和管理函數(shù),其包含訪問(wèn)信號(hào)分組或在層之間傳遞的其它消息。因而,例如層1可以使用操作系統(tǒng)函數(shù)send_message傳遞信號(hào)分組(針對(duì)signal_packet_2)指針[signal.pointer]到層2內(nèi)的LLI。這允許層2LLI基于其內(nèi)部協(xié)議函數(shù),使用由操作系統(tǒng)函數(shù)表提供的函數(shù),并且使用其自身LLI執(zhí)行堆棧(L21堆棧)訪問(wèn)這個(gè)特定信號(hào)分組并且進(jìn)一步處理它。
如上所述,公共平臺(tái)無(wú)關(guān)的虛擬操作系統(tǒng)(VOS)函數(shù)表可以被用以提供對(duì)執(zhí)行環(huán)境函數(shù)和LLI配置信息的訪問(wèn)。這提高了執(zhí)行環(huán)境(操作系統(tǒng)和虛擬機(jī))無(wú)關(guān)性,并且在圖15中被圖解。其中示出了5個(gè)層(L1-L4),包含“舊”層3(L3)以及升級(jí)層3(L3′)。示出的層的兩個(gè)(L3′和L4)在Java虛擬機(jī)(JVM)內(nèi)操作。JVM需要解釋器或虛擬機(jī)環(huán)境以實(shí)時(shí)解釋對(duì)應(yīng)于這些層的軟件模塊的代碼,并且還提供本地接口(NI),用于與非Java軟件接口。其它層(L1-L3)被預(yù)編譯成目標(biāo)代碼并且在運(yùn)行時(shí)間由操作系統(tǒng)本地執(zhí)行。
還允許提供如圖所示的多個(gè)執(zhí)行環(huán)境,其中操作系統(tǒng)1和操作系統(tǒng)2均執(zhí)行不同層,但是各層仍然可以互相通信。
使用操作系統(tǒng)函數(shù)表(OS)把層中的通用函數(shù)調(diào)用轉(zhuǎn)換為實(shí)際特定于操作系統(tǒng)的函數(shù)。在VOS情況下,需要進(jìn)一步轉(zhuǎn)換或映射。每個(gè)到LLI的綁定消息向VOS函數(shù)表提供函數(shù)指針,其中VOS函數(shù)表自身指向OS的特定于操作系統(tǒng)的函數(shù)以允許各層執(zhí)行。這提供操作系統(tǒng)無(wú)關(guān)性,因?yàn)閂OS函數(shù)表可以被重新指向不同特的定于操作系統(tǒng)的函數(shù)。例如,CM可以指示LLI(通過(guò)綁定消息)在運(yùn)行時(shí)刻動(dòng)態(tài)改變其對(duì)應(yīng)于由LLI使用的通用函數(shù)的特定于操作系統(tǒng)的函數(shù)的VOS表,其中從例如基于UNIX的POSIX函數(shù)(OSx)改變到基于UNIX的系統(tǒng)V操作系統(tǒng)函數(shù)(OSy)。然而動(dòng)態(tài)改變需要考慮到某些操作特定函數(shù)包含或改變涉及系統(tǒng)狀態(tài)的信息(尤其是信號(hào)量和其他類似于存儲(chǔ)器分配的系統(tǒng)資源處理函數(shù))的情況,因此,VOS概念可以通過(guò)在這些間接尋址機(jī)構(gòu)內(nèi)提供智能和操作系統(tǒng)抽象來(lái)允許必要時(shí)在OS環(huán)境之間無(wú)縫切換的能力。它還允許軟件代碼模塊以能夠支持不同執(zhí)行環(huán)境的最通用方式來(lái)編寫。
在協(xié)議軟件中,串操作不經(jīng)常執(zhí)行,然而類似于“calculate_crc”或“convert_ip_address_2_string”的任何頻繁操作可以被包含作為在操作系統(tǒng)表(OS)或VOS表中具有相應(yīng)操作特定函數(shù)的通用函數(shù)。在可選方案中,諸如加密與解密的某個(gè)信號(hào)數(shù)據(jù)操作函數(shù)在通用加密/解密層中實(shí)現(xiàn),該層可以被配置為執(zhí)行不同加密與解密操作。這是包含最數(shù)學(xué)化的函數(shù)的層,并且可以使用(在必要時(shí))具有數(shù)學(xué)擴(kuò)展的VOS或操作系統(tǒng)表(OS),因?yàn)樗梢栽诰哂羞@些復(fù)雜數(shù)學(xué)函數(shù)的性能加速器的執(zhí)行環(huán)境(類似協(xié)處理器)中操作。接著其它或通用協(xié)議層將使用沒有這些擴(kuò)展的通用VOS或操作系統(tǒng)表(OS)。
用來(lái)以執(zhí)行環(huán)境和語(yǔ)言無(wú)關(guān)的方式將函數(shù)指針傳遞到模塊的方法在圖16和17中被圖解。具體示出本地代碼例子,例如C,其中圖16示出已知?jiǎng)討B(tài)鏈接方法,并且圖17示出基于實(shí)施例的傳遞函數(shù)表指針的方法。
參考圖16,軟件模塊的廠商開發(fā)包括一系列API函數(shù)(x和y)和變量的源代碼程序(在這個(gè)例子中用C編程語(yǔ)言),以與存儲(chǔ)在目標(biāo)平臺(tái)(硬件,函數(shù)庫(kù)集合,以及諸如輸入/輸出的操作系統(tǒng)函數(shù))的存儲(chǔ)器中的數(shù)據(jù),以及可能地在平臺(tái)上操作的其它API庫(kù)模塊進(jìn)行交互。源代碼被已知編譯器編譯成目標(biāo)代碼,其轉(zhuǎn)換系列函數(shù)成特定于目標(biāo)平臺(tái)的二進(jìn)制機(jī)器(或?qū)ο?代碼。二進(jìn)制代碼包括一系列位置標(biāo)志符或符號(hào)(符號(hào)X和符號(hào)Y),其均對(duì)應(yīng)于API庫(kù)模塊中的系列函數(shù)(x和y)之一。
當(dāng)對(duì)象代碼被載入目標(biāo)平臺(tái)上的存儲(chǔ)器以執(zhí)行時(shí),在預(yù)先加載的對(duì)應(yīng)于庫(kù)源代碼中的函數(shù)(分別為x和y)的API庫(kù)模塊中,動(dòng)態(tài)鏈接程序檢查代碼,并且用API庫(kù)函數(shù)(mem.loc(X)和mem.loc(Y))的存儲(chǔ)器位置替換系列符號(hào)(符號(hào)X和符號(hào)Y)。如果庫(kù)模塊未被加載,則它可以被動(dòng)態(tài)鏈接程序(或類加載器,在基于Java的實(shí)現(xiàn)的情況下)動(dòng)態(tài)加載。接著,通過(guò)使程序計(jì)數(shù)器逐步掃過(guò)包含程序指令的存儲(chǔ)器位置系列并且跳轉(zhuǎn)(分支轉(zhuǎn)移)到對(duì)應(yīng)于軟件模塊所需的API庫(kù)函數(shù)調(diào)用(mem.loc(x),mem.loc(y))的存儲(chǔ)器位置,平臺(tái)可以執(zhí)行代碼。
參考圖17,被加載在目標(biāo)平臺(tái)上的軟件模塊的廠商(C程序員)開發(fā)出源代碼程序,該源代碼程序包括對(duì)應(yīng)于在圖16的方案中使用實(shí)際API函數(shù)調(diào)用的位置的一系列API函數(shù)調(diào)用(redirect.f(x)和redirect.f(y))。重定向函數(shù)只是重定向函數(shù)調(diào)用到指定VOS或OS函數(shù)指針表內(nèi)的特定項(xiàng)的存儲(chǔ)器位置(在陣列內(nèi)堆或共享存儲(chǔ)器中的在編譯時(shí)未知的位置保存)。C源代碼被編譯器編譯成目標(biāo)代碼,該目標(biāo)代碼也包括二進(jìn)制機(jī)器碼,然而在源代碼中不存在對(duì)應(yīng)于函數(shù)的符號(hào)(X和Y)。而是簡(jiǎn)單地將重定向函數(shù)編譯成到存儲(chǔ)器位置的跳轉(zhuǎn)(或分支轉(zhuǎn)移)指令,該存儲(chǔ)器位置保存在存儲(chǔ)器駐留函數(shù)表內(nèi)的一個(gè)項(xiàng)(每個(gè)項(xiàng)對(duì)應(yīng)于一個(gè)API函數(shù))中,該存儲(chǔ)器駐留函數(shù)表在運(yùn)行時(shí)刻被加載在目標(biāo)平臺(tái)上。
通過(guò)這種方式,多個(gè)執(zhí)行線程可以在不需要?jiǎng)討B(tài)重新鏈接軟件模塊的情況下使用不同API實(shí)現(xiàn)代碼來(lái)運(yùn)行軟件模塊。
編譯器轉(zhuǎn)換重定向函數(shù)為相對(duì)存儲(chǔ)器指針,其在運(yùn)行時(shí)刻相對(duì)于OS或VOS表的起始處,并且因此指向由目標(biāo)代碼指示的特定于執(zhí)行環(huán)境的適當(dāng)函數(shù)。在這種情況下,源代碼需要使用重定向函數(shù)而不是圖16的API型函數(shù)來(lái)編寫。
在可選方案中,現(xiàn)有技術(shù)源代碼程序被修改的編譯器轉(zhuǎn)換成相同目標(biāo)代碼,編譯器轉(zhuǎn)換C特定函數(shù)(例如函數(shù)x)成重定向函數(shù)調(diào)用redirect.f(x),以允許使用(在運(yùn)行時(shí)刻動(dòng)態(tài)加載的)函數(shù)表。
當(dāng)這個(gè)軟件模塊目標(biāo)代碼被載入存儲(chǔ)器時(shí),它被傳遞針對(duì)對(duì)應(yīng)于在堆或共享存儲(chǔ)器的位置的特定于平臺(tái)的映射表的引用(諸如存儲(chǔ)器中的起始地址)。默認(rèn)函數(shù)指針表可以被加載在預(yù)定相對(duì)存儲(chǔ)器位置處,對(duì)于目標(biāo)代碼,其中軟件模塊不包含入口點(diǎn)函數(shù)或其它裝置的實(shí)例也可以通過(guò)表引用指針來(lái)傳遞。
于是平臺(tái)可以通過(guò)運(yùn)行該系列指令來(lái)執(zhí)行這個(gè)目標(biāo)代碼,其中該系列指令被從重定向(跳轉(zhuǎn)或分支轉(zhuǎn)移)程序計(jì)數(shù)器的redirect.f(x)編譯為存儲(chǔ)器值對(duì)應(yīng)表項(xiàng)(redirect.f(x)),其是平臺(tái)上實(shí)際OS或VOS庫(kù)函數(shù)(mem.loc(x))的存儲(chǔ)器位置。函數(shù)被執(zhí)行并且程序計(jì)數(shù)器返回到軟件模塊目標(biāo)代碼中發(fā)生跳轉(zhuǎn)(或分支轉(zhuǎn)移)的位置。
可以發(fā)現(xiàn),這允許被編譯成位置無(wú)關(guān)代碼(即可以從任何存儲(chǔ)器地址執(zhí)行的代碼)的可加載軟件模塊是平臺(tái)無(wú)關(guān)的,這意味著平臺(tái)(操作系統(tǒng),動(dòng)態(tài)鏈接程序或Java虛擬機(jī))不需要知道軟件模塊代碼的具體語(yǔ)言和語(yǔ)義,以及它怎樣與其它模塊交互。也可以發(fā)現(xiàn),源代碼可以是語(yǔ)言無(wú)關(guān)的,由于所編譯的目標(biāo)代碼包含指向映射表而不是預(yù)定符號(hào)的相同指針,動(dòng)態(tài)加載器將需要解釋該指針并且用針對(duì)平臺(tái)特定函數(shù)的存儲(chǔ)器位置替換該指針。例如,用C,VisualBasic或Pascal編寫的程序?qū)⒕痪幾g成具有相對(duì)函數(shù)指針的相同目標(biāo)代碼,其傳遞特定于執(zhí)行環(huán)境的函數(shù)所位于的存儲(chǔ)器中的起始點(diǎn),相對(duì)指針指示相距這個(gè)起始點(diǎn)的相應(yīng)函數(shù)的相對(duì)位置。這允許廠商提供可以用任何語(yǔ)言編寫的軟件模塊(目標(biāo)代碼),并且其是平臺(tái)無(wú)關(guān)的。
最后,執(zhí)行軟件模塊代碼的每個(gè)線程或進(jìn)程可以使用不同庫(kù)函數(shù)表映射這樣做,以允許相同代碼段的行為具有完全不同的實(shí)現(xiàn)庫(kù)函數(shù)的方式。因此,一個(gè)執(zhí)行線程(在存儲(chǔ)器駐留二進(jìn)制或字節(jié)代碼模塊上)可以調(diào)用實(shí)現(xiàn)庫(kù)函數(shù)的輕量(lightweight)集以優(yōu)化性能的庫(kù)函數(shù),并且另一個(gè)執(zhí)行線程(相同存儲(chǔ)器駐留代碼的)可以使用重量(heavyweight)庫(kù)函數(shù)實(shí)現(xiàn)以優(yōu)化例如安全性。
參考圖18和19,針對(duì)基于Java語(yǔ)言的層程序分別示出動(dòng)態(tài)鏈接(類加載器)和函數(shù)指針傳遞方法。本地和Java軟件模塊之間的主要差異是在Java中,間接尋址的額外層被引入以橫貫在Java和本地軟件模塊之間。Java軟件模塊具有分別對(duì)應(yīng)于本地庫(kù)函數(shù)Java_class_redirect.f(x)和Java_class_redirect.f(y)的Java本地接口方法redirect.m(x)和redirect.m(y)。Java本地接口方法被類加載器映射到本地函數(shù)。通常,當(dāng)使用標(biāo)準(zhǔn)JVM類加載器時(shí),本地庫(kù)模塊必須使用System.LoadLibrary方法來(lái)加載。然而,也可以產(chǎn)生可以使用其它方法加載類和庫(kù)的定制Java類加載器。
接著,類加載器會(huì)在這個(gè)例子中解析在Java本地接口類(mem.loc(redirect.f(x))和mem.loc(redirect.f(y)))中使用的本地符號(hào)。這些重定向函數(shù)會(huì)接著用和本地重定向函數(shù)同樣的方式操作,并且使用映射表以重定向函數(shù)調(diào)用到實(shí)函數(shù)mem.loc(x)和mem.loc(y)。
可以定制Java類加載器以消除加載本地接口庫(kù)的這個(gè)中間步驟,因?yàn)檫@顯然以特定于平臺(tái)的方式執(zhí)行,并且需要每個(gè)平臺(tái)具有相應(yīng)接口庫(kù)組,以允許實(shí)際本地API庫(kù)被訪問(wèn)。
圖20圖解了針對(duì)協(xié)議堆棧的實(shí)現(xiàn)的按照消息的線程的解決方案。在這個(gè)方案中,線程與整個(gè)協(xié)議堆棧中的每個(gè)分組或信號(hào)相關(guān)。在示出的例子中,thread_signal 1與堆棧實(shí)例內(nèi)層1處理的協(xié)議消息信號(hào)1相關(guān),接著繼續(xù)到其中由各種函數(shù)或示出的子模塊處理消息的層2(圖14中代碼塊或模塊的分組或協(xié)議消息處理部分),并且執(zhí)行繼續(xù)到其中進(jìn)一步處理消息的層3。類似地,thread_signal 2與協(xié)議消息信號(hào)2相關(guān),該協(xié)議消息信號(hào)2被傳送通過(guò)層1并且到達(dá)層2,在層2中在示出特定時(shí)間點(diǎn)處,其到達(dá)層2的“校驗(yàn)和”子函數(shù)。這個(gè)方案類似于現(xiàn)有提出的框架,然而它的缺點(diǎn)是,具有由大多數(shù)多任務(wù)操作系統(tǒng)提供的不同安全性和性能配置的不同執(zhí)行環(huán)境不能容易地用于區(qū)分不同LLI,而是需要實(shí)現(xiàn)可以基于LLI根據(jù)需要搶占線程的定制調(diào)度器。
累積函數(shù)在虛線輪廓中示出,并且未在上面描述以方便說(shuō)明。當(dāng)在按照消息的線程的方案中實(shí)現(xiàn)累積函數(shù)時(shí),存在兩個(gè)可能實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)是簡(jiǎn)單地終止線程,然而這依賴于監(jiān)視緩沖區(qū)以便伺服緩沖的分組的另一個(gè)線程??蛇x的實(shí)現(xiàn)是返回到調(diào)用函數(shù),并且接著執(zhí)行線程可以被用于處理另一個(gè)消息。這比終止線程更有吸引力,因?yàn)榫€程產(chǎn)生等待時(shí)間和管理開銷在操作系統(tǒng)上會(huì)非常高,除非實(shí)現(xiàn)非常輕量的線程模型。
這示意性地在圖21中示出,其中在工作存儲(chǔ)器中示出兩個(gè)代碼塊2,和通過(guò)這些代碼塊與各種執(zhí)行線程相關(guān)的執(zhí)行堆棧,以及堆和其它共享存儲(chǔ)器對(duì)象。各種執(zhí)行堆棧將存儲(chǔ)各種參數(shù),例如微處理器寄存器的當(dāng)前狀態(tài),函數(shù)和代碼模塊內(nèi)的靜態(tài)數(shù)據(jù),以及用于函數(shù)調(diào)用參數(shù)傳遞的參數(shù)。調(diào)度器和線程管理器以已知方式控制各種線程的操作,將當(dāng)前或活動(dòng)線程的相應(yīng)堆棧的適當(dāng)內(nèi)容載入微處理器寄存器,并且在剛切換(稱為上下文切換)的線程的適當(dāng)堆棧中存儲(chǔ)寄存器的內(nèi)容。例如可以發(fā)現(xiàn),在代碼(TS1)的L2模塊中thread_signal 1的執(zhí)行點(diǎn)比thread_signal 2(TS2)進(jìn)一步經(jīng)過(guò)更多的代碼,其中(TS1)和(TS2)表示每個(gè)線程的程序計(jì)數(shù)器值,并且因此指示代碼模塊中該線程的下一個(gè)執(zhí)行點(diǎn)。各種其它執(zhí)行堆棧將與傳遞經(jīng)過(guò)協(xié)議堆棧的各代碼塊L1-L5的其它信號(hào)相關(guān)。可以發(fā)現(xiàn),每個(gè)線程與單個(gè)信號(hào)相關(guān),并且以同步方式“跟隨信號(hào)”通過(guò)協(xié)議堆棧。
如圖22所示,相比之下另一個(gè)實(shí)施例使用按照LLI的線程。Thread_layer2_LLI#_1對(duì)應(yīng)于從低層(例如層1)接收了信號(hào)或分組(協(xié)議消息)的層2或代碼模塊內(nèi)的一個(gè)線程。該線程通過(guò)該層的各種子函數(shù)處理此信號(hào),并且傳遞所處理的輸出(信號(hào),分組或消息)到高層(例如層3)。它接著返回到其相關(guān)的層2的接收消息或輸入函數(shù),準(zhǔn)備好處理下一個(gè)協(xié)議消息。類似地,thread_layer2_LLI2與和第一線程相同的層(層2)中的、但是在不同實(shí)例或LLI中的單獨(dú)分組或協(xié)議消息相關(guān)。在示出時(shí)間點(diǎn)處,這個(gè)第二線程或執(zhí)行點(diǎn)已經(jīng)到達(dá)層2的解密子函數(shù)。一旦每個(gè)線程通過(guò)其LLI處理了協(xié)議消息,則它返回到空閑狀態(tài)并且調(diào)用receive_message操作系統(tǒng)函數(shù)以等待來(lái)自低層的新分組。在LLI之間傳遞的消息由執(zhí)行環(huán)境處理,當(dāng)執(zhí)行LLI的執(zhí)行環(huán)境駐留在不同物理處理器上時(shí),可能使用來(lái)自所涉及的任一LLI的不同操作系統(tǒng)線程或進(jìn)程(例如thread_send_message(x))。receive_message函數(shù)簡(jiǎn)單地等待和取得預(yù)定消息隊(duì)列中的消息。類似地,send_message函數(shù)把消息放在預(yù)定消息隊(duì)列中。
這個(gè)按照LLI的線程(thread-per-LLI)的方案勝過(guò)先前方案的優(yōu)點(diǎn)是,每個(gè)LLI可以被配置成以不同優(yōu)先級(jí)(如果適當(dāng))在不同執(zhí)行環(huán)境(在必要時(shí))中操作,并且采取不同安全措施以阻止任何不良行為的軟件模塊影響其它LLI的操作。
累積函數(shù)已經(jīng)在虛線輪廓中示出以簡(jiǎn)化最初的說(shuō)明,然而由于針對(duì)協(xié)議堆棧的這種方案本身在性質(zhì)上是異步行為的(即具有消息的累積),則使用異步消息傳遞有吸引力,其使得消息(分組)被以發(fā)送方和接收方可訪問(wèn)的公共和永久方式緩沖。如果在層代碼內(nèi)自然地執(zhí)行累積(如在按照消息的線程方案中那樣),則消息數(shù)據(jù)必須從發(fā)送方被復(fù)制到累積緩沖區(qū),并且接著再次從緩沖區(qū)復(fù)制到下一個(gè)層。
通過(guò)具有永久共享存儲(chǔ)器隊(duì)列,允許消息被投送到隊(duì)列,而不需要任何數(shù)據(jù)拷貝。協(xié)議堆棧實(shí)現(xiàn)中的拷貝應(yīng)當(dāng)被最小化以獲取良好性能。因此,如果send_message函數(shù)簡(jiǎn)單地將針對(duì)消息的指針?lè)诺浇邮辗较㈥?duì)列中,則根本不存在任何數(shù)據(jù)拷,貝并且接收方仍然可以用相同方式訪問(wèn)數(shù)據(jù)。其它優(yōu)點(diǎn)是,當(dāng)一個(gè)層實(shí)例LLI被重新配置(即替換)成另一個(gè)LLI時(shí),則隊(duì)列仍然在那里,并且消息數(shù)據(jù)仍然在那里,并且因此什么也沒有丟失,并且處理可以繼續(xù),就好象什么都未發(fā)生。
另一個(gè)優(yōu)點(diǎn)是,當(dāng)在堆棧中升級(jí)或替換LLI期間,由未被升級(jí)的LLI處理的協(xié)議消息(信號(hào))不受影響。并且,在必要時(shí),預(yù)先執(zhí)行的切換可以通過(guò)重定向針對(duì)舊實(shí)例的分組到將由新實(shí)例使用的隊(duì)列,或通過(guò)掛起舊實(shí)例來(lái)實(shí)現(xiàn)(并且因而阻止舊版本的進(jìn)一步處理,但沒有丟棄分組)。這是可能的,例如如果使用永久共享存儲(chǔ)器排隊(duì)來(lái)實(shí)現(xiàn)send_message和receive_message函數(shù),并且隊(duì)列可以由在新LLI的實(shí)例化之前向新LLI版本實(shí)例下面和上面的LLI實(shí)例發(fā)送綁定消息的CM來(lái)重新關(guān)聯(lián),因?yàn)榉纸M將開始被排隊(duì)以準(zhǔn)備用于新LLI實(shí)例。這個(gè)方法有吸引力,因?yàn)樾翷LI的實(shí)例化會(huì)是消耗時(shí)間的,并且如果例如切換是從非安全到安全LLI版本,則以非安全方式繼續(xù)的分組處理會(huì)在系統(tǒng)中暴露易受攻擊性。
圖23示出類似于圖21的按照消息的線程的方案的示意圖,但是示出對(duì)應(yīng)于按照實(shí)例的線程的方案的執(zhí)行堆棧。例如,示出與層2代碼模塊相關(guān)的兩個(gè)線程,然而每個(gè)線程關(guān)聯(lián)于L2的不同實(shí)例(LLI),這與L2內(nèi)的不同協(xié)議消息相反。(TL21),(TL22)和(TL11)圖解了程序計(jì)數(shù)器數(shù)值或每個(gè)LLI線程在代碼模塊中的位置。
圖24和25圖解了到達(dá)在實(shí)施例中應(yīng)用程序的代碼模塊的不同路線。在圖24中,廠商開發(fā)C++源代碼程序,該C++源代碼程序被轉(zhuǎn)換源代碼到通用執(zhí)行代碼模塊格式的“源到指針”編譯器編譯,該格式在函數(shù)模板中包括對(duì)應(yīng)于通用函數(shù)的一系列指針。指針具有如前所述的公共數(shù)據(jù)格式,并且是針對(duì)OS表或?qū)ο笾械南鄳?yīng)特定于操作系統(tǒng)的函數(shù)的相對(duì)存儲(chǔ)器指針。例如,第一通用函數(shù)(例如Func#1,即create_new_LLI)對(duì)應(yīng)于OS中的第一特定于操作系統(tǒng)的函數(shù)。在知道存儲(chǔ)器中相應(yīng)OS的位置的情況下,當(dāng)執(zhí)行環(huán)境執(zhí)行模塊時(shí),執(zhí)行環(huán)境被指向OS中適當(dāng)格式化的特定于執(zhí)行環(huán)境的函數(shù)。
在圖25示出的可選方案中,廠商開發(fā)相同C++源代碼程序,該C++源代碼程序被標(biāo)準(zhǔn)C++編譯器編譯成特定于平臺(tái)的C++代碼模塊。接著需要另一個(gè)編譯器,以便把這個(gè)模塊轉(zhuǎn)換成上述通用函數(shù)指針代碼模塊,并且其適于使用OS(以及在某些實(shí)施例中的VOS)來(lái)執(zhí)行。
圖26示出使用一些上述實(shí)施例的實(shí)現(xiàn)例子。具有藍(lán)牙能力的終端設(shè)備在本地語(yǔ)言軟件層(軟件層#1及#2)內(nèi)運(yùn)行標(biāo)準(zhǔn)藍(lán)牙協(xié)議堆棧。藍(lán)牙堆棧使用上述綁定功能,上述綁定功能使平臺(tái)操作系統(tǒng)和語(yǔ)言無(wú)關(guān)協(xié)議層能夠動(dòng)態(tài)鏈接到一起。示出的兩個(gè)協(xié)議堆棧實(shí)例(Instance#1和Instance#2)可以被配置為提供不同藍(lán)牙服務(wù)。例如,LAN訪問(wèn)簡(jiǎn)表實(shí)例和IP語(yǔ)音或藍(lán)牙網(wǎng)絡(luò)封裝簡(jiǎn)表實(shí)例。LAN訪問(wèn)簡(jiǎn)表接著被用于使用專用藍(lán)牙接入點(diǎn)執(zhí)行Web瀏覽,并且同時(shí)IP語(yǔ)音簡(jiǎn)表被用于通過(guò)相同接入點(diǎn)進(jìn)行電話呼叫。
可以通過(guò)使用如圖27所示下載Java層(層#3)增加對(duì)新簡(jiǎn)表的支持來(lái)定制藍(lán)牙堆棧。這個(gè)層提供(例如)增強(qiáng)的安全性或性能或新服務(wù)功能。Java層被動(dòng)態(tài)加載和新的層實(shí)例(LLI#1和LLI#2),其被綁定到現(xiàn)有本地語(yǔ)言藍(lán)牙堆棧,但不需要通過(guò)所使用的實(shí)施例重新啟動(dòng)藍(lán)牙堆棧。因此,現(xiàn)有藍(lán)牙連接會(huì)話未被破壞。新層可以被用于實(shí)例化用于加密和解密終端和接入點(diǎn)之間的數(shù)據(jù)的增強(qiáng)安全性簡(jiǎn)表。
為支持操作系統(tǒng)無(wú)關(guān)性,使用在協(xié)議堆棧內(nèi)用于與協(xié)議堆棧內(nèi)的其它模塊交互的所需特定于平臺(tái)的函數(shù)的操作系統(tǒng)函數(shù)表(例如允許共享存儲(chǔ)器分配和線程消息傳送等的函數(shù))。綁定消息還將確定允許哪些其它模塊與它交互,并且執(zhí)行環(huán)境機(jī)構(gòu)將存在以驗(yàn)證這些資源的真實(shí)性。綁定消息還必須包含協(xié)議層所需的所有必要初始配置數(shù)據(jù)。
使用不同執(zhí)行線程實(shí)例化這個(gè)藍(lán)牙堆棧內(nèi)的層,并且每個(gè)層利用VOS或OS receive_message和send_message分別作為協(xié)議消息入口和出口點(diǎn),以允許VOS或OS實(shí)現(xiàn)適于LLI的選定執(zhí)行環(huán)境的交互機(jī)構(gòu)。線程或進(jìn)程可以通過(guò)唯一LLI名被標(biāo)識(shí),唯一LLI名包括唯一層名(在這種情況下為“藍(lán)牙堆棧層#3”)和層實(shí)例標(biāo)識(shí)符(在這種情況下為“LLI#1”和“LLI#2”)。通過(guò)這種方式,線程名被用于唯一標(biāo)識(shí)層實(shí)例。VOS和OS可以使用特定于操作系統(tǒng)的機(jī)構(gòu)以支持LLI之間的交互,和LLI線程和進(jìn)程的調(diào)度,或者也可以使用專有及高度優(yōu)化的機(jī)構(gòu)。這可以根據(jù)安全性,性能或甚至根據(jù)諸如存儲(chǔ)器和功耗的資源利用來(lái)優(yōu)化。
這個(gè)方法允許用不同配置產(chǎn)生LLI。在綁定處理期間用綁定信號(hào)配置每個(gè)LLI,其中綁定信號(hào)不僅標(biāo)識(shí)LLI與之通信的其它LLI通信,而且標(biāo)識(shí)用于具體實(shí)例的配置數(shù)據(jù)。
VOS支持的LLI消息隊(duì)列可以被保存在永久共享存儲(chǔ)器中,以允許在協(xié)議堆棧仍然活動(dòng)的同時(shí)動(dòng)態(tài)升級(jí)軟件。也可以進(jìn)行LLI的重新綁定以允許插入層到活動(dòng)協(xié)議堆棧中。
配置新層(藍(lán)牙堆棧層#3)到協(xié)議堆棧的處理如下1.第一步是通過(guò)調(diào)用相關(guān)模塊入口點(diǎn)來(lái)開始執(zhí)行“藍(lán)牙堆棧層#3”。就Java模塊來(lái)說(shuō),類文件被載入由CM選擇的JVM環(huán)境。如果琿沒被加載,則模塊加載默認(rèn)VOS或OS API。接著運(yùn)行方法自動(dòng)被JVM調(diào)用,并且層軟件(模塊)調(diào)用load_template函數(shù)以便隨后能夠訪問(wèn)配置和消息數(shù)據(jù),并且調(diào)用receive_message函數(shù)以等待綁定消息。
2.綁定消息被傳遞到具有必要配置信息的“藍(lán)牙堆棧層#3”線程。接著線程通過(guò)調(diào)用VOS或OS create_new_LLI函數(shù)產(chǎn)生新LLI實(shí)例。在新LLI內(nèi),特定于LLI的VOS和/或OS表在必要時(shí)被加載。產(chǎn)生線程“藍(lán)牙堆棧層#3實(shí)例#1”,并且回送OK響應(yīng)。新LLI執(zhí)行通用load_template函數(shù)(如果需要不同模板)以允許訪問(wèn)消息和配置數(shù)據(jù),并且接著調(diào)用receive_message以便等待下一個(gè)消息。
3.重新綁定請(qǐng)求消息被送到“藍(lán)牙堆棧層#2實(shí)例#1”,其中“藍(lán)牙堆棧層#2實(shí)例#1”用OK消息響應(yīng)該消息以確認(rèn)重新綁定,并且最初指定到“主因特網(wǎng)堆?!钡乃泻罄m(xù)分組現(xiàn)在被發(fā)送到“藍(lán)牙堆棧層#2LLI#1”。
4.重綁定消息被送到“主因特網(wǎng)堆?!?,更新路由表并且接收OK響應(yīng)。
5.LLI#1現(xiàn)在是活動(dòng)的,相同過(guò)程被重復(fù)用于層#3 LLI#2。
為了使Java藍(lán)牙堆棧層#3可以容易地與本地語(yǔ)言藍(lán)牙堆棧層#2及主因特網(wǎng)堆?;ゲ僮鳎褂蒙鲜龉驳腣OS和/或OS支持的機(jī)構(gòu),其用于交互和線程與進(jìn)程調(diào)度。用于以平臺(tái)無(wú)關(guān)的方式訪問(wèn)這個(gè)公共功能的方法依靠動(dòng)態(tài)可加載VOS和/或OS函數(shù)庫(kù)。
當(dāng)“藍(lán)牙堆棧層#3”線程在JVM環(huán)境內(nèi)被實(shí)例化時(shí),進(jìn)行Java調(diào)用以加載默認(rèn)VOS和/或OS庫(kù)。VOS和/或OS庫(kù)包含一組涉及系統(tǒng)資源的處理函數(shù)。這些最少包含·信號(hào)和存儲(chǔ)器分配函數(shù)·線程產(chǎn)生(和銷毀)函數(shù)·消息發(fā)送和接收函數(shù)·配置和信號(hào)數(shù)據(jù)訪問(wèn)函數(shù)VOS和/或OS函數(shù)庫(kù)接著被用于與其它LLI通信,以及訪問(wèn)配置數(shù)據(jù)(使用適當(dāng)?shù)募虞d的模板)??梢栽谌舾刹煌僮飨到y(tǒng)上支持通用LLI和VOS函數(shù),并且可以從許多不同語(yǔ)言和虛擬機(jī)環(huán)境訪問(wèn)通用LLI和VOS函數(shù)。函數(shù)庫(kù)還提供對(duì)消息隊(duì)列,信號(hào)和配置數(shù)據(jù)的受控訪問(wèn)。例如,函數(shù)庫(kù)可以基于LLI標(biāo)識(shí)符限制對(duì)配置數(shù)據(jù)的訪問(wèn),以及把消息發(fā)送和接收的使用控制到適當(dāng)授權(quán)的源和目的。通過(guò)這種方式,產(chǎn)生安全的語(yǔ)言和操作系統(tǒng)無(wú)關(guān)的協(xié)議堆棧執(zhí)行環(huán)境。
通過(guò)這種方式,可以使用某組加密功能設(shè)置產(chǎn)生例如“藍(lán)牙堆棧層#3 LLI#1”。這些設(shè)置可以在“藍(lán)牙堆棧層#3 LLI#2”中是不同的,并且在用于綁定處理的綁定消息中被定義。接著,LLI#2不可訪問(wèn)LLI#1的參數(shù),并且反之亦然,以及LLI#1也不可截取針對(duì)LLI#2的分組,并且反之亦然。
本領(lǐng)域技術(shù)人員會(huì)認(rèn)識(shí)到,上述設(shè)備和方法可以被體現(xiàn)為例如磁盤,CD-ROM或DVD-ROM的承載介質(zhì),諸如只讀存儲(chǔ)器(固件)的編程存儲(chǔ)器,或諸如光或電信號(hào)載體的數(shù)據(jù)載體上的處理器控制代碼。針對(duì)許多應(yīng)用,本發(fā)明的實(shí)施例會(huì)在DSP(數(shù)字信號(hào)處理器),ASIC(專用集成電路)或FPGA(現(xiàn)場(chǎng)可編程門陣列)上實(shí)現(xiàn)。因而代碼可以包括常規(guī)程序代碼或微碼,或例如用于設(shè)置或控制ASIC或FPGA的代碼。代碼也可以包括用于動(dòng)態(tài)配置諸如可再編程邏輯門陣列的可重新配置設(shè)備的代碼。類似地,代碼可以包括用于諸如VerilogTM或VHDL(超高速集成電路硬件描述語(yǔ)言)的硬件描述語(yǔ)言的代碼。本領(lǐng)域技術(shù)人員會(huì)理解,可以在彼此通信的多個(gè)連接的部件之間分配代碼。如果適當(dāng),也可使用現(xiàn)場(chǎng)可(重新)編程模擬陣列或類似器件上運(yùn)行的代碼來(lái)實(shí)現(xiàn)實(shí)施例,以便配置模擬硬件。
本領(lǐng)域技術(shù)人員還會(huì)理解,各種實(shí)施例和針對(duì)其描述的具體特性通常根據(jù)上述教導(dǎo)可以自由地與其它實(shí)施例或其具體描述的特性相結(jié)合。本領(lǐng)域技術(shù)人員還會(huì)認(rèn)識(shí)到,在不偏離所附權(quán)利要求書的范圍的情況下,可以對(duì)所描述的特定例子進(jìn)行各種變更和修改。
權(quán)利要求
1.一種提供用于在處理設(shè)備中處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括加載軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;加載所述函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);基于所述映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊,以便基于所述協(xié)議層處理所接收信號(hào)。
2.如權(quán)利要求1所述的方法,其中該模塊被設(shè)置成與其它模塊交換對(duì)應(yīng)于所述信號(hào)的協(xié)議消息,所述其它模塊被設(shè)置成基于對(duì)應(yīng)于其它所述層的一組通用函數(shù)處理所述信號(hào)。
3.如權(quán)利要求2所述的方法,還包括加載所述其它軟件模塊到存儲(chǔ)器中,所述其它模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;針對(duì)每個(gè)其它模塊,加載所述函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);基于所述映射的特定于設(shè)備的函數(shù)執(zhí)行所述其它模塊,以便基于所述協(xié)議層處理所接收信號(hào)。
4.如權(quán)利要求2或3所述的方法,還包括接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息的所述或每個(gè)加載的軟件模塊,其中第一模塊被設(shè)置成與由所述綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
5.如權(quán)利要求2到4中任意一個(gè)所述的方法,其中模塊具有用于處理所述協(xié)議消息的不同配置選項(xiàng)。
6.如權(quán)利要求5所述的方法,其中所述綁定消息包括用于確定在所述模塊的執(zhí)行中實(shí)現(xiàn)哪個(gè)所述配置選項(xiàng)的標(biāo)識(shí)符。
7.如權(quán)利要求1到6中任意一個(gè)所述的方法,其中協(xié)議消息,綁定消息和通用函數(shù)指針具有公共通用格式。
8.如權(quán)利要求1到7中任意一個(gè)所述的方法,還包括加載第二軟件模塊到存儲(chǔ)器中,該第二模塊被設(shè)置成基于對(duì)應(yīng)于所述層中的第二層的一組通用函數(shù)接收和處理所述信號(hào),該第二模塊在第二函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;加載所述第二函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);基于所述映射的第二特定于設(shè)備的函數(shù)執(zhí)行該第二模塊,以便基于所述協(xié)議層處理所接收信號(hào);使得第一和第二模塊在不同執(zhí)行或特定于設(shè)備的環(huán)境中被執(zhí)行。
9.如權(quán)利要求1到8中任意一個(gè)所述的方法,其中所述模塊是語(yǔ)言無(wú)關(guān)的。
10.如權(quán)利要求9所述的方法,還包括提供高級(jí)軟件語(yǔ)言代碼,用于基于對(duì)應(yīng)于所述層的所述一組通用函數(shù)處理所述信號(hào);以及將所述代碼編譯成所述語(yǔ)言無(wú)關(guān)的軟件模塊。
11.如權(quán)利要求1到10中任意一個(gè)所述的方法,還包括基于所述映射的特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供所述模塊的2個(gè)邏輯實(shí)例。
12.如權(quán)利要求1到11中任意一個(gè)所述的方法,還包括加載所述第二函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的第二特定于設(shè)備的函數(shù)指針以便把所述通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);并且除所述第一執(zhí)行過(guò)程之外,基于所述映射的第二特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供所述模塊的2個(gè)邏輯實(shí)例,使得該模塊的2個(gè)實(shí)例基于不同函數(shù)映射對(duì)象被執(zhí)行。
13.如權(quán)利要求12所述的方法,其中2個(gè)執(zhí)行過(guò)程在不同執(zhí)行或特定于設(shè)備的環(huán)境中執(zhí)行。
14.如權(quán)利要求12或13所述的方法,還包括接收包括另一所述模塊的標(biāo)識(shí)符的第二綁定消息的加載的軟件模塊的第二實(shí)例,第一模塊的第二實(shí)例被設(shè)置成與由所述第二綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
15.如權(quán)利要求14所述的方法,其中該模塊具有用于處理所述協(xié)議消息的、針對(duì)每個(gè)所述實(shí)例的不同配置選項(xiàng),并且其中每個(gè)所述綁定消息包括用于確定在所述相應(yīng)模塊實(shí)例的執(zhí)行中實(shí)現(xiàn)哪些配置選項(xiàng)的標(biāo)識(shí)符。
16.如權(quán)利要求1到15中任意一個(gè)所述的方法,其中所述或每個(gè)所述模塊在單獨(dú)執(zhí)行過(guò)程中執(zhí)行。
17.如權(quán)利要求14,15或16所述的方法,其中每個(gè)所述執(zhí)行過(guò)程是線程。
18.如權(quán)利要求2所述的方法,其中所述協(xié)議消息的交換是由來(lái)自模塊執(zhí)行的過(guò)程中的單獨(dú)執(zhí)行過(guò)程來(lái)進(jìn)行。
19.如權(quán)利要求18所述的方法,其中所述消息被投送到存儲(chǔ)器的永久消息隊(duì)列中,并且從該隊(duì)列中取出。
20.如權(quán)利要求1到19中任意一個(gè)所述的方法,還包括加載中間函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象在第一函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)和一或多個(gè)特定于設(shè)備的函數(shù)的中間函數(shù)指針,以便在第一函數(shù)映射對(duì)象中把所述通用函數(shù)映射到一或多個(gè)中間函數(shù)指針,并且還映射到一或多個(gè)特定于設(shè)備的函數(shù)。
21.如權(quán)利要求1到20中任意一個(gè)所述的方法,其中所述協(xié)議是通信協(xié)議堆棧,并且最好是無(wú)線通信協(xié)議堆棧。
22.一種提供用于在處理設(shè)備中處理信號(hào)的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的方法,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該協(xié)議堆棧包括若干軟件模塊,被載入到存儲(chǔ)器中,每個(gè)模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào),該模塊在相應(yīng)函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;若干函數(shù)映射對(duì)象,被載入存儲(chǔ)器中,所述對(duì)象包括對(duì)應(yīng)于通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到相應(yīng)模塊中的一或多個(gè)特定于設(shè)備的函數(shù);基于所映射的特定于設(shè)備的函數(shù)執(zhí)行所述模塊,以便基于所述相應(yīng)協(xié)議層處理所接收信號(hào);該方法包括每個(gè)模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,該接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
23.如權(quán)利要求22所述的方法,還包括加載升級(jí)軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;加載所述函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);基于所映射的特定于設(shè)備的函數(shù)執(zhí)行模塊,以便基于該協(xié)議層處理所接收信號(hào);所述模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,所述接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
24.一種用于基于協(xié)議處理信號(hào)的方法,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào);把通用函數(shù)映射到特定于設(shè)備的函數(shù);執(zhí)行所映射的特定于設(shè)備的函數(shù)以便基于所述協(xié)議層處理所接收信號(hào)。
25.如權(quán)利要求24所述的方法,還包括基于對(duì)應(yīng)于其它所述層的一組通用函數(shù)接收和處理所述信號(hào);把通用函數(shù)映射到特定于設(shè)備的函數(shù);執(zhí)行所映射的特定于設(shè)備的函數(shù)以便基于所述其它協(xié)議層處理該接收信號(hào)。
26.如權(quán)利要求25所述的方法,其中所述接收和處理被設(shè)置成使得所述通用函數(shù)的順序?qū)?yīng)于協(xié)議堆棧。
27.如權(quán)利要求26所述的方法,還包括接收綁定消息以便確定處理所述信號(hào)所依據(jù)的所述通用函數(shù)的順序。
28.如權(quán)利要求24到27中任意一個(gè)所述的方法,其中基于每個(gè)層的通用函數(shù)的所述接收和處理通過(guò)執(zhí)行軟件模塊來(lái)實(shí)現(xiàn)。
29.如權(quán)利要求24到28中任意一個(gè)所述的方法,還包括把通用函數(shù)映射到中間函數(shù),接著映射該中間函數(shù)到所述特定于設(shè)備的函數(shù)。
30.一種提供用于處理信號(hào)的通信協(xié)議的設(shè)備,該設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括用于加載軟件模塊到存儲(chǔ)器中的裝置,該模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;用于加載函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
31.如權(quán)利要求30所述的設(shè)備,其中該模塊被設(shè)置成與其它模塊交換對(duì)應(yīng)于所述信號(hào)的協(xié)議消息,所述其它模塊被設(shè)置成基于對(duì)應(yīng)于其它所述層的一組通用函數(shù)處理所述信號(hào)。
32.如權(quán)利要求31所述的設(shè)備,還包括用于加載其它軟件模塊到存儲(chǔ)器中的裝置,所述其它模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;用于針對(duì)每個(gè)其它模塊加載所述函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把所述通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行所述其它模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
33.如權(quán)利要求31或32所述的設(shè)備,還包括用于向所述或每個(gè)加載的軟件模塊發(fā)送包括另一所述模塊的標(biāo)識(shí)符的綁定消息的裝置,第一模塊被設(shè)置成與由所述綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
34.如權(quán)利要求31到33中任意一個(gè)所述的設(shè)備,其中該模塊具有用于處理所述協(xié)議消息的不同配置選項(xiàng)。
35.如權(quán)利要求34所述的設(shè)備,其中所述綁定消息包括用于確定在所述模塊的執(zhí)行中實(shí)現(xiàn)哪些所述配置選項(xiàng)的標(biāo)識(shí)符。
36.如權(quán)利要求30到35中任意一個(gè)所述的設(shè)備,其中協(xié)議消息,綁定消息和通用函數(shù)指針具有公共通用格式。
37.如權(quán)利要求30到36中任意一個(gè)所述的設(shè)備,還包括用于加載第二軟件模塊到存儲(chǔ)器中的裝置,該第二模塊被設(shè)置成基于對(duì)應(yīng)于所述層中的第二層的一組通用函數(shù)接收和處理信號(hào),該第二模塊在第二函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;用于加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的第二特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);用于基于所映射的第二特定于設(shè)備的函數(shù)執(zhí)行該第二模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置;使得所述第一和第二模塊在不同執(zhí)行或特定于設(shè)備的環(huán)境中被執(zhí)行。
38.如權(quán)利要求30到37中任意一個(gè)所述的設(shè)備,其中所述模塊是語(yǔ)言無(wú)關(guān)的。
39.如權(quán)利要求38所述的設(shè)備,還包括用于將基于對(duì)應(yīng)于所述層的所述一組通用函數(shù)來(lái)處理信號(hào)的高級(jí)軟件語(yǔ)言代碼編譯成所述語(yǔ)言無(wú)關(guān)軟件模塊的裝置。
40.如權(quán)利要求30到39中任意一個(gè)所述的設(shè)備,還包括用于基于所述映射的特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供該模塊的2個(gè)邏輯實(shí)例的裝置。
41.如前述權(quán)利要求中任意一個(gè)所述的設(shè)備,還包括用于加載第二函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的第二特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)第二特定于設(shè)備的函數(shù);以及除所述第一執(zhí)行裝置之外,用于基于所述映射的第二特定于設(shè)備的函數(shù)在第二執(zhí)行過(guò)程中執(zhí)行模塊,以便基于所述協(xié)議層處理所接收信號(hào)并且以便提供所述模塊的2個(gè)邏輯實(shí)例,使得該模塊的2個(gè)實(shí)例基于不同函數(shù)映射對(duì)象被執(zhí)行的裝置。
42.如權(quán)利要求41所述的設(shè)備,其中2個(gè)執(zhí)行過(guò)程在不同執(zhí)行或特定于設(shè)備的環(huán)境中執(zhí)行。
43.如權(quán)利要求41或42所述的設(shè)備,還包括接收包括另一所述模塊的標(biāo)識(shí)符的第二綁定消息的所加載軟件模塊的第二實(shí)例,第一模塊的第二實(shí)例被設(shè)置成與由第二綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
44.如權(quán)利要求43所述的設(shè)備,其中該模塊具有用于處理所述協(xié)議消息、針對(duì)每個(gè)所述實(shí)例的不同配置選項(xiàng),并且其中每個(gè)所述綁定消息包括用于確定在所述相應(yīng)模塊實(shí)例的執(zhí)行中實(shí)現(xiàn)哪些所述配置選項(xiàng)的標(biāo)識(shí)符。
45.如權(quán)利要求30到44中任意一個(gè)所述的設(shè)備,其中所述或每個(gè)模塊在一個(gè)單獨(dú)執(zhí)行過(guò)程中被執(zhí)行。
46.如權(quán)利要求43,44或45所述的設(shè)備,其中每個(gè)所述執(zhí)行裝置包括線程。
47.如權(quán)利要求30到46中任意一個(gè)所述的設(shè)備,還包括用于加載中間函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象在第一函數(shù)映射對(duì)象中包括對(duì)應(yīng)于通用函數(shù)和一或多個(gè)特定于設(shè)備的函數(shù)的中間函數(shù)指針,以便在第一函數(shù)映射對(duì)象中把所述通用函數(shù)映射到一或多個(gè)中間函數(shù)指針,并且還映射到一或多個(gè)特定于設(shè)備的函數(shù)。
48.如權(quán)利要求30到47中任意一個(gè)所述的設(shè)備,其中該設(shè)備是通信終端,基站或網(wǎng)絡(luò)設(shè)備。
49.一種提供用于在處理設(shè)備中處理信號(hào)的動(dòng)態(tài)可重構(gòu)協(xié)議堆棧的設(shè)備,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括若干軟件模塊,被載入到存儲(chǔ)器中,每個(gè)模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在相應(yīng)函數(shù)映射對(duì)象中包括對(duì)應(yīng)于所述通用函數(shù)的通用函數(shù)指針;若干函數(shù)映射對(duì)象,被載入存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到相應(yīng)模塊中的一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊,以便基于所述相應(yīng)協(xié)議層處理所接收信號(hào)的裝置。
50.如權(quán)利要求49所述的設(shè)備,還包括用于向每個(gè)模塊發(fā)送包括另一所述模塊的標(biāo)識(shí)符的綁定消息的裝置,所述接收模塊被設(shè)置成與由所述相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
51.如權(quán)利要求50所述的設(shè)備,還包括用于加載升級(jí)軟件模塊到存儲(chǔ)器中的裝置,該模塊被設(shè)置成基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于該通用函數(shù)的通用函數(shù)指針;用于加載所述函數(shù)映射對(duì)象到存儲(chǔ)器中的裝置,該對(duì)象包括對(duì)應(yīng)于所述通用函數(shù)的特定于設(shè)備的函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)特定于設(shè)備的函數(shù);用于基于所映射的特定于設(shè)備的函數(shù)執(zhí)行該模塊,以便基于所述協(xié)議層處理所接收信號(hào)的裝置;所述模塊接收包括另一所述模塊的標(biāo)識(shí)符的綁定消息,所述接收模塊被設(shè)置成與由相應(yīng)綁定消息標(biāo)識(shí)的其它模塊交換協(xié)議消息。
52.一種用于基于協(xié)議處理信號(hào)的設(shè)備,該協(xié)議由多個(gè)協(xié)議層定義;該設(shè)備包括用于基于對(duì)應(yīng)于所述層之一的一組通用函數(shù)接收和處理所述信號(hào)的裝置;用于映射所述通用函數(shù)到特定于設(shè)備的函數(shù)的裝置;用于執(zhí)行所映射的特定于設(shè)備的函數(shù),以便基于所述協(xié)議層處理所接收信號(hào)的裝置。
53.如權(quán)利要求52所述的設(shè)備,還被設(shè)置成基于對(duì)應(yīng)于所述層的其它層的一組通用函數(shù)處理該信號(hào);用于映射通用函數(shù)到特定于設(shè)備的函數(shù)的裝置;用于執(zhí)行所映射的特定于設(shè)備的函數(shù),以便基于所述其它協(xié)議層處理所接收信號(hào)的裝置。
54.如權(quán)利要求53所述的設(shè)備,其中所述接收和處理被設(shè)置成使得所述通用函數(shù)的順序?qū)?yīng)于所述協(xié)議堆棧。
55.如權(quán)利要求54所述的設(shè)備,還包括用于接收綁定消息以便確定處理所述信號(hào)所依據(jù)的通用函數(shù)的順序的裝置。
56.如權(quán)利要求52到55中任意一個(gè)所述的設(shè)備,其中基于每個(gè)層的通用函數(shù)的所述接收和處理通過(guò)執(zhí)行軟件模塊來(lái)實(shí)現(xiàn)。
57.如權(quán)利要求52到56中任意一個(gè)所述的設(shè)備,還包括用于把通用函數(shù)映射到中間函數(shù),接著映射該中間函數(shù)到所述特定于設(shè)備的函數(shù)的裝置。
58.一種程序,用于控制處理設(shè)備執(zhí)行如權(quán)利要求1到29中任意一個(gè)所述的方法。
59.一種可配置設(shè)備,其根據(jù)權(quán)利要求30到57中的任意一個(gè)來(lái)進(jìn)行配置。
60.一種攜帶處理器控制代碼的承載介質(zhì),所述代碼用于實(shí)現(xiàn)如權(quán)利要求1到57中任意一個(gè)所述的方法或設(shè)備。
全文摘要
本發(fā)明涉及協(xié)議堆棧及協(xié)議堆棧內(nèi)的協(xié)議層,尤其涉及諸如移動(dòng)電話,膝上計(jì)算機(jī)及基站的通信終端,但不限于此。本發(fā)明提供一種提供用于在處理設(shè)備中處理信號(hào)的通信協(xié)議的方法,該處理設(shè)備具有處理器和存儲(chǔ)器,該協(xié)議由多個(gè)協(xié)議層定義;該方法包括加載軟件模塊到存儲(chǔ)器中,該模塊被設(shè)置成基于對(duì)應(yīng)于層之一的一組通用函數(shù)接收和處理信號(hào),該模塊在函數(shù)映射對(duì)象中包括對(duì)應(yīng)于該通用函數(shù)的通用函數(shù)指針;加載函數(shù)映射對(duì)象到存儲(chǔ)器中,該對(duì)象包括對(duì)應(yīng)于通用函數(shù)的設(shè)備特定函數(shù)指針,以便把該通用函數(shù)映射到一或多個(gè)設(shè)備特定函數(shù);基于映射的設(shè)備特定函數(shù)執(zhí)行該模塊,以便基于該協(xié)議層處理所接收信號(hào)。
文檔編號(hào)H04L29/08GK1701586SQ20048000094
公開日2005年11月23日 申請(qǐng)日期2004年9月30日 優(yōu)先權(quán)日2003年10月1日
發(fā)明者蒂莫西·D·法恩漢姆 申請(qǐng)人:株式會(huì)社東芝