linux虚拟中断virq,一种微内核操作系统的分区多核方法与流程

d576aec0b4bb88fa9483d0116a4e340c.gif

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

背景技术:

在宏内核操作系统(如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之间的核间中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android心得8--Internet

1.从Internet获取数据 利用HttpURLConnection对象,我们可以从网络中获取网页数据. URLurl new URL("http://www.sohu.com"); HttpURLConnectionconn (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5*1000);//设置连接超时 conn.setRequestMet…

LeetCode 487. 最大连续1的个数 II(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。 示例 1: 输入:[1,0,1,1,0] 输出:4 解释:翻转第一个 0 可以得到最长的连续 1。当翻转以后…

SketchUp 7 linux,SketchUp各版本有哪些兼容性更改?

兼容性更改SketchUp 2018随着SketchUp 2018的发布,对OpenGL版本有了更高的要求,另外增加了模型显示效果。SketchUp 2017随着SketchUp 2017的发布,我们已经取消了对32位操作系统,OpenGL 2.0和模型的软件渲染(而不是硬件加速)的支持…

行向量,列向量,行主序矩阵,列主序矩阵

原理: PS: 很不喜欢OGL的列矩阵方式,不过本质上是一样的。 v2 v1 * ma * mb;        (dx) v2 mb(T) * ma(T) * v1     (ogl) 关于这个话题,网上有n多个版本,今天,我也来说说这个话题。(一)…

LeetCode 1429. 第一个唯一数字(map+queue)

文章目录1. 题目2. 解题1. 题目 给定一系列整数,插入一个队列中,找出队列中第一个唯一整数。 实现 FirstUnique 类: FirstUnique(int[] nums) 用数组里的数字初始化队列。int showFirstUnique() 返回队列中的 第一个唯一 整数的值。如果没…

msp430流水灯c语言程序,超详细msp430示例程序汇编.doc

超详细msp430示例程序汇编一、基础_实验【10个】1、入门试验:LED闪烁(1个)2、时钟实验:设置MCLK、ACLK、SMCLK(1个)3、低功耗实验:设置低功耗模式(1个)4、IO端口试验: IO端口寄存器设置(1个)5、定时器:看门狗定时器、T…

LeetCode 1244. 力扣排行榜(map+multiset)

文章目录1. 题目2. 解题1. 题目 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard。 请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数: addScore(playerId, score)…

c语言实现ftp网络应用程序,使用C语言socket实现windows pc与ftp服务器通信---socket实现ftp客户端...

code// Client.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #pragma comment(lib,"WS2_32.lib")using namespace std;#define PORT 21//FTP端口#define IP_ADDR "x.x.x.x"//主机地址int getPortNum(cha…

Readonly 与Const

Readonly 与Const readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。 对于实例字段,在包含字段声明的类的实例构造函数中&#x…

LeetCode 562. 矩阵中最长的连续1线段(DP)

文章目录1. 题目2. 解题1. 题目 给定一个01矩阵 M,找到矩阵中最长的连续1线段。 这条线段可以是水平的、垂直的、对角线的或者反对角线的。 示例: 输入: [[0,1,1,0],[0,1,1,0],[0,0,0,1]] 输出: 3 提示: 给定矩阵中的元素数量不会超过 10,000。来源:力…

生活中c语言排序案例,C语言之数字排序-基于冒泡排序法的一些案例(对未知数量的数字进行排序)...

C语言之数字排序在学习C语言的时候遇到了几个比较基础的排序问题,又结合了之前的处理方法。觉得在这个需要再系统地进行复习一下。当我们在初学C语言的时候,我们都会结合三个数字的排序来理解计算机处理问题的方式:计算机不会像人一样直观地去…

疑问集锦

1.怎样动态的配置程序中的数据库连接参数,已达到系统的打包后的可安装性? 2.Form的数量会不会影响程序的大小? 3.怎样给程序瘦身,以提高程序的效率? 4.怎样在没有安装独立数据库的机器中运行有数据库文件的软件呢&…

LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数。 示例 1: 输入:[1,0,1,0,1] 输出:1 解释&#…

android闹钟测试工具,android开发:AlarmManager闹钟管理器的实例

1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的PendingIntent。通俗点,就是设置一个时间,在指定的时间里,Alarm会帮我们执…

discuz程序的阅读(1)

今天开始阅读discuz2.5的源码,这是发现的一些收获,记录一下。有兴趣的同学可以去试试 CREATE TABLE pre_forum_post ( pid int(10) unsigned NOT NULL COMMENT 帖子id, fid mediumint(8) unsigned NOT NULL default 0 COMMENT 论坛id, tid mediumint(8) …

LeetCode 742. 二叉树最近的叶节点(建立父节点信息+BFS)

文章目录1. 题目2. 解题1. 题目 给定一个 每个结点的值互不相同 的二叉树,和一个目标值 k,找出树中与目标值 k 最近的叶结点。 这里,与叶结点 最近 表示在二叉树中到达该叶节点需要行进的边数与到达其它叶结点相比最少。 而且,当…

SharePoint 大局观(4)——从开发人员角度

内容摘要 SharePoint是微软提供的一个企业级别的协作平台,目前最新的版本是2010,它的功能相当多,而且也相当灵活。为了帮助大家更好地,从相对较高的层面了解SharePoint 2010的体系结构,我这里分七讲来分别介绍。 本节讲…

LeetCode 490. 迷宫(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 由空地和墙组成的迷宫中有一个球。 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。 当球停下时,可以选择下一个方向。 给定球的起始位置,目的地和迷宫,判断球能否在目…

android studio moudel,Android Studio 添加其他目录下的module

Android Studio 添加其他目录下的moduleadmin • 2020 年 11 月 07 日[title]需要操作的原因[/title]在我们写程序的时候,经常会因为重复性的代码而耽误工夫,所以会编写一些常用的工具类和模块进行调用。在网上搜索到的都是同一个工程下如何配置模块&…

Photoshop Blendmodi in GLSL

转载自:http://renderingpipeline.com/2012/06/photoshop-blendmodi-glsl/ I once wrote a texturing tool in which you could paint on a 3D model on multiple layers. These layers were composing the final texture just as you know it from photoshop, comp…