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