專(zhuān)利名稱:基于mips64的雙cpu微內(nèi)核的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)通信領(lǐng)域,具體涉及一種在IP交換機(jī)中為BCM1250實(shí)現(xiàn)包轉(zhuǎn)發(fā)功能提供的系統(tǒng)支撐。
背景技術(shù):
BCM1250是Broadcom公司推出的一款通信處理器芯片,該芯片集成了兩個(gè)高性能的MIPS64 CPU,BCM1250在IP交換機(jī)系統(tǒng)中實(shí)現(xiàn)包轉(zhuǎn)發(fā)功能,包括Ipv4轉(zhuǎn)發(fā)、MPLS轉(zhuǎn)發(fā)、L2VPN、L3VPN、ACL、QOS、組播、接入控制、NAT等功能,并且支持多種接口類(lèi)型。由于BCM1250有兩個(gè)CPU,所以系統(tǒng)的功能分布在這兩個(gè)CPU上,如圖1所示,ACL、接口管理在CPU0上實(shí)現(xiàn),Ipv4轉(zhuǎn)發(fā)、MPLS轉(zhuǎn)發(fā)、L2VPN、L3VPN、組播、接入控制由CPU1完成,NAT和QOS由兩個(gè)CPU各完成一部分。在實(shí)現(xiàn)系統(tǒng)的功能時(shí),需要對(duì)轉(zhuǎn)發(fā)進(jìn)行控制。BCM1250上并不實(shí)現(xiàn)IP協(xié)議棧,而由交換機(jī)系統(tǒng)的主控CPU完成,因此BCM1250必須處理從主控CPU下達(dá)的轉(zhuǎn)發(fā)控制命令,更新系統(tǒng)中的轉(zhuǎn)發(fā)表項(xiàng),從而達(dá)到控制轉(zhuǎn)發(fā)過(guò)程的目的;同時(shí),BCM1250自身也負(fù)擔(dān)一部分轉(zhuǎn)發(fā)控制的功能,比如ARP協(xié)議。在BCM1250中完成這項(xiàng)功能的模塊稱為轉(zhuǎn)發(fā)控制模塊,由CPU0來(lái)完成。包轉(zhuǎn)發(fā)流程一般模型是查表,根據(jù)命中的表項(xiàng)中的指定動(dòng)作做相應(yīng)操作,比如將包丟棄等。包轉(zhuǎn)發(fā)控制是通過(guò)帶外通信信道將相應(yīng)的表項(xiàng)添入表中,比如將一條OSPF路由加入路由表中。可見(jiàn),BCM1250所要實(shí)現(xiàn)的功能模型是相對(duì)簡(jiǎn)單的。
參考圖2,BCM1250軟件系統(tǒng)結(jié)構(gòu)包括轉(zhuǎn)發(fā)模塊和轉(zhuǎn)發(fā)支撐平臺(tái)。轉(zhuǎn)發(fā)模塊包括轉(zhuǎn)發(fā)控制模塊和轉(zhuǎn)發(fā)流程模塊。轉(zhuǎn)發(fā)模塊實(shí)現(xiàn)整個(gè)系統(tǒng)的功能,轉(zhuǎn)發(fā)支撐平臺(tái)是實(shí)現(xiàn)這些系統(tǒng)功能的系統(tǒng)支撐。目前,基于BCM1250的系統(tǒng)支撐都是使用操作系統(tǒng),比如vxWorks或嵌入式linux。但是,這些OS都是通用的操作系統(tǒng),而不是針對(duì)某一種特定的應(yīng)用而設(shè)計(jì)的,雖然OS本身的可靠性很高,但是,OS為了滿足各種用戶不同的應(yīng)用需求,系統(tǒng)結(jié)構(gòu)復(fù)雜,特別是在以下這些方面內(nèi)存管理和任務(wù)調(diào)度,以及對(duì)多CPU的支持。當(dāng)用戶使用時(shí),系統(tǒng)的時(shí)間和空間開(kāi)銷(xiāo)都很大,從而影響了系統(tǒng)性能。由于OS本身的復(fù)雜性和提供的接口的復(fù)雜性,都會(huì)影響整個(gè)系統(tǒng)的可靠性;同時(shí),操作系統(tǒng)復(fù)雜的接口也會(huì)影響系統(tǒng)的開(kāi)發(fā)效率。作為包轉(zhuǎn)發(fā)這樣的特殊應(yīng)用的系統(tǒng)支撐,需滿足性能、可靠性、可調(diào)諧性等需求,因此,通用的操作系統(tǒng)并不適合于BCM1250的包轉(zhuǎn)發(fā)功能。
發(fā)明內(nèi)容
本發(fā)明克服上述BCM1250的系統(tǒng)支撐的不足,提供一種針對(duì)包轉(zhuǎn)發(fā)引擎的微內(nèi)核,該微內(nèi)核在滿足功能開(kāi)發(fā)的需求同時(shí),可保持系統(tǒng)的簡(jiǎn)潔和高效。
本發(fā)明的技術(shù)內(nèi)容一種基于MIPS64的雙CPU微內(nèi)核,對(duì)BCM1250三種地址空間進(jìn)行映射,對(duì)虛擬地址空間進(jìn)行管理,支持1GB主存,內(nèi)存管理針對(duì)包轉(zhuǎn)發(fā)應(yīng)用,將虛擬地址空間劃分為代碼段、數(shù)據(jù)段、??臻g、堆空間和包空間,并且在雙CPU之間共享這些內(nèi)存空間。
任務(wù)管理將兩個(gè)CPU分別對(duì)應(yīng)一個(gè)任務(wù),每個(gè)任務(wù)包括多個(gè)線程。
堆空間包括K-heap和U-heap,兩個(gè)CPU共享U-heap空間控制權(quán),U-heap空間采用slab堆管理器和靜態(tài)頁(yè)表管理,CPU0獨(dú)自擁有K-heap空間控制權(quán),K-heap和U-heap支持cache-line大小對(duì)齊。
限制數(shù)據(jù)段不超過(guò)64KB。
定義全局?jǐn)?shù)組和結(jié)構(gòu)型全局變量時(shí),必須在K-Heap空間中分配,其它全局變量存放在數(shù)據(jù)段空間中。
雙CPU運(yùn)行在各自的??臻g上,每一個(gè)任務(wù)的所有線程共用一個(gè)棧空間。
任務(wù)間通信機(jī)制包括共享內(nèi)存和消息隊(duì)列,任務(wù)間提供同步鎖、互斥鎖和讀寫(xiě)鎖。
線程間通信機(jī)制包括共享內(nèi)存和消息隊(duì)列,基于時(shí)間片線程調(diào)度實(shí)行主動(dòng)退出和固定點(diǎn)切換。
對(duì)于定時(shí)發(fā)生的事件,提供一定時(shí)器,定時(shí)器的時(shí)間粒度為1ms。
本發(fā)明的技術(shù)效果本發(fā)明微內(nèi)核的系統(tǒng)最關(guān)鍵部件內(nèi)存管理和任務(wù)調(diào)度完全是為了滿足包轉(zhuǎn)發(fā)應(yīng)用而設(shè)計(jì),因此,系統(tǒng)簡(jiǎn)潔而高效。以簡(jiǎn)潔的體系結(jié)構(gòu),代碼的完全可見(jiàn)性,使用戶可以全面高效地分析系統(tǒng)的各個(gè)部件,從而提供了極高的可調(diào)諧性。在使用微內(nèi)核進(jìn)行轉(zhuǎn)發(fā)功能的開(kāi)發(fā)過(guò)程中,相對(duì)于OS,微內(nèi)核體現(xiàn)了很大的優(yōu)勢(shì)。首先,開(kāi)發(fā)周期短。由于微內(nèi)核接口簡(jiǎn)單,任務(wù)調(diào)度簡(jiǎn)單,從而用戶可以更快更好地應(yīng)用微內(nèi)核進(jìn)行功能開(kāi)發(fā);其二,系統(tǒng)穩(wěn)定性高。由于系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,使系統(tǒng)穩(wěn)定性的獲得更加容易;其三,在性能上,對(duì)于相同的轉(zhuǎn)發(fā)功能,由于微內(nèi)核更少的系統(tǒng)開(kāi)銷(xiāo),所以獲得了更高的轉(zhuǎn)發(fā)性能。如下表所示,采用相同的轉(zhuǎn)發(fā)代碼,在不同的轉(zhuǎn)發(fā)平臺(tái)上的實(shí)際應(yīng)用的測(cè)試結(jié)果
(ppspackets per second(每秒處理包數(shù)))
圖1是本發(fā)明BCM1250轉(zhuǎn)發(fā)功能分布示意圖;圖2是本發(fā)明BCM1250軟件結(jié)構(gòu)示意圖;圖3是本發(fā)明微內(nèi)核系統(tǒng)結(jié)構(gòu)的示意圖;圖4是本發(fā)明虛擬地址空間的示意圖;圖5是本發(fā)明BCM1250系統(tǒng)運(yùn)行結(jié)構(gòu)示意圖;圖6是本發(fā)明微內(nèi)核線程調(diào)度的流程圖。
具體實(shí)施例方式
參考圖3,微內(nèi)核包括初試化、內(nèi)存管理、中斷管理、任務(wù)管理、設(shè)備管理、文件系統(tǒng)和調(diào)試模塊。
微內(nèi)核的初始化包括系統(tǒng)引導(dǎo),內(nèi)存初始化,雙CPU初始化,中斷初始化,設(shè)備管理初始化和任務(wù)初始化。
微內(nèi)核的內(nèi)存管理BCM1250的CPU(SB1)是一個(gè)MIPS64的CPU,支持64位尋址。在BCM1250中需要對(duì)地址進(jìn)行三級(jí)映射虛擬地址空間->物理地址空間->主存地址空間。在系統(tǒng)中,支持1GB主存,微內(nèi)核對(duì)BCM1250三種地址空間映射如下表所示
微內(nèi)核的用戶使用的地址空間是虛擬地址空間。如上表所示,映射方式的結(jié)果虛擬地址空間并非連續(xù)的,但是,這種映射方式,避開(kāi)了MIPS內(nèi)存操作的TLB缺頁(yè)中斷處理,從而提高了系統(tǒng)的效率。這種不連續(xù)的虛擬地址空間也不會(huì)對(duì)虛擬地址空間進(jìn)一步管理帶來(lái)不便。
微內(nèi)核對(duì)虛擬地址空間進(jìn)行管理,虛擬地址空間劃分為代碼段、數(shù)據(jù)段、??臻g、堆空間和包空間,并且在雙CPU之間共享這些內(nèi)存空間。如圖4所示,代碼段,數(shù)據(jù)段,K-heap堆空間和??臻g占256MB空間(地址范圍0x8000 0000~0x9000 0000);U-heap堆空間為512MB(地址范圍0xa800 0000 8000 0000~0xa800 0000 a000 0000);包空間為256MB(地址范圍0xa800 0000 c000 0000~0xa800 0000 d000 0000)。在分析MIPS64內(nèi)存映射方式,應(yīng)用的需求的基礎(chǔ)上,設(shè)計(jì)了平面式內(nèi)存管理。即,任何一個(gè)任務(wù)或線程對(duì)1GB的虛擬地址空間都是可見(jiàn)的,適合BCM1250硬件的SMP(對(duì)稱多處理器系統(tǒng))架構(gòu)。
MIPS體系結(jié)構(gòu)中,L2 cache對(duì)性能的影響非常大,在BCM1250中,當(dāng)數(shù)據(jù)從內(nèi)存中獲得時(shí),需要100個(gè)以上的CPU時(shí)鐘周期的時(shí)延;當(dāng)數(shù)據(jù)從L2cache中獲得,只需20個(gè)CPU時(shí)鐘周期的時(shí)延。因此,在整個(gè)系統(tǒng)設(shè)計(jì)中,特別是內(nèi)存管理模塊充分考慮高效利用L2 cache。利用MIPS體系中的pipeline,對(duì)關(guān)鍵數(shù)據(jù)通過(guò)預(yù)取指令放入L2 cache中,從而提高系統(tǒng)性能。在整個(gè)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)上,以一個(gè)cache line的大小作為設(shè)計(jì)的基礎(chǔ),在一個(gè)cache line中存放更多有意義的數(shù)據(jù)。對(duì)于全局靜態(tài)變量,將采用從堆空間中分配,可以更好地控制變量起始地址的字節(jié)對(duì)齊(一個(gè)cache line的大小)。
代碼段
BCM1250軟件所有的代碼,包括微內(nèi)核和轉(zhuǎn)發(fā)模塊的代碼,都存放在代碼段中。雙CPU共享代碼段空間。對(duì)于可能被多task調(diào)用的function應(yīng)該是可再入的。對(duì)于可再入的function有兩種實(shí)現(xiàn)方式(1)利用who am I函數(shù)區(qū)分不同的CPU,不同的CPU使用不同的全局變量;(2)利用SPIN LOCK對(duì)全局變量加鎖以實(shí)現(xiàn)互斥。
數(shù)據(jù)段數(shù)據(jù)段存放系統(tǒng)的全局變量。微內(nèi)核限制系統(tǒng)的數(shù)據(jù)段不能超過(guò)64KB。雙CPU共享數(shù)據(jù)段空間。用戶定義的全局變量若是被多個(gè)CPU訪問(wèn),必須加以訪問(wèn)保護(hù)(互斥)。在系統(tǒng)中,為了限制系統(tǒng)的數(shù)據(jù)段不能超過(guò)64KB,微內(nèi)核不允許用戶定義全局?jǐn)?shù)組和結(jié)構(gòu)型全局變量。這樣一來(lái),微內(nèi)核可以利用MIPS體系對(duì)不超過(guò)64KB的數(shù)據(jù)段提供更高效的尋址方式,從而獲得更高的效率。同時(shí),可以保證整個(gè)系統(tǒng)最終生成的可執(zhí)行文件很小。當(dāng)用戶必須全局?jǐn)?shù)組和結(jié)構(gòu)型全局變量時(shí),必須在K-Heap空間中分配。由于K-heap空間的分配對(duì)L2cache的敏感性,有助于提高系統(tǒng)的性能。
??臻g系統(tǒng)中的局部變量和函數(shù)的參數(shù)都存放在棧中。雙CPU運(yùn)行在各自的??臻g上,因此每一個(gè)task擁有自己的??臻g。每一個(gè)task可以包括多個(gè)線程(thread)。一個(gè)task的所有thread共用一個(gè)棧空間,這樣避免了因thread調(diào)度切換棧空間的開(kāi)銷(xiāo)。
堆空間堆空間的管理是影響系統(tǒng)性能最重要的因素。堆空間包括K-heap和U-heap。K-heap空間是為了轉(zhuǎn)發(fā)模塊定義大塊的靜態(tài)數(shù)據(jù)而設(shè)計(jì)的。U-heap空間是為了轉(zhuǎn)發(fā)模塊在運(yùn)行時(shí)動(dòng)態(tài)申請(qǐng)和釋放的空間。微內(nèi)核分別采用兩種堆管理器簡(jiǎn)單堆管理器管理K-heap空間和SLAB堆管理器管理U-heap空間。
簡(jiǎn)單堆管理器是為系統(tǒng)提供靜態(tài)數(shù)據(jù)空間而設(shè)計(jì)的。簡(jiǎn)單堆管理器提供字節(jié)對(duì)齊功能,從而使在設(shè)計(jì)轉(zhuǎn)發(fā)模塊時(shí),用戶可以更好設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),充分利用L2cache。同時(shí),由于這部分空間是系統(tǒng)運(yùn)行后分配的,從而保證了系統(tǒng)可執(zhí)行文件足夠的小。
SLAB堆管理器是為了系統(tǒng)動(dòng)態(tài)申請(qǐng)和釋放空間。通常SLAB堆管理器支持每次申請(qǐng)空間大小在32B~128KB范圍內(nèi)。在微內(nèi)核系統(tǒng)中,提供了32字節(jié)到32M字節(jié)大小的空間分配。通常的SLAB堆管理器采用動(dòng)態(tài)頁(yè)表管理,動(dòng)態(tài)頁(yè)表管理的空間和時(shí)間開(kāi)銷(xiāo)都很大。在BCM1250系統(tǒng)中,由于包轉(zhuǎn)發(fā)應(yīng)用的特點(diǎn),可預(yù)測(cè)出轉(zhuǎn)發(fā)模塊對(duì)U-heap空間的分配需求,因此可以采用靜態(tài)頁(yè)表管理,從而提高了空間分配和釋放的效率。
對(duì)于雙CPU,動(dòng)態(tài)空間的控制(空間的申請(qǐng)和釋放)可以有兩種方式共享堆空間和私有堆空間。若采用共享堆空間,兩個(gè)CPU都可以申請(qǐng)和釋放這個(gè)堆空間。因此,堆管理器的代碼必須是可再入的。若采用私有堆空間,則擁有這個(gè)堆空間的CPU才可以申請(qǐng)和釋放空間,而另一個(gè)CPU不能申請(qǐng)和釋放空間。因此,堆管理器的代碼不必是可再入的。兩個(gè)CPU共享U-heap空間,CPU0獨(dú)自擁有K-heap空間。應(yīng)當(dāng)注意的是,無(wú)論是共享堆空間或私有堆空間,兩個(gè)CPU都是可見(jiàn)的,即可以對(duì)分配的空間進(jìn)行讀寫(xiě)。共享和私有是針對(duì)堆空間的分配和釋放的權(quán)限。
K-heap和U-heap都支持一個(gè)緩存行(cache line)大小的字節(jié)對(duì)齊。從而充分利用L2 cache。
包空間除了這四個(gè)空間以外,微內(nèi)核還單獨(dú)地劃分出一塊空間包空間。包空間是為BCM1250處理的包而分配的空間。當(dāng)系統(tǒng)收到一個(gè)包時(shí),必須為這個(gè)包分配存儲(chǔ)空間;當(dāng)包發(fā)送后,這個(gè)包空間需要釋放。采用最高效的動(dòng)態(tài)申請(qǐng)和釋放空間的方法來(lái)管理這塊空間。
包空間采用最簡(jiǎn)單的free-list來(lái)進(jìn)行管理。所有的空間被連接成一個(gè)單鏈,鏈上的每一個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)包,在鏈頭申請(qǐng),在鏈尾釋放。CPU0負(fù)責(zé)申請(qǐng),CPU1負(fù)責(zé)釋放。讓鏈上的節(jié)點(diǎn)個(gè)數(shù)始終大于系統(tǒng)所可能容納的最大包數(shù),因此可以避免由于多CPU而造成的加鎖的額外開(kāi)銷(xiāo)。同時(shí)充分利用MIPS系統(tǒng)的L2 cache的特點(diǎn),將包頭的一部分通過(guò)預(yù)取指令存放在L2 cache中。
微內(nèi)核的中斷管理MIPS64規(guī)定在固定地址存放異?;蛑袛嘞蛄浚琈IPS64所有的中斷處理都是在這一個(gè)入口,實(shí)行中斷分派。
對(duì)于雙CPU,對(duì)異常和中斷進(jìn)行如下管理異常(Exception)TLB exception是每個(gè)CPU獨(dú)立的,相互不會(huì)干擾。其它exception目前都會(huì)造成CPU reset。CPU0 reset將使NP reset;CPU1..N reset是否使NPreset,由dead CPU的個(gè)數(shù)決定。
中斷(Interrupt)BCM1250的每一個(gè)CPU都有自己的Interrupt Mapper。大多數(shù)中斷源是將中斷廣播到每一個(gè)Interrupt Mapper。只有兩種中斷是單播到指定的CPU。這兩種中斷是來(lái)自HyperTransport的中斷和per-CPU mailbox interrupt。
對(duì)于廣播的中斷,對(duì)于一些CPU可以屏蔽該中斷。若不同的CPU都執(zhí)行中斷處理程序,則處理必須是可重入的。
外部時(shí)鐘中斷是微內(nèi)核調(diào)度的基礎(chǔ)。時(shí)鐘中斷的時(shí)間間隔是100微秒,在這個(gè)時(shí)間間隔中,系統(tǒng)可以處理大約200個(gè)包。
微內(nèi)核的任務(wù)管理如圖5所示,將BCM1250的兩個(gè)CPU對(duì)應(yīng)兩個(gè)任務(wù)(task)。每一個(gè)task又包括多個(gè)線程(thread)。因此本系統(tǒng)是一個(gè)雙任務(wù),多線程的系統(tǒng)。包轉(zhuǎn)發(fā)應(yīng)用的特點(diǎn)是系統(tǒng)的任務(wù)數(shù)固定,并且任務(wù)間關(guān)系并不復(fù)雜,系統(tǒng)帶寬比實(shí)時(shí)響應(yīng)更加重要。因此,盡量減少調(diào)度帶來(lái)的時(shí)間開(kāi)銷(xiāo)。
雙任務(wù)微內(nèi)核支持基于雙CPU的雙任務(wù)。CPU0對(duì)應(yīng)Task0,CPU1對(duì)應(yīng)Task1。任務(wù)間共享代碼段空間,數(shù)據(jù)段空間,堆空間和包空間。每個(gè)任務(wù)獨(dú)占自己的棧空間。對(duì)于K-heap空間,task0可以申請(qǐng)和釋放,讀和寫(xiě);task1只能讀和寫(xiě)。對(duì)于U-heap空間,task0、task1均可以申請(qǐng)和釋放,讀和寫(xiě)。任務(wù)間通信可以通過(guò)共享內(nèi)存和消息隊(duì)列實(shí)現(xiàn)。
為實(shí)現(xiàn)任務(wù)間同步與互斥,提供了同步鎖,互斥鎖和讀寫(xiě)鎖。這些鎖都是SPIN LOCK(自旋鎖)。SPIN LOCK的實(shí)現(xiàn)是建立在MIPS64的LLD-SCD指令對(duì)的基礎(chǔ)上。任務(wù)間的同步可以通過(guò)同步鎖實(shí)現(xiàn)。任務(wù)間的互斥可以通過(guò)互斥鎖或讀寫(xiě)鎖實(shí)現(xiàn)。當(dāng)多個(gè)任務(wù)間對(duì)臨界區(qū)都會(huì)有寫(xiě)操作時(shí),使用互斥鎖。當(dāng)對(duì)臨界區(qū),一個(gè)task讀,另一個(gè)task寫(xiě)時(shí),可以使用讀寫(xiě)鎖。比如在對(duì)路由表的管理時(shí),轉(zhuǎn)發(fā)流程模塊對(duì)路由表只是讀操作,由CPU1完成;轉(zhuǎn)發(fā)控制模塊對(duì)路由表是讀/寫(xiě)操作,由CPU0完成。此時(shí),可以使用讀寫(xiě)鎖實(shí)現(xiàn)這樣互斥CPU0讀和CPU1讀不沖突,CPU0寫(xiě)和CPU1讀互斥。
包轉(zhuǎn)發(fā)功能分布在不同的CPU上。ACL、接口管理在CPU0上實(shí)現(xiàn),Ipv4轉(zhuǎn)發(fā)、MPLS轉(zhuǎn)發(fā)、L2VPN、L3VPN、組播、接入控制由CPU1完成,NAT和QOS由兩個(gè)CPU各完成一部分。轉(zhuǎn)發(fā)控制模塊由CPU0來(lái)完成。微內(nèi)核的各個(gè)模塊也分布在不同的CPU上。
微內(nèi)核為系統(tǒng)提供消息隊(duì)列。在CPU0和CPU1之間,系統(tǒng)建立了消息隊(duì)列(MQ)。轉(zhuǎn)發(fā)模塊可以使用消息隊(duì)列將包從CPU0傳送給CPU1。消息隊(duì)列中實(shí)際上傳送的是包的標(biāo)識(shí),從而實(shí)現(xiàn)了CPU之間包傳送的零拷貝。一個(gè)典型的應(yīng)用是CPU0從外部接口接收到一個(gè)包(包的空間由CPU0分配),CPU0對(duì)包進(jìn)行ACL處理,CPU0通過(guò)消息隊(duì)列將包傳送給CPU1,CPU1進(jìn)行IPv4路由,CPU1將包從相應(yīng)的接口發(fā)送出去,CPU1將包所占用的空間回收。
多線程在微內(nèi)核中,每一個(gè)任務(wù)可以包括多個(gè)線程。一個(gè)任務(wù)的所有線程可以共享該任務(wù)的所有空間,包括代碼段空間,數(shù)據(jù)段空間,堆空間,棧空間和包空間。線程間通信方式共享內(nèi)存和消息隊(duì)列。
微內(nèi)核的線程調(diào)度如圖6所示,每一個(gè)線程可以有三種狀態(tài)pending、ready、running。在任何時(shí)刻,線程只能處于一種狀態(tài)。Running狀態(tài)表示線程占有CPU,正在運(yùn)行。ready狀態(tài)表示線程沒(méi)有占有CPU,但有任務(wù)需要完成,準(zhǔn)備就緒。pengding狀態(tài)表示線程沒(méi)有占有CPU,也沒(méi)有任務(wù)準(zhǔn)備運(yùn)行。多線程的調(diào)度基于時(shí)間片,當(dāng)一個(gè)running線程時(shí)間片用完時(shí),就切換到pending狀態(tài)。為了避免同一任務(wù)內(nèi)的多線程間切換的系統(tǒng)開(kāi)銷(xiāo),微內(nèi)核的線程調(diào)度設(shè)計(jì)了主動(dòng)退出和固定點(diǎn)切換。即,當(dāng)一個(gè)running線程時(shí)間片用完時(shí),必須將正在做的工作完成,即到達(dá)一個(gè)固定點(diǎn)時(shí),才能切換到pending狀態(tài)?;蛘?,即使當(dāng)前處于running線程的時(shí)間片未用完,線程也可以根據(jù)自己的情況選擇退出,進(jìn)入pending狀態(tài)。
由于微內(nèi)核的線程調(diào)度具有主動(dòng)退出和固定點(diǎn)切換的特點(diǎn)。因此,線程間的切換不需要保存現(xiàn)場(chǎng),也避免了線程間同步與互斥。從而,極大地提高了系統(tǒng)的性能。
對(duì)于定時(shí)發(fā)生的事件,微內(nèi)核提供定時(shí)器(timer)。比如當(dāng)用戶需要每1ms遍歷某一鏈表,需要在timer中注冊(cè)遍歷某一鏈表的function,系統(tǒng)每隔1ms調(diào)用一次該function。Timer是一個(gè)特殊的線程。
微內(nèi)核設(shè)備管理為了提高效率,微內(nèi)核實(shí)現(xiàn)簡(jiǎn)單的設(shè)備管理。為了簡(jiǎn)化系統(tǒng)的管理,減小系統(tǒng)開(kāi)銷(xiāo),設(shè)備管理將完全由CPU0負(fù)責(zé)。CPU1在運(yùn)行時(shí),可能會(huì)使用如下設(shè)備。
CPU1會(huì)使用DMA的channel進(jìn)行收發(fā)包。目前的實(shí)現(xiàn)是CPU0和CPU1使用不同的channel。隨著系統(tǒng)的結(jié)構(gòu)變化或需求變化,channel與CPU的對(duì)應(yīng)關(guān)系會(huì)發(fā)生變化。
CPU1會(huì)使用串口輸出。這時(shí),CPU0與CPU1出現(xiàn)資源競(jìng)爭(zhēng),可通過(guò)互斥鎖解決。
微內(nèi)核文件系統(tǒng)微內(nèi)核實(shí)現(xiàn)基于CF卡的文件系統(tǒng)。CPU0負(fù)責(zé)文件系統(tǒng)的管理。文件系統(tǒng)中可以存放系統(tǒng)的異常信息或日志信息。
微內(nèi)核調(diào)試模塊支持以下調(diào)試手段串口輸出,異常打印信息,Syslog和JTAG調(diào)試。從而為系統(tǒng)的軟件的高效開(kāi)發(fā)提供了可能。
權(quán)利要求
1.一種基于MIPS64的雙CPU微內(nèi)核,對(duì)BCM1250三種地址空間進(jìn)行映射,對(duì)虛擬地址空間進(jìn)行管理,其特征在于支持1GB主存,內(nèi)存管理針對(duì)包轉(zhuǎn)發(fā)應(yīng)用,將虛擬地址空間劃分為代碼段、數(shù)據(jù)段、??臻g、堆空間和包空間,并且在雙CPU之間共享這些內(nèi)存空間。
2.如權(quán)利要求1所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于任務(wù)管理將兩個(gè)CPU分別對(duì)應(yīng)一個(gè)任務(wù),每個(gè)任務(wù)包括多個(gè)線程。
3.如權(quán)利要求1或2所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于堆空間包括K-heap和U-heap,兩個(gè)CPU共享對(duì)U-heap空間的控制權(quán),U-heap空間采用slab堆管理器和靜態(tài)頁(yè)表管理,CPU0獨(dú)自擁有K-heap空間的控制權(quán),K-heap和U-heap支持cache-line大小對(duì)齊。
4.如權(quán)利要求1所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于限制數(shù)據(jù)段不超過(guò)64KB。
5.如權(quán)利要求1所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于定義全局?jǐn)?shù)組和結(jié)構(gòu)型全局變量時(shí),必須在K-Heap空間中分配,其它全局變量存放在數(shù)據(jù)段空間中。
6.如權(quán)利要求2所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于雙CPU運(yùn)行在各自的??臻g上,每一個(gè)任務(wù)的所有線程共用一個(gè)??臻g。
7.如權(quán)利要求2所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于任務(wù)間通信機(jī)制包括共享內(nèi)存和消息隊(duì)列,任務(wù)間提供同步鎖、互斥鎖和讀寫(xiě)鎖。
8.如權(quán)利要求2所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于線程間通信機(jī)制包括共享內(nèi)存和消息隊(duì)列,基于時(shí)間片線程調(diào)度實(shí)行主動(dòng)退出和固定點(diǎn)切換。
9.如權(quán)利要求1所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于對(duì)于定時(shí)發(fā)生的事件,提供一定時(shí)器,定時(shí)器的時(shí)間粒度為1ms。
10.如權(quán)利要求1所述的基于MIPS64的雙CPU微內(nèi)核,其特征在于包括(1)初試化;(2)內(nèi)存管理;(3)中斷管理;(4)任務(wù)管理;(5)設(shè)備管理;(6)文件系統(tǒng);(7)調(diào)試模塊。
全文摘要
本發(fā)明提供了一種基于MIPS64的雙CPU微內(nèi)核,屬于計(jì)算機(jī)網(wǎng)絡(luò)通信領(lǐng)域。該微內(nèi)核包括初試化、內(nèi)存管理、中斷管理、任務(wù)管理、設(shè)備管理、文件系統(tǒng)和調(diào)試模塊,對(duì)BCM1250三種地址空間進(jìn)行映射,對(duì)虛擬地址空間進(jìn)行管理,支持1GB主存,內(nèi)存管理和任務(wù)管理針對(duì)包轉(zhuǎn)發(fā)應(yīng)用,將虛擬地址空間劃分為代碼段、數(shù)據(jù)段、??臻g、堆空間和包空間,并且在CPU之間共享這些內(nèi)存空間。系統(tǒng)簡(jiǎn)潔而高效,以簡(jiǎn)潔的體系結(jié)構(gòu),代碼的完全可見(jiàn)性,使用戶可以全面高效地分析系統(tǒng)的各個(gè)部件,從而提供了極高的可調(diào)諧性。在使用微內(nèi)核進(jìn)行轉(zhuǎn)發(fā)功能的開(kāi)發(fā)過(guò)程中,相對(duì)于OS,微內(nèi)核體現(xiàn)了系統(tǒng)性能高等特點(diǎn)。
文檔編號(hào)G06F15/163GK1545041SQ20031011352
公開(kāi)日2004年11月10日 申請(qǐng)日期2003年11月14日 優(yōu)先權(quán)日2003年11月14日
發(fā)明者黃明飛 申請(qǐng)人:港灣網(wǎng)絡(luò)有限公司