CN113687909A - 基于微内核的分时vcpu多核调度方法及系统 - Google Patents

基于微内核的分时vcpu多核调度方法及系统 Download PDF

Info

Publication number
CN113687909A
CN113687909A CN202110859497.2A CN202110859497A CN113687909A CN 113687909 A CN113687909 A CN 113687909A CN 202110859497 A CN202110859497 A CN 202110859497A CN 113687909 A CN113687909 A CN 113687909A
Authority
CN
China
Prior art keywords
thread
ready
pcpu
module
current
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.)
Granted
Application number
CN202110859497.2A
Other languages
English (en)
Other versions
CN113687909B (zh
Inventor
左龙
韩笑
汪云云
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 32 Research Institute
Original Assignee
CETC 32 Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CETC 32 Research Institute filed Critical CETC 32 Research Institute
Priority to CN202110859497.2A priority Critical patent/CN113687909B/zh
Publication of CN113687909A publication Critical patent/CN113687909A/zh
Application granted granted Critical
Publication of CN113687909B publication Critical patent/CN113687909B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution 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多核调度方法及系统。
背景技术
伴随嵌入式领域的不断发展,嵌入式系统的应用场合越来越多,面对日益增多的用户需求,只能支持单一应用类型的嵌入式系统已经无法满足要求。为了应对这一多样化的挑战,现有的嵌入式系统往往包含多个子系统,多种子系统满足多种需求,如实时性和非实时性需求,低安全等级和高安全等级需求等。多样化的子系统也增加了嵌入式系统的设计复杂度。在此背景下,嵌入式行业需要新的解决方案以实现多种子系统的资源整合,虚拟化技术在嵌入式系统的应用为此提供了有力的支撑。嵌入式系统的虚拟化技术能够在同一硬件平台上虚拟出多个分区,不同分区均可运行独立的操作系统或应用,这使得实时操作系统和通用操作系统并存,方便了对实时和非实时应用的整合。
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 (10)

1.一种基于微内核的分时vcpu多核调度方法,其特征在于,包括:
调度初始化步骤:将物理处理器核心pcpu进行分组;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度步骤:在vcpu线程调度时,判断当前vcpu线程或普通任务线程的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程,进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择步骤:在分区多核调度步骤中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,并判断是否启动了虚拟机,根据判断结果选择相应的就绪线程进行切换。
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结束并返回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:结束调度并返回。
4.根据权利要求1所述的基于微内核的分时vcpu多核调度方法,其特征在于,所述就绪线程选择步骤中,选择就绪线程时,即vcpu线程或普通任务线程,首先通过当前时间与截止时间的对比判断分区处于新周期还是旧周期;
若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
5.根据权利要求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:结束并返回该线程号。
6.一种基于微内核的分时vcpu多核调度系统,其特征在于,包括:
调度初始化模块:将物理处理器核心pcpu进行分组;每个pcpu申请内存空间创建各自的就绪队列、等待队列,并为每个pcpu创建各自的空闲idle线程;
分区多核调度模块:在线程调度时,判断当前线程,即vcpu线程或普通任务线程,的时间片是否耗尽,若未耗尽时间片则不能打断;
若耗尽时间片,则选取当前pcpu的就绪队列中首个就绪线程,即vcpu线程或普通任务线程进行切换,若当前pcpu的就绪队列为空则直接运行空闲idle线程;
就绪线程选择模块:在分区多核调度模块中,选择就绪线程,即vcpu线程或普通任务线程时,通过当前时间与截止时间的对比判断分区处于新周期还是旧周期,根据判断结果选择就绪线程进行切换。
7.根据权利要求6所述的基于微内核的分时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:结束并返回。
8.根据权利要求6所述的基于微内核的分时vcpu多核调度系统,其特征在于,所述分区多核调度模块具体包括:
模块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:结束调度并返回。
9.根据权利要求6所述的基于微内核的分时vcpu多核调度系统,其特征在于,所述就绪线程选择模块中,选择就绪线程,即vcpu线程或普通任务线程时,首先通过当前时间与截止时间的对比判断分区处于新周期还是旧周期;
若处于旧周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则直接选择当前pcup就绪队列中首个就绪的vcpu线程进行切换;
若处于新周期且启动了虚拟机,即就绪线程为vcpu线程而非普通任务线程,则计算当前新周期的截止时间并切换至当前pcpu就绪队列中的首个就绪的vcpu线程;
若处于新周期但没有启动虚拟机,即就绪线程为普通任务线程而非vcpu线程,则需要重新选择本分区内有效的pcpu并切换至该pcpu的就绪队列中首个就绪的普通任务线程,当切换就绪线程而就绪队列为空时则切换至当前pcpu的空闲idle线程。
10.根据权利要求6所述的基于微内核的分时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:结束并返回该线程号。
CN202110859497.2A 2021-07-28 2021-07-28 基于微内核的分时vcpu多核调度方法及系统 Active CN113687909B (zh)

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 true CN113687909A (zh) 2021-11-23
CN113687909B 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)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114168352A (zh) * 2021-12-30 2022-03-11 科东(广州)软件科技有限公司 任务的多核调度方法、装置、电子设备及存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101169731A (zh) * 2007-12-05 2008-04-30 华为技术有限公司 多路多核服务器及其cpu的虚拟化处理方法
US20110119422A1 (en) * 2009-11-16 2011-05-19 Virtuallogix Sa Scheduling system
US20110154321A1 (en) * 2009-12-22 2011-06-23 Kun Tian Virtual-cpu based frequency and voltage scaling
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架构虚拟化领域的中断虚拟化处理方法及系统

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101169731A (zh) * 2007-12-05 2008-04-30 华为技术有限公司 多路多核服务器及其cpu的虚拟化处理方法
US20110119422A1 (en) * 2009-11-16 2011-05-19 Virtuallogix Sa Scheduling system
US20110154321A1 (en) * 2009-12-22 2011-06-23 Kun Tian Virtual-cpu based frequency and voltage scaling
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)

