本发明涉及一种计算机领域,特别涉及一种微内核操作系统的分区多核方法。

背景技术:

在宏内核操作系统(如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,一种微内核操作系统的分区多核方法与流程相关推荐

  1. linux判断usb进程命令,一种在Linux系统下审计USB设备历史使用情况的方法与流程...

    本发明涉及计算机审计技术领域,具体涉及一种在Linux系统下审计USB设备历史使用情况的方法. 背景技术: 如今,在linux系统中,对于USB设备的插入拔出事件,系统自身是不带有审计功能的,这使得普 ...

  2. linux升级网卡fw,一种linux环境下覆盖多品牌硬盘的FW升级方法与流程

    本发明属于服务器硬盘升级技术领域,具体涉及一种linux环境下覆盖多品牌硬盘的FW升级方法. 背景技术: 随着浪潮服务器的不断发展和壮大,作为国内最大的服务器供应商,服务器市场已经囊括各个领域,客户对 ...

  3. matlab井深测量,一种井深测量系统及方法与流程

    本申请涉及钻井 技术领域: ,尤其涉及一种井深测量系统及方法. 背景技术: :在钻井施工中过程中,施工人员需要实时了解井深的变换情况,因此,需要在钻井的过程中实时对井深进行测量..目前,井深主要是由现 ...

  4. 一种提升语音识别准确率的方法与流程

    本发明涉及语音识别技术领域,特别涉及一种提升语音识别准确率的方法. 背景技术: 人机交互是通过输入,输出设备,以有效的方式实现人与机器对话的技术.已广泛应用在消费电子,通信,家电,医疗,汽车等各个行业 ...

  5. matlab三维点云去除背景,一种点云处理三维重建方法与流程

    本发明属于三维数字化.逆向工程领域,特别是涉及一种点云处理三维重建方法. 背景技术: ::三维扫描是一种高精度的三维坐标测量方法.线结构激光投射到被测表面,摄像机获取投射图像,提取光条上点的三维形貌. ...

  6. 电池三段式充电 matlab,一种锂离子电池三段式充电方法与流程

    本发明涉及锂离子电池充电技术领域,具体提供一种锂离子电池三段式充电方法. 背景技术: 随着电动汽车和可再生能源发电的快速发展,储能技术越来越受到重视.锂离子电池作为电动汽车的动力源和电力系统的主要储能 ...

  7. html 串行通信接口,一种串行通信接口的级联方法与流程

    本发明属于自动控制 技术领域: ,具体为一种基于RS232串行通信接口的级联方法. 背景技术: :RS-232是美国电子工业协会EIA(ElectronicIndustryAssociation)制定 ...

  8. mysql数据库预处理_一种MySQL数据库中间件预处理方法与流程

    本发明属于通信领域,特别涉及一种MySQL数据库中间件预处理方法. (二) 背景技术: 通常来说,MySQL集群和应用程序之间需要通过一个中间件来实现通信.中间件的作用是,对于应用程序来说,不需要关心 ...

  9. python预测机票价格_一种国内机票价格预测方法与流程

    本发明属于机票查询预测技术领域,具体涉及一种国内机票价格预测方法. 背景技术: 随着生活水平的提高,选择飞机作为旅游出行的交通工具的人数逐年增加.但是,旅客对于机票价格依然十分敏感,且以最优价格购买心 ...

最新文章

  1. 1470篇!CVPR2020结果出炉(附13篇论文链接/开源代码/解读)
  2. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)
  3. java 泛型反射_Java使用反射来获取泛型信息示例
  4. 前沿|《细胞》:绕过眼睛植入幻觉,科学家成功在盲人脑海中呈现指定图像!...
  5. python英语翻译-python制作英语翻译小工具代码实例
  6. 小白学数据分析--回归分析在游戏人气分析的应用探索
  7. Go if _,ok:=range map; ok判断key是否在map中
  8. 【CodeForces - 124D】Squares (旋转坐标系,计算几何,思维)
  9. linux常用指令 查看端口占用情况
  10. antd 选择文件夹_antd 手动上传文件
  11. VALSE学习(十):图像去模糊-image deblurring
  12. C语言入门经典(第5版)
  13. putty怎么更改为中文_Putty怎么样设置显示中文 设置Putty显示中文
  14. 高等数学:多元函数微分学
  15. 数字图像处理-第一章
  16. 第二百九十三,Memcached缓存
  17. linux查看php端口,Linux如何查看端口状态
  18. 四人小组项目(对项目进行的修改与重写)
  19. ARGOX 力象 CP-3140L 条码打印机 B/S 打印
  20. 并查集---找朋友圈个数问题,连通度问题,等的有效算法

热门文章

  1. [转]命令行在IIS添加虚拟目录
  2. 汇编中调用函数(类比c
  3. shell脚本判断文件类型
  4. 【基础知识】Sticky Bit, SUID,SGID
  5. 解决“第一次偶然出现的异常”问题
  6. MsSql正反表达式
  7. mysql中的if [not] exists
  8. ioremap,你应该知道的事
  9. 随想,对嵌入式职场建议
  10. esp32 coredump分析