【技术实现步骤摘要】
本专利技术涉及计算机操作系统领域,具体涉及一种操作系统用来决定在哪个处理器上运行实时任务的。
技术介绍
操作系统是计算机系统的基础软件。计算机系统开机后,首先执行的软件就是操作系统。操作系统首先会进行系统的初始化(包括启动各个处理器),然后创建默认要创建的任务(如各种服务)。在系统运行过程中,用户还可以动态要求系统新创建一些任务。由于系统中同时存在的任务数量一般会超过处理器数量,故这些任务需要按照某种方式来共享使用有限的物理处理器。在计算机系统中,由操作系统的调度算法来决定“某个处理器当前应该执行哪个任务”和“某个任务应该由哪个处理器运行”。当外部中断发生、或当前执行的任务主动放弃使用处理器时,调度算法决定“当前处理器应运行哪个任务”,在当前正执行的任务通知操作系统“另外某个任务现在可以运行了”时,调度算法决定由哪个处理器运行这个刚刚可以运行的任务。任务在运行时,用户应用逻辑所需要的某些功能(如获取当前时间、打开一个文件、从网络接收数据),需要通过执行操作系统代码完成。操作系统在为任务执行某些功能时,会要求暂时禁止处理器响应外部中断(后文称作disabl ...
【技术保护点】
一种基于资源预约的两级混合任务调度方法,其特征在于实施步骤如下:1)在操作系统系统初始化启动各个处理器时,为各个处理器建立用于存放确定将在该处理器上运行任务的局部队列、用于记录试图被抢先次数的抢先计数器以及抢先允许状态,所述抢先允许状态用于表示处理器的中断或抢先的开放/禁止情况;建立用于存放暂时没有找到合适处理器运行任务的全局队列;2)将新创建或刚被唤醒的当前任务暂存到全局队列中,在当前任务在全局队列被调度运行时遍历所有的处理器选择在哪个处理器上运行当前任务,且在选择处理器时检查用于记录各个处理器的抢先允许状态,避开抢先允许状态标明中断或抢先已禁止而不能马上实施抢先的处理器 ...
【技术特征摘要】
1.一种基于资源预约的两级混合任务调度方法,其特征在于实施步骤如下: 1)在操作系统系统初始化启动各个处理器时,为各个处理器建立用于存放确定将在该处理器上运行任务的局部队列、用于记录试图被抢先次数的抢先计数器以及抢先允许状态,所述抢先允许状态用于表示处理器的中断或抢先的开放/禁止情况;建立用于存放暂时没有找到合适处理器运行任务的全局队列; 2)将新创建或刚被唤醒的当前任务暂存到全局队列中,在当前任务在全局队列被调度运行时遍历所有的处理器选择在哪个处理器上运行当前任务,且在选择处理器时检查用于记录各个处理器的抢先允许状态,避开抢先允许状态标明中断或抢先已禁止而不能马上实施抢先的处理器,若能找到合适的处理器,则将当前任务放入所找到处理器的局部队列中并跳转执行步骤3);否则,将当前任务继续停留在全局调度队列,并通过抢先计数器记录不能马上实施抢先的处理器的试图被抢先次数,然后等待下一次在全局队列被调度运行; 3)各个处理器分别执行选择在当前处理器上运行的任务,在执行任务过程中,如果遇到不允许插入执行中断处理程序的代码,则通过执行“关闭对中断的响应”操作修改抢先允许状态标明中断已禁止,返回执行所述不允许插入执行中断处理程序的代码,最终通过执行“打开对中断的响应”操作修改抢先允许状态标明中断已开放;如果遇到不允许插入执行的代码,则修改抢先允许状态标明抢先已禁止,返回执行所述不允许插入执行的代码,最终修改抢先允许状态标明抢先已开放。2.根据权利要求1所述的基于资源预约的两级混合任务调度方法,其特征在于:所述步骤I)中建立用于存放暂时没有找到合适处理器运行任务的全局队列具体是指启动一个虚拟处理器,针对该虚拟处理器建议一个用于缓存任务的任务调度队列作为用于存放暂时没有找到合适处理器运行任务的全局队列。3.根据权利要求2所述的基于资源预约的两级混合任务调度方法,其特征在于,所述步骤I)中在操作系统系统初始化启动各个处理器时,分别为每一个处理器分配schecLcnt、sched_cnt_rwl> try_pr_cnt> pr_dis_cnt、intr_mask_st 信息的存储空间,其中,sched_cnt用于记录了从开机至今在此处理器上调度函数的执行次数,sched_cnt_rwl为一个读写锁,处理器在修改自己对应的schecLcnt信息前,需要以“写”的方式获得自己对应的sched_cnt_rwl,处理器在查看其它处理器对应的sched_cnt信息前,需要以“读”的方式获得相应处理器对应的sched_cnt_rwl ;try_pr_cnt用于记录从本处理器上次执行调度函数至今,中间有试图抢先本处理器上的当前任务的任务数量;pr_dis_cnt用于记录此处理器上正在运行的任务目前净累积的“禁止抢先请求”次数,若任务先执行了 N次“禁止抢先请求”,接下来执行了 N-1次“允许抢先请求”,则此任务pr_dis_cnt的值为I ;若在pr_dis_cnt为O时,任务仍然执行“允许抢先请求”,则pr_dis_cnt仍然为O ;intr_mask_st为一个枚举类型变量,值域为{DIS,ENA},其值仅受任务执行时的“打开对中断的响应”、“关闭对中断的响应”两类操作的影响,任务在本处理器上执行“关闭对中断的响应”操作后,则intr_mask_st值变为DIS ;任务在本处理器上执行“打开对中断的响应”操作后,则intr_mask_st 值变为 ΕΝΑ。4.根据权利要求3所述的基于资源预约的两级混合任务调度方法,其特征在于,所述步骤2)中将新创建或刚被唤醒的当前任务暂存到全局队列中之前,还包括为当前任务初始化分配ctab、sched_lock, sched_st, vlistn信息的存储空间的步骤;其中,ctab为抢先列表,用于记录本任务所试图抢先、但因对方禁止了抢先,而没有抢先成功的信息,由于系统中同时运行的任务个数不超过在线处理器的数量,故ctab最多包含的元素个数不大于在线处理器数量,ctab记录的每一项可用<tried_cpu, snapshot〉来表示,其含义为此任务试图抢先在处理器tried_cpu上运行的任务,但抢先失败了,且在失败时处理器tried_cpu对应的sched_cnt值为snapshot ;sched_lock为一个读写锁,在需清除ctab中信息时,应先获得写锁;在需向ctab中添加信息时,应先获得读锁,在需为某任务寻找合适的处理器运行时,应先获得写锁;vlistn为一个指向全局队列中下一个待调度任务的指针;SChed_st为一个枚举类型的变量,用于描述此任务的执行状态,其值域为{RUN,PRD, INL, ING,SLEP},其中RUN表示该任务正在运行,PRD表示该任务原本在运行,但刚刚被抢先,还未放入到待运行队列中,INL表示该任务在局部队列中等待调度运行,ING表示该任务在全局队列中等待调度运行,SLEP表示该任务目前还在等待除CPU之外的其它运行条件获得满足,新创建的任务的sched_st默认为SLEP ;所述步骤2)的详细步骤如下: .2.1)令预先建立的用于临时存储抢先列表ctab的临时抢先列表R为空,令当前任务T的抢先列表ctab为空,令变量first_try的值为true、变量low的值为系统所允许的最低优先权、变量high的值为当前任务T的实时优先权减I,将当前任务T对应的schecLst信息设置为ING,其中变量first_try用于指示是不是第一次就找到了被抢先任务,若变量first_try为true,则说明第一次就找到的任务没有禁止掉抢先,传统的处理逻辑不会影响系统响应,若变量first_try为false,则说明是当前正在运行的最低优先级的任务禁止掉了抢先,系统决定抢先非最低优先级任务;变量low是本次循环中当前任务T考虑可以抢先的任务最低应具有优先级;变量high是本次循环中当前任务T考虑可以抢先的任务最高应具有优先级;设置用于指定执行当前任务T的处理器的变量proc的值为所述虚拟处理器; . 2.2)将当前任务T放入全局队列中; .2.3)为当前任务T在指定的处理器集合中筛选出所有可运行用户任务的处理器集合S,并将筛选得到的处理器集合S保存; .2.4)判断处理器集合S是否为空集,如果为空集则跳转执行步骤2.22);否则,跳转执行下一步; .2.5)获得当前任务T应当抢先的处理器,将得到的处理器放入变量proc中,然后获得变量proc对应处理器上当前正在运行的任务X ; .2.6)试图获取当前任务T对应的schecLlock读锁,若获取失败,则令变量proc的值为虚拟处理器、临时抢先列表R的值为空,跳转执行步骤2.22);否则跳转执行下一步; .2.7)获取当前任务T的sched_st信息,若当前任务T对应的sched_st不是ING,则首先令变量proc的值为虚拟处理器、变量first_try的值为true、临时抢先列表R的值为空,然后跳转执行步骤2.15);否则,跳转执行下一步; .2.8)获得变量proc对应处理器的sched_cnt_rwl读锁; . 2.9)读取变量proc对应处理器的schecLcnt信息,将读取的SChed_Cnt信息、变量proc对应处理器两者作为一条记录存入临时抢先列表R ; .2.10)获得变量proc对应处理器的try_pr_cnt信息增I ; .2.11)释放变量proc对应处理器的sched_cnt_rwl读锁; .2.12)判断变量proc对应处理器的pr_dis_cnt信息为O、intr_mask_st信息为ENA两个条件是否同时成立,如果同时成立则跳转执行步骤2.13);否则如果不能同时成立,则释放当前任务T对应的sched_lock读锁,从处理器集合S中去掉变量proc对应的处理器,然后判断处理器集合S是否变为空集,如果处理器集合S不是空集则跳转执行步骤2.5);如果处理器集合S是空集,则令变量first_try的值为false、变量low的值为变量proc对应的处理器的当前实时优先权加1、变量proc的值为所述虚拟处理器,跳转执行步骤2.3); . 2.13)将当前任务T对应的schecLst信息设为INL ; . 2.14)将当前任务T从全局队列中删除,并将当前任务T添加至变量proc对应处理器的独步队列中; .2.15)释放当前任务T对应的sched_lock读锁;.2.16)判断变量first_try的值,若first_try的值为true,则跳转执行步骤2.22),否则跳转执行步骤2.17); . 2.17)获得变量proc对应处理器上当前正在运行的任务X对应的schecLlock的读锁; . 2.18)检查所述任务X的sched_st信息,若所述任务X对应的sched_st信息不是RUN状态,则从处理器集合S中去掉变量proc对应的处理器,然后判断处理器集合S是否变为空集,如果处理器集合S不是空集则跳转执行步骤2.5);如果处理器集合S是空集,则令变量first_try的值为false、变量low的值为变量proc对应的处理器的当前实时优先权加.1...
【专利技术属性】
技术研发人员:廖湘科,刘晓建,杨沙洲,韦奇,李俊良,颜跃进,汪黎,秦莹,周强,王非,
申请(专利权)人:国人民解放军国防科学技术大学,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。