本发明涉及一种计算机领域,特别涉及一种微内核操作系统的分区多核方法。
背景技术:
在宏内核操作系统(如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之间的核间中断。