欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

靜態(tài)路由的刷新方法

文檔序號(hào):7910347閱讀:807來源:國(guó)知局

專利名稱::靜態(tài)路由的刷新方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)據(jù)通信技術(shù),特別涉及在路由設(shè)備中對(duì)靜態(tài)路由的配置與維護(hù)管理,使得在網(wǎng)絡(luò)中接口發(fā)生變化而需要刷新相關(guān)的靜態(tài)路由時(shí),能夠減少對(duì)設(shè)備中CPU的占用時(shí)間,并可避免因?qū)υO(shè)備中CPU的占用時(shí)間過長(zhǎng)造成的系統(tǒng)死機(jī)問題。
背景技術(shù)
:在常規(guī)的通信系統(tǒng)中,在路由設(shè)備上都會(huì)建立并維護(hù)用于靜態(tài)路由的radix樹。其中包含了本設(shè)備配置的所有靜態(tài)路由。常規(guī)方法是通過命令行來配置靜態(tài)路由。靜態(tài)路由一經(jīng)配置成功,就會(huì)保存在本路由設(shè)備中。一旦某個(gè)網(wǎng)絡(luò)接口發(fā)生變化,路由設(shè)備中的路由模塊就會(huì)搜索這棵radix樹,找出需要更新靜態(tài)路由,用最新接口信息將該路由刷新。因此,當(dāng)接口頻繁打開/關(guān)閉時(shí),路由模塊也跟著不停地增加和刪除靜態(tài)路由,從而占用了大量的CPU時(shí)間。另一方面,對(duì)于支持VLAN接口的三層交換機(jī)產(chǎn)品,在物理端口上可以配置大量的VLAN接口。而一旦這個(gè)物理端口發(fā)生變化,所有這些VLAN接口都會(huì)發(fā)生變化,相應(yīng)地也要刷新靜態(tài)路由。此時(shí)容易造成路由模塊占用太長(zhǎng)的CPU,導(dǎo)致其他模塊出現(xiàn)異常,嚴(yán)重時(shí)會(huì)導(dǎo)致系統(tǒng)重起?,F(xiàn)有技術(shù)的靜態(tài)路由刷新方法之所以會(huì)出現(xiàn)占用CPU時(shí)間過長(zhǎng)的問題,主要有兩方面的原因1)路由模塊針對(duì)接口打開/關(guān)閉消息對(duì)靜態(tài)路由的處理不合理。任何一個(gè)接口發(fā)生變化,路由模塊都要遍歷radix樹中的所有靜態(tài)路由,并對(duì)其中每一條靜態(tài)路由都重復(fù)執(zhí)行刷新操作。而實(shí)際上只需要刷新那些與本接口相關(guān)的靜態(tài)路由即可。另外,刷新操作中根據(jù)靜態(tài)路由的下一跳查找對(duì)應(yīng)的出接口采用線性查找的方法,可能需要遍歷系統(tǒng)當(dāng)前配置的所有接口。因此,在配置了大量的VLAN接口后,對(duì)每條靜態(tài)路由都這樣查找一遍必然占用大量的CPU時(shí)間。2)路由模塊對(duì)靜態(tài)路由刷新(維護(hù))管理的調(diào)度策略不合理。只要有消息需要處理,路由模塊就不停地調(diào)用靜態(tài)路由的消息處理函數(shù),而完全沒有考慮其他任務(wù)的需求,從而導(dǎo)致其他任務(wù)因?yàn)榈貌坏綀?zhí)行而被餓死。實(shí)際上,在CPU資源不可搶占的實(shí)時(shí)系統(tǒng)中,適當(dāng)?shù)姆艡?quán)是非常重要的。也就是說,當(dāng)系統(tǒng)接口頻繁地打開或關(guān)閉,或者網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),首先應(yīng)保證設(shè)備的平穩(wěn)運(yùn)行,其次才是考慮盡快收斂的問題。因此,有必要對(duì)路由模塊對(duì)靜態(tài)路由信息的維護(hù)處理方法加以改進(jìn),使其更加適應(yīng)復(fù)雜的運(yùn)行環(huán)境。目前,本發(fā)明人還沒有發(fā)現(xiàn)對(duì)靜態(tài)路由的刷新和維護(hù)方法進(jìn)行優(yōu)化的相關(guān)方案。
發(fā)明內(nèi)容因此,針對(duì)上述現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的就是要提供一種新的對(duì)靜態(tài)路由進(jìn)行刷新的方法,以解決路由模塊在操作中占用CPU時(shí)間過長(zhǎng)的問題。根據(jù)本發(fā)明,提供了一種靜態(tài)路由的刷新方法,包括如下步驟(1)建立網(wǎng)絡(luò)接口與相關(guān)的靜態(tài)路由之間的關(guān)聯(lián);(2)對(duì)于發(fā)生變化的所述網(wǎng)絡(luò)接口,搜索與所述網(wǎng)絡(luò)接口相關(guān)的靜態(tài)路由;(3)對(duì)搜索到的所述相關(guān)靜態(tài)路由進(jìn)行刷新。在本發(fā)明的上述方法中,步驟(1)包括(1-1)將同一目的地的多個(gè)靜態(tài)路由構(gòu)成靜態(tài)路由鏈表,所述靜態(tài)路由鏈表中的每一項(xiàng)表示一條特定的靜態(tài)路由,并且包含所述靜態(tài)路由下一跳的鏈表,該鏈表中的每個(gè)節(jié)點(diǎn)表示了該靜態(tài)路由配置的一個(gè)下一跳;(1-2)對(duì)靜態(tài)路由根據(jù)所配置下一跳找到的出接口索引進(jìn)行散列(HASH)運(yùn)算,生成所述的靜態(tài)路由出接口索引HASH表,該HASH表的節(jié)點(diǎn)與所述靜態(tài)路由下一跳鏈表中的相應(yīng)節(jié)點(diǎn)互相關(guān)聯(lián)。在本發(fā)明的上述方法中,步驟(2)包括(2-1)當(dāng)所述網(wǎng)絡(luò)接口發(fā)生變化時(shí),根據(jù)變化的接口計(jì)算出該接口索引的HASH值;(2-2)在所述HASH表中搜索與所述接口相關(guān)的靜態(tài)路由;(2-3)對(duì)搜索到的靜態(tài)路由進(jìn)行刷新。在本發(fā)明的上述方法中,對(duì)靜態(tài)路由的刷新包括如下步驟(2-3-1)根據(jù)變化的接口查找所述靜態(tài)路由的下一跳;(2-3-2)用查找到的靜態(tài)路由的下一跳再次搜索合法的出接口;(2-3-3)如果能夠查找到新的出接口,則根據(jù)該下一跳新的出接口索引生成索引節(jié)點(diǎn),重新加入所述HASH表中;(2-3-3)如果查找不到所述下一跳,則將所述靜態(tài)路由置于所述HASH表的特定位置。在現(xiàn)有技術(shù)的靜態(tài)路由刷新方法中,只是將靜態(tài)路由組織在radix樹中,而沒有將靜態(tài)路由與配置的接口聯(lián)系起來。這樣就導(dǎo)致在接口變化時(shí)不知道應(yīng)該刷新哪條靜態(tài)路由,所以只好將所有靜態(tài)路由全部刷新一遍。而在本發(fā)明的上述方法中,通過在radix樹的靜態(tài)路由及其所配置的接口之間建立索引關(guān)系。當(dāng)網(wǎng)絡(luò)接口變化時(shí),沿著這個(gè)索引就可以找出所有真正需要刷新的相關(guān)靜態(tài)路由了。另外,在本發(fā)明的上述方法中,還可進(jìn)一步包括如下步驟(4-1)為單個(gè)靜態(tài)路由處理任務(wù)設(shè)置一次不間斷執(zhí)行的最大執(zhí)行時(shí)間;(4-2)在所述靜態(tài)路由處理任務(wù)中的至少一個(gè)時(shí)間檢測(cè)點(diǎn)檢測(cè)當(dāng)前靜態(tài)路由處理任務(wù)的執(zhí)行時(shí)間;(4-3)如果所檢測(cè)到的執(zhí)行時(shí)間未超過所述最大執(zhí)行時(shí)間,則繼續(xù)執(zhí)行所述當(dāng)前靜態(tài)路由處理任務(wù);和(4-4)如果所檢測(cè)到的執(zhí)行時(shí)間超過所述最大執(zhí)行時(shí)間,則停止執(zhí)行當(dāng)前的靜態(tài)路由處理任務(wù),并釋放執(zhí)行靜態(tài)路由處理任務(wù)的CPU。由于現(xiàn)有技術(shù)中在包括靜態(tài)路由刷新處理在內(nèi)的路由維護(hù)管理任務(wù)的調(diào)度方面存在占用CPU時(shí)間過長(zhǎng)的問題,在本發(fā)明的上述方法中,通過控制路由維護(hù)管理一次執(zhí)行的最大時(shí)長(zhǎng),從而避免了將其他任務(wù)餓死的現(xiàn)象。本發(fā)明的上述步驟(4-2)進(jìn)一步還可包括如下步驟(4-2-1)根據(jù)當(dāng)前靜態(tài)路由處理任務(wù)中包含的子任務(wù)的優(yōu)先級(jí),將所述最大執(zhí)行時(shí)間劃分為與所述子任務(wù)的個(gè)數(shù)相應(yīng)的子任務(wù)最大執(zhí)行時(shí)間;(4-2-2)在所述子任務(wù)中的至少一個(gè)時(shí)間檢測(cè)點(diǎn)檢測(cè)當(dāng)前子任務(wù)的執(zhí)行時(shí)間;(4-2-3)如果所檢測(cè)到的執(zhí)行時(shí)間未超過所述子任務(wù)的最大執(zhí)行時(shí)間,則繼續(xù)執(zhí)行所述當(dāng)前子任務(wù);和(4-2-4)如果所檢測(cè)到的執(zhí)行時(shí)間超過所述子任務(wù)的最大執(zhí)行時(shí)間,則停止執(zhí)行當(dāng)前的子任務(wù),而執(zhí)行當(dāng)前靜態(tài)路由處理任務(wù)中包含的下一個(gè)所述子任務(wù)。因?yàn)殪o態(tài)路由的維護(hù)管理與其他的路由協(xié)議共用一個(gè)操作系統(tǒng)任務(wù),如果采用sleep等同步放權(quán)機(jī)制,雖然不至于將其他任務(wù)長(zhǎng)時(shí)間掛起,但有可能將路由任務(wù)中其他路由協(xié)議掛起。因此,本發(fā)明的上述方法進(jìn)一步采用了異步放權(quán)的機(jī)制。即將整個(gè)路由任務(wù)再劃分成一個(gè)子任務(wù),例如定時(shí)器子任務(wù)、JOB子任務(wù)、接口處理子任務(wù)等,對(duì)其中每個(gè)子任務(wù)按其重要程度分配執(zhí)行時(shí)間。執(zhí)行時(shí)間到后即使還沒有執(zhí)行完畢,也要放權(quán)給下一個(gè)子任務(wù)執(zhí)行。如果執(zhí)行總時(shí)間超限,則整個(gè)路由任務(wù)放權(quán)給其他任務(wù)。這樣的機(jī)制既保證了路由任務(wù)和其他任務(wù)的公平性,又保證了內(nèi)部子任務(wù)之間的公平性。通過詳細(xì)文字說明并結(jié)合以下附圖,本發(fā)明的上述目的、特征及優(yōu)點(diǎn)將變得更加易于理解,其中圖1是根據(jù)本發(fā)明的在靜態(tài)路由及其所配置的接口之間建立索引關(guān)系的數(shù)據(jù)結(jié)構(gòu)圖;圖2是根據(jù)本發(fā)明的對(duì)路由維護(hù)任務(wù)設(shè)置一次不間斷執(zhí)行的最大時(shí)長(zhǎng)并進(jìn)行相應(yīng)的任務(wù)調(diào)度處理的方法示意圖。具體實(shí)施例方式下面參考圖1詳細(xì)描述本發(fā)明的一種實(shí)施方案的例子。如上所述,現(xiàn)有技術(shù)中的路由模塊專門為靜態(tài)路由設(shè)置了一棵radix樹,其中放置了本設(shè)備配置的所有靜態(tài)路由,以方便查找。因?yàn)榭梢詾橥荒康牡卦O(shè)置不同優(yōu)先級(jí)的靜態(tài)路由,所以在本發(fā)明的一種實(shí)施例中,將這些不同優(yōu)先級(jí)的靜態(tài)路由串成一條單向連表,掛到radix樹的節(jié)點(diǎn)上。鏈表中的每個(gè)結(jié)構(gòu)表示了一條特定優(yōu)先級(jí)的靜態(tài)路由。對(duì)于每一特定的靜態(tài)路由,可以配置個(gè)數(shù)不限的下一跳。具體地說,如圖1中實(shí)線部分所示,靜態(tài)路由中配置的到同一目的地的具有特定優(yōu)先級(jí)的靜態(tài)路由用一個(gè)rt_static表示。它所具有的下一跳用adv表示。如上所述,與一個(gè)特定的靜態(tài)路由對(duì)應(yīng)的adv的數(shù)量可以有多個(gè)。它們組成一個(gè)單向鏈表掛在該rt_static下面。如果對(duì)于每個(gè)用adv表示的下一跳,通過調(diào)用接口查詢函數(shù)能夠找到一個(gè)出接口,則路由模塊就可以使該靜態(tài)路由生效并下發(fā)微碼。如圖1所示,在本發(fā)明中,為了將靜態(tài)路由與接口建立起關(guān)聯(lián),對(duì)根據(jù)靜態(tài)路由配置下一跳找到的對(duì)應(yīng)出接口索引進(jìn)行HASH運(yùn)算(散列運(yùn)算),從而生成了一個(gè)HASH表(hash_table)。因?yàn)榭赡軐?duì)不同的接口進(jìn)行散列運(yùn)算得出的HASH值相同,所以需要建立一個(gè)沖突鏈,將具有相同HASH值的出接口串在一起。另外,如圖1中的虛線部分所示,因?yàn)橛锌赡懿煌撵o態(tài)路由找到的出接口相同,因此在HASH表中再生成一個(gè)表示不同靜態(tài)路由配置的下一跳的鏈表。這個(gè)鏈表有一個(gè)鏈頭(head),它位于HASH表的沖突鏈中。其下有一個(gè)雙向鏈表,雙向鏈表中的每個(gè)節(jié)點(diǎn)可稱為elem。在elem中保存有指向出接口的指針ifap。為了能夠找到該接口所屬的靜態(tài)路由,在elem中還保存有一個(gè)rt_static指針。同時(shí),為了與靜態(tài)路由的上述數(shù)據(jù)結(jié)構(gòu)中的adv對(duì)應(yīng)起來,以便刪除配置時(shí)可以將對(duì)應(yīng)的elem刪除,在每個(gè)elem中還保存了一個(gè)adv指針,即每個(gè)elem結(jié)構(gòu)都與一個(gè)adv結(jié)構(gòu)對(duì)應(yīng),而每個(gè)adv結(jié)構(gòu)都至少有一個(gè)elem結(jié)構(gòu)與之關(guān)聯(lián)。從圖1中可以看出,adv鏈表與elem鏈表就好象掛在rt_static下面的一張“梯子”的兩邊,它們之間的相互指針則構(gòu)成了“梯子”的“橫檔”,將adv鏈表與elem鏈表聯(lián)系在一起。總之,在每個(gè)靜態(tài)路由配置的下一跳的鏈表中通過elem結(jié)構(gòu)、rt_static結(jié)構(gòu)和adv結(jié)構(gòu)建立了出接口與靜態(tài)路由的關(guān)聯(lián)。利用上述結(jié)構(gòu)建立的網(wǎng)絡(luò)接口與靜態(tài)路由的關(guān)聯(lián),在接口變化時(shí),可以按照如下方法更新相關(guān)的靜態(tài)路由(1)對(duì)變化的接口進(jìn)行散列計(jì)算,得出該接口的HASH值。在HASH表的沖突鏈中搜索對(duì)應(yīng)的head結(jié)構(gòu)。如果沒有找到,則表明沒有配置與本接口相關(guān)的靜態(tài)路由,不進(jìn)行路由的刷新并釋放CPU資源;否則轉(zhuǎn)下一步(2);(2)遍歷head下掛的所有elem結(jié)構(gòu)。對(duì)每個(gè)elem,從其中的rt_static回指指針找到配置的靜態(tài)路由,調(diào)用單個(gè)靜態(tài)路由的刷新函數(shù),同時(shí)將包括rt_static指針、adv指針、ifap指針在內(nèi)的參數(shù)傳遞給該刷新函數(shù),并執(zhí)行下一步驟(3)在利用上述參數(shù)刷新靜態(tài)路由時(shí),如果能夠找到出接口,則以接口索引為key(即用接口索引作為輸入,并調(diào)用HASH函數(shù)計(jì)算得出得結(jié)果,它將作為HASH表的索引)生成該接口的索引節(jié)點(diǎn),插入HASH表中。所謂接口索引是系統(tǒng)內(nèi)部表示一個(gè)接口的唯一標(biāo)識(shí),它是一個(gè)ULONG類型的數(shù)值。HASH函數(shù)采用接口索引作為輸入,經(jīng)過對(duì)接口索引采用移位、相加、異或等方法盡量使得輸入不同的接口索引能夠得到不同的計(jì)算結(jié)果。如果找不到出接口,同樣需要生成一個(gè)索引節(jié)點(diǎn),以便以后配置接口IP地址后能夠重新使能該靜態(tài)路由。因?yàn)闆]有出接口的索引,因此將這一類找不到出接口的靜態(tài)路由掛到HASH表中一個(gè)特殊的位置上——例如第256個(gè)數(shù)組上。以后,每配置一個(gè)新的IP地址都檢查這些找不到出接口的靜態(tài)路由集合,以從中找出可以生效的靜態(tài)路由。在本發(fā)明中,利用下一跳查找出接口的函數(shù)利用了一種IP地址radix樹作為查找對(duì)象。這棵樹是將本設(shè)備配置的IP地址按照子網(wǎng)大小和掩碼長(zhǎng)度安排在一個(gè)二叉樹上。除此之外,還需要將靜態(tài)路由中配置的下一跳也掛在這棵樹上,此時(shí)IP地址就是配置的下一跳,掩碼為32。這樣在查找出接口時(shí)就象對(duì)IP報(bào)文查找路由表那樣將下一跳作為目的地址查找這棵radix樹,如果能最長(zhǎng)匹配到一個(gè)掛有IP地址的節(jié)點(diǎn),則該IP地址所在的接口就是本下一跳對(duì)應(yīng)的出接口。因?yàn)闊o論配置多少IP地址,radix樹最多只有32層,因此最多匹配32次就一定可以知道能否找到出接口。當(dāng)然,即使不采用這樣的快速定位方法,而是沿用原有的線性遍歷每個(gè)接口的方法,依然可以找出出接口,只不過效率要低一些。但無論采用哪一種方法,出接口查詢函數(shù)的原型是一樣的,只是內(nèi)部實(shí)現(xiàn)不同而已。對(duì)于靜態(tài)路由而言,并不知道該函數(shù)內(nèi)部是如何實(shí)現(xiàn)的,只是調(diào)用該查詢函數(shù)。這樣,利用本發(fā)明上述的數(shù)據(jù)結(jié)構(gòu)和方法,可以只更新與某個(gè)接口相關(guān)的靜態(tài)路由,對(duì)于其他靜態(tài)路由則不做處理。這樣可以最大限度地提高處理的效率,減少對(duì)CPU的占用。上面的優(yōu)化只是針對(duì)靜態(tài)路由做的修改。當(dāng)接口狀態(tài)變化的消息不多時(shí),上面的優(yōu)化已經(jīng)足夠。但如果存在大量接口狀態(tài)變化的消息,則靜態(tài)路由處理的總時(shí)間還是很長(zhǎng)的。因此,對(duì)靜態(tài)路由處理的消息個(gè)數(shù)需要加以限制。否則路由任務(wù)占用CPU過長(zhǎng)的問題仍然有可能出現(xiàn)。但因?yàn)槊總€(gè)消息的處理時(shí)長(zhǎng)差別很大,直接限制消息處理的個(gè)數(shù)具有很大的盲目性。因此,本發(fā)明在上述方法的基礎(chǔ)上進(jìn)一步提供了在時(shí)間尺度上間接地限制消息個(gè)數(shù)的方法。在靜態(tài)路由的維護(hù)管理的任務(wù)中,包含了多個(gè)不同的子任務(wù),概括起來可分為以下幾個(gè)(1)報(bào)文處理—主要是接收TCP/IP協(xié)議棧的消息,回調(diào)各個(gè)協(xié)議注冊(cè)的接收函數(shù)處理協(xié)議報(bào)文;(2)接口處理—主要是接收由接口管理和IP模塊上送的有關(guān)接口狀態(tài)和IP地址的消息;(3)出錯(cuò)處理—主要是處理由轉(zhuǎn)發(fā)模塊上送的出錯(cuò)消息,必要時(shí)需要重發(fā)已有的路由信息;(4)命令行處理—主要是接收由命令行傳來的配置命令,轉(zhuǎn)發(fā)給各個(gè)協(xié)議的命令處理函數(shù);(5)定時(shí)器處理—路由模塊自己維護(hù)一套定時(shí)器處理機(jī)制。(6)作業(yè)處理—路由模塊將可以延遲執(zhí)行的任務(wù)稱為作業(yè),它將在系統(tǒng)空閑時(shí)得以執(zhí)行。以上子任務(wù)中,除了作業(yè)每次只處理一個(gè),無法加以控制外,所有其它的任務(wù)都可以按時(shí)間限制一次處理的消息個(gè)數(shù)。具體方法將在下文中結(jié)合圖2加以說明。給整個(gè)路由任務(wù)(例如刷新任務(wù))指定一個(gè)的一次不間斷執(zhí)行的最大執(zhí)行時(shí)間(RMET),例如定為250ms。可以針對(duì)不同的設(shè)備或系統(tǒng)的需求加以修改。在整個(gè)路由任務(wù)的執(zhí)行過程中設(shè)置至少一個(gè)時(shí)間檢測(cè)點(diǎn)。在這些檢測(cè)點(diǎn)上檢查當(dāng)前路由刷新任務(wù)總的執(zhí)行時(shí)間是否超過RMET。如果沒有超過,則繼續(xù)執(zhí)行該任務(wù),否則即停止執(zhí)行當(dāng)前路由刷新,并釋放CPU控制權(quán)。這樣可以保證當(dāng)前路由刷新任務(wù)不會(huì)將其它的操作系統(tǒng)任務(wù)餓死。在本發(fā)明的一種實(shí)施例中,可以按上述6項(xiàng)子任務(wù)的重要程度和執(zhí)行頻度,將250ms的RMET劃分為6部分,稱為子任務(wù)最大執(zhí)行時(shí)間(SMET)。例如,報(bào)文處理為70ms;接口處理為90ms;出錯(cuò)處理20ms;命令行處理為30ms;定時(shí)器處理為20ms;作業(yè)處理為20ms。在具體處理時(shí),控制每個(gè)子任務(wù)的執(zhí)行時(shí)間不能超過上述子任務(wù)最大執(zhí)行時(shí)間所限定的值。在一個(gè)子任務(wù)中也相應(yīng)地設(shè)置至少一個(gè)檢測(cè)點(diǎn)。然后查找在這些檢測(cè)點(diǎn)上檢查當(dāng)前子任務(wù)的執(zhí)行時(shí)間是否超過相應(yīng)的SMET。如果沒有超過,則繼續(xù)該子任務(wù)中后續(xù)消息的處理,否則即使還有消息待處理,也必須從當(dāng)前子任務(wù)中返回主循環(huán),將CPU讓給下一個(gè)子任務(wù)。具體地說,在圖2所示的實(shí)施例中,定時(shí)器子任務(wù)遇到檢測(cè)點(diǎn),先計(jì)算當(dāng)前已經(jīng)執(zhí)行的時(shí)間,然后判斷是否超過RMET。如果已超過RMET,則釋放CPU,同時(shí)用SMET減去已經(jīng)執(zhí)行時(shí)間,以便當(dāng)下次路由任務(wù)重新占用CPU后該子任務(wù)繼續(xù)執(zhí)行時(shí)間不會(huì)超過SMET的限制,從而做到子任務(wù)之間的平衡調(diào)度。如果未超過RMET,則進(jìn)一步檢查定時(shí)器子任務(wù)的處理時(shí)間是否超過其相應(yīng)的SMET,如未超過則可繼續(xù)處理其它定時(shí)器并重復(fù)上述檢測(cè)步驟;否則,即使還有定時(shí)器需要處理也必須及時(shí)退出,用RMET減去本次子任務(wù)處理時(shí)間,然后進(jìn)入下一步的作業(yè)處理子任務(wù)的處理。如果所有定時(shí)器處理完畢后,執(zhí)行時(shí)間依然沒有超過SMET的限制,則將SMET減去本次執(zhí)行時(shí)間的剩余時(shí)間疊加到下一個(gè)子任務(wù)的SMET上,使得其它子任務(wù)相對(duì)繁忙時(shí)可以使用更多的時(shí)間進(jìn)行處理。上述只是詳細(xì)描述了定時(shí)器子任務(wù)的處理步驟,其實(shí)其它的子任務(wù)的執(zhí)行步驟也大體相同,都是需要在合適的地點(diǎn)設(shè)置時(shí)間檢查點(diǎn),并檢查RMET和SMET是否超時(shí)。如果超時(shí)在保存斷點(diǎn)后需要及時(shí)退出以便讓下一個(gè)子任務(wù)繼續(xù)執(zhí)行。根據(jù)兩個(gè)條件來決定是否允許一個(gè)子任務(wù)繼續(xù)執(zhí)行(1)路由任務(wù)總的剩余時(shí)間RMET,它表示了整個(gè)路由任務(wù)最多還能執(zhí)行多長(zhǎng)時(shí)間就必須釋放CPU給其它任務(wù),它保證的是整個(gè)路由任務(wù)和其它任務(wù)對(duì)CPU占用的公平性;(2)本子任務(wù)定制的最長(zhǎng)執(zhí)行時(shí)間,它表示的是該子任務(wù)一次執(zhí)行的處理時(shí)間總和不能超過該限制,它保證的是路由任務(wù)內(nèi)部的各個(gè)子任務(wù)之間對(duì)CPU占用的公平性。SMET初值可以由用戶指定,而且在路由任務(wù)運(yùn)行過幾遍后,RMET不斷遞減而SMET的初值保持不變,使得SMET的數(shù)值可能大于RMET,這時(shí)在一個(gè)子任務(wù)處理中間會(huì)將整個(gè)路由任務(wù)掛起,釋放CPU給其它任務(wù)。當(dāng)路由任務(wù)再次執(zhí)行時(shí),依然從掛起的子任務(wù)中恢復(fù)執(zhí)行,但掛起本子任務(wù)前后兩次執(zhí)行時(shí)間總和也不能超過定制的SMET的限制。在上述方法中,給出的SMET只是其一次可以執(zhí)行的最大時(shí)間,而這些子任務(wù)之間的執(zhí)行時(shí)間往往具有一定的彈性。如果該子任務(wù)在其相應(yīng)的SMET限定的時(shí)間前就已經(jīng)完成了工作,可以立即返回,并將剩余的時(shí)間用于后面的子任務(wù)。這樣循環(huán)一遍后,如果發(fā)現(xiàn)總的執(zhí)行時(shí)間沒有超過RMET的限制,并且當(dāng)前路由任務(wù)還有工作需要執(zhí)行,則可以不放權(quán),再次進(jìn)入循環(huán),將剩余的時(shí)間用于繁忙子任務(wù)的處理。這里的循環(huán)就是指6個(gè)子任務(wù)依次執(zhí)行一遍,其中有可能出現(xiàn)某些子任務(wù)在SMET時(shí)間內(nèi)提前完成,而某些子任務(wù)因SMET超時(shí)未完成的情況。在這種情況下,再次循環(huán)就是為了繼續(xù)處理那些因SMET超時(shí)而提前中止的子任務(wù)。在大部分情況下,不是所有的子任務(wù)都很繁忙,例如命令行處理因?yàn)檩斎朊畹乃俣认拗?,往往用不?0ms的時(shí)間;定時(shí)器處理都是干一些對(duì)時(shí)間敏感且處理簡(jiǎn)短的事情,往往也用不完20ms,這些子任務(wù)剩余的時(shí)間可以給諸如報(bào)文處理或接口處理子任務(wù)使用。正是由于這種子任務(wù)之間的寬松關(guān)系使得一方面所有子任務(wù)都有機(jī)會(huì)得到執(zhí)行;另一方面將時(shí)間盡量分配給繁忙的子任務(wù)。在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,釋放對(duì)CPU的控制權(quán)的操作也不是簡(jiǎn)單的調(diào)用操作系統(tǒng)的sleep函數(shù)(該函數(shù)就象一個(gè)啟動(dòng)操作系統(tǒng)的定時(shí)器,時(shí)長(zhǎng)就是sleep的參數(shù)。調(diào)用該函數(shù)的任務(wù)自動(dòng)被掛起直到過了指定時(shí)間后才可能恢復(fù)執(zhí)行)方式,而是啟動(dòng)一個(gè)優(yōu)先級(jí)很低的操作系統(tǒng)任務(wù)。向這個(gè)任務(wù)發(fā)一個(gè)事件,然后等待這個(gè)任務(wù)返回一個(gè)響應(yīng)。因?yàn)檫@個(gè)任務(wù)的優(yōu)先級(jí)很低,所以在系統(tǒng)很繁忙時(shí)也能保證其它比路由任務(wù)優(yōu)先級(jí)低的任務(wù)得到執(zhí)行,而在系統(tǒng)不繁忙時(shí),該任務(wù)在收到路由任務(wù)的事件后可以立即返回一個(gè)響應(yīng),使得路由任務(wù)可以立即執(zhí)行,提高了CPU的使用效率。盡管上面對(duì)本發(fā)明進(jìn)行了說明,應(yīng)當(dāng)理解,這些說明只是列舉了本發(fā)明的一些具體實(shí)施的例子,而不是對(duì)本發(fā)明的限定。對(duì)本發(fā)明實(shí)施例的各個(gè)細(xì)節(jié)顯然可以進(jìn)行各種修改和采用各種等同的手段。例如,本發(fā)明的核心思想是,在靜態(tài)路由和可能發(fā)生變化的因素(接口,IP地址)之間建立關(guān)聯(lián),以達(dá)到快速處理靜態(tài)路由更新的目的。但建立關(guān)聯(lián)的數(shù)目和方式差異很大。本發(fā)明的實(shí)施方案中的通過HASH表的方式在接口索引和靜態(tài)路由之間建立關(guān)聯(lián)只是其中的一種方式,還可以有其它方式。例如,通過在直接在接口數(shù)據(jù)結(jié)構(gòu)和存放IP地址的數(shù)據(jù)結(jié)構(gòu)中增加指針鏈表,也能達(dá)到同樣的目的。同樣,對(duì)于路由任務(wù)的調(diào)度而言,調(diào)度策略也有很多種,也可以使用很多現(xiàn)成的調(diào)度算法。本發(fā)明的方案是在一個(gè)非搶占的任務(wù)中實(shí)現(xiàn)的,沒有向操作系統(tǒng)那樣實(shí)施很精準(zhǔn)的控制,而且考慮到調(diào)度本身的開銷,因而只采用了較為容易實(shí)現(xiàn)的一種。除此之外,還可以綜合考慮動(dòng)態(tài)優(yōu)先級(jí)與執(zhí)行時(shí)間等其它一些因素,對(duì)子任務(wù)的處理流程進(jìn)行人為地控制以實(shí)現(xiàn)公平、穩(wěn)定、有所側(cè)重的運(yùn)行。因此,本發(fā)明的范圍僅由權(quán)利要求書所限定。權(quán)利要求1.一種靜態(tài)路由的刷新方法,包括如下步驟(1)建立網(wǎng)絡(luò)接口與相關(guān)的靜態(tài)路由之間的關(guān)聯(lián);(2)對(duì)于發(fā)生變化的所述網(wǎng)絡(luò)接口,搜索與所述網(wǎng)絡(luò)接口相關(guān)的靜態(tài)路由;(3)對(duì)搜索到的所述相關(guān)靜態(tài)路由進(jìn)行刷新。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟(1)包括(1-1)將同一目的地的多個(gè)靜態(tài)路由構(gòu)成靜態(tài)路由鏈表,所述靜態(tài)路由鏈表中的每一項(xiàng)表示一條特定的靜態(tài)路由,并且包含所述靜態(tài)路由下一跳的鏈表,該鏈表中的每個(gè)節(jié)點(diǎn)表示了該靜態(tài)路由配置的一個(gè)下一跳;(1-2)對(duì)靜態(tài)路由根據(jù)所配置下一跳找到的出接口索引進(jìn)行散列(HASH)運(yùn)算,生成所述的靜態(tài)路由出接口索引HASH表,該HASH表的節(jié)點(diǎn)與所述靜態(tài)路由下一跳鏈表中的相應(yīng)節(jié)點(diǎn)相關(guān)聯(lián)。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟(2)包括(2-1)當(dāng)所述網(wǎng)絡(luò)接口發(fā)生變化時(shí),根據(jù)變化的接口計(jì)算出該接口索引的HASH值;(2-2)在所述HASH表中搜索與所述接口相關(guān)的靜態(tài)路由;(2-3)對(duì)搜索到的靜態(tài)路由進(jìn)行刷新。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述對(duì)靜態(tài)路由的刷新包括(2-3-1)查找所述靜態(tài)路由的下一跳;(2-3-2)如果查找到所述下一跳,則根據(jù)該下一跳的接口索引生成索引節(jié)點(diǎn),加入所述HASH表中;(2-3-3)如果查找不到所述下一跳,則將所述靜態(tài)路由置于所述HASH表的特定位置。5.根據(jù)權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括,(1-4)將所述靜態(tài)路由的下一跳作為掩碼長(zhǎng)度為32位的IP地址,建立radix樹;(1-5)當(dāng)所述網(wǎng)絡(luò)接口發(fā)生變化時(shí),搜索所述radix樹中相應(yīng)的靜態(tài)路由的下一跳節(jié)點(diǎn);(1-6)更新下一跳節(jié)點(diǎn)所對(duì)應(yīng)的靜態(tài)路由。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括,(4)當(dāng)多個(gè)所述網(wǎng)絡(luò)接口發(fā)生狀態(tài)變化時(shí),限制對(duì)靜態(tài)路由處理的消息個(gè)數(shù)。7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述限制對(duì)靜態(tài)路由處理的消息個(gè)數(shù)的步驟進(jìn)一步包括(4-1)為單個(gè)靜態(tài)路由處理任務(wù)設(shè)置一次不間斷執(zhí)行的最大執(zhí)行時(shí)間;(4-2)在所述靜態(tài)路由處理任務(wù)中的至少一個(gè)時(shí)間檢測(cè)點(diǎn)檢測(cè)當(dāng)前靜態(tài)路由處理任務(wù)的執(zhí)行時(shí)間;(4-3)如果所檢測(cè)到的執(zhí)行時(shí)間未超過所述最大執(zhí)行時(shí)間,則繼續(xù)執(zhí)行所述當(dāng)前靜態(tài)路由處理任務(wù);和(4-4)如果所檢測(cè)到的執(zhí)行時(shí)間超過所述最大執(zhí)行時(shí)間,則停止執(zhí)行當(dāng)前的靜態(tài)路由處理任務(wù),并釋放執(zhí)行靜態(tài)路由處理任務(wù)的CPU。8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟(4-2)進(jìn)一步包括(4-2-1)根據(jù)當(dāng)前靜態(tài)路由處理任務(wù)中包含的子任務(wù)的優(yōu)先級(jí),將所述最大執(zhí)行時(shí)間劃分為與所述子任務(wù)的個(gè)數(shù)相應(yīng)的子任務(wù)最大執(zhí)行時(shí)間;(4-2-2)在所述子任務(wù)中的至少一個(gè)時(shí)間檢測(cè)點(diǎn)檢測(cè)當(dāng)前子任務(wù)的執(zhí)行時(shí)間;(4-2-3)如果所檢測(cè)到的執(zhí)行時(shí)間未超過所述子任務(wù)的最大執(zhí)行時(shí)間,則繼續(xù)執(zhí)行所述當(dāng)前子任務(wù);和(4-2-4)如果所檢測(cè)到的執(zhí)行時(shí)間超過所述子任務(wù)的最大執(zhí)行時(shí)間,則停止執(zhí)行當(dāng)前的子任務(wù),而執(zhí)行當(dāng)前靜態(tài)路由處理任務(wù)中包含的下一個(gè)所述子任務(wù)。9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述步驟(4-2-3)進(jìn)一步包括(4-2-3-1)當(dāng)所述當(dāng)前子任務(wù)在其最大執(zhí)行時(shí)間內(nèi)完成時(shí),立即進(jìn)入下一子任務(wù)的處理;并且所述方法進(jìn)一步包括(4-2-5)在按照步驟(4-2-1)-(4-2-4)進(jìn)行了所有子任務(wù)的處理后,判斷是否超過所述單個(gè)靜態(tài)路由處理任務(wù)的最大執(zhí)行時(shí)間;(4-2-5)如果沒有超過所述最大執(zhí)行時(shí)間,判斷當(dāng)前靜態(tài)路由處理任務(wù)中是否還有子任務(wù)需要執(zhí)行;(4-2-6)如果還有子任務(wù)需要執(zhí)行,則執(zhí)行該子任務(wù),然后返回步驟(4-2-2)。10.根據(jù)權(quán)利要求7、8或9所述的方法,其特征在于,所述步驟(4-4)進(jìn)一步包括在釋放執(zhí)行靜態(tài)路由處理任務(wù)的CPU時(shí),啟動(dòng)具有低優(yōu)先級(jí)的操作系統(tǒng)任務(wù)。全文摘要本發(fā)明提供了一種靜態(tài)路由的刷新方法,包括如下步驟建立網(wǎng)絡(luò)接口與相關(guān)的靜態(tài)路由之間的關(guān)聯(lián);對(duì)于發(fā)生變化的所述網(wǎng)絡(luò)接口,搜索與所述網(wǎng)絡(luò)接口相關(guān)的靜態(tài)路由;只對(duì)搜索到的所述相關(guān)靜態(tài)路由進(jìn)行刷新,同時(shí)優(yōu)化路由模塊的任務(wù)調(diào)度機(jī)制,實(shí)現(xiàn)整個(gè)系統(tǒng)的平穩(wěn)運(yùn)行。根據(jù)本發(fā)明,可以最大限度地提高處理的效率,減少對(duì)CPU的占用。文檔編號(hào)H04L29/02GK1543133SQ0312425公開日2004年11月3日申請(qǐng)日期2003年4月30日優(yōu)先權(quán)日2003年4月30日發(fā)明者王軍,王軍申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
大竹县| 栾城县| 江津市| 大兴区| 名山县| 来安县| 汉中市| 杂多县| 开封县| 屏边| 武陟县| 秦安县| 禄丰县| 柳林县| 许昌县| 车险| 荥经县| 新竹县| 翁源县| 腾冲县| 慈溪市| 永定县| 正宁县| 台东市| 板桥市| 哈尔滨市| 淮安市| 泰州市| 仪征市| 涞水县| 岗巴县| 全州县| 汾西县| 漾濞| 乐山市| 天祝| 洪湖市| 郓城县| 东乌珠穆沁旗| 河西区| 霍城县|