* Cited by examiner, † Cited by third party
Title
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)》 *
冯华;卢凯;王小平;: "面向多核处理器的实时优化技术:基于独立实时域的实时优化方法", 计算机科学, no. 09 *
周霆;胡宁;任晓瑞;: "一种分区操作系统实时任务调度方法", 计算机光盘软件与应用, no. 10 *
戴志华;: "Xen上的CPU性能监视系统", 舰船电子工程, no. 05 *
李亮;吴庆波;: "Linux超线程感知的调度算法研究", 电子技术应用, no. 02 *
邓昀;程小辉;王新政;: "微内核结构嵌入式实时操作系统的研究与设计", 微电子学与计算机, no. 10 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114168352A (zh) * 2021-12-30 2022-03-11 科东(广州)软件科技有限公司 任务的多核调度方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN113687909B (zh) 2024-01-30

Similar Documents

Publication Publication Date Title
CN105893126B (zh) 一种任务调度方法及装置
US20050210472A1 (en) Method and data processing system for per-chip thread queuing in a multi-processor system
US7020879B1 (en) Interrupt and exception handling for multi-streaming digital processors
US8266629B2 (en) Virtual machine system, hypervisor in virtual machine system, and scheduling method in virtual machine system
US6789100B2 (en) Interstream control and communications for multi-streaming digital processors
CN1940858B (zh) 媒体播放装置上实现多任务的方法
US9052957B2 (en) Method and system for conducting intensive multitask and multiflow calculation in real-time
CN101751289B (zh) 一种嵌入式实时操作系统的混合调度方法
US20070067778A1 (en) System and method for communication in a multithread processor
EP2128759B1 (en) Operating system startup control method and information processing apparatus
CN114168271B (zh) 一种任务调度方法、电子设备及存储介质
CN111324432A (zh) 处理器调度方法、装置、服务器及存储介质
CN114138422A (zh) 可扩展性的NVMe存储虚拟化方法和系统
CN113687909B (zh) 基于微内核的分时vcpu多核调度方法及系统
WO2024046017A1 (zh) 基于容器的进程调度方法、装置、设备及存储介质
US9437299B2 (en) Systems and methods for order scope transitions using cam
CN110968876A (zh) 基于mils架构的安全操作系统
CN1867895B (zh) 用于除了操作一个主操作系统外还操作一个辅助操作系统的方法和装置
JP3019317B2 (ja) プロセススケジューリング方法
US11182183B2 (en) Workload placement using conflict cost
CN114281529A (zh) 分布式虚拟化的客户操作系统调度优化方法、系统及终端
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
CN111459620A (zh) 安全容器操作系统到虚拟机监控器的信息调度方法
WO2000070482A1 (en) Interrupt and exception handling for multi-streaming digital processors
CN110851239A (zh) 一种type-i型硬实时高可靠性全虚拟化方法

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