国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于定制sip和sdp協(xié)議的用戶(hù)協(xié)同例程接口的制作方法

      文檔序號(hào):6478632閱讀:357來(lái)源:國(guó)知局

      專(zhuān)利名稱(chēng)::用于定制sip和sdp協(xié)議的用戶(hù)協(xié)同例程接口的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及電信系統(tǒng)。更特別地,本發(fā)明涉及協(xié)同例程(co-routine)在電信系統(tǒng)中的使用。
      背景技術(shù)
      :當(dāng)今的電信系統(tǒng)繼續(xù)以非常迅速的步調(diào)在范圍和復(fù)雜性上增長(zhǎng)。促成這一增長(zhǎng)的因素之一是低成本存儲(chǔ)器和處理功率的可用性,其接著又促進(jìn)了新一代電信協(xié)議(例如SIP(會(huì)話(huà)發(fā)起協(xié)議(SessionlnitiationProtocol))和SDP(會(huì)話(huà)描述協(xié)議))的開(kāi)發(fā)。這些面向未來(lái)的協(xié)議是基于ASCII(美國(guó)信息交換標(biāo)準(zhǔn)碼)的、可擴(kuò)展的并且與早期協(xié)議(其中運(yùn)行時(shí)的機(jī)器效率的估價(jià)高于程序員生產(chǎn)率)相比具有更高的人類(lèi)可讀性。這些新的協(xié)議與較舊的協(xié)議相比攜帶了關(guān)于它們所支持的電信服務(wù)的更多信息,并且在使系統(tǒng)適應(yīng)(tailor)特定應(yīng)用的許多靈活性來(lái)源于以非常特定的方式修改協(xié)議消息中的數(shù)據(jù)的能力。因?yàn)橹T如SIP和SDP的協(xié)議是基于ASCII的,所以數(shù)據(jù)有助于它們被最終用戶(hù)修改,尤其是被負(fù)責(zé)網(wǎng)絡(luò)工程和計(jì)劃的技術(shù)人員修改。在過(guò)去,“復(fù)雜的基于二進(jìn)制的”協(xié)議的使用將需要制造商的工程設(shè)計(jì)來(lái)實(shí)現(xiàn)這樣的定制。一些電信系統(tǒng)傳統(tǒng)地結(jié)合了用于特殊應(yīng)用的可選的集成BASIC(初學(xué)者通用符號(hào)指令碼)解釋器(interpreter)。作為系統(tǒng)中獨(dú)立運(yùn)行的調(diào)度進(jìn)程(scheduledprocess),BASIC程序?qū)l(fā)送且接收來(lái)自系統(tǒng)內(nèi)CTI(計(jì)算機(jī)電話(huà)接口)元件的進(jìn)程間消息以控制用于專(zhuān)門(mén)應(yīng)用的呼叫處理(callprocessing),否則這些專(zhuān)門(mén)應(yīng)用可能需要使用外部主計(jì)算機(jī)。還從BASIC向一些OS(操作系統(tǒng))控制提供了訪問(wèn),其允許制造商實(shí)現(xiàn)對(duì)已發(fā)布軟件的程序錯(cuò)誤修正(bugfix)。這些制造商提供的BASIC程序?qū)p輕一些類(lèi)型的程序錯(cuò)誤的故障現(xiàn)象,直到新的軟件包被發(fā)布來(lái)校正該問(wèn)題。因?yàn)锽ASIC是容易使用的尤其非常適合處理ASCII字符串的更高級(jí)語(yǔ)言,所以自然考慮最終用戶(hù)技術(shù)人員或者制造商會(huì)用其實(shí)現(xiàn)SIP和SDP消息數(shù)據(jù)的定制修改。有用修改的實(shí)例將是根據(jù)日時(shí)來(lái)改變SDP“供應(yīng)(offer)”內(nèi)的數(shù)據(jù)以便在高業(yè)務(wù)(traffic)時(shí)段期間減小網(wǎng)絡(luò)加載。這會(huì)起作用,因?yàn)镾DP協(xié)議攜帶與由媒體會(huì)話(huà)所需的比特率有關(guān)的信肩、o見(jiàn)圖1,BASIC進(jìn)程10和其他系統(tǒng)進(jìn)程20之間的交互方法是一種在其中BASIC是由系統(tǒng)調(diào)度器(scheduler)5調(diào)度的獨(dú)立運(yùn)行進(jìn)程并且發(fā)送和接收到系統(tǒng)的其它元件的進(jìn)程間消息(IPM)30的方法。當(dāng)將這樣的方法應(yīng)用于諸如電信協(xié)議處理這樣的應(yīng)用時(shí),所述方法是不靈活的并且效率低的。需要將信息發(fā)送到BASIC進(jìn)程10的任何實(shí)時(shí)系統(tǒng)軟件20必須向其發(fā)送IPM30并且然后等待響應(yīng),同時(shí)仍接收其它實(shí)時(shí)事件輸入。需要等待響應(yīng)并且同時(shí)仍接受其它事件輸入是由電信系統(tǒng)必須實(shí)時(shí)處理數(shù)據(jù)的事實(shí)而造成的,并且在BASIC被作為獨(dú)立調(diào)度的進(jìn)程而運(yùn)行的情況下來(lái)自BASIC的響應(yīng)將被嚴(yán)重延遲。更簡(jiǎn)明的接口允許將BASIC作為在期望其處理的精確點(diǎn)處直接插入(in-line)的簡(jiǎn)單函數(shù)調(diào)用而被調(diào)用(invoke)。這還將避免與調(diào)度和IPM相關(guān)聯(lián)的處理開(kāi)銷(xiāo)。
      發(fā)明內(nèi)容本發(fā)明結(jié)合使用協(xié)同例程(co-routine)來(lái)實(shí)現(xiàn)BASIC程序和其中要修改(例如)SIP和SDP數(shù)據(jù)的系統(tǒng)中的點(diǎn)之間的類(lèi)似函數(shù)的接口的方法。從最終用戶(hù)的觀點(diǎn)來(lái)看該協(xié)同例程接口是直觀的,并且從系統(tǒng)設(shè)計(jì)者的觀點(diǎn)來(lái)看實(shí)時(shí)效率和靈活性二者也是直觀的。本發(fā)明的方法應(yīng)用其協(xié)同例程接口以便以給出最終用戶(hù)很大靈活性的容易使用的方式來(lái)提供用戶(hù)定制的SIP和SDP修改,同時(shí)保護(hù)系統(tǒng)免于受到將由緊密耦合的協(xié)同例程接口造成的不期望的負(fù)面影響。圖1示出在BASIC進(jìn)程和計(jì)算機(jī)系統(tǒng)中的另一個(gè)進(jìn)程之間進(jìn)行通信的傳統(tǒng)方法。圖2示出傳統(tǒng)的子例程調(diào)用機(jī)制的處理圖。圖3示出協(xié)同例程調(diào)用機(jī)制的處理圖。圖4示出本發(fā)明的上下文管理處理的流程圖。圖5示出本發(fā)明的回調(diào)(callback)方法的處理圖。具體實(shí)現(xiàn)方式協(xié)同例程通常以分層的方式來(lái)完成函數(shù)調(diào)用(圖2)。在層次頂部處的例程“A”41調(diào)用該層次中較低的例程“B”42以執(zhí)行某一動(dòng)作。當(dāng)“B”已完成時(shí),其返回到在“A”中“B”被調(diào)用的點(diǎn)處的“A”。之后,“A”可以再次調(diào)用“B”。此外,“B”可以調(diào)用該層次中甚至更低的例程“C”43,但是最終調(diào)用的每個(gè)較低的例程完成其函數(shù)并且返回到該層次中其更高的調(diào)用方。協(xié)同例程是本領(lǐng)域公知的圖2的子例程機(jī)制的一般化。見(jiàn)DonaldKnuth的FundamentalAlgorithms第三版。AddisonWesley的1997.ISBN0-201-89683-4.Section1.4.2Coroutines,pp.193-200以及在計(jì)算機(jī)科學(xué)文獻(xiàn)中的許多其它參考。與子例程相反,協(xié)同例程是函數(shù)調(diào)用的特殊形式,在其中兩個(gè)例程“A”和“B”以完全對(duì)稱(chēng)的方式彼此調(diào)用(圖3)。從“A”51到“B”52的調(diào)用從“B”中的點(diǎn)恢復(fù)“B”(在該點(diǎn)處其最后調(diào)用“A”)。然后,當(dāng)“B”調(diào)用“A”時(shí),“A”從“A”中的點(diǎn)恢復(fù)(在該點(diǎn)處其最后調(diào)用“B”)。這些特殊形式的函數(shù)調(diào)用通常被稱(chēng)為“轉(zhuǎn)移(yield)”而不是“調(diào)用”,其中“A”轉(zhuǎn)移“B”并且反之亦然。在本發(fā)明中,圖3中例程“A”51和“B”52的角色分別由電信系統(tǒng)的呼叫處理軟件和BASIC程序扮演??梢詮膱D3中看到,在例程“A”和例程“B”之間確實(shí)存在非常緊密的關(guān)系。傳統(tǒng)上,通常在諸如用于Macintosh計(jì)算機(jī)的Apple的最初操作系統(tǒng)(0S)之類(lèi)的“協(xié)同操作多任務(wù)處理(co-operativemultitasking)”系統(tǒng)中,協(xié)同例程概念具有有些受限的應(yīng)用。在這些類(lèi)型的應(yīng)用中,由系統(tǒng)程序員提供例程“A”和例程“B”二者是慣例,這再次歸因于例程之間高度交互且緊密的關(guān)系。相反,本發(fā)明結(jié)合一種方法,通過(guò)該方法電信系統(tǒng)的制造商提供作為產(chǎn)品的集成(integral)部分的例程“A”,但是有可能由負(fù)責(zé)網(wǎng)絡(luò)工程和計(jì)劃的客戶(hù)的技術(shù)人員單獨(dú)地并且在隨后編寫(xiě)例程“B”(BASIC程序)。該BASIC程序然后被加載并且以與任何其它BASIC程序相同的方式運(yùn)行,而且變成經(jīng)由本發(fā)明的協(xié)同例程接口耦合到系統(tǒng)以便提供之前描述的適應(yīng)服務(wù)。本發(fā)明的一個(gè)目的是教導(dǎo)一種方法,通過(guò)該方法實(shí)現(xiàn)將兩個(gè)不同的編程環(huán)境耦合成一個(gè)工作協(xié)同例程關(guān)系。從用戶(hù)的觀點(diǎn)來(lái)看,通常由BASIC解釋器提供的編程環(huán)境是高度交互的,尤其在程序開(kāi)發(fā)階段期間。用戶(hù)(在這種情況下是程序員)可以輸入程序語(yǔ)句、執(zhí)行整個(gè)程序或其較小的程序段、檢查中間結(jié)果、進(jìn)行校正以及再試一次。最后,得到推測(cè)完全沒(méi)有程序錯(cuò)誤的BASIC程序。在所有該過(guò)程期間,存在程序員和BASIC之間的持續(xù)相互影響。程序員在終端上輸入數(shù)據(jù);BASIC以終端輸出以及可能的錯(cuò)誤消息回復(fù)。但是當(dāng)BASIC程序采取上述協(xié)同例程接口中的例程“B”的角色時(shí),其一定不被允許提示終端輸入、發(fā)布錯(cuò)誤消息并且等待用戶(hù)響應(yīng)或者執(zhí)行將停止其執(zhí)行的任何函數(shù)。當(dāng)在實(shí)時(shí)環(huán)境中作為來(lái)自系統(tǒng)軟件的協(xié)同例程而被調(diào)用時(shí),BASIC程序必須基本上被限制成純計(jì)算。例如,如果BASIC程序包括INPUT語(yǔ)句并且作為來(lái)自實(shí)時(shí)系統(tǒng)進(jìn)程的協(xié)同例程而被執(zhí)行,則實(shí)時(shí)進(jìn)程將在其等待終端輸入的點(diǎn)處停止執(zhí)行以滿(mǎn)足INPUT語(yǔ)句。負(fù)責(zé)以即時(shí)方式處理事件的實(shí)時(shí)進(jìn)程的執(zhí)行的停止將導(dǎo)致系統(tǒng)故障。因此,本發(fā)明的另一個(gè)目的是教導(dǎo)一種方法,通過(guò)該方法可以在BASIC程序用作協(xié)同例程時(shí)改變?cè)揃ASIC程序的環(huán)境以便防止這些危險(xiǎn)的負(fù)面影響。BASIC解釋器在優(yōu)選實(shí)施例中,將BASIC解釋器假設(shè)為在其中編寫(xiě)例程“B”的編程環(huán)境,而不是在其中執(zhí)行例程“B”的環(huán)境。最終,例程“A”和例程“B”二者以運(yùn)行在處理器上的機(jī)器代碼的形式來(lái)操作。例程“A”可以已以C編程語(yǔ)言或另一種編譯的編程語(yǔ)言編寫(xiě),并且然后被編譯和鏈接以變成由制造商提供的電信系統(tǒng)軟件的一部分。類(lèi)似地,BASIC解釋器自身可以以C或另一種編譯語(yǔ)言編寫(xiě)。在這兩種情況下,為了速度和效率,例程“A”的部分和BASIC解釋器優(yōu)選地結(jié)合以匯編語(yǔ)言編寫(xiě)的部分,因?yàn)閰R編語(yǔ)言幾乎直接被翻譯成機(jī)器語(yǔ)言。有必要以高的層次來(lái)簡(jiǎn)單地描述BASIC解釋器如何處理用戶(hù)的BASIC程序。本領(lǐng)域技術(shù)人員已公知在編譯器和解釋器背后的詳細(xì)概念,并且將不在本文中敘述。與編譯器相反,BASIC解釋器不會(huì)將用戶(hù)的BASIC程序轉(zhuǎn)換成機(jī)器語(yǔ)言并且然后在以后執(zhí)行該機(jī)器代碼。而是作為代替,BASIC解釋器讀取用戶(hù)的BASIC程序作為其數(shù)據(jù),并且漸進(jìn)地執(zhí)行由該數(shù)據(jù)調(diào)用的動(dòng)作。BASIC解釋器將優(yōu)選地采取措施來(lái)通過(guò)內(nèi)部表示處于經(jīng)組織以便流線(xiàn)(streamline)執(zhí)行的簡(jiǎn)略形式(abbreviatedform)的用戶(hù)的BASIC程序來(lái)最小化處理器開(kāi)銷(xiāo)。但是用戶(hù)的BASIC程序僅用于使得BASIC解釋器選擇并且執(zhí)行已經(jīng)在該BASIC解釋器內(nèi)提供的適當(dāng)?shù)臋C(jī)器代碼的序列。例如,當(dāng)遇到表達(dá)式"x+Y"時(shí),解釋器執(zhí)行機(jī)器代碼以進(jìn)行被分配給符號(hào)x和Y的值的相加。當(dāng)遇到“PRINT”語(yǔ)句時(shí),解釋器執(zhí)行機(jī)器代碼以便將在打印語(yǔ)句中指定的數(shù)據(jù)輸出到終端。本文的要點(diǎn)是從協(xié)同例程接口的觀點(diǎn)來(lái)看,例程“A”和“B”僅是普通的機(jī)器代碼。在描述本發(fā)明中,更方便的是首先從BASIC程序的編寫(xiě)器(writer)(“B編寫(xiě)器”)的觀點(diǎn)來(lái)描述操作,之后從系統(tǒng)代碼的編寫(xiě)器(“A編寫(xiě)器”)的觀點(diǎn)來(lái)描述操作。這些描述之后,將描述操作的詳細(xì)方法。在下面的描述中,術(shù)語(yǔ)“上下文(context)”指在進(jìn)程執(zhí)行時(shí)有效的程序環(huán)境(處理器狀態(tài)、機(jī)器寄存器等等)。在圖3中,例程“A”具有在其中其進(jìn)行執(zhí)行的上下文,并且例程“B”具有其中其進(jìn)行執(zhí)行的另一個(gè)上下文。本領(lǐng)域技術(shù)人員已公知必須在任何例程可以執(zhí)行之前建立上下文。從B編寫(xiě)器的觀點(diǎn)來(lái)看的操作在優(yōu)選實(shí)施例中,通過(guò)執(zhí)行BASIC程序內(nèi)的特殊函數(shù)調(diào)用YIELD_T0_SYSTEM(context),BASIC程序變得被注冊(cè)為由其它系統(tǒng)組件使用的協(xié)同例程,其中“context”指的是在調(diào)用點(diǎn)處BASIC程序的執(zhí)行期間有效的程序環(huán)境。這里是示范用于傳遞自變量(argument)的該函數(shù)和系統(tǒng)變量的使用的實(shí)例BASIC程序。該程序與隨后給出的“C”程序一起工作。10NEWLINE$=CHR$(10)20DETACH()30REPEAT40YIELDTOSYSTEM(1)50HOURS==LEFT(TIMES,2)60W0_ARG__1=070IFH0UR$>="08〃ANDH0UR$<〃17〃80SDP$=Rff_ARG_l$90P0S1=INSTR(1,SDP$,“m=audio")100IFP0S1110P0S2=INSTR(P0S1,SDP$,“RTP/AVP")120IFP0S2130P0S3=INSTR(P0S2,SDP$,“0〃)140IFP0S3=0THENP0S3=INSTR(P0S2,SDP$,,,0"+NEWLINE$)150IFP0S3160SDP$=LEFT(SDP$,P0S3-1)+EIGHT(SDP$,P0S3+2)170W0_ARG_1=1180ENDIF190P0S3=INSTR(P0S2,SDP$,“8〃)200IFP0S3=0THENP0S3=INSTR(P0S2,SDP$,,,8+NEWLINE$)210IFP0S3220SDP$=LEFT(sDP$,P0S3-1)+RIGHT(SDP$,P0S3+2)230W0_ARG_1=1240ENDIF250Rff_ARG_l$=SDP$260ENDIF270ENDIF280ENDIF290UNTIL0隨后將給出該程序的逐行解釋。這里,將僅給出概述來(lái)覆蓋最重要的概念。在行20處的語(yǔ)句分離(detach)BASIC程序以釋放從其運(yùn)行該BASIC程序的終端。如果這沒(méi)有進(jìn)行,則隨后在BASIC程序變成被注冊(cè)為協(xié)同例程時(shí)該終端將被使得(render)不可使用。直到執(zhí)行YIELD_T0_SYSTEM(1)語(yǔ)句,BASIC程序可以執(zhí)行可能被期望的任何類(lèi)型的計(jì)算。當(dāng)在行40處的YIELD_T0_SYSTEM(1)第一次被調(diào)用時(shí),不存在要轉(zhuǎn)移到的先前上下文,所以執(zhí)行協(xié)同例程初始化。當(dāng)前的BASIC程序上下文被保存為上下文1(YIELD_T0_SYSTEM0的自變量),然后根據(jù)本發(fā)明來(lái)完成對(duì)該上下文的某些修改,以便在隨后轉(zhuǎn)移BASIC以作為協(xié)同例程時(shí)防止出現(xiàn)不期望的或危險(xiǎn)的負(fù)面影響。如之前所描述的那樣,需要這些修改,因?yàn)楫?dāng)轉(zhuǎn)移BASIC程序以在隨后作為來(lái)自另一個(gè)系統(tǒng)進(jìn)程(圖3中的例程“A”)的協(xié)同例程時(shí),該BASIC程序?qū)嶋H上仍作為該進(jìn)程的一部分而執(zhí)行,而不是作為BASIC來(lái)執(zhí)行。根據(jù)本發(fā)明完成的修改是來(lái)自PRINT語(yǔ)句或錯(cuò)誤消息的任何和所有終端輸出都被忽略并且不會(huì)出現(xiàn)。讀取來(lái)自INPUT語(yǔ)句的終端輸入的任何嘗試或作為已經(jīng)返回到BASIC的提示(prompt)的結(jié)果,導(dǎo)致從BASIC的立即退出并且控制轉(zhuǎn)移回到調(diào)用系統(tǒng)進(jìn)程。(在優(yōu)選實(shí)施例中被用來(lái)終止BASIC程序的)BYE語(yǔ)句的執(zhí)行導(dǎo)致從BASIC的立即退出并且控制轉(zhuǎn)移回到調(diào)用系統(tǒng)進(jìn)程。可能具有不期望的負(fù)面影響的任何其它特殊面向應(yīng)用的函數(shù)被禁用并且在被執(zhí)行的情況下將導(dǎo)致可截獲的錯(cuò)誤。此外,這些上下文修改的目的是防止將調(diào)用作為協(xié)同例程的BASIC的系統(tǒng)進(jìn)程在處于BASIC協(xié)同例程的時(shí)候或者等待資源或者執(zhí)行不期望的動(dòng)作。假設(shè)該協(xié)同例程執(zhí)行“純計(jì)算”。注意,在執(zhí)行第一個(gè)YIELD_T0_SYSTEM0之前,BASIC自由地進(jìn)行它正常會(huì)做的任何動(dòng)作;限制其對(duì)系統(tǒng)的訪問(wèn)的上下文修改僅在第一次執(zhí)行YIELD_T0_SYSTEM0之后起作用。在該初始化進(jìn)程已完成之后,BASIC將標(biāo)記設(shè)置成向任何潛在用戶(hù)(例程“A”)指示協(xié)同例程上下文1(在該實(shí)例中)可以供使用。在協(xié)同例程接口已被初始化之后,BASIC進(jìn)程進(jìn)入休眠狀態(tài)直到其接收到信號(hào),所述信號(hào)或者是當(dāng)BASIC程序作為協(xié)同例程執(zhí)行時(shí)在該BASIC程序內(nèi)出現(xiàn)的嚴(yán)重錯(cuò)誤或者是已明確地請(qǐng)求該程序退出。在優(yōu)選實(shí)施例中,該信號(hào)是操作系統(tǒng)事件,但是可以使用任何適合的信令手段(signalingmeans)。BASIC進(jìn)程必須進(jìn)入該休眠狀態(tài)來(lái)防止在其被轉(zhuǎn)移為協(xié)同例程之前對(duì)其保存的上下文的任何后續(xù)修改。因此,當(dāng)系統(tǒng)軟件隨后通過(guò)協(xié)同例程接口轉(zhuǎn)移到BASIC時(shí),BASIC程序的上下文將正好是當(dāng)YIELDTOSYSTEM(l)語(yǔ)句被第一次執(zhí)行時(shí)它所處的上下文,并且BASIC程序?qū)o(wú)縫地從該點(diǎn)起恢復(fù)執(zhí)行作為協(xié)同例程。對(duì)于系統(tǒng)的其余部分(尤其是系統(tǒng)調(diào)度器),轉(zhuǎn)移到作為協(xié)同例程的BASIC的系統(tǒng)軟件簡(jiǎn)單地執(zhí)行其自己進(jìn)程內(nèi)的函數(shù)調(diào)用,并且最初的BASIC進(jìn)程仍然處于休眠狀態(tài)。這是本發(fā)明的關(guān)鍵概念。當(dāng)系統(tǒng)軟件(例程“A”)轉(zhuǎn)移到BASIC協(xié)同例程時(shí),BASIC程序?qū)⒖磥?lái)像從行40處的YIELD_T0_SYSTEM0函數(shù)調(diào)用“return(返回)”。然后該程序可以訪問(wèn)如下所描述的根據(jù)"passingarguments(傳遞自變量),,傳遞給其的任何自變量,并且執(zhí)行任何期望的計(jì)算。然后將返回結(jié)果。典型地,然后程序?qū)⒀h(huán)回(loopback)到相同的YIELD_T0_SYSTEM0函數(shù)調(diào)用,但是這不是必需的。這是該實(shí)例中所發(fā)生的狀況,因?yàn)樵谛?0處的“REPEAT”語(yǔ)句和在行290處的“UNTIL0”語(yǔ)句構(gòu)成無(wú)限循環(huán)結(jié)構(gòu)。一旦該YIELD_T0_SYSTEM0函數(shù)調(diào)用被再次執(zhí)行,在該點(diǎn)(例程“B”)處的BASIC的上下文就被保存并且控制在先前已被轉(zhuǎn)移到BASIC的點(diǎn)處被轉(zhuǎn)移回到系統(tǒng)軟件(例程“A”)。再次,這在圖3中示出。本領(lǐng)域普通技術(shù)人員將會(huì)認(rèn)識(shí)到實(shí)際上存在可以被編寫(xiě)以代替上述一個(gè)程序的無(wú)限數(shù)目的可能BASIC程序。該實(shí)例僅意味著示范所涉及的原理并且不應(yīng)該以限制的方式理解。傳遞自變量為了使BASIC程序執(zhí)行一些有用的數(shù)據(jù)處理,顯然必須存在從例程“A”到例程“B”來(lái)回傳遞自變量的機(jī)制。這可以通過(guò)指定共享的存儲(chǔ)區(qū)來(lái)完成,在所述共享的存儲(chǔ)區(qū)中限定一些變量。例程“A”可以將適當(dāng)?shù)闹荡鎯?chǔ)在變量中,并且例程“B”可以檢索它們。類(lèi)似地,例程“B”可以將結(jié)果存儲(chǔ)在變量中,并且例程“A”可以檢索那些結(jié)果。在優(yōu)選實(shí)施例中,BASIC解釋器支持只讀變量、只寫(xiě)變量以及讀寫(xiě)變量的概念。按照慣例,例程“A”將特定于應(yīng)用的值存儲(chǔ)到“B編寫(xiě)器”可以用作輸入的某些變量中。使用用于傳遞輸入并且返回結(jié)果的相同讀寫(xiě)變量具有下面的優(yōu)點(diǎn),如果不需要對(duì)輸入的變化,則自動(dòng)返回正確的未變化的值。上面BASIC程序的詳細(xì)描述現(xiàn)在詳細(xì)地描述上面給出的實(shí)例BASIC程序。盡管該程序例證了由本發(fā)明教導(dǎo)的能力的特定使用,但是本領(lǐng)域普通技術(shù)人員將會(huì)想到由通過(guò)該協(xié)同例程接口調(diào)用的BASIC程序的數(shù)據(jù)操作的許多其它實(shí)例。因此,該實(shí)例不應(yīng)該理解為限制的方式。在行10處,程序?qū)⒆兞縉EWLINE$設(shè)置成包含換行字符(ASCII20)的字符串。這將在以后使用。在行20處,程序調(diào)用函數(shù)來(lái)從其被發(fā)起的終端分離該程序,以防止在程序隨后變成被注冊(cè)為協(xié)同例程時(shí)該終端被使得不可使用。行30限定從行30向下延伸到行290的無(wú)限循環(huán)結(jié)構(gòu)。行40使得BASIC執(zhí)行之前詳細(xì)描述的上下文修改(僅第一次),并且然后轉(zhuǎn)移回到系統(tǒng)并等待來(lái)自系統(tǒng)的作為協(xié)同例程的后續(xù)調(diào)用。當(dāng)系統(tǒng)需要調(diào)用BASIC程序時(shí),它將建立某些輸入?yún)?shù),并且然后轉(zhuǎn)移回到BASIC。這將使得BASIC程序恢復(fù)行50處的執(zhí)行。這時(shí)候,重新陳述該實(shí)例BASIC程序的目的是有用的。系統(tǒng)管理員希望處理用于在高業(yè)務(wù)時(shí)段期間(例如在從08:00到16:59的時(shí)間段期間)完成的調(diào)用的SDP供應(yīng),以使得這些調(diào)用需要較少的網(wǎng)絡(luò)資源。具體來(lái)說(shuō),管理員希望改變?cè)赟DP供應(yīng)內(nèi)的數(shù)據(jù)來(lái)刪除在從08:00到16:59的小時(shí)期間呈現(xiàn)在SDP中的某些編解碼器(編碼器/解碼器)選擇。這相當(dāng)于在用于在該時(shí)間段期間完成的調(diào)用的數(shù)據(jù)中的所需位置處從SDP數(shù)據(jù)刪除“0”和/或“8”。在行50處,BASIC程序調(diào)用函數(shù)LEFT(TIME$,2)。變量TIME$是以字符串(例如“09:23:50”)返回當(dāng)前壁時(shí)間(walltime)的系統(tǒng)變量。LEFT函數(shù)提取該字符串的左邊兩個(gè)字符作為H0UR$變量。在行60處,系統(tǒng)變量W0_ARG_1被設(shè)置成零。按照慣例該變量是從BASIC傳遞回到系統(tǒng)的返回值之一。將其設(shè)置成0指示程序沒(méi)有執(zhí)行SDP操作。如果隨后沒(méi)有被設(shè)置成非零值,則這將被作為狀態(tài)響應(yīng)返回給系統(tǒng)。在行70處,進(jìn)行檢查以確定當(dāng)前壁時(shí)間是否在08:00到16:59之間,在這些小時(shí)期間將發(fā)生SDP操作。如果不在所需的時(shí)間段內(nèi),則語(yǔ)句將評(píng)估為false(假)結(jié)果并且控制將向下跳到行280,并且從那里到行290。在行290處的UNTIL0語(yǔ)句將一直評(píng)估為false條件(0被認(rèn)為是false),所以控制將返回到行30,并且然后到行40,在行40處BASIC將再次轉(zhuǎn)移回到系統(tǒng)。因?yàn)闆](méi)有發(fā)生SDP操作,所以該調(diào)用將以最初的SDP供應(yīng)進(jìn)行。然而,如果在行70處,當(dāng)前壁時(shí)間處于08:00到16:59的時(shí)間段內(nèi),則IF語(yǔ)句將評(píng)估為true(真)結(jié)果并且控制將被傳遞到行80。在行80處,變量SDP$被設(shè)置成RW_ARG_1$。當(dāng)協(xié)同例程被調(diào)用時(shí),按照慣例,變量RW_ARG_1$是由系統(tǒng)傳遞到BASIC的輸入自變量之一。它表示最初的SDP供應(yīng)數(shù)據(jù)。作為讀寫(xiě)變量,它可以被BASIC程序改變并且作為結(jié)果返回到系統(tǒng),并且在這種情況下這確切地是將會(huì)發(fā)生的。如果被打印到終端,存儲(chǔ)在行80處的SDP$變量中的數(shù)據(jù)將以下面的形式出現(xiàn)v=0ο=root12705837001270583700INIP4192.168.42.59s=callc=INIP4192.168.42.59t=00m=audio58520RTP/AVP08923184101a=rtpmap:0pcmu/8000a=rtpmap:8pcma/8000a=rtpmap:9g722/8000a=rtpmap:2g726_32/8000a=rtpmap:3gsm/8000a=rtpmap:18g729/8000a=rtpmap:4g723/8000a=rtpmap101telephone-event/8000a=fmtp:1010-16a=ptime20a=sendrecv上面每一行都以ASCII10(換行)字符結(jié)束。在行90處,INSTR函數(shù)搜索字符串以尋找文本“m=audio”,并且將POSl設(shè)置成在找到其的字符串內(nèi)的字符位置。行100檢查INSTR找到字符串(如果沒(méi)有找到字符串則INSTR返回0)。如果在SDP中沒(méi)有找到“m=audio",則POSl將是零并且控制將向下跳到行270并且像以前那樣最終返回到行40。然而,如果找到字符串“m=audio”,則我們移動(dòng)到行110并且試圖在SDP供應(yīng)中找到字符串“RTP/AVP”。再次,如果這沒(méi)有被發(fā)現(xiàn),則P0S2將是零并且在行120處我們跳到行260且然后返回行40。但是如果找到“RTP/AVP”,則我們進(jìn)入行130,在行130處我們尋找字符串“0”。在上面示出的實(shí)例SDP中,這將被發(fā)現(xiàn)為粗體的“0”。因?yàn)镾DP的規(guī)則允許該值出現(xiàn),甚至在行的結(jié)束處(在該實(shí)例中在此處放置值“101”),我們還必須檢查后面有換行字符(其終止SDP供應(yīng)的每一行)的“0”。這在行140處被檢查。行150檢查是否我們通過(guò)任一方法找到了“0”,如果是那樣的話(huà),行160通過(guò)將一直到僅在“0”之前的最初的SDP的左邊部分(LEFT函數(shù))與僅超出“0”而開(kāi)始的最初的SDP的右邊部分(RIGHT函數(shù))級(jí)聯(lián)(concatenate)來(lái)創(chuàng)建新的SDP供應(yīng)文本。這具有從SDP供應(yīng)中刪除“0”的效果。類(lèi)似地,從行190到240從SDP供應(yīng)中刪除了“8”。在這兩種情況下,行170和230將返回狀態(tài)系統(tǒng)變量設(shè)置成1以向該系統(tǒng)指示SDP操作是成功的。最后,在行250處,將新的SDP供應(yīng)存儲(chǔ)回到要被傳遞回該系統(tǒng)的讀寫(xiě)變量RW_ARG_1$中。然后控制再次返回到行40處,并且BASIC轉(zhuǎn)移回到系統(tǒng)。系統(tǒng)軟件(例程“A”)現(xiàn)在將以可能已被BASIC程序(例程“B”)修改的SDP供應(yīng)來(lái)進(jìn)行。多個(gè)協(xié)同例程上下文上面的實(shí)例使用YIELD_T0_SYSTEM(1)??梢源嬖诙嘤谝粋€(gè)的活動(dòng)的(active)協(xié)同例程上下文。如果例如按照慣例系統(tǒng)軟件被編碼以使用上下文1來(lái)用于SDP數(shù)據(jù)修改,則將這作為協(xié)同例程而處理的BASIC程序?qū)⑹褂肶IELD_T0_SYSTEM(1)。可能存在被編碼以使用上下文2的另一個(gè)獨(dú)立的進(jìn)程(例如SIP修改或調(diào)試器)。將YIELD_To_SYSTEM(2)用于這些服務(wù)的另一個(gè)BASIC程序?qū)⑦\(yùn)行。從“A編寫(xiě)器”的觀點(diǎn)來(lái)看的操作我們將假設(shè)“A編寫(xiě)器”以C編程語(yǔ)言編寫(xiě)系統(tǒng)軟件(例程“A”),其然后被編譯且鏈接以變成由制造商提供的電信系統(tǒng)軟件的一部分,如之前所提到的那樣。在該代碼中適于調(diào)用BASIC協(xié)同例程(例程“B”)的點(diǎn)處,如下面所給出的代碼片段中示出的那樣采取一些步驟,但是該進(jìn)程實(shí)際上僅僅是簡(jiǎn)明的函數(shù)調(diào)用charsdp_data[MAX_SDP_DATA_STRING_LENGTH];/^codetosetupsdpdatastring*//**Thecontextindexissetto1toagreewiththeYIELD_T0_SYSTEM(1)*statementintheBASICprogram.*/context_index=1;/**Firstbesurethattheco-routineinterfaceisinitea.*/if(bas_coroutine_data[context_index].bas_context{bas_coroutine_data[context_index].rw.str_arg.ptr=sdp_data;bas_coroutine_data[context_index].rw.str_arg.max_len=MAX_SDP_DATA_STRING_LENGTH;bas_coroutine_data[context_index].wo.int_arg=TRUE;/氺incaseBASICdoesnotsetit*/AMustsetjob.contexttoanon-zerovaluetoindicatethatwearenotiniting.氺/bas_coroutine_data[context_index].job_context=1;bas_context_swap(&bas_coroutine_data[context_index].job_context,&bas_coroutine_data[context_index].bas_context);if(bas_coroutine_data[context_index].wo.int_arg==1){{/*BASICprogramwassuccessful*/}else{/*BASICprogramwasunsuccessful*/}}/^codetousepossiblymodifiedsdpdatastring氺/上面“C”代碼片段的詳細(xì)描述上面的代碼片段是非常簡(jiǎn)明的。第一個(gè)“if”語(yǔ)句檢查數(shù)據(jù)結(jié)構(gòu)變量以了解該上下文是否是可用的。如果BASIC程序還沒(méi)有運(yùn)行并且也沒(méi)有執(zhí)行其YIELD_T0_SYSTEM0函數(shù),則該變量將仍然是零,并且將不對(duì)BASIC程序進(jìn)行調(diào)用。如果BASIC程序已初始化了協(xié)同例程接口,則該變量將不是零,并且將執(zhí)行“if”的主體?!癱ontextjndex(上下文索引)”被設(shè)置成1以與在從BASIC進(jìn)行的YIELD_T0_SYSTEM0函數(shù)調(diào)用中使用的自變量一致。可以存在運(yùn)行的另一個(gè)BASIC協(xié)同例程,以及使用其的另一個(gè)“C”程序,并且按照慣例應(yīng)該同意該第二對(duì)程序使用不同的“contextindex"值(例如2)。下一個(gè)語(yǔ)句建立BASIC程序要修改的SDP字符串(〃sdp.data")的指針的輸入自變量"rw.str.arg"。因?yàn)檫@是BASIC的讀寫(xiě)變量,所以設(shè)置"maxjen"變量來(lái)向BASIC指示當(dāng)存儲(chǔ)在該字符串中時(shí)有多少存儲(chǔ)器是可用的。這防止BASIC編寫(xiě)得超出為該字符串分配的存儲(chǔ)器。下一個(gè)語(yǔ)句初始化返回狀態(tài)值,以使得在BASIC程序因?yàn)槟承┰蚨鴽](méi)有設(shè)置該值時(shí),它將默認(rèn)為T(mén)RUE?!甹0b_C0nteXt〃變量然后被設(shè)置成任何非零值(在該實(shí)例中為“1”)。(當(dāng)將要進(jìn)行協(xié)同例程初始化時(shí))這向正要被調(diào)用的bas_c0ntext_swap0函數(shù)指示我們不是第一次調(diào)用其,而是我們僅希望用已經(jīng)運(yùn)行的BASIC協(xié)同例程來(lái)執(zhí)行上下文交換(swap)。(當(dāng)BASIC程序執(zhí)行其nELD_T0_SYSTEM()函數(shù)調(diào)用,bas_context_swap()也被調(diào)用時(shí),“job_context"變量第一次為零,所以如之前討論的那樣執(zhí)行協(xié)同例程初始化。)現(xiàn)在調(diào)用baS_COnteXt_SWap()函數(shù),這執(zhí)行上下文交換,其在最后執(zhí)行的YIELD_T0_SYSTEM()語(yǔ)句之后的語(yǔ)句處轉(zhuǎn)移到BASIC。BASIC取(fetch)自變量、進(jìn)行其處理,并且將其結(jié)果存儲(chǔ)在系統(tǒng)變量中。當(dāng)BASIC程序執(zhí)行相同或另一個(gè)YIELD_T0_SYSTEM()語(yǔ)句時(shí),控制被轉(zhuǎn)移回到該C語(yǔ)言代碼片段,并且返回對(duì)baS_COntext_SWap()的調(diào)用。該C代碼片段然后可以從該系統(tǒng)變量獲得任何結(jié)果。下一個(gè)“if”語(yǔ)句檢查按照慣例被用來(lái)指示BASIC程序在其工作中是否成功的這些變量("wo.int.arg")中的一個(gè)。有可能被BASIC程序修改的變量〃sdp_data"現(xiàn)在可用于C代碼片段的另一個(gè)用戶(hù)。BASIC和“C”協(xié)同例程自變量之間的對(duì)應(yīng)下面的表示出實(shí)例C代碼片段和實(shí)例BASIC程序中的結(jié)構(gòu)元素之間的關(guān)系。<table>tableseeoriginaldocumentpage15</column></row><table>注釋1)該字符串變量自變量可以由任一個(gè)作業(yè)(job)讀取或編寫(xiě)。2)該整數(shù)自變量可以?xún)H由BASIC編寫(xiě)。執(zhí)行內(nèi)容交換我們已討論了協(xié)同例程原理、初始化接口時(shí)要采取的步驟和運(yùn)行在協(xié)同例程關(guān)系中的BASIC程序和C代碼片段的特定實(shí)例。我們現(xiàn)在描述執(zhí)行協(xié)同例程上下文交換、傳遞C和BASIC協(xié)同例程之間的控制的實(shí)際例程。這是當(dāng)BASIC調(diào)用YIELD_T0_SYSTEM()函數(shù)時(shí)或者當(dāng)C代碼片段調(diào)用bas_c0ntext_swap()函數(shù)時(shí)被調(diào)用的公共代碼。因?yàn)樵摯a必須保存包括機(jī)器寄存器的整個(gè)程序上下文,并且保持程序的堆棧(以后進(jìn)先出的方式訪問(wèn)的并且不能直接由更高等級(jí)的語(yǔ)言訪問(wèn)的存儲(chǔ)區(qū)),所以該代碼通常必須以機(jī)器語(yǔ)言編寫(xiě)。為了更好地解釋上下文變換代碼,將在圖4中給出流程圖,之后解釋該流程圖。如所提到的那樣,當(dāng)YIELD_T0_SYSTEM0函數(shù)被調(diào)用時(shí)從BASIC調(diào)用該公共代碼,并且當(dāng)bas_c0ntext_swap()函數(shù)被調(diào)用時(shí)從C代碼片段調(diào)用該公共代碼。第一次調(diào)用該代碼是在BASIC進(jìn)程中運(yùn)行的BASIC程序第一次調(diào)用YIELD_T0_SYSTEM()的時(shí)候。見(jiàn)圖4。處理在101處開(kāi)始。在102處,所需要的所有作業(yè)上下文信息被存儲(chǔ)在當(dāng)前作業(yè)的(BASIC的)堆棧上。如上面所提到的那樣,該堆棧包含已在當(dāng)前作業(yè)(BASIC)的正常操作期間存儲(chǔ)的許多作業(yè)上下文項(xiàng),但是該附加的信息包括機(jī)器寄存器以及通常不被存儲(chǔ)的其它信息。整個(gè)地,該信息包含隨后恢復(fù)該程序所需的所有信息。在103處,進(jìn)行檢查來(lái)看這是否是該代碼第一次被調(diào)用。這將是第一次,所以我們?cè)?04處繼續(xù)。在步驟104處,剛剛保存的BASIC程序的環(huán)境被改變以防止如之前所提到的那樣在隨后將BASIC程序作為協(xié)同例程而調(diào)用時(shí)的危險(xiǎn)負(fù)面影響。隨后將更詳細(xì)地解釋該進(jìn)程。在105處,為BASIC程序建立新的堆棧區(qū)域以使得它可以在不以任何方法擾亂所保存的上下文的情況下安全地在106處進(jìn)入休眠狀態(tài)。這是重要的,因?yàn)樗4娴纳舷挛膶⒃陔S后被恢復(fù),并且如果所恢復(fù)的上下文不是確切相同的則將不可能進(jìn)行作為協(xié)同例程的正確操作。最初BASIC進(jìn)程現(xiàn)在處于休眠狀態(tài)并且決不會(huì)從該點(diǎn)推進(jìn)?,F(xiàn)在,C代碼片段通過(guò)執(zhí)行baS_COnteXt_SWap()函數(shù)來(lái)調(diào)用該代碼。我們?cè)俅卧?01處開(kāi)始。盡管我們將執(zhí)行確切相同的代碼,但是該調(diào)用來(lái)自包含C代碼片段的系統(tǒng)進(jìn)程,而不是來(lái)自于BASIC進(jìn)程。在102處,所需的所有作業(yè)上下文信息被存儲(chǔ)到當(dāng)前作業(yè)的堆棧上,但是這次它將是包含C代碼片段的系統(tǒng)進(jìn)程的上下文和堆棧。在103處,檢查將確定這不是第一次被調(diào)用,所以我們將在107處繼續(xù)。指向當(dāng)前上下文的指針被作為FROM指針(意味著我們正要離開(kāi)的上下文)而存儲(chǔ)在BASIC和C代碼片段都可以訪問(wèn)的存儲(chǔ)區(qū)中。在108處,指向之前被保存的上下文的指針被作為T(mén)O指針(意味著我們正要進(jìn)入的上下文)而被取得。在109處,恢復(fù)之前的上下文。這將是在BASIC早先調(diào)用該代碼時(shí)被保存的上下文。在110處,該代碼將返回。正常的分層函數(shù)將返回到調(diào)用其的程序,如圖2中所示。然而,上下文交換導(dǎo)致該代碼如圖3所示的那樣充當(dāng)協(xié)同例程。因此,在110處,控制被返回到其上下文早先被保存的BASIC協(xié)同例程。該代碼從C調(diào)用,但是返回到BASIC?,F(xiàn)在運(yùn)行BASIC程序,并且在某一點(diǎn)它將調(diào)用YIELD_TO_SYSTEM()函數(shù)。該代碼將在101處被再次調(diào)用。在102處將再次保存當(dāng)前上下文(這次是BASIC上下文),并且在103處控制將被再次傳遞到107(存儲(chǔ)當(dāng)前上下文指針),并且所保存的C代碼片段的上下文將在108和109處被恢復(fù)。在110處,我們將返回,并且再次不返回到調(diào)用方,而是如圖3中那樣返回到C代碼片段。這次該代碼將從BASIC調(diào)用但是返回到C。實(shí)際上,在圖3中,鏈接左邊例程“A”和右邊例程“B”的實(shí)箭頭55僅僅是對(duì)該上下文交換代碼的調(diào)用,其中C代碼片段扮演例程“A”的角色而B(niǎo)ASIC程序扮演例程“B”的角色。改變BASIC程序的環(huán)境之前提到本發(fā)明的另一個(gè)目的是教導(dǎo)一種方法,通過(guò)該方法可以在BASIC程序被用作協(xié)同例程時(shí)改變?cè)揃ASIC程序的環(huán)境以防止危險(xiǎn)的負(fù)面影響。該環(huán)境相當(dāng)于BASIC解釋器調(diào)用以執(zhí)行輸入/輸出并且訪問(wèn)系統(tǒng)資源的函數(shù)集。在優(yōu)選實(shí)施例中,對(duì)所有這些函數(shù)的訪問(wèn)是間接的,使用公知的“回調(diào)函數(shù)”。當(dāng)BASIC解釋器被第一次調(diào)用時(shí),它傳遞BASIC用來(lái)輸入/輸出并且訪問(wèn)系統(tǒng)資源的函數(shù)的地址列表(圖5中的“回調(diào)函數(shù)地址列表”62)。BASIC然后通過(guò)從該列表獲得所需函數(shù)的地址以及然后調(diào)用其來(lái)以間接的方式來(lái)調(diào)用這些函數(shù)(圖5)??商鎿Q方式可以是簡(jiǎn)單地以如圖2中所示的正常方式來(lái)直接調(diào)用該函數(shù)。使用回調(diào)函數(shù)的一個(gè)優(yōu)點(diǎn)是平臺(tái)獨(dú)立性,因?yàn)锽ASIC解釋器沒(méi)有與輸入/輸出的細(xì)節(jié)以及平臺(tái)的系統(tǒng)接口需求聯(lián)系到一起,并且由此可以保留專(zhuān)用地處理BASIC語(yǔ)言本身的“純代碼”。但是在本發(fā)明中,回調(diào)函數(shù)的使用還提供了當(dāng)BASIC程序作為協(xié)同例程運(yùn)行時(shí)用于改變?cè)揃ASIC程序的環(huán)境的非常靈活且有效的手段。當(dāng)?shù)谝淮卧L問(wèn)該協(xié)同例程并且YIELD_TO_SYSTEM()被第一次調(diào)用時(shí),圖4中的上下文交換代碼104修改該回調(diào)函數(shù)列表,從而在作為協(xié)同例程而執(zhí)行時(shí)用新的函數(shù)地址代替那些被認(rèn)為危險(xiǎn)的函數(shù)地址。這是一種靈活的方法,因?yàn)閮H需要代替特定的函數(shù)。而且還是有效的,因?yàn)橐粋€(gè)地址的代替自動(dòng)覆蓋了BASIC內(nèi)對(duì)該函數(shù)的所有調(diào)用。例如,在圖5中,如果在63中的最初函數(shù)“A”是處理終端輸入的函數(shù),并且希望在處于協(xié)同例程時(shí)禁用該函數(shù),然后可以改變62中的條目“A的地址”以使得它包含不執(zhí)行終端輸入但是可能報(bào)告錯(cuò)誤的另一個(gè)函數(shù)的地址64。一旦執(zhí)行該代替,來(lái)自BASIC解釋器的所有“對(duì)A的函數(shù)調(diào)用”(圖5中示出存在兩個(gè)對(duì)函數(shù)“A”的調(diào)用)將自動(dòng)使用新的函數(shù)(“用于函數(shù)A的替換代碼”)開(kāi)始。如果沒(méi)有使用代替回調(diào)函數(shù)的該方法,則在進(jìn)行潛在危險(xiǎn)的函數(shù)調(diào)用的BASIC解釋器內(nèi)的每個(gè)點(diǎn)處,將必須存在代碼來(lái)檢查在該點(diǎn)處(最初的或新的)將調(diào)用哪個(gè)函數(shù)。這樣的檢查將招致在實(shí)時(shí)系統(tǒng)中不可接受的運(yùn)行時(shí)間的處理器開(kāi)銷(xiāo),并且將傾向于產(chǎn)生錯(cuò)誤,因?yàn)槊看纬霈F(xiàn)的函數(shù)調(diào)用都將必須被單獨(dú)地處理?;卣{(diào)地址的代替僅需要在協(xié)同例程接口被第一次初始化時(shí)進(jìn)行一次。權(quán)利要求一種用于使用非實(shí)時(shí)軟件組件來(lái)管理由實(shí)時(shí)計(jì)算機(jī)系統(tǒng)中的實(shí)時(shí)程序使用的數(shù)據(jù)的設(shè)備,其中實(shí)時(shí)程序在其正常執(zhí)行期間不能被停止、暫?;驋炱穑⑶移渲蟹菍?shí)時(shí)程序在其正常執(zhí)行期間能夠在任意點(diǎn)處被停止、暫?;驋炱?,所述設(shè)備包括一個(gè)或多個(gè)實(shí)時(shí)程序,每一個(gè)還包括一個(gè)或多個(gè)實(shí)時(shí)組件和子組件;一個(gè)或多個(gè)非實(shí)時(shí)程序,每一個(gè)還包括一個(gè)或多個(gè)非實(shí)時(shí)數(shù)據(jù)管理組件和子組件,以及一個(gè)或多個(gè)實(shí)時(shí)組件和子組件;不能夠用作實(shí)時(shí)程序的子組件的每一個(gè)非實(shí)時(shí)數(shù)據(jù)管理軟件組件的敏感非實(shí)時(shí)子組件;實(shí)時(shí)環(huán)境保護(hù)子組件,以用用作實(shí)時(shí)程序的子組件的實(shí)時(shí)子組件來(lái)代替每個(gè)敏感非實(shí)時(shí)子組件;實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件,以在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文;非實(shí)時(shí)程序的非實(shí)時(shí)數(shù)據(jù)管理軟件組件,以管理由實(shí)時(shí)程序使用的數(shù)據(jù);用于根據(jù)將由實(shí)時(shí)軟件組件使用的非實(shí)時(shí)數(shù)據(jù)管理軟件組件產(chǎn)生第一數(shù)據(jù)集的裝置;用于使用所述實(shí)時(shí)環(huán)境保護(hù)子組件來(lái)用實(shí)時(shí)子組件代替所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件的每個(gè)敏感非實(shí)時(shí)子組件的裝置,從而將所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件轉(zhuǎn)換成實(shí)時(shí)數(shù)據(jù)管理軟件組件;用于存儲(chǔ)所述第一數(shù)據(jù)集的裝置,所述第一數(shù)據(jù)集待由要被所述實(shí)時(shí)軟件組件使用的上下文中的所述實(shí)時(shí)軟件組件使用;用于使用所述實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件來(lái)在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文的裝置,從而將要由所述實(shí)時(shí)軟件組件使用的所述第一數(shù)據(jù)集傳遞到所述實(shí)時(shí)軟件組件;用于使用所述實(shí)時(shí)軟件組件來(lái)檢索所述第一數(shù)據(jù)集并且產(chǎn)生要由所述非實(shí)時(shí)軟件組件使用的第二數(shù)據(jù)集的裝置;用于存儲(chǔ)所述第二數(shù)據(jù)集的裝置,所述第二數(shù)據(jù)集待由要被所述非實(shí)時(shí)軟件組件使用的上下文中的所述非實(shí)時(shí)軟件組件使用;以及用于使用所述實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件來(lái)在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文的裝置,從而將要由所述非實(shí)時(shí)軟件組件使用的所述第二數(shù)據(jù)集傳遞到所述非實(shí)時(shí)軟件組件;以及用于使用所述非實(shí)時(shí)軟件組件來(lái)處理所述第二數(shù)據(jù)集的裝置。2.根據(jù)權(quán)利要求1所述的設(shè)備,還包括實(shí)時(shí)環(huán)境恢復(fù)子組件,以將非實(shí)時(shí)軟件組件的每個(gè)實(shí)時(shí)環(huán)境保護(hù)子組件恢復(fù)成最初的敏感非實(shí)時(shí)子組件;用于使用所述實(shí)時(shí)環(huán)境恢復(fù)子組件來(lái)將非實(shí)時(shí)軟件組件的每個(gè)實(shí)時(shí)環(huán)境保護(hù)子組件恢復(fù)成所述最初的敏感非實(shí)時(shí)子組件的裝置;以及用于使用所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)檢索并處理由所述實(shí)時(shí)軟件組件產(chǎn)生的所述第二數(shù)據(jù)集的裝置。3.根據(jù)權(quán)利要求1所述的設(shè)備,其中以解譯語(yǔ)言編寫(xiě)多個(gè)所述一個(gè)或多個(gè)非實(shí)時(shí)程序并且在解譯語(yǔ)言環(huán)境中執(zhí)行該多個(gè)所述一個(gè)或多個(gè)非實(shí)時(shí)程序。4.根據(jù)權(quán)利要求3所述的設(shè)備,其中所述解譯語(yǔ)言及解譯語(yǔ)言環(huán)境從由以下各項(xiàng)組成的組中選擇BASIC語(yǔ)言及其解釋器;Python語(yǔ)言及其解釋器;Ruby語(yǔ)言及其解釋器Java語(yǔ)言及其解釋器;以及JavaScript語(yǔ)言及其解釋器。5.根據(jù)權(quán)利要求1所述的設(shè)備,其中使用編譯語(yǔ)言編寫(xiě)多個(gè)所述一個(gè)或多個(gè)實(shí)時(shí)程序并且在編譯語(yǔ)言環(huán)境中執(zhí)行該多個(gè)所述一個(gè)或多個(gè)實(shí)時(shí)程序。6.根據(jù)權(quán)利要求5所述的設(shè)備,其中所述解釋語(yǔ)言及其環(huán)境從由以下各項(xiàng)組成的組中選擇C語(yǔ)言及其編譯器;C++語(yǔ)言及其編譯器;以及c#語(yǔ)言及其編譯器。7.根據(jù)權(quán)利要求1所述的設(shè)備,其中使用與計(jì)算機(jī)系統(tǒng)有關(guān)的匯編語(yǔ)言編寫(xiě)多個(gè)所述一個(gè)或多個(gè)實(shí)時(shí)程序并且在匯編語(yǔ)言環(huán)境中執(zhí)行該多個(gè)所述一個(gè)或多個(gè)實(shí)時(shí)程序。8.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述實(shí)時(shí)環(huán)境保護(hù)子組件使用回調(diào)表來(lái)用實(shí)時(shí)子組件代替所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件的每個(gè)敏感非實(shí)時(shí)子組件。9.根據(jù)權(quán)利要求1所述的設(shè)備,其中用于使用所述實(shí)時(shí)環(huán)境保護(hù)子組件來(lái)用實(shí)時(shí)子組件代替所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件的每個(gè)敏感非實(shí)時(shí)子組件的裝置包括回調(diào)表。10.根據(jù)權(quán)利要求1所述的設(shè)備,其中用于根據(jù)非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)產(chǎn)生第一數(shù)據(jù)集的裝置包括解譯語(yǔ)言及解譯語(yǔ)言環(huán)境。11.根據(jù)權(quán)利要求1所述的設(shè)備,其中用于根據(jù)非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)產(chǎn)生第二數(shù)據(jù)集的裝置包括編譯語(yǔ)言及編譯語(yǔ)言環(huán)境。12.根據(jù)權(quán)利要求1所述的設(shè)備,其中用于根據(jù)非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)產(chǎn)生第二數(shù)據(jù)集的裝置包括與計(jì)算機(jī)系統(tǒng)有關(guān)的匯編語(yǔ)言及匯編語(yǔ)言環(huán)境。13.根據(jù)權(quán)利要求1所述的設(shè)備,其中用于使用所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)檢索并處理由所述實(shí)時(shí)軟件組件產(chǎn)生的所述第二數(shù)據(jù)集的裝置包括解譯語(yǔ)言及解譯語(yǔ)言環(huán)境。14.一種用于使用非實(shí)時(shí)軟件組件來(lái)管理由實(shí)時(shí)計(jì)算機(jī)系統(tǒng)中的實(shí)時(shí)程序使用的數(shù)據(jù)的方法,其中實(shí)時(shí)程序在其正常執(zhí)行期間不能被停止、暫停或掛起,并且其中非實(shí)時(shí)程序在其正常執(zhí)行期間能夠在任意點(diǎn)處被停止、暫?;驋炱?,所述方法包括下述步驟識(shí)別不能被用作實(shí)時(shí)程序的子組件的每個(gè)非實(shí)時(shí)數(shù)據(jù)管理軟件組件的敏感非實(shí)時(shí)子組件;使用回調(diào)表來(lái)實(shí)現(xiàn)實(shí)時(shí)環(huán)境保護(hù)子組件以用用作實(shí)時(shí)程序的子組件的實(shí)時(shí)子組件來(lái)代替每個(gè)敏感非實(shí)時(shí)子組件;實(shí)現(xiàn)所述實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件來(lái)在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文;實(shí)現(xiàn)非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)管理由實(shí)時(shí)程序使用的數(shù)據(jù);執(zhí)行非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)產(chǎn)生由實(shí)時(shí)軟件組件使用的第一數(shù)據(jù)集;執(zhí)行所述實(shí)時(shí)環(huán)境保護(hù)子組件以經(jīng)由回調(diào)表來(lái)用實(shí)時(shí)子組件代替所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件的每個(gè)敏感非實(shí)時(shí)子組件,從而將所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件轉(zhuǎn)換成實(shí)時(shí)數(shù)據(jù)管理軟件組件;存儲(chǔ)第一數(shù)據(jù)集,該第一數(shù)據(jù)集待由要被所述實(shí)時(shí)軟件組件使用的上下文中的所述實(shí)時(shí)軟件組件使用;執(zhí)行所述實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件來(lái)在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文,從而將由所述實(shí)時(shí)軟件組件使用的所述第一數(shù)據(jù)集傳遞到所述實(shí)時(shí)軟件組件;執(zhí)行所述實(shí)時(shí)軟件組件來(lái)檢索所述第一數(shù)據(jù)集并且產(chǎn)生待由所述非實(shí)時(shí)軟件組件使用的第二數(shù)據(jù)集;存儲(chǔ)第二數(shù)據(jù)集,該第二數(shù)據(jù)集待由要被所述非實(shí)時(shí)軟件組件使用的上下文中的所述非實(shí)時(shí)軟件組件使用;執(zhí)行所述實(shí)時(shí)計(jì)算機(jī)系統(tǒng)的上下文交換軟件組件來(lái)在實(shí)時(shí)軟件組件和非實(shí)時(shí)軟件組件之間切換上下文,從而將待由所述非實(shí)時(shí)軟件組件使用的所述第二數(shù)據(jù)集傳遞到所述非實(shí)時(shí)軟件組件;以及執(zhí)行所述非實(shí)時(shí)軟件組件以處理所述第二數(shù)據(jù)集。15.根據(jù)權(quán)利要求14所述的方法,還包括以下步驟實(shí)現(xiàn)實(shí)時(shí)環(huán)境恢復(fù)子組件以將非實(shí)時(shí)軟件組件的每個(gè)實(shí)時(shí)環(huán)境保護(hù)子組件恢復(fù)成最初的敏感非實(shí)時(shí)子組件;執(zhí)行所述實(shí)時(shí)環(huán)境恢復(fù)子組件來(lái)將非實(shí)時(shí)軟件組件的每個(gè)實(shí)時(shí)環(huán)境保護(hù)子組件恢復(fù)成所述最初的敏感非實(shí)時(shí)子組件;以及執(zhí)行所述非實(shí)時(shí)數(shù)據(jù)管理軟件組件來(lái)檢索并處理由所述實(shí)時(shí)軟件組件產(chǎn)生的所述第二數(shù)據(jù)集。全文摘要一種使用協(xié)同例程來(lái)實(shí)現(xiàn)BASIC程序和其中要修改(例如)SIP和SDP數(shù)據(jù)的系統(tǒng)中的點(diǎn)之間的類(lèi)似函數(shù)的接口的方法。從最終用戶(hù)的觀點(diǎn)來(lái)看該協(xié)同例程接口是直觀的,并且從系統(tǒng)設(shè)計(jì)者的觀點(diǎn)來(lái)看實(shí)時(shí)效率和靈活性二者也是直觀的,并且所述協(xié)同例程接口被適用于以給出最終用戶(hù)很大靈活性的容易使用的方式來(lái)提供用戶(hù)定制的SIP和SDP修改,同時(shí)保護(hù)系統(tǒng)免于受到將由緊密耦合的協(xié)同例程接口造成的不期望的負(fù)面影響。文檔編號(hào)G06F9/44GK101821713SQ200880110736公開(kāi)日2010年9月1日申請(qǐng)日期2008年8月8日優(yōu)先權(quán)日2007年8月8日發(fā)明者C·J·布賴(lài)登施泰因,J·W·德?tīng)柮犯裆暾?qǐng)人:雷德康實(shí)驗(yàn)室有限公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1