linux虚拟中断virq,一种微内核操作系统的分区多核方法与流程
本發(fā)明涉及一種計(jì)算機(jī)領(lǐng)域,特別涉及一種微內(nèi)核操作系統(tǒng)的分區(qū)多核方法。
背景技術(shù):
在宏內(nèi)核操作系統(tǒng)(如Linux,Windows)中,網(wǎng)絡(luò)、文件系統(tǒng)、設(shè)備驅(qū)動(dòng)等大量系統(tǒng)服務(wù)都在操作系統(tǒng)內(nèi)核中,微內(nèi)核操作系統(tǒng)與宏內(nèi)核操作系統(tǒng)相反,它的內(nèi)核只保留最基本的操作系統(tǒng)功能,其它服務(wù)均以獨(dú)立模塊存在,模塊可以運(yùn)行在單獨(dú)的進(jìn)程中,通過(guò)進(jìn)程間通信(以下簡(jiǎn)稱IPC)的方式向其它模塊或應(yīng)用程序提供服務(wù);L4是一種微內(nèi)核架構(gòu),它的內(nèi)核有三種基本抽象對(duì)象:地址空間,線程,IPC。
基于L4微內(nèi)核架構(gòu)的操作系統(tǒng)中,應(yīng)用程序運(yùn)行在微內(nèi)核線程上,微內(nèi)核提供了兩種線程,一種是普通線程,另一種叫vCPU線程,vCPU線程封裝了線程運(yùn)行時(shí)相關(guān)的CPU寄存器、堆棧等信息。在半虛擬化技術(shù)中,將常規(guī)操作系統(tǒng)進(jìn)行修改后運(yùn)行在微內(nèi)核之上,修改后的操作系統(tǒng)稱為GuestOS,我們將一個(gè)GuestOS稱為一個(gè)分區(qū)。GuestOS的線程有兩種運(yùn)行模式:
一種是直接運(yùn)行在微內(nèi)核普通線程上,如L4Linux(如圖1所示);L4Linux的內(nèi)核、應(yīng)用程序都運(yùn)行在L4微內(nèi)核普通線程上,由微內(nèi)核直接進(jìn)行調(diào)度;這種方案中GuestOS的改動(dòng)大,技術(shù)復(fù)雜,而且GuestOS不能進(jìn)行獨(dú)立的調(diào)度控制。
另一種方案是將整個(gè)GuestOS作為一個(gè)線程,運(yùn)行在vCPU線程上(如圖2所示);微內(nèi)核負(fù)責(zé)對(duì)vCPU線程進(jìn)行調(diào)度,GuestOS內(nèi)部包含自己的調(diào)度器,對(duì)GuestOS內(nèi)部的線程進(jìn)行二次調(diào)度。vCPU線程方案,降低了復(fù)雜性,GuestOS可獨(dú)立地進(jìn)行調(diào)度控制,具有良好的隔離性;但是該方案中GuestOS在內(nèi)核中是單線程結(jié)構(gòu),無(wú)法利用多核帶來(lái)的性能優(yōu)勢(shì),對(duì)其應(yīng)用帶來(lái)局限性。
多核多線程處理器的中斷由PIC(Programmable Interrupt Controller)統(tǒng)一控制。PIC允許一個(gè)硬件線程中斷其他的硬件線程,這種方式被稱為核間中斷(Inter-Processor Interrupts,IPI)。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提供一種實(shí)現(xiàn)了使一個(gè)GuestOS分區(qū)運(yùn)行在多個(gè)vCPU線程上的技術(shù),從而使分區(qū)具備多核執(zhí)行的能力的微內(nèi)核操作系統(tǒng)的分區(qū)多核方法。
技術(shù)方案:為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種微內(nèi)核操作系統(tǒng)的分區(qū)多核方法,包括如下步驟:
(1)先進(jìn)行分區(qū)配置,然后對(duì)分區(qū)多vCPU線程進(jìn)行初始化;
(2)在每個(gè)vCPU線程上判斷是否需要進(jìn)入虛擬核間中斷,如果需要進(jìn)入步驟(3),如果不需要?jiǎng)t進(jìn)入步驟(4);
(3)采用虛擬中斷vIRQ技術(shù)實(shí)現(xiàn)虛擬核間中斷vIPI;
其中中斷請(qǐng)求(IRQ)是硬件發(fā)給處理器的一個(gè)信號(hào),它暫時(shí)停止一個(gè)正在運(yùn)行的程序并允許一個(gè)特殊的程序占用CPU運(yùn)行,中斷請(qǐng)求在CPU內(nèi)核態(tài)中處理;虛擬中斷請(qǐng)求(virtual IRQ,本文簡(jiǎn)稱vIRQ)是對(duì)硬件中斷的虛擬化技術(shù),它是將硬件中斷信號(hào)在內(nèi)核中通過(guò)軟件邏輯傳遞給用戶程序,由用戶程序處理。
(4)判斷每個(gè)vCPU線程上的候選任務(wù)是否更新,如果沒(méi)有更新則恢復(fù)當(dāng)前任務(wù)執(zhí)行環(huán)節(jié),如果有更新則切換到新的候選任務(wù)。
進(jìn)一步的,所述對(duì)分區(qū)多vCPU線程進(jìn)行初始化的具體步驟如下:
(1.1)首先微內(nèi)核創(chuàng)建GuestOS進(jìn)程,然后微內(nèi)核創(chuàng)建vCPU0線程;
(1.2)vCPU0執(zhí)行GuestOS的BSP-bootstrap程序;
(1.3)首先BSP-bootstrap初始化vCPU0運(yùn)行環(huán)境,然后加載分區(qū)配置信息,并通過(guò)系統(tǒng)調(diào)用啟動(dòng)其他vCPU,并同時(shí)進(jìn)入步驟(1.4)和步驟(1.6);
(1.4)采用IPC系統(tǒng)調(diào)用由微內(nèi)核創(chuàng)建vCPU1線程,然后vCPU1執(zhí)行GuestOS的AP-bootstrap程序;
(1.5)先初始化vCPU1運(yùn)行環(huán)境,然后執(zhí)行GuestOS AP內(nèi)核程序,初始化內(nèi)核運(yùn)行環(huán)境,最后判斷vCPU1是否有候選任務(wù),如果有則執(zhí)行vCPU1上的候選任務(wù),如果沒(méi)有則執(zhí)行內(nèi)核空閑任務(wù);
(1.6)執(zhí)行GuestOS BSP內(nèi)核程序,初始化內(nèi)核運(yùn)行環(huán)境,并判斷vCPU0是否有候選程序,如果有則執(zhí)行vCPU0上的候選任務(wù),如果沒(méi)有則執(zhí)行內(nèi)核空閑程序。
進(jìn)一步的,所述采用vIRQ技術(shù)實(shí)現(xiàn)虛擬核間中斷的步驟如下:首先源vCPU通過(guò)核間中斷IPI調(diào)用進(jìn)入微內(nèi)核,然后微內(nèi)核向目標(biāo)vCPU發(fā)送虛擬中斷,從而實(shí)現(xiàn)從源vCPU到目標(biāo)vCPU之間的核間中斷。
進(jìn)一步的,所述采用虛擬中斷vIRQ技術(shù)實(shí)現(xiàn)虛擬核間中斷vIPI的具體步驟如下:
(3.1)CPU產(chǎn)生時(shí)鐘中斷,采用虛擬中斷vIRQ技術(shù)暫停vCPU0上當(dāng)前任務(wù);
(3.2)執(zhí)行中斷服務(wù)程序,保存當(dāng)前任務(wù)執(zhí)行環(huán)境,然后執(zhí)行任務(wù)調(diào)度程序;
(3.3)通過(guò)就緒任務(wù)表,并根據(jù)任務(wù)調(diào)度策略更新各vCPU上的候選任務(wù)并判斷vCPU1上的候選任務(wù)是否更新,如果是則發(fā)送vIPI核間中斷請(qǐng)求,執(zhí)行vIPI機(jī)制并將vIPI核間中斷請(qǐng)求發(fā)送至vCPU1上,暫停vCPU1上的當(dāng)前任務(wù);
其中多核多線程處理器的中斷由PIC(Programmable Interrupt Controller)統(tǒng)一控制。PIC允許一個(gè)硬件線程中斷其他的硬件線程,這種方式被稱為核間中斷(Inter-Processor Interrupts,IPI)。
(3.4)執(zhí)行vCPU1上的中斷服務(wù)程序,并保存當(dāng)前任務(wù)執(zhí)行環(huán)境,然后執(zhí)行任務(wù)調(diào)度程序,最后切換到新的候選任務(wù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
在本方法中,GuestOS形成支持多核、可獨(dú)立調(diào)度、資源隔離的分區(qū)系統(tǒng),帶來(lái)高性能、可靠性、靈活性的技術(shù)特點(diǎn);本發(fā)明在微內(nèi)核架構(gòu)中,客戶端操作系統(tǒng)由單一的vCPU線程擴(kuò)展為多個(gè)vCPU線程,從而具備多核處理能力;基于微內(nèi)核虛擬中斷技術(shù)實(shí)現(xiàn)虛擬核間中斷。
本發(fā)明相對(duì)于L4Linux虛擬化方案,本方案不需要對(duì)GuestOS內(nèi)核進(jìn)行大的調(diào)整以適應(yīng)微內(nèi)核線程結(jié)構(gòu),對(duì)內(nèi)核改動(dòng)越少其穩(wěn)定性越好;另外,本方案的GuestOS可以獨(dú)立調(diào)度運(yùn)行,有系統(tǒng)獨(dú)立的線程調(diào)度策略,而L4Linux方案則必需依賴微內(nèi)核線程調(diào)度策略;
本發(fā)明相對(duì)于vCPU單線程方案,本方案擴(kuò)展了GuestOS對(duì)多核的支持,在性能與負(fù)載均衡等方面具有明顯優(yōu)勢(shì),擴(kuò)展了其應(yīng)用范圍。
附圖說(shuō)明
圖1為背景技術(shù)中L4Linux的分區(qū)線程模型圖;
圖2為背景技術(shù)中GuestOS分區(qū)vCPU線程模型圖;
圖3為本發(fā)明的GuestOS分區(qū)多vCPU線程模型圖;
圖4為本發(fā)明的總體流程圖;
圖5為本發(fā)明中對(duì)分區(qū)多vCPU線程進(jìn)行初始化的流程圖;
圖6為微內(nèi)核虛擬中斷模型圖;
圖7為虛擬核間中斷模型圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式,進(jìn)一步闡明本發(fā)明。
如圖1-3展示了微內(nèi)核架構(gòu)的操作系統(tǒng)中GuestOS的三種處理器虛擬化方案。圖1為L(zhǎng)4Linux分區(qū)直接運(yùn)行在微內(nèi)核線程上,k-thread是L4Linux內(nèi)核線程,u-thread是L4Linux用戶線程,L4Linux不具備線程調(diào)度能力。圖2是微內(nèi)核vCPU方案,vCPU是微內(nèi)核線程,對(duì)于GuestOS分區(qū)而言,vCPU是一個(gè)虛擬處理器,它提供了一個(gè)單核的運(yùn)行環(huán)境。圖3是擴(kuò)展的vCPU方案,GuestOS分區(qū)運(yùn)行在多個(gè)vCPU線程上,使GuestOS具備多核執(zhí)行的能力,多核之間通過(guò)vIPI發(fā)送核間中斷。
如圖4是分區(qū)多核運(yùn)行總體流程圖,分區(qū)創(chuàng)建過(guò)程在圖5有詳細(xì)描述;分區(qū)中多個(gè)vCPU創(chuàng)建后,它們各自運(yùn)行當(dāng)前任務(wù);操作系統(tǒng)需要對(duì)各vCPU上執(zhí)行的任務(wù)務(wù)進(jìn)行調(diào)度,以實(shí)現(xiàn)多道任務(wù)并發(fā)執(zhí)行;在物理CPU上,是通過(guò)時(shí)鐘引起中斷,暫停當(dāng)前任務(wù),轉(zhuǎn)向執(zhí)行任務(wù)調(diào)度程序,任務(wù)調(diào)度程序根據(jù)調(diào)度策略從就緒任務(wù)表中挑選出新的任務(wù)進(jìn)行執(zhí)行;多個(gè)CPU之間,通過(guò)硬件支持的核間中斷通知其它CPU執(zhí)行調(diào)度程序;在GuestOS分區(qū)中,時(shí)鐘中斷首先在微內(nèi)核中通過(guò)虛擬中斷vIRQ(圖3-1)傳遞給綁定了時(shí)鐘中斷的vCPU0,然后vCPU0通過(guò)虛擬核間中斷vIPI(圖3-2)通知vCPU1,從而實(shí)現(xiàn)各vCPU任務(wù)調(diào)度。
圖5是多vCPU線程環(huán)境下,分區(qū)GuestOS創(chuàng)建過(guò)程;vCPU0作為BSP核,vCPU1由vCPU0啟動(dòng);GuestOS線程運(yùn)行在微內(nèi)核多線程之上。
圖6是微內(nèi)核虛擬中斷即vIRQ機(jī)制,中斷向量與中斷服務(wù)位于用戶空間,微內(nèi)核將中斷傳遞到用戶空間,由應(yīng)用程序處理;
圖7是vCPU之間虛擬核間中斷即vIPI機(jī)制,一個(gè)vCPU通過(guò)系統(tǒng)調(diào)用向另一個(gè)vCPU發(fā)出中斷請(qǐng)求,在內(nèi)核中通過(guò)vIRQ機(jī)制完成中斷過(guò)程。
具體的,本方法實(shí)現(xiàn)了使一個(gè)GuestOS分區(qū)運(yùn)行在多個(gè)vCPU線程上的技術(shù),從而使分區(qū)具備多核執(zhí)行的能力。該技術(shù)實(shí)現(xiàn)途徑如下:
1)分區(qū)配置
分區(qū)配置描述分區(qū)中有多少個(gè)vCPU,以及各vCPU初始化類型。初始化類型表明vCPU是BSP(bootstrap cpu),還是AP(application cpu),決定了各vCPU初始化的不同順序,1個(gè)分區(qū)中只有1個(gè)BSP,AP可以有多個(gè),由BSP創(chuàng)建。
2)分區(qū)多vCPU線程初始化過(guò)程
微內(nèi)核首先創(chuàng)建分區(qū)進(jìn)程,然后創(chuàng)建第一個(gè)vCPU線程,即vCPU0(BSP);vCPU0執(zhí)行GuestOS的BSP-bootstrap程序。
BSP-bootstrap初始化vCPU0運(yùn)行環(huán)境,加載分區(qū)配置信息,然后根據(jù)配置信息,通過(guò)IPC系統(tǒng)調(diào)用由微內(nèi)核創(chuàng)建其它vCPU(AP)。
其它vCPU線程創(chuàng)建后執(zhí)行GuestOS的AP-bootstrap程序,初始化vCPU運(yùn)行環(huán)境。
當(dāng)BSP,AP都完成初始化后,分別執(zhí)行GuestOS內(nèi)核程序,完成內(nèi)核初始化后,判斷當(dāng)前vCPU上是否有候選任務(wù),如果有候選任務(wù)則執(zhí)行候選任務(wù),如果沒(méi)有候選任務(wù)則執(zhí)行內(nèi)核空閑任務(wù)。至此GuestOS完成初始化過(guò)程,GuestOS在多個(gè)vCPU線程上并發(fā)運(yùn)行。
3)實(shí)現(xiàn)虛擬核間中斷
在物理CPU中,多核之間通過(guò)硬件支持的核間中斷(IPI)進(jìn)行通信,本方法中,需要為vCPU之間實(shí)現(xiàn)虛擬核間中斷。
vCPU中采用類似信號(hào)量機(jī)制實(shí)現(xiàn)了虛擬中斷(vIRQ),微內(nèi)核將中斷傳遞給vCPU線程處理。本方法基于vIRQ技術(shù)來(lái)實(shí)現(xiàn)虛擬核間中斷(vIPI)。發(fā)送虛擬核間中斷時(shí),首先源vCPU通過(guò)IPI系統(tǒng)調(diào)用進(jìn)入微內(nèi)核,然后微內(nèi)核向目標(biāo)vCPU發(fā)送虛擬中斷,從而實(shí)現(xiàn)從源vCPU到目標(biāo)vCPU之間的核間中斷。
總結(jié)
以上是生活随笔為你收集整理的linux虚拟中断virq,一种微内核操作系统的分区多核方法与流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jedis连接mysql_使用Jedis
- 下一篇: putty连接linux上传python