一种用户态虚拟机虚拟核间任务的调度方法及装置与流程

文档序号:31071655发布日期:2022-08-09 21:09阅读:79来源:国知局
一种用户态虚拟机虚拟核间任务的调度方法及装置与流程

1.本发明涉及操作系统领域,尤其涉及一种用户态虚拟机虚拟核间任务的调度装置。


背景技术:

2.当前用户态虚拟机间的多虚拟核间多任务的调度都是在任务的最高优先级任务发生改变时,通知其他虚拟核选择当前虚拟核可以运行的任务。
3.但是其他虚拟核选择当前虚拟核的运行任务时,有可能最高优先级的任务已经又被其他虚拟核调度了,这样就会导致多虚拟核间任务调度的不确定性和更多的系统开销。


技术实现要素:

4.有鉴于此,本发明实施例提供了一种用户态虚拟机虚拟核间任务的调度方法及装置,其技术方案包括:每个任务锁定在一个虚拟核上或亲和在一个虚拟核集合上;当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头,以及当虚拟核k与第一任务的可运行虚拟核相同,虚拟核k重调度第一任务,反之则通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度。本发明实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
5.第一方面,本发明实施例提供了一种用户态虚拟机虚拟核间任务的调度方法,所述任务锁定在一个虚拟核上或亲和在至少2个虚拟核组成的一个虚拟核集合上,所述方法包括:当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头,以及当虚拟核k与第一任务的可运行虚拟核相同,虚拟核k重调度第一任务,反之则通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度。
6.由上,当第一任务添加到其可运行虚拟核上的就绪链表的链头即第一任务要被重调度时,在当前虚拟核与第一任务的可运行虚拟核不同时,通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度,实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
7.在第一方面的一种可能实施方式中,所述虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核,包括:当第一任务锁定在一个虚拟核上时,把该虚拟核作为第一任务的可运行虚拟核;当第一任务亲和在一个虚拟核集合上时,虚拟核k把虚拟核m作为第一任务的可运行虚拟核,虚拟核m为所述虚拟核集合中当前运行任务优先级最低的虚拟核。
8.由上,当第一任务亲和在一个虚拟核集合上,其可以选择其中运行任务最低的虚
拟核为可运行虚拟核,相对于锁定在一个虚拟核,提高了任务调度的灵活性和实时性。
9.在第一方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度方法还包括:当第一任务锁定到其可运行虚拟核上且当第一任务的优先级不高于第一任务的可运行虚拟核上当前运行任务的优先级时,把第一任务按照优先级插入到该可运行虚拟核的就绪链表中,第一任务的优先级越高,在其相应的就绪链表中位置越靠前。
10.由上,当第一任务锁定在一个虚拟核上,根据第一任务优先级把第一任务插入到该虚拟核的就绪链表中,提高了系统调度根据任务优先级调度的有序性。
11.在第一方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度方法还包括:当第一任务亲和在一个虚拟核集合上且当第一任务的优先级不高于第一任务的可运行虚拟核上当前运行任务的优先级时,把第一任务添加到用户态虚拟机的未分配虚拟核的就绪任务队列中。
12.由上,当第一任务亲和在一个虚拟核集合上且优先级低于其可运行虚拟核的当前任务的优先级时,通过用户态虚拟机的未分配虚拟核的就绪任务队列,不影响系统对高优先级任务运行的实时性,又在其他时刻使第一任务被调度。
13.在第一方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度方法还包括:在用户态虚拟机启动时,在用户态虚拟机的每个虚拟核的就绪链表的链头添加一个空闲任务,并在每个虚拟核上启动相应的空闲任务。在一些实施例中,空闲任务包括接收在就绪态与非就绪态之间转换的任务。
14.由上,通过设置空闲任务,空闲任务包括接收在就绪态与非就绪态之间转换的任务,使各虚拟核可以及时参加实时调度。
15.在第一方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度方法还包括:当虚拟核p接收到第二任务从就绪态转为非就绪态且第二任务不是当前运行任务时,虚拟核p从第二任务的可运行虚拟核的就绪链表上或用户态虚拟机的未分配虚拟核的就绪任务队列上删除第二任务。
16.由上,当非运行任务从就绪态转换为非就绪态时,及时从其可运行虚拟核的就绪链表上或用户态虚拟机的未分配虚拟核的就绪任务队列上删除,以提高系统性能。
17.在第一方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度方法还包括:当虚拟核p接收到第二任务从就绪态转为非就绪态且第二任务是虚拟核q上当前运行任务时,虚拟核p从虚拟核q的就绪链表的链头删除该任务,以及当虚拟核q的就绪链表的当前链头的任务的优先级低于第三任务时,虚拟核p把所述第三任务从用户态虚拟机的未分配虚拟核的就绪任务队列中删除,并插入到虚拟核q的就绪链表的链头,第三任务为用户态虚拟机的未分配虚拟核的就绪任务队列中亲和在包含虚拟核q的虚拟核集合的优先级最高的任务;当虚拟核p与虚拟核q相同时,虚拟核p对虚拟核p就绪链表的链头的任务进行重调度,反之通过服务中断通知虚拟核q对虚拟核q就绪链表的链头的任务进行重调度。
18.由上,当第二任务从就绪态转换为非就绪态时,在用户态虚拟机的未分配虚拟核的就绪任务队列中亲和在包含虚拟核q的虚拟核集合的优先级最高的任务作为调度候选任务,相对于只从第二任务锁定的虚拟核上选择任务,提高了系统调度的灵活性和实时性。
19.第二方面,本发明实施例提供了一种用户态虚拟机虚拟核间任务的调度装置,所述任务与虚拟核的关系包括所述任务锁定在一个虚拟核上或亲或所述任务亲和在至少2个
虚拟核组成的一个虚拟核集合上,所述装置包括:可运行核获得模块,用于当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;就绪链表填充模块,用于当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头;服务中断通知模块,用于当虚拟核k与第一任务的可运行虚拟核不同时,通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度;任务重调度模块,用于第一任务的可运行虚拟核对第一任务进行重调度。
20.由上,当第一任务添加到其可运行虚拟核上的就绪链表的链头即第一任务要被重调度时,在当前虚拟核与第一任务的可运行虚拟核不同时,通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度,实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
21.在第二方面的一种可能实施方式中,可运行核获得模块具体用于当第一任务锁定在一个虚拟核上时,把该虚拟核作为第一任务的可运行虚拟核;当第一任务亲和在一个虚拟核集合上时,虚拟核k把虚拟核m作为第一任务的可运行虚拟核,虚拟核m为所述虚拟核集合中当前运行任务优先级最低的虚拟核。
22.由上,当第一任务亲和在一个虚拟核集合上,其可以选择其中运行任务最低的虚拟核为可运行虚拟核,相对于锁定在一个虚拟核,提高了任务调度的灵活性和实时性。
23.在第二方面的一种可能实施方式中,就绪链表填充模块还用于当第一任务锁定到其可运行虚拟核上且当第一任务的优先级不高于第一任务的可运行虚拟核上当前运行任务的优先级时,把第一任务按照优先级插入到该可运行虚拟核的就绪链表中,第一任务的优先级越高,在其相应的就绪链表中位置越靠前。
24.由上,当第一任务锁定在一个虚拟核上,根据第一任务优先级把第一任务插入到该虚拟核的就绪链表中,提高了系统调度根据任务优先级调度的有序性。
25.在第二方面的一种可能实施方式中,就绪链表填充模块还用于当第一任务亲和在一个虚拟核集合上且当第一任务的优先级不高于第一任务的可运行虚拟核上当前运行任务的优先级时,把第一任务添加到用户态虚拟机的未分配虚拟核的就绪任务队列中。
26.由上,当第一任务亲和在一个虚拟核集合上且优先级低于其可运行虚拟核的当前任务的优先级时,通过用户态虚拟机的未分配虚拟核的就绪任务队列,不影响系统对高优先级任务运行的实时性,又在其他时刻使第一任务被调度。
27.在第二方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度装置还包括:任务初始化模块用于在用户态虚拟机启动时,在用户态虚拟机的每个虚拟核的就绪链表的链头添加一个空闲任务,并在每个虚拟核上启动相应的空闲任务。在一些实施例中,空闲任务包括接收在就绪态与非就绪态之间转换的任务。
28.由上,通过设置空闲任务,空闲任务包括接收在就绪态与非就绪态之间转换的任务,使各虚拟核可以及时参加实时调度。
29.在第二方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度装置还包括:任务删除第一模块用于当虚拟核p接收到第二任务从就绪态转为非就绪态且第二任务不是当前运行任务时,虚拟核p从第二任务的可运行虚拟核的就绪链表上或用户态虚拟机的未分配虚拟核的就绪任务队列上删除第二任务。
30.由上,当非运行任务从就绪态转换为非就绪态时,及时从其可运行虚拟核的就绪链表上或用户态虚拟机的未分配虚拟核的就绪任务队列上删除,以提高系统性能。
31.在第二方面的一种可能实施方式中,一种用户态虚拟机虚拟核间任务的调度装置还包括:任务删除第二模块用于当虚拟核p接收到第二任务从就绪态转为非就绪态且第二任务是虚拟核q上当前运行任务时,虚拟核p从虚拟核q的就绪链表的链头删除该任务;就绪任务转移模块用于当虚拟核q的就绪链表的当前链头的任务的优先级低于第三任务时,虚拟核p把所述第三任务从用户态虚拟机的未分配虚拟核的就绪任务队列中删除,并插入到虚拟核q的就绪链表的链头,第三任务为用户态虚拟机的未分配虚拟核的就绪任务队列中亲和在包含虚拟核q的虚拟核集合的优先级最高的任务;服务中断通知模块还用于当虚拟核p与虚拟核q不同时,通过服务中断通知虚拟核q对虚拟核q就绪链表的链头的任务进行重调度;任务重调度模块还用于虚拟核q对虚拟核q就绪链表的链头的任务进行重调度。
32.由上,当第二任务从就绪态转换为非就绪态时,在用户态虚拟机的未分配虚拟核的就绪任务队列中亲和在包含虚拟核q的虚拟核集合的优先级最高的任务作为调度候选任务,相对于只从第二任务锁定的虚拟核上选择任务,提高了系统调度的灵活性和实时性。
33.第三方面,本发明实施例提供了一种操作系统,执行本发明第一方面任一所述实施方式。
34.第四方面,本发明实施例提供了一种计算设备,包括:总线;通信接口,其与所述总线连接;至少一个处理器,其与所述总线连接;以及至少一个存储器,其与所述总线连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行本发明第一方面任一所述实施方式。
35.第五方面,本发明实施例提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行申请第一方面任一所述实施方式。
附图说明
36.图1为本发明的各实施例应用场景的结构示意图;
37.图2为本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例一的流程示意图;
38.图3为本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例二的流程示意图;
39.图4为本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的流程示意图;
40.图5为本发明的一种用户态虚拟机虚拟核间任务的调度装置实施例一的结构示意图;
41.图6为本发明的一种用户态虚拟机虚拟核间任务的调度装置实施例二的结构示意图;
42.图7为本发明的一种用户态虚拟机虚拟核间任务的调度装置实施例二的就绪到非就绪调度模块的结构示意图;
43.图8为本发明各实施例的一种计算设备的结构示意图。
具体实施方式
44.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
45.在以下的描述中,所涉及的术语“第一\第二\第三等”或模块a、模块b、模块c等,仅用于区别类似的对象,或用于区别不同的实施例,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
46.在以下的描述中,所涉及的表示步骤的标号,如s110、s120
……
等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。
47.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
48.本发明实施例提供了一种用户态虚拟机虚拟核间任务的调度方法及装置,其技术方案包括:每个任务锁定在一个虚拟核上或亲和在一个虚拟核集合上;当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头,以及当虚拟核k与第一任务的可运行虚拟核相同,虚拟核k重调度第一任务,反之则通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度。本发明实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
49.下面首先介绍本发明各实施例的应用场景的结构,本场景为一个包括一种虚拟机系统,其包括用户态和核心态。
50.其中,用户态包括多个用户态虚拟机,每个用户态虚拟机运行多个虚拟核上,通过多虚拟核任务调度单元调度多个任务。
51.示例地,图1示出了用户态虚拟机1、用户态虚拟机2和用户态虚拟机3,以用户态虚拟机1为示例说明每个用户态虚拟机,用户态虚拟机1运行在虚拟核11、虚拟核12和虚拟核13上,通过多虚拟核任务调度单元调度任务101、任务102和任务103。实际系统可以需要配置任意数目的用户态虚拟机,每个用户态虚拟机根据实际需求运行任意数目的虚拟核上,每个用户态虚拟机根据实际需求通过多虚拟核任务调度单元调度任意数目的任务。
52.其中,核心态包括多虚拟机多核调度单元和各物理核,各个物理核通过多虚拟机多核调度单元映射成各用户态虚拟机的虚拟核。
53.其中,用户态虚拟机的任务可以锁定的运行在指定的一个虚拟核上,也可以非锁定的亲和运行到一个虚拟核集合上。当任务是非锁定的亲和运行到一个虚拟核集合上时,即同一时刻最多只能运行在虚拟核集合中的一个虚拟核上,不同时刻可以运行在虚拟核集合中的不同虚拟核上。
54.下面再介绍本发明使用部分全局变量,包括:
55.(1)每个虚拟核的运行任务变量,表示为g_running_tasks[i],i=1,2,

