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,一经查实,立即删除!

相关文章

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

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

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

原理: 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() 返回队列中的 第一个唯一 整数的值。如果没…

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…

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。来源:力…

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

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

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

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

LeetCode 490. 迷宫(BFS/DFS)

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

LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)

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

红米note3android版本,小米-红米note3-LOS-安卓9.0.0-稳定版Stable3.0-来去电归属-农历等-本地化增强适配...

制作者:MOS-Developer基于版本:LineageOS Android最新安卓9.0.0代码适合机型:小米红米note3高配/标配/低配/kenzo注意事项:为了能一直更新和维护,不付费不收费,请把预装的4个软件使用3-5天后再卸载&#xf…

LeetCode 305. 岛屿数量 II(并查集)

文章目录1. 题目2. 解题2.1 超时解2.1 改进计算方法1. 题目 假设你设计一个游戏,用一个 m 行 n 列的 2D 网格来存储你的游戏地图。 起始的时候,每个格子的地形都被默认标记为「水」。 我们可以通过使用 addLand 进行操作,将位置 (row, col)…

LeetCode 265. 粉刷房子 II(DP)

文章目录1. 题目2. 解题1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成…

鸿蒙系统笔记本价格,鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点...

原标题:鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点!每一代P系列产品都基于华为研发和业界合作伙伴的最前沿的能力,实现全新的突破,明…

LeetCode 272. 最接近的二叉搜索树值 II(栈+优先队列)

文章目录1. 题目2. 解题1. 题目 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值。 注意: 给定的目标值 target 是一个浮点数 你可以默认 k 值永远是有效的,即 k ≤ 总结点数 题目保证…

LeetCode 750. 角矩形的数量(DP)

文章目录1. 题目2. 解题1. 题目 给定一个只包含 0 和 1 的网格,找出其中角矩形的数量。 一个「角矩形」是由四个不同的在网格上的 1 形成的轴对称的矩形。 注意只有4角的位置才需要为 1。并且,4 个 1 需要是不同的。 示例 1: 输入&#xf…

LeetCode 267. 回文排列 II(回溯)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s ,返回其通过重新排列组合后所有可能的回文字符串,并去除重复的组合。 如不能形成任何回文排列时,则返回一个空列表。 示例 1: 输入: "aabb" 输出: ["abba"…

html canvas直线进度条,js+HTML5 canvas 实现简单的加载条(进度条)功能示例

本文实例讲述了jsHTML5 canvas 实现简单的加载条(进度条)功能。分享给大家供大家参考,具体如下:www.jb51.net canvas实现加载条动画/** 获取canvas, canvas本身没有画图能力,相当于一个画布,提供绘制图形的地方* document.getElem…

android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...

原标题:教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可安卓用户对于“系统优化”这个词一定不会陌生,因为Android系统越用越卡的毛病难以解决,必须进行优化才能保持流畅。那么如何调教才能让爱机达到最快的运行速度呢&am…

matplotlib 绘制梯度下降求解过程

机器学习过程中经常需要可视化,有助于加强对模型和参数的理解。 下面对梯度下降过程进行动图演示,可以修改不同的学习率,观看效果。 import numpy as np import matplotlib.pyplot as plt from IPython import displayX 2*np.random.rand(…