发明名称 基于资源预约的两级混合任务调度方法
摘要 本发明公开了一种基于资源预约的两级混合任务调度方法,实施步骤为:为各处理器建立各自的局部队列、抢先计数器、抢先允许状态,抢先允许状态反映处理器的中断/抢先的开放/禁止情况;为全系统建立全局队列;为任务创建抢先列表;被唤醒任务先存于全局队列,再为其寻找局部队列,若找到的处理器已临时关闭抢先,则增加其抢先计数器,并将其加入此任务的抢先列表,否则将任务移入相应局部队列;处理器在调度时根据其抢先计数器状态决定候选任务来自哪些队列;若被调度执行的任务抢先列表非空,则减少该表所登记处理器的抢先计数器。本发明能够防止操作系统决定抢先“不能马上实施抢先的优先权”,具有调度合理、可靠性好、执行效率高的优点。
申请公布号 CN103995743B 申请公布日期 2015.04.29
申请号 CN201410215702.1 申请日期 2014.05.21
申请人 中国人民解放军国防科学技术大学 发明人 廖湘科;刘晓建;杨沙洲;韦奇;李俊良;颜跃进;汪黎;秦莹;周强;王非
分类号 G06F9/48(2006.01)I;G06F9/50(2006.01)I 主分类号 G06F9/48(2006.01)I
代理机构 湖南兆弘专利事务所 43008 代理人 赵洪;谭武艺
主权项 一种基于资源预约的两级混合任务调度方法,其特征在于实施步骤如下:1)在操作系统系统初始化启动各个处理器时,为各个处理器建立用于存放确定将在该处理器上运行任务的局部队列、用于记录试图被抢先次数的抢先计数器以及抢先允许状态,所述抢先允许状态用于表示处理器的中断或抢先的开放/禁止情况;建立用于存放暂时没有找到合适处理器运行任务的全局队列;所述在操作系统系统初始化启动各个处理器时,分别为每一个处理器分配sched_cnt、sched_cnt_rwl、try_pr_cnt、pr_dis_cnt、intr_mask_st信息的存储空间,其中,sched_cnt用于记录了从开机至今在此处理器上调度函数的执行次数,sched_cnt_rwl为一个读写锁,处理器在修改自己对应的sched_cnt信息前,需要以“写”的方式获得自己对应的sched_cnt_rwl,处理器在查看其它处理器对应的sched_cnt信息前,需要以“读”的方式获得相应处理器对应的sched_cnt_rwl;try_pr_cnt用于记录从本处理器上次执行调度函数至今,中间有试图抢先本处理器上的当前任务的任务数量;pr_dis_cnt用于记录此处理器上正在运行的任务目前净累积的“禁止抢先请求”次数,若任务先执行了N次“禁止抢先请求”,接下来执行了N‑1次“允许抢先请求”,则此任务pr_dis_cnt的值为1;若在pr_dis_cnt为0时,任务仍然执行“允许抢先请求”,则pr_dis_cnt仍然为0;intr_mask_st为一个枚举类型变量,值域为{DIS,ENA},其值仅受任务执行时的“打开对中断的响应”、“关闭对中断的响应”两类操作的影响,任务在本处理器上执行“关闭对中断的响应”操作后,则intr_mask_st值变为DIS;任务在本处理器上执行“打开对中断的响应”操作后,则intr_mask_st值变为ENA;2)将新创建或刚被唤醒的当前任务暂存到全局队列中,在当前任务在全局队列被调度运行时遍历所有的处理器选择在哪个处理器上运行当前任务,且在选择处理器时检查各个处理器的抢先允许状态,避开抢先允许状态标明中断或抢先已禁止而不能马上实施抢先的处理器,若能找到合适的处理器,则将当前任务放入所找到处理器的局部队列中并跳转执行步骤3);否则,将当前任务继续停留在全局队列,并通过抢先计数器记录不能马上实施抢先的处理器的试图被抢先次数,然后等待下一次在全局队列被调度运行;3)各个处理器分别执行选择在当前处理器上运行的任务,在执行任务过程中,如果遇到不允许插入执行中断处理程序的代码,则通过执行“关闭对中断的响应”操作修改抢先允许状态标明中断已禁止,返回执行所述不允许插入执行中断处理程序的代码,最终通过执行“打开对中断的响应”操作修改抢先允许状态标明中断已开放;如果遇到不允许插入执行的代码,则修改抢先允许状态标明抢先已禁止,返回执行所述不允许插入执行的代码,最终修改抢先允许状态标明抢先已开放。
地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院