,nvcpus,代表虚拟核i,nvcpus表示一个用户态虚拟机上的虚拟核数。
[0056]
(2)每个虚拟核的私有的就绪任务的就绪链表,表示为g_assignedtasks[i],i=1,2,

,nvcpus,i代表虚拟核i。运行应用代码时,即没有操作g_assignedtasks[i]时,g_running_tasks[i]记录的是g_assignedtasks[i]链头的任务。非锁定的就绪任务变为一个虚拟核i上的运行任务时,则该就绪任务会添加到虚拟核i上就绪链表g_assignedtasks[i]的链头上。
[0057]
每个虚拟核的就绪链表中的任务按照优先级顺序排队,同级的任务按照时间fifo顺序排列,链头任务优先级最高且为该级任务中最先到达的,一个虚拟核的就绪链表的链头任务发生改变时,则会触发新的调度。
[0058]
(3)用户态虚拟机的未分配虚拟核的就绪任务的就绪队列,表示为g_readytorun。
[0059]
(4)中断锁,用于保证核间互斥访问全局资源,表示为g_cpu_irqlock。
[0060]
下面根据图2至图4介绍本发明的各方法实施例。
[0061]
首先根据图2介绍本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例一。
[0062]
一种用户态虚拟机虚拟核间任务的调度方法实施例一在图1的各用户态虚拟机的多虚拟核任务调度单元中运行,其方法包括:每个任务锁定在一个虚拟核上或亲和在一个虚拟核集合上;当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头,以及当虚拟核k与第一任务的可运行虚拟核相同,虚拟核k重调度第一任务,反之则通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度。本发明实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
[0063]
图2示出了本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例一的流程,其包括步骤s110至s170。
[0064]
为了叙述方便,以正在运行任务的虚拟核k接收到第一任务从非就绪态转换为就绪态为例进行说明。
[0065]
s110:虚拟核k获取中断锁。
[0066]
其中,中断锁g_cpu_irqlock用于保证核间互斥访问全局资源。
[0067]
s120:虚拟核k根据第一任务是否在一个虚拟核上获得第一任务的可运行虚拟核r;
[0068]
其中,当第一任务锁定在虚拟核n上时,虚拟核k把虚拟核n作为虚拟核r即第一任务的可运行虚拟核。
[0069]
其中,当第一任务亲和在一个虚拟核集合上时,虚拟核k把虚拟核m作为虚拟核r,虚拟核m为所述虚拟核集合中当前运行任务优先级最低的虚拟核。
[0070]
由上,根据上述流程确定的第一任务的可运行虚拟核r,从而让第一任务被有序调度,不会同时被其他虚拟核调度。
[0071]
s130:虚拟核k根据第一任务的优先级和第一任务是否锁定在虚拟核r,把第一任务插入到虚拟核r的就绪链表的链头或其他位置或用户态虚拟机的未分配虚拟核的就绪任务队列中。
[0072]
其中,当第一任务锁定在虚拟核r上时,如果第一任务的优先级高于虚拟核r当前
运行任务g_running_tasks[r]的优先级,则第一任务被插入到虚拟核r的就绪链表g_assignedtasks[r]的链头,否则把第一任务按照优先级插入到虚拟核r的就绪链表g_assignedtasks[r]的其他位置,第一任务的优先级越高,在就绪链表g_assignedtasks[r]中位置越靠前。
[0073]
其中,当第一任务亲和在一个虚拟核集合上时,如果第一任务的优先级高于虚拟核r上当前运行任务g_running_tasks[r]的优先级时,把第一任务插入到虚拟核r的就绪链表g_assignedtasks[r]的链头,否则把第一任务添加到用户态虚拟机的未分配虚拟核的就绪任务队列g_readytorun中。
[0074]
其中,当第一任务的优先级高于虚拟核r当前运行任务g_running_tasks[r]的优先级、即第一任务插入到虚拟核r的就绪链表g_assignedtasks[r]的链头时,执行步骤s140至s160对第一任进行重调度,其他情况则执行步骤s170,释放中断锁g_cpu_irqlock。等待有其他任务从就绪态转为非就绪态时,根据其第一任务的优先级确定第一任务是否被调度。
[0075]
由上,通过设置每个虚拟核的就绪链表,使每个虚拟核上的就绪任务被有序调度。
[0076]
s140:当第一任务的优先级高于虚拟核r当前运行任务g_running_tasks[r]的优先级时,判断虚拟核r与虚拟核k是否相同。
[0077]
其中,第一任务的优先级高于虚拟核r当前运行任务g_running_tasks[r]的优先级时,第一任务已在步骤s130插入到虚拟核r的就绪链表g_assignedtasks[r]的链头。
[0078]
其中,当虚拟核r与虚拟核k相同时,执行步骤s160,虚拟核r即虚拟核k对第一任务行重调度,反之则执行步骤s150至s160,通知虚拟核r对第一任务进行重调度。
[0079]
s150:虚拟核k通知虚拟核r对第一任务进行重调度。
[0080]
由上,当虚拟核r与虚拟核k不同时,因为第一任务被虚拟核k插入到虚拟核r的就绪链表的链头,由虚拟核k通知虚拟核r对第一任务进行重调度,从而实现虚拟核间任务调度的有序,不会导致虚拟核r对其他任务发生调度。
[0081]
s160:虚拟核r对第一任务进行重调度。
[0082]
其中,当虚拟核r与虚拟核k相同时,虚拟核r对第一任务进行重调度,即虚拟核k对第一任务进行重调度。
[0083]
其中,当虚拟核r与虚拟核k不同时,虚拟核r响应服务中断,在中断退出时对第一任务进行重调度。
[0084]
其中,虚拟核r对第一任务进行重调度的步骤包括:
[0085]
1)保存g_running_tasks[r]的上下文。
[0086]
2)重新记录g_running_tasks[r]为第一任务。
[0087]
3)释放中断锁g_cpu_irqlock。
[0088]
4)恢复第一任务的上下文。
[0089]
s170:释放中断锁。
[0090]
其中,本步骤对第一任务的优先级不高于虚拟核r当前运行任务g_running_tasks[r]的优先级的情况,包括当第一任务锁定在虚拟核r或亲和在包含虚拟核r的一个虚拟核集合上。在该情况下,第一任务不被调度,以后等待有其他任务从就绪态转为非就绪态时,再根据其第一任务的优先级确定第一任务是否被调度,因此直接是否释放中断锁。
[0091]
综上,在一种用户态虚拟机虚拟核间任务的调度方法实施例一中:每个任务锁定在一个虚拟核上或亲和在一个虚拟核集合上;当虚拟核k接收到第一任务从非就绪态转为就绪态时,虚拟核k根据第一任务是否锁定在一个虚拟核上获得第一任务的可运行虚拟核;当第一任务的优先级高于第一任务的可运行虚拟核上当前运行任务的优先级时,虚拟核k把第一任务插入到第一任务的可运行虚拟核的就绪链表的链头,以及当虚拟核k与第一任务的可运行虚拟核相同,虚拟核k重调度第一任务,反之则通过服务中断通知第一任务的可运行虚拟核对第一任务进行重调度。本发明实现了多任务多虚拟核间调度的确定性,提高操作系统的实时性和性能。
[0092]
下面基于图3和图4介绍本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例二。
[0093]
一种用户态虚拟机虚拟核间任务的调度方法实施例二在图1的各用户态虚拟机的多虚拟核任务调度单元中运行,其在一种用户态虚拟机虚拟核间任务的调度方法实施例一的基础上增加了多虚拟核空闲任务初始化和任务从就绪态到非就绪态的调度方法,实现用户态虚拟机的虚拟核间任务调度的全流程,进一步提高操作系统的实时性和性能。
[0094]
图3示出了一种用户态虚拟机虚拟核间任务的调度方法实施例二的流程,包括步骤s210至s240。
[0095]
s210:在用户态虚拟机启动时,在每个虚拟核上启动相应的空闲任务。
[0096]
其中,在用户态虚拟机启动时,定义并初始化nvcpus对应虚拟核个数的空闲任务,空闲任务启动后,其一直在运行,优先级最低。
[0097]
其中,启动空闲任务时,把每个空闲任务依次锁定运行到nvcpus个数的虚拟核上,并且将对应的idle任务添加到每个虚拟核的就绪链表g_assignedtasks[i]的链头和记录到g_running_tasks[i],i为1到nvcpus的数。
[0098]
在一些实施例中,空闲任务包括接收在就绪态与非就绪态之间转换的任务。通过设置空闲任务,空闲任务包括接收在就绪态与非就绪态之间转换的任务,使各虚拟核可以及时参加实时调度
[0099]
s220:各虚拟核在运行本身的任务同时等待接收在就绪态与非就绪态之间发生变换的任务。
[0100]
其中,各虚拟核可能接收从就绪态向非就绪态变换的任务,也有可能接收从非就绪态向就绪态变换的任务。
[0101]
其中,当接收从非就绪态转换为就绪态的任务,则执行步骤s230,当接收到从就绪态转换为就非就绪态的任务,则执行步骤s240。如果一个虚拟核未接收到任务变换时,则停留在本步骤继续接收。
[0102]
为了叙述方便,以虚拟核k接收到第一任务和以虚拟核p接收到第二任务从就绪态转换为非就绪态为例进行介绍。
[0103]
s230:虚拟核k为从非就绪态转换为就绪态的第一任务获得可运行虚拟核r,并当第一任务插入该可运行虚拟核的就绪链表的链头时对第一任务进行重调度或通知虚拟核r对第一任务进行重调度。
[0104]
其中,本步骤的详细方法和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一。
[0105]
s240:虚拟核p从相应的虚拟核的就绪链表或用户态虚拟机的未分配虚拟核的就绪任务队列中删除从就绪态转换为非就绪态的第二任务,并触发新的任务调度。
[0106]
其中,本步骤详细方法和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法。
[0107]
图4示出了一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的流程,包括步骤s2410至s2482。
[0108]
为了叙述方便,以虚拟核p接收到第二任务从就绪态转换为非就绪态为例进行介绍。
[0109]
s2410:虚拟核p获取中断锁。
[0110]
其中,中断锁g_cpu_irqlock用于保证核间互斥访问全局资源。
[0111]
s2420:判断第二任务是不是一个虚拟核的当前运行任务。
[0112]
其中,如果第二任务不是任一个虚拟核的当前运行任务,则运行步骤s2430;如果第二任务是一个虚拟核上的当前运行任务,运行步骤s2440至s2482,为了叙述方便,以第二任务是虚拟核q上的运行任务为例进行说明。
[0113]
s2430:虚拟核p从第二任务的可运行虚拟核的就绪链表中或用户态虚拟机的未分配虚拟核的就绪任务队列删除第二任务,并释放中断锁。
[0114]
其中,如果第二任务是锁定在虚拟核s即第二任务的可运行虚拟核为虚拟核s,虚拟核p将第二任务从虚拟核s就绪链表g_assignedtasks[s]中删除。
[0115]
其中,如果第二任务未锁定在任何虚拟核上,虚拟核p将第二任务从用户态虚拟机的未分配虚拟核的就绪任务队列g_readytorun中删除。
[0116]
s2440:虚拟核p从虚拟核q的就绪链表的链头删除第二任务,获得第三任务和第四任务。
[0117]
其中,第三任务为用户态虚拟机的未分配虚拟核的就绪任务队列g_readytorun中包含虚拟核q的优先级最高的任务,第四任务为虚拟核q的就绪链表g_assignedtasks[q]的当前链头的任务。
[0118]
s2450:判断第四任务的优先级是否低于第三任务。
[0119]
其中,如果第四任务的优先级低于第三任务,执行步骤s2460至步骤s2472,否则执行步骤s2480至步骤s2482。
[0120]
s2460:虚拟核p把第三任务从用户态虚拟机的未分配虚拟核的就绪任务队列中删除,并插入到虚拟核q的就绪链表的链头。
[0121]
其中,第三任务为用户态虚拟机的未分配虚拟核的就绪任务队列g_readytorun中包含虚拟核q的优先级最高的任务,其亲和在包含虚拟核q的虚拟核集合中,把第三任务插入到虚拟核q的就绪链表g_assignedtasks[q的链头,就是要准备对第三任务进行重调度。
[0122]
s2470:判断虚拟核p是否与虚拟核q相同。
[0123]
其中,如果虚拟核p与虚拟核q相同,执行步骤s2472,否则执行步骤s2471。
[0124]
其中,本步骤是判断接收到第二任务从就绪态转换为非就绪态的虚拟核与原运行第二任务的虚拟核是否相同。
[0125]
s2471:虚拟核p通过服务中断通知虚拟核q对第三任务重调度。
[0126]
其中,因为第三任务被虚拟核p插入到虚拟核q的就绪链表g_assignedtasks[q的
链头,虚拟核p通过服务中断通知虚拟核q对第三任务重调度,可以保证第三任务被有序和实时调度。
[0127]
s2472:虚拟核q对第三任务重调度。
[0128]
其中,当虚拟核p与虚拟核q相同时,虚拟核q对第三任务重调度就是虚拟核p对第三任务重调度。
[0129]
其中,当虚拟核p与虚拟核q不同时,虚拟核q响应服务中断,在中断退出时对第三任务重调度。
[0130]
其中,虚拟核q对第三任务进行重调度的步骤包括:
[0131]
1)保存g_running_tasks[q]即第二任务的上下文。
[0132]
2)重新记录g_running_tasks[q]为第三任务。
[0133]
3)释放中断锁g_cpu_irqlock。
[0134]
4)恢复第三任务的上下文。
[0135]
s2480:判断虚拟核p是否与虚拟核q相同。
[0136]
其中,本步骤的本周是判断接收到第二任务从就绪态转换为非就绪态的虚拟核与原运行第二任务的虚拟核是否相同。
[0137]
其中,如果虚拟核p与虚拟核q相同,执行步骤s2482,否则执行步骤s2481。
[0138]
s2481:虚拟核p通过服务中断通知虚拟核q对第四任务重调度。
[0139]
其中,因为第四任务是在虚拟核p删除第二任务时而变到虚拟核q的就绪链表g_assignedtasks[q的链头,虚拟核p通过服务中断通知虚拟核q对第三任务重调度,可以保证第三任务被有序和实时调度。
[0140]
s2482:虚拟核q对第四任务重调度。
[0141]
其中,当虚拟核p与虚拟核q相同时,虚拟核q对第四任务重调度就是虚拟核p对第四任务重调度。
[0142]
其中,当虚拟核p与虚拟核q不同时,虚拟核q响应服务中断,在中断退出时对第四任务重调度。
[0143]
其中,虚拟核q对第四任务进行重调度的步骤包括:
[0144]
1)保存g_running_tasks[q]即第二任务的上下文。
[0145]
2)重新记录g_running_tasks[q]为第四任务。
[0146]
3)释放中断锁g_cpu_irqlock。
[0147]
4)恢复第四任务的上下文。
[0148]
综上,一种用户态虚拟机虚拟核间任务的调度方法实施例二在图1的各用户态虚拟机的多虚拟核任务调度单元中运行,其在一种用户态虚拟机虚拟核间任务的调度方法实施例一的基础上增加了多虚拟核空闲任务初始化和任务从就绪态到非就绪态的调度方法,实现用户态虚拟机的虚拟核间任务调度的全流程,进一步提高操作系统的实时性和性能。
[0149]
下面基于图5至图7介绍本发明的一种用户态虚拟机虚拟核间任务的调度装置各实施例。
[0150]
图5示出了本发明的一种用户态虚拟机虚拟核间任务的调度装置实施例一的结构,其包括:中断锁获取模块510、可运行核获得模块520、就绪链表填充模块530、虚拟核判断模块540、服务中断通知模块550和任务重调度模块560和中断锁释放模块570。
[0151]
为了叙述方便,以正在运行任务的虚拟核k接收到第一任务从非就绪态转换为就绪态为例进行说明本装置实施例。
[0152]
中断锁获取模块510用于虚拟核k获取中断锁。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s110。
[0153]
可运行核获得模块520用于虚拟核k根据第一任务是否在一个虚拟核上获得第一任务的可运行虚拟核r。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s120。
[0154]
就绪链表填充模块530用于虚拟核k根据第一任务的优先级和第一任务是否锁定在虚拟核r,把第一任务插入到虚拟核r的就绪链表的链头或其他位置或用户态虚拟机的未分配虚拟核的就绪任务队列中。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s130。
[0155]
虚拟核判断模块540用于当第一任务插入到虚拟核r的就绪链表的链头时,判断虚拟核r与虚拟核k是否相同。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s140。
[0156]
服务中断通知模块550用于虚拟核k通知虚拟核r对第一任务进行重调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s150。
[0157]
任务重调度模块560用于虚拟核r对第一任务进行重调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s160。
[0158]
中断锁释放模块570用于释放中断锁。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例一的步骤s170。
[0159]
图6示出了本发明的一种用户态虚拟机虚拟核间任务的调度装置实施例二的结构,其包括:任务初始化模块610、调度等待模块620、非就绪到就绪调度模块630和就绪到非就绪调度模块640。
[0160]
任务初始化模块610用于在用户态虚拟机启动时,在每个虚拟核上启动相应的空闲任务。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的步骤s210。
[0161]
调度等待模块620用于各虚拟核在运行本身的任务同时等待接收在就绪态与非就绪态之间发生变换的任务。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的步骤s220。
[0162]
非就绪到就绪调度模块630用于虚拟核k为从非就绪态转换为就绪态的第一任务获得可运行虚拟核r,并当第一任务插入该可运行虚拟核的就绪链表的链头时对第一任务进行重调度或通知虚拟核r对第一任务进行重调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的步骤s230。
[0163]
就绪到非就绪调度模块640用于虚拟核p从相应的虚拟核的就绪链表或用户态虚拟机的未分配虚拟核的就绪任务队列中删除从就绪态转换为非就绪态的第二任务,并触发新的任务调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的步骤s240。
[0164]
图7示出了就绪到非就绪调度模块640的详细结构,其包括:中断锁获取模块6410、任务运行判断模块6420、任务删除第一模块6430、任务删除第二模块6440、任务优先判断模
块6450、就绪任务转移模块6460、虚拟核判断模块6470、服务中断通知模块6480和任务重调度模块6490。
[0165]
为了叙述方便,以虚拟核p接收到第二任务从就绪态转换为非就绪态为例进行介绍。
[0166]
中断锁获取模块6410用于虚拟核p获取中断锁。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2410。
[0167]
任务运行判断模块6420用于判断第二任务是不是一个虚拟核的当前运行任务。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2420。
[0168]
任务删除第一模块6430用于虚拟核p从第二任务的可运行虚拟核的就绪链表中或用户态虚拟机的未分配虚拟核的就绪任务队列删除第二任务,并释放中断锁。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2430
[0169]
任务删除第二模块6440用于虚拟核p从虚拟核q的就绪链表的链头删除第二任务,获得第三任务和第四任务。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2440
[0170]
任务优先判断模块6450用于判断第四任务的优先级是否低于第三任务。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2450
[0171]
就绪任务转移模块6460用于虚拟核p把第三任务从用户态虚拟机的未分配虚拟核的就绪任务队列中删除,并插入到虚拟核q的就绪链表的链头。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2460
[0172]
虚拟核判断模块6470用于判断虚拟核p是否与虚拟核q相同。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2470和步骤s2480。
[0173]
服务中断通知模块6480用于虚拟核p通过服务中断通知虚拟核q对第三任务重调度,还用于虚拟核p通过服务中断通知虚拟核q对第四任务重调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2471和步骤s2481。
[0174]
任务重调度模块6490用于虚拟核q对第三任务重调度,还用于虚拟核q对第四任务重调度。其原理和优点请参照一种用户态虚拟机虚拟核间任务的调度方法实施例二的就绪到非就绪调度方法的步骤s2472和步骤s2482。
[0175]
本发明实施例提供了一种操作系统,执行本发明的一种用户态虚拟机虚拟核间任务的调度方法实施例一所述实施方法或一种用户态虚拟机虚拟核间任务的调度方法实施例二所述实施方法。
[0176]
本发明实施例还提供了一种计算设备,下面结合图8详细介绍。
[0177]
该计算设备800包括,处理器810、存储器820、通信接口830、总线840。
[0178]
应理解,该图所示的计算设备800中的通信接口830可以用于与其他设备之间进行通信。
[0179]
其中,该处理器810可以与存储器820连接。该存储器820可以用于存储该程序代码和数据。因此,该存储器820可以是处理器810内部的存储单元,也可以是与处理器810独立的外部存储单元,还可以是包括处理器810内部的存储单元和与处理器810独立的外部存储单元的部件。
[0180]
可选的,计算设备800还可以包括总线840。其中,存储器820、通信接口830可以通过总线840与处理器810连接。总线840可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(efstended industry standard architecture,eisa)总线等。所述总线840可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。
[0181]
应理解,在本发明实施例中,该处理器810可以采用中央处理单元(central processing unit,cpu)。该处理器还可以是其它通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器810采用一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
[0182]
该存储器820可以包括只读存储器和随机存取存储器,并向处理器810提供指令和数据。处理器810的一部分还可以包括非易失性随机存取存储器。例如,处理器810还可以存储设备类型的信息。
[0183]
在计算设备800运行时,所述处理器810执行所述存储器820中的计算机执行指令执行各方法实施例的操作步骤。
[0184]
应理解,根据本发明实施例的计算设备800可以对应于执行根据本发明各实施例的方法中的相应主体,并且计算设备800中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。
[0185]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0186]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0187]
在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0188]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0189]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0190]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括,u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0191]
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行各方法实施例的操作步骤。
[0192]
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括,具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0193]
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0194]
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。
[0195]
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0196]
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述特定实施例,对本领域技术人员来说能够进行各种明显的变化、重
新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,均属于本发明保护范畴。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1