CN113687909B - 基于微内核的分时vcpu多核调度方法及系统 - Google Patents
基于微内核的分时vcpu多核调度方法及系统 Download PDFInfo
- Publication number
- CN113687909B CN113687909B CN202110859497.2A CN202110859497A CN113687909B CN 113687909 B CN113687909 B CN 113687909B CN 202110859497 A CN202110859497 A CN 202110859497A CN 113687909 B CN113687909 B CN 113687909B
- Authority
- CN
- China
- Prior art keywords
- thread
- pcpu
- ready
- current
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于微内核的分时vcpu多核调度方法及系统,涉及虚拟化技术领域,该方法包括:调度初始化步骤:将物理处理器核心pcpu进行分组;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;分区多核调度步骤:在vcpu线程调度时,判断当前vcpu线程的时间片是否耗尽;就绪线程选择步骤:在分区多核调度步骤中,选择就绪线程,即vcpu线程或普通任务线程时,对比判断分区处于新周期还是旧周期,选择相应的就绪线程进行切换。本发明能够基于微内核实现,具有更高的灵活性和可靠性;分时调度算法,有效整合实时和非实时任务所需的资源;能够实时分区调度算法提高该分区任务调度的实时性。
Description
技术领域
本发明涉及虚拟化技术领域,具体地,涉及一种基于微内核的分时vcpu多核调度方法及系统。
背景技术
伴随嵌入式领域的不断发展,嵌入式系统的应用场合越来越多,面对日益增多的用户需求,只能支持单一应用类型的嵌入式系统已经无法满足要求。为了应对这一多样化的挑战,现有的嵌入式系统往往包含多个子系统,多种子系统满足多种需求,如实时性和非实时性需求,低安全等级和高安全等级需求等。多样化的子系统也增加了嵌入式系统的设计复杂度。在此背景下,嵌入式行业需要新的解决方案以实现多种子系统的资源整合,虚拟化技术在嵌入式系统的应用为此提供了有力的支撑。嵌入式系统的虚拟化技术能够在同一硬件平台上虚拟出多个分区,不同分区均可运行独立的操作系统或应用,这使得实时操作系统和通用操作系统并存,方便了对实时和非实时应用的整合。
vcpu即电脑中的虚拟处理器,相对于物理CPU而言,虚拟机内的CPU。
公开号为CN112579294A的发明专利,公开了一种虚拟机的多核调度的实现方法及装置,所述方法包括:将一虚拟机的主虚拟机与N-1个影子虚拟机对应配置到N个CPU核上;通过一时间调度表,调度所述主虚拟机和所述影子虚拟机在相同的时间窗口下分别运行于对应的CPU核上;所述时间调度表配置有用于调度主虚拟机和影子虚拟机运行的时间窗口。
然而,现有的开源虚拟化技术如基于Linux的KVM,大多基于宏内核,这使得分区间、任务间的隔离性和可靠性有所下降;而且这些开源虚拟化技术,大多只具备软实时性能,无法满足强实时应用场景的要求。
发明内容
针对现有技术中的缺陷,本发明提供一种基于微内核的分时vcpu多核调度方法及系统。
根据本发明提供的一种基于微内核的分时vcpu多核调度方法及系统,所述方案如下:
第一方面,提供了一种基于微内核的分时vcpu多核调度方法,所述方法包括:
调度初始化步骤:将物理处理器核心pcpu进行分组;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度步骤:在vcpu线程调度时,判断当前vcpu线程或普通任务线程的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程,进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择步骤:在分区多核调度步骤中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,并判断是否启动了虚拟机,根据判断结果选择相应的就绪线程进行切换。
优选的,所述调度初始化步骤包括:
步骤S1.1:初始化开始;
步骤S1.2:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区;
步骤S1.3:为每个pcpu申请内存空间创建各自的就绪队列和等待队列,并将就绪队列和等待队列地址记录在全局数组cpu_rq[]与cpu_wq[]中;
步骤S1.4:为每个pcpu创建各自的空闲idle线程,并将该idle线程标识记录在全局数组cpu_it[]中;
步骤S1.5:pcpu开始运行各自的空闲idle线程;
步骤S1.6:进行首次调度,当就绪队列不空时,pcpu切换到就绪队列中首个就绪线程运行,即vcpu线程或普通任务线程,否则仍然运行空闲idle线程;
步骤S1.7:结束并返回。
优选的,所述分区多核调度步骤具体包括:
步骤S2.1:非首次调度开始,若此时pcpu上正在运行空闲idle线程则切换回空闲idle线程后跳转步骤S2.9结束并返回idle线程,若此时正在运行vcpu线程或普通任务线程则跳转步骤S2.2;
步骤S2.2:判断当前运行的线程的状态,thread_state是否为正在运行TS_RUNNING,若为TS_RUNNING则跳转步骤S2.3,若不为TS_RUNNING则跳转步骤S2.4;
步骤S2.3:判断当前运行的线程的时间片是否耗尽,若耗尽则跳转步骤S2.4,若未耗尽则无需调度直接跳转步骤S2.9结束并返回;
步骤S2.4:设置当前线程状态thread_state为TS_INTER,设置当前线程时间片current_minor_frame为0,依据当前线程与物理处理器核pcpu的亲和性affinity加入相应的pcpu的就绪队列中;
步骤S2.5:判断当前pcpu的就绪队列是否为空,若为空则当前pcpu切换到到空闲idle线程的上下文运行后,跳转步骤S2.9结束并返回,不为空则跳转步骤S2.6;
步骤S2.6:在当前pcpu的就绪队列中选取就绪线程,即vcpu线程或普通任务线程,并将其出队;
步骤S2.7:设置KS_LOCKED标志位锁住就绪线程的栈kernel_stack,依据该线程信息设置该线程的时间片current_minor_frame;
步骤S2.8:解锁线程的kernel_stack,切换到该线程的上下文运行;
步骤S2.9:结束调度并返回。
优选的,所述就绪线程选择步骤中,选择就绪线程时,即vcpu线程或普通任务线程,首先通过当前时间与截止时间的对比判断分区处于新周期还是旧周期;
若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
优选的,所述就绪线程选择步骤具体包括:
步骤S3.1:开始;
步骤S3.2:比较当前时间与当前pcpu运行线程,即vcpu线程或普通任务线程的截止时间,判断当前线程是否处于新周期中,若是则跳转步骤S3.3,若否则跳转步骤S3.11;
步骤S3.3:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.4,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.5;
步骤S3.4:在多个物理处理器核pcpu中寻找有效的pcpu并记录其索引;
步骤S3.5:记录此次切换的当前时间作为next_switch_time,和新周期的截止时间作为next_major_frame;
步骤S3.6:判断当前pcpu的就绪队列,即vcpu线程或普通任务线程是否为空,不为空则跳转步骤S3.7,空则跳转步骤S3.14;
步骤S3.7:判断当前pcpu的就绪队列中首个就绪线程的栈kernel_stack的状态是否为空闲KS_FREE,空闲则跳转步骤S3.8,非空闲则跳转步骤S3.14;
步骤S3.8:将当前pcpu就绪队列中首个就绪线程出队;
步骤S3.9:判断出队的就绪线程状态是否为结束退出TE_EXITING,是则跳转步骤S3.7,否则跳转步骤S3.10;
步骤S3.10:切换到该就绪线程的上下文运行,跳转步骤S3.15结束并返回该线程号;
步骤S3.11:比较当前时间与当前pcpu运行线程的截止时间,判断当前线程是否处于旧周期中,若是则跳转步骤S3.12,若否则跳转步骤S3.14;
步骤S3.12:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.6,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.14;
步骤S3.13:记录此次切换的当前时间作为next_switch_time,跳转步骤S3.7;
步骤S3.14:切换到空闲idle线程;
步骤S3.15:结束并返回该线程号。
第二方面,提供了一种基于微内核的分时vcpu多核调度系统,所述系统包括:
调度初始化模块:将物理处理器核心pcpu进行分组;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度模块:在线程调度时,判断当前线程,即vcpu线程或普通任务线程,的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择模块:在分区多核调度模块中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,根据判断结果选择就绪线程进行切换。
优选的,所述调度初始化模块包括:
模块M1.1:初始化开始;
模块M1.2:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区;
模块M1.3:为每个pcpu申请内存空间创建各自的就绪队列和等待队列,并将就绪队列和等待队列地址记录在全局数组cpu_rq[]与cpu_wq[]中;
模块M1.4:为每个pcpu创建各自的空闲idle线程,并将该idle线程标识记录在全局数组cpu_it[]中;
模块M1.5:pcpu开始运行各自的空闲idle线程;
模块M1.6:进行首次调度,当就绪队列不空时,pcpu切换到就绪队列中首个就绪线程,即vcpu线程或普通任务线程运行,否则仍然运行空闲idle线程;
步骤M1.7:结束并返回。
优选的,所述分区多核调度模块具体包括:
模块M2.1:非首次调度开始,若此时pcpu上正在运行空闲idle线程则切换回空闲idle线程后跳转模块M2.9结束并返回idle线程,若此时正在运行vcpu线程或普通任务线程则跳转模块M2.2;
模块M2.2:判断当前运行的线程的状态,thread_state是否为正在运行TS_RUNNING,若为TS_RUNNING则跳转模块M2.3,若不为TS_RUNNING则跳转模块M2.4;
模块M2.3:判断当前运行的线程的时间片是否耗尽,若耗尽则跳转模块M2.4,若未耗尽则无需调度直接跳转模块M2.9结束并返回;
模块M2.4:设置当前线程状态thread_state为TS_INTER,设置当前线程时间片current_minor_frame为0,依据当前线程与物理处理器核pcpu的亲和性affinity加入相应的pcpu的就绪队列中;
模块M2.5:判断当前pcpu的就绪队列是否为空,若为空则当前pcpu切换到到空闲idle线程的上下文运行后,跳转模块M2.9结束并返回,不为空则跳转模块M2.6;
模块M2.6:在当前pcpu的就绪队列中选取就绪线程,即vcpu线程或普通任务线程,并将其出队;
模块M2.7:设置KS_LOCKED标志位锁住就绪线程的栈kernel_stack,依据该线程信息设置该线程的时间片current_minor_frame;
模块M2.8:解锁线程的kernel_stack,切换到该线程的上下文运行;
模块M2.9:结束调度并返回。
优选的,所述就绪线程选择模块中,选择就绪线程,即vcpu线程或普通任务线程时,首先通过当前时间与截止时间的对比判断分区处于新周期还是旧周期;
若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
优选的,所述就绪线程选择模块具体包括:
模块M3.1:开始;
模块M3.2:比较当前时间与当前pcpu运行线程的截止时间,即vcpu线程或普通任务线程,判断当前线程是否处于新周期中,若是则跳转模块M3.3,若否则跳转模块M3.11;
模块M3.3:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转模块M3.4,若未运行虚拟机则当前运行线程为普通任务线程跳转模块M3.5;
模块M3.4:在多个物理处理器核pcpu中寻找有效的pcpu并记录其索引;
模块M3.5:记录此次切换的当前时间作为next_switch_time,和新周期的截止时间作为next_major_frame;
模块M3.6:判断当前pcpu的就绪队列,即vcpu线程或普通任务线程是否为空,不为空则跳转模块M3.7,空则跳转模块M3.14;
模块M3.7:判断当前pcpu的就绪队列中首个就绪线程的栈kernel_stack的状态是否为空闲KS_FREE,空闲则跳转模块M3.8,非空闲则跳转模块M3.14;
模块M3.8:将当前pcpu就绪队列中首个就绪线程出队;
模块M3.9:判断出队的就绪线程状态是否为结束退出TE_EXITING,是则跳转模块M3.7,否则跳转模块M3.10;
模块M3.10:切换到该就绪线程的上下文运行,跳转模块M3.15结束并返回该线程号;
模块M3.11:比较当前时间与当前pcpu运行线程的截止时间,判断当前线程是否处于旧周期中,若是则跳转模块M3.12,若否则跳转模块M3.14;
模块M3.12:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转模块M3.6,若未运行虚拟机则当前运行线程为普通任务线程跳转模块M3.14;
模块M3.13:记录此次切换的当前时间作为next_switch_time,跳转模块M3.7;
模块M3.14:切换到空闲idle线程;
模块M3.15:结束并返回该线程号。
与现有技术相比,本发明具有如下的有益效果:
1、本发明基于微内核实现,具有更高的灵活性和可靠性;
2、本发明的分时调度算法,有效整合了实时和非实时任务所需的资源;
3、本发明中实时分区调度算法提高了该分区任务调度的实时性。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本实施例的实时分区VCPU多核调度算法全流程图;
图2为本实施例的就绪线程选择算法流程图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
本发明实施例基于灵活的微内核系统架构,在保证安全性、可靠性的前提下,为整合实时与非实时分区的资源,提供了一种基于微内核的分时vcpu多核调度方法,参照图1和图2所示,为运行于微内核之上的虚拟处理器线程分配不同的物理处理器核组,不同物理处理器核分组具有实时性不同的调度策略,即一组为一个分区,不同分区各行其是互不干扰;该分时vcpu多核调度方法具体包括:
调度初始化步骤:将物理处理器核心physical cpu(pcpu)进行分组,一组注册为实时调度策略作为实时分区,另一组注册为非实时调度策略(如时间片轮转调度方法或优先级抢占调度方法)作为普通分区。依据用户需求可进行多个分组,每组为一个分区共享同种调度策略,分区间互不干扰,具体地:
步骤S1.1:初始化开始;
步骤S1.2:将物理处理器核心pcpu进行分组(即分区),一组注册为实时调度策略作为实时分区,并具有本区独有的周期时间片长度,周期内可运行多个线程,但多个线程的时间片长度之和必须小于等于周期长度;另一组注册为非实时调度策略(如时间片轮转调度方法或优先级抢占调度方法)作为普通分区;
步骤S1.3:为每个pcpu申请内存空间创建各自的就绪队列和等待队列,并将就绪队列和等待队列地址记录在全局数组cpu_rq[]与cpu_wq[]中;
步骤S1.4:为每个pcpu创建各自的空闲idle线程,并将该idle线程标识记录在全局数组cpu_it[]中;
步骤S1.5:pcpu开始运行各自的空闲idle线程;
步骤S1.6:进行首次调度,当就绪队列不空时,pcpu切换到就绪队列中首个就绪线程(vcpu线程或普通任务线程)运行,否则仍然运行空闲idle线程;
步骤S1.7:结束并返回。
分区多核调度步骤:在vcpu线程调度时,首先判断当前线程的时间片是否耗尽,未耗尽则不能打断,耗尽时间片时则选取当前pcpu的就绪队列中首个就绪线程进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;具体步骤如下:
步骤S2.1:非首次调度开始,若此时pcpu上正在运行空闲idle线程则切换回空闲idle线程后跳转步骤S2.9结束并返回idle线程,若此时正在运行vcpu线程或普通任务线程则跳转步骤S2.2;
步骤S2.2:判断当前运行的线程的状态,thread_state是否为正在运行TS_RUNNING,若为TS_RUNNING则跳转步骤S2.3,若不为TS_RUNNING则跳转步骤S2.4;
步骤S2.3:判断当前运行的线程的时间片是否耗尽,若耗尽则跳转步骤S2.4,若未耗尽则无需调度直接跳转步骤S2.9结束并返回;
步骤S2.4:设置当前线程状态thread_state为TS_INTER,设置当前线程时间片current_minor_frame为0,依据当前线程与物理处理器核pcpu的亲和性affinity加入相应的pcpu的就绪队列中;
步骤S2.5:判断当前pcpu的就绪队列是否为空,若为空则当前pcpu切换到到空闲idle线程的上下文运行后,跳转步骤S2.9结束并返回,不为空则跳转步骤S2.6;
步骤S2.6:在当前pcpu的就绪队列中选取就绪线程(vcpu线程或普通任务线程)并将其出队;
步骤S2.7:设置KS_LOCKED标志位锁住就绪线程的栈kernel_stack,依据该线程信息设置该线程的时间片current_minor_frame;
步骤S2.8:解锁线程的kernel_stack,切换到该线程的上下文运行;
步骤S2.9:结束调度并返回。
就绪线程选择步骤:在分区多核调度步骤中,首先通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,若处于旧周期且启动了虚拟机则直接选择当前pcup就绪队列中首个就绪线程进行切换,若处于新周期且启动了虚拟机则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪线程,若处于新周期但没有启动虚拟机则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲线程;具体步骤如下:
步骤S3.1:开始;
步骤S3.2:比较当前时间与当前pcpu运行线程(vcpu线程或普通任务线程)的截止时间,判断当前线程是否处于新周期中,若是则跳转步骤S3.3,若否则跳转步骤S3.11;
步骤S3.3:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.4,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.5;
步骤S3.4:在多个物理处理器核pcpu中寻找有效的pcpu并记录其索引;
步骤S3.5:记录此次切换的当前时间作为next_switch_time,和新周期的截止时间作为next_major_frame;
步骤S3.6:判断当前pcpu的就绪队列(vcpu线程或普通任务线程)是否为空,不为空则跳转步骤S3.7,空则跳转步骤S3.14;
步骤S3.7:判断当前pcpu的就绪队列中首个就绪线程的栈kernel_stack的状态是否为空闲KS_FREE,空闲则跳转步骤S3.8,非空闲则跳转步骤S3.14;
步骤S3.8:将当前pcpu就绪队列中首个就绪线程出队;
步骤S3.9:判断出队的就绪线程状态是否为结束退出TE_EXITING,是则跳转步骤S3.7,否则跳转步骤S3.10;
步骤S3.10:切换到该就绪线程的上下文运行,跳转步骤S3.15结束并返回该线程号;
步骤S3.11:比较当前时间与当前pcpu运行线程的截止时间,判断当前线程是否处于旧周期中,若是则跳转步骤S3.12,若否则跳转步骤S3.14;
步骤S3.12:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.6,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.14;
步骤S3.13:记录此次切换的当前时间作为next_switch_time,跳转步骤S3.7;
步骤S3.14:切换到空闲idle线程;
步骤S3.15:结束并返回该线程号。
本发明实施例提供了一种基于微内核的分时vcpu多核调度方法,基于微内核实现,具有更高的灵活性和可靠性;分时调度算法,有效整合了实时和非实时任务所需的资源;实时分区调度算法提高了该分区任务调度的实时性。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (8)
1.一种基于微内核的分时vcpu多核调度方法,其特征在于,包括:
调度初始化步骤:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区,每组为一个分区共享同种调度策略,分区间互不干扰;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度步骤:在vcpu线程调度时,判断当前vcpu线程或普通任务线程的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程,进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择步骤:在分区多核调度步骤中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,并判断是否启动了虚拟机,根据判断结果选择相应的就绪线程进行切换;
其中,若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
2.根据权利要求1所述的基于微内核的分时vcpu多核调度方法,其特征在于,所述调度初始化步骤包括:
步骤S1.1:初始化开始;
步骤S1.2:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区;
步骤S1.3:为每个pcpu申请内存空间创建各自的就绪队列和等待队列,并将就绪队列和等待队列地址记录在全局数组cpu_rq[]与cpu_wq[]中;
步骤S1.4:为每个pcpu创建各自的空闲idle线程,并将该idle线程标识记录在全局数组cpu_it[]中;
步骤S1.5:pcpu开始运行各自的空闲idle线程;
步骤S1.6:进行首次调度,当就绪队列不空时,pcpu切换到就绪队列中首个就绪线程运行,即vcpu线程或普通任务线程,否则仍然运行空闲idle线程;
步骤S1.7:结束并返回。
3.根据权利要求1所述的基于微内核的分时vcpu多核调度方法,其特征在于,所述分区多核调度步骤具体包括:
步骤S2.1:非首次调度开始,若此时pcpu上正在运行空闲idle线程则切换回空闲idle线程后跳转步骤S2.9,若此时正在运行vcpu线程或普通任务线程则跳转步骤S2.2;
步骤S2.2:判断当前运行的线程的状态,thread_state是否为正在运行TS_RUNNING,若为TS_RUNNING则跳转步骤S2.3,若不为TS_RUNNING则跳转步骤S2.4;
步骤S2.3:判断当前运行的线程的时间片是否耗尽,若耗尽则跳转步骤S2.4,若未耗尽则无需调度直接跳转步骤S2.9;
步骤S2.4:设置当前线程状态thread_state为TS_INTER,设置当前线程时间片current_minor_frame为0,依据当前线程与物理处理器核pcpu的亲和性affinity加入相应的pcpu的就绪队列中;
步骤S2.5:判断当前pcpu的就绪队列是否为空,若为空则当前pcpu切换到到空闲idle线程的上下文运行后,跳转步骤S2.9,不为空则跳转步骤S2.6;
步骤S2.6:在当前pcpu的就绪队列中选取就绪线程,即vcpu线程或普通任务线程,并将其出队;
步骤S2.7:设置KS_LOCKED标志位锁住就绪线程的栈kernel_stack,依据该线程信息设置该线程的时间片current_minor_frame;
步骤S2.8:解锁线程的kernel_stack,切换到该线程的上下文运行;
步骤S2.9:结束。
4.根据权利要求1所述的基于微内核的分时vcpu多核调度方法,其特征在于,所述就绪线程选择步骤具体包括:
步骤S3.1:开始;
步骤S3.2:比较当前时间与当前pcpu运行线程,即vcpu线程或普通任务线程的截止时间,判断当前线程是否处于新周期中,若是则跳转步骤S3.3,若否则跳转步骤S3.11;
步骤S3.3:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.4,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.5;
步骤S3.4:在多个物理处理器核pcpu中寻找有效的pcpu并记录其索引;
步骤S3.5:记录此次切换的当前时间作为next_switch_time,和新周期的截止时间作为next_major_frame;
步骤S3.6:判断当前pcpu的就绪队列,即vcpu线程或普通任务线程是否为空,不为空则跳转步骤S3.7,空则跳转步骤S3.14;
步骤S3.7:判断当前pcpu的就绪队列中首个就绪线程的栈kernel_stack的状态是否为空闲KS_FREE,空闲则跳转步骤S3.8,非空闲则跳转步骤S3.14;
步骤S3.8:将当前pcpu就绪队列中首个就绪线程出队;
步骤S3.9:判断出队的就绪线程状态是否为结束退出TE_EXITING,是则跳转步骤S3.7,否则跳转步骤S3.10;
步骤S3.10:切换到该就绪线程的上下文运行,跳转步骤S3.15结束并返回该线程号;
步骤S3.11:比较当前时间与当前pcpu运行线程的截止时间,判断当前线程是否处于旧周期中,若是则跳转步骤S3.12,若否则跳转步骤S3.14;
步骤S3.12:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转步骤S3.6,若未运行虚拟机则当前运行线程为普通任务线程跳转步骤S3.14;
步骤S3.13:记录此次切换的当前时间作为next_switch_time,跳转步骤S3.7;
步骤S3.14:切换到空闲idle线程;
步骤S3.15:结束并返回该线程号。
5.一种基于微内核的分时vcpu多核调度系统,其特征在于,包括:
调度初始化模块:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区,每组为一个分区共享同种调度策略,分区间互不干扰;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度模块:在线程调度时,判断当前线程,即vcpu线程或普通任务线程,的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择模块:在分区多核调度模块中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,根据判断结果选择就绪线程进行切换;
其中,若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
6.根据权利要求5所述的基于微内核的分时vcpu多核调度系统,其特征在于,所述调度初始化模块包括:
模块M1.1:初始化开始;
模块M1.2:将物理处理器核心pcpu进行分组,一组注册为实时调度策略作为实时分区;另一组注册为非实时调度策略作为普通分区;
模块M1.3:为每个pcpu申请内存空间创建各自的就绪队列和等待队列,并将就绪队列和等待队列地址记录在全局数组cpu_rq[]与cpu_wq[]中;
模块M1.4:为每个pcpu创建各自的空闲idle线程,并将该idle线程标识记录在全局数组cpu_it[]中;
模块M1.5:pcpu开始运行各自的空闲idle线程;
模块M1.6:进行首次调度,当就绪队列不空时,pcpu切换到就绪队列中首个就绪线程,即vcpu线程或普通任务线程运行,否则仍然运行空闲idle线程;
步骤M1.7:结束并返回。
7.根据权利要求5所述的基于微内核的分时vcpu多核调度系统,其特征在于,所述分区多核调度模块具体包括:
模块M2.1:非首次调度开始,若此时pcpu上正在运行空闲idle线程则切换回空闲idle线程后跳转模块M2.9,若此时正在运行vcpu线程或普通任务线程则跳转模块M2.2;
模块M2.2:判断当前运行的线程的状态,thread_state是否为正在运行TS_RUNNING,若为TS_RUNNING则跳转模块M2.3,若不为TS_RUNNING则跳转模块M2.4;
模块M2.3:判断当前运行的线程的时间片是否耗尽,若耗尽则跳转模块M2.4,若未耗尽则无需调度直接跳转模块M2.9;
模块M2.4:设置当前线程状态thread_state为TS_INTER,设置当前线程时间片current_minor_frame为0,依据当前线程与物理处理器核pcpu的亲和性affinity加入相应的pcpu的就绪队列中;
模块M2.5:判断当前pcpu的就绪队列是否为空,若为空则当前pcpu切换到到空闲idle线程的上下文运行后,跳转模块M2.9,不为空则跳转模块M2.6;
模块M2.6:在当前pcpu的就绪队列中选取就绪线程,即vcpu线程或普通任务线程,并将其出队;
模块M2.7:设置KS_LOCKED标志位锁住就绪线程的栈kernel_stack,依据该线程信息设置该线程的时间片current_minor_frame;
模块M2.8:解锁线程的kernel_stack,切换到该线程的上下文运行;
模块M2.9:结束。
8.根据权利要求5所述的基于微内核的分时vcpu多核调度系统,其特征在于,所述就绪线程选择模块具体包括:
模块M3.1:开始;
模块M3.2:比较当前时间与当前pcpu运行线程的截止时间,即vcpu线程或普通任务线程,判断当前线程是否处于新周期中,若是则跳转模块M3.3,若否则跳转模块M3.11;
模块M3.3:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转模块M3.4,若未运行虚拟机则当前运行线程为普通任务线程跳转模块M3.5;
模块M3.4:在多个物理处理器核pcpu中寻找有效的pcpu并记录其索引;
模块M3.5:记录此次切换的当前时间作为next_switch_time,和新周期的截止时间作为next_major_frame;
模块M3.6:判断当前pcpu的就绪队列,即vcpu线程或普通任务线程是否为空,不为空则跳转模块M3.7,空则跳转模块M3.14;
模块M3.7:判断当前pcpu的就绪队列中首个就绪线程的栈kernel_stack的状态是否为空闲KS_FREE,空闲则跳转模块M3.8,非空闲则跳转模块M3.14;
模块M3.8:将当前pcpu就绪队列中首个就绪线程出队;
模块M3.9:判断出队的就绪线程状态是否为结束退出TE_EXITING,是则跳转模块M3.7,否则跳转模块M3.10;
模块M3.10:切换到该就绪线程的上下文运行,跳转模块M3.15结束并返回该线程号;
模块M3.11:比较当前时间与当前pcpu运行线程的截止时间,判断当前线程是否处于旧周期中,若是则跳转模块M3.12,若否则跳转模块M3.14;
模块M3.12:判断当前是否运行了虚拟机,若运行了虚拟机则当前运行的线程为vcpu线程跳转模块M3.6,若未运行虚拟机则当前运行线程为普通任务线程跳转模块M3.14;
模块M3.13:记录此次切换的当前时间作为next_switch_time,跳转模块M3.7;
模块M3.14:切换到空闲idle线程;
模块M3.15:结束并返回该线程号。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202110859497.2A CN113687909B (zh) | 2021-07-28 | 2021-07-28 | 基于微内核的分时vcpu多核调度方法及系统 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202110859497.2A CN113687909B (zh) | 2021-07-28 | 2021-07-28 | 基于微内核的分时vcpu多核调度方法及系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN113687909A CN113687909A (zh) | 2021-11-23 |
| CN113687909B true CN113687909B (zh) | 2024-01-30 |
Family
ID=78578162
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202110859497.2A Active CN113687909B (zh) | 2021-07-28 | 2021-07-28 | 基于微内核的分时vcpu多核调度方法及系统 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN113687909B (zh) |
Families Citing this family (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114168352B (zh) * | 2021-12-30 | 2022-11-11 | 科东(广州)软件科技有限公司 | 任务的多核调度方法、装置、电子设备及存储介质 |
| CN115168000B (zh) * | 2022-07-01 | 2025-12-02 | 中汽创智科技有限公司 | 一种任务调度方法、系统及计算机可读存储介质 |
| CN116257332A (zh) * | 2022-09-07 | 2023-06-13 | 苏州迈科网络安全技术股份有限公司 | 一种大数据任务调度方法 |
| CN116302379A (zh) * | 2022-09-07 | 2023-06-23 | 厉雷刚 | 微内核架构、调度方法、微内核系统及存储介质 |
| CN117850961B (zh) * | 2023-12-11 | 2026-06-05 | 天翼云科技有限公司 | 一种基于linux内核与KVM而实现的虚拟机vcpu线程专用调度器 |
Citations (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101169731A (zh) * | 2007-12-05 | 2008-04-30 | 华为技术有限公司 | 多路多核服务器及其cpu的虚拟化处理方法 |
| CN102253857A (zh) * | 2011-06-24 | 2011-11-23 | 华中科技大学 | 一种多核环境下的Xen虚拟机调度控制方法 |
| CN102662763A (zh) * | 2012-04-11 | 2012-09-12 | 华中科技大学 | 基于服务质量的虚拟机资源调度方法 |
| CN103678003A (zh) * | 2013-12-18 | 2014-03-26 | 华中科技大学 | 一种实时性增强的虚拟cpu调度方法 |
| CN108037994A (zh) * | 2017-11-15 | 2018-05-15 | 中国电子科技集团公司第三十二研究所 | 一种支持异构环境下多核并行处理的调度机制 |
| CN108459906A (zh) * | 2017-02-20 | 2018-08-28 | 华为技术有限公司 | 一种vcpu线程的调度方法及装置 |
| CN110321212A (zh) * | 2019-07-01 | 2019-10-11 | 电子科技大学 | 基于最早截止时间优先的多级融合实时调度方法 |
| CN110347507A (zh) * | 2019-07-01 | 2019-10-18 | 电子科技大学 | 基于时间片轮转的多级融合实时调度方法 |
| CN110968876A (zh) * | 2019-12-04 | 2020-04-07 | 电子科技大学 | 基于mils架构的安全操作系统 |
| CN112817690A (zh) * | 2021-01-22 | 2021-05-18 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 一种面向arm架构虚拟化领域的中断虚拟化处理方法及系统 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP2323035B1 (en) * | 2009-11-16 | 2019-04-17 | Red Bend Software | Scheduling system |
| US8364997B2 (en) * | 2009-12-22 | 2013-01-29 | Intel Corporation | Virtual-CPU based frequency and voltage scaling |
-
2021
- 2021-07-28 CN CN202110859497.2A patent/CN113687909B/zh active Active
Patent Citations (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101169731A (zh) * | 2007-12-05 | 2008-04-30 | 华为技术有限公司 | 多路多核服务器及其cpu的虚拟化处理方法 |
| CN102253857A (zh) * | 2011-06-24 | 2011-11-23 | 华中科技大学 | 一种多核环境下的Xen虚拟机调度控制方法 |
| CN102662763A (zh) * | 2012-04-11 | 2012-09-12 | 华中科技大学 | 基于服务质量的虚拟机资源调度方法 |
| CN103678003A (zh) * | 2013-12-18 | 2014-03-26 | 华中科技大学 | 一种实时性增强的虚拟cpu调度方法 |
| CN108459906A (zh) * | 2017-02-20 | 2018-08-28 | 华为技术有限公司 | 一种vcpu线程的调度方法及装置 |
| CN108037994A (zh) * | 2017-11-15 | 2018-05-15 | 中国电子科技集团公司第三十二研究所 | 一种支持异构环境下多核并行处理的调度机制 |
| CN110321212A (zh) * | 2019-07-01 | 2019-10-11 | 电子科技大学 | 基于最早截止时间优先的多级融合实时调度方法 |
| CN110347507A (zh) * | 2019-07-01 | 2019-10-18 | 电子科技大学 | 基于时间片轮转的多级融合实时调度方法 |
| CN110968876A (zh) * | 2019-12-04 | 2020-04-07 | 电子科技大学 | 基于mils架构的安全操作系统 |
| CN112817690A (zh) * | 2021-01-22 | 2021-05-18 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 一种面向arm架构虚拟化领域的中断虚拟化处理方法及系统 |
Non-Patent Citations (6)
| Title |
|---|
| Linux超线程感知的调度算法研究;李亮;吴庆波;;电子技术应用(第02期);全文 * |
| Taehyung Lee,et al.,."VCPU Prioritization Interface for Improving the Performance of Latency-Critical Tasks".《2020 14th International Conference on Ubiquitous Information Management and Communication (IMCOM)》.2020,全文. * |
| Xen上的CPU性能监视系统;戴志华;;舰船电子工程(第05期);全文 * |
| 一种分区操作系统实时任务调度方法;周霆;胡宁;任晓瑞;;计算机光盘软件与应用(第10期);全文 * |
| 微内核结构嵌入式实时操作系统的研究与设计;邓昀;程小辉;王新政;;微电子学与计算机(第10期);全文 * |
| 面向多核处理器的实时优化技术:基于独立实时域的实时优化方法;冯华;卢凯;王小平;;计算机科学(第09期);全文 * |
Also Published As
| Publication number | Publication date |
|---|---|
| CN113687909A (zh) | 2021-11-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN113687909A (zh) | 基于微内核的分时vcpu多核调度方法及系统 | |
| CN105893126B (zh) | 一种任务调度方法及装置 | |
| US8082420B2 (en) | Method and apparatus for executing instructions | |
| US8266629B2 (en) | Virtual machine system, hypervisor in virtual machine system, and scheduling method in virtual machine system | |
| EP1628214B1 (en) | Systems and methods for implementing an operating system in a virtual machine environment | |
| CN111813554A (zh) | 一种任务调度处理方法、装置及电子设备和存储介质 | |
| CN114138422A (zh) | 可扩展性的NVMe存储虚拟化方法和系统 | |
| US20050210472A1 (en) | Method and data processing system for per-chip thread queuing in a multi-processor system | |
| JP2005536791A (ja) | 動的多重レベルタスク管理方法及び装置 | |
| CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
| WO2024046017A1 (zh) | 基于容器的进程调度方法、装置、设备及存储介质 | |
| US9052957B2 (en) | Method and system for conducting intensive multitask and multiflow calculation in real-time | |
| US10372453B2 (en) | Fetching instructions in an instruction fetch unit | |
| RU2494446C2 (ru) | Восстановление управления ресурсом обработки, который исполняет внешний контекст исполнения | |
| US20080147945A1 (en) | Parallel memory migration | |
| US10732976B2 (en) | Integrated circuit processor and method of operating the integrated circuit processor in different modes of differing thread counts | |
| US20060146864A1 (en) | Flexible use of compute allocation in a multi-threaded compute engines | |
| US8375390B2 (en) | Scheduling method and scheduling apparatus | |
| CN116501447B (zh) | 基于Xen的硬实时实现系统 | |
| CN118245187A (zh) | 线程调度方法及装置、电子设备及存储介质 | |
| US9437299B2 (en) | Systems and methods for order scope transitions using cam | |
| WO2001097020A1 (en) | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors | |
| CN110968876A (zh) | 基于mils架构的安全操作系统 | |
| US7818558B2 (en) | Method and apparatus for EFI BIOS time-slicing at OS runtime | |
| US20050086667A1 (en) | Symmetric Scheduling for parallel execution |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |