矢量上下文切换方法

文档序号:8361279阅读:419来源:国知局
矢量上下文切换方法
【技术领域】
[0001]本发明属于计算机软件控制领域,涉及一种矢量上下文切换方法。
【背景技术】
[0002]随着航空电子技术的发展,信号处理和图像处理的大规模应用,CPU提供了矢量处理功能来提高计算性能,这也就对操作系统提出了新的性能要求。在一个操作系统中,矢量任务需要和非矢量任务配合使用,但是如果操作系统对每一个任务均切换矢量上下文则会造成大量的系统开销,影响系统性能,需要提出新的矢量任务和非矢量任务切换方法,为混合任务环境下任务的高效切换提供可能。

【发明内容】

[0003]为了解决【背景技术】中存在的矢量任务和非矢量任务混和调度的问题,本发明提供了一种可提高任务切换的性能的矢量上下文切换方法。
[0004]本发明的技术解决方案是:本发明提供了一种矢量上下文切换方法,其特殊之处在于:所述矢量上下文切换方法包括以下步骤:
[0005]I)创建任务;所述任务包括前继任务以及后继任务;所述前继任务是被切换出处理器的任务;所述后继任务是切换进处理器的任务;
[0006]2)根据用户输入的参数判断步骤I)中创建的任务是否是矢量任务;若是,申请矢量上下文空间并将该空间的首地址记录在任务控制块中的成员altivecContext中;若否,则设置任务控制块中的成员altivecContext为NULL ;
[0007]3)判断前继任务和后继任务的类型;
[0008]4)根据前继任务和后继任务的类型对矢量上下文进行切换。
[0009]上述步骤3)中前继任务和后继任务的类型包括:矢量任务切换到矢量任务、矢量任务切换到非矢量任务、非矢量任务切换到矢量任务以及非矢量任务切换到非矢量任务。
[0010]上述步骤3)中的类型是矢量任务切换到矢量任务时,所述步骤4)的具体实现方式是:对矢量任务的上下文进行保存和恢复。
[0011]上述步骤3)中的类型是矢量任务切换到非矢量任务时,所述步骤4)的具体实现方式是:暂时不进行矢量上下文的保存,将前继任务控制块中的成员altivecContext传递给后继任务,仅将矢量任务的矢量上下文地址传递给了非矢量任务,将该保存工作推迟到切换矢量任务时才进行。
[0012]上述步骤4)中将前继任务控制块中的成员altivecContext传递给后继任务的具体实现方式是将前继任务控制块中的成员altivecContext进行标记后赋值给后继任务控制块中的成员altivecContext。
[0013]上述步骤3)中的类型是非矢量任务切换到矢量任务时,所述步骤4)的具体实现方式是:
[0014]4.1)判断前继任务控制块中的成员altivecContext是否为NULL ;若是,贝U进行步 4.2);若否,则进行步骤4.3);
[0015]4.2)在该任务运行前,没有运行过矢量任务:不需要进行矢量上下文的保存工作,仅需要恢复矢量上下文;
[0016]4.3)在该任务运行前运行过矢量任务:如果前继任务的矢量上下文与后继任务的矢量上下文不一致,则将矢量上下文保存到前继任务控制块所传递的上下文地址中,并清除前继任务控制块中的标记,恢复后继任务的矢量上下文,否则清除前继任务的矢量上下文。
[0017]上述步骤3)中的类型是非矢量任务切换到非矢量任务时,所述步骤4)的具体实现方式是:
[0018]4.1)判断前继任务控制块中的成员altivecContext是否是NULL ;若是,贝U进行步
4.2);若否,则进行步骤4.3);
[0019]4.2)在该任务运行前,没有运行过矢量任务;既不需要进行矢量上下文保存也不需要进行矢量上下文恢复;
[0020]4.3)在该任务运行前运行过矢量任务,将前继任务的矢量上下文传递到后继任务。
[0021]上述步骤4.3)中将前继任务的矢量上下文传递到后继任务的具体实现方式是将前继任务控制块中的成员altivecContext的值赋给后继任务控制块中的成员altivecContext,然后清除前继任务控制块中的altivecContext。
[0022]本发明的优点是:
[0023]本发明是仅在需要切换矢量上下文时进行切换,即仅在切换矢量任务时才切换矢量上下文。具体来说就是如果被切换的是非矢量任务,那么认为在该任务中不会破坏矢量上下文,即不需要保存矢量上下文,直到切换到矢量任务时才进行矢量上下文的保存和恢复工作,有效的提高了操作系统任务切换的性能。
【附图说明】
[0024]图1是本发明所提供方法的流程示意图。
【具体实施方式】
[0025]在任务创建时,判断用户输入的参数,如果是矢量任务,那么申请矢量上下文空间并将该空间的首地址记录在任务控制块中的成员altivecContext中;否则设置该成员为NULL。
[0026]在任务切换时(称被切换出处理器的任务为前继任务,称切换进处理器的任务为为后继任务),可能会发生以下四种情况:
[0027]1、矢量任务切换到矢量任务:
[0028]在这种情况下,由于两个任务均会进行矢量运算,所以需要保存和恢复矢量上下文。
[0029]2、矢量任务切换到非矢量任务:
[0030]在这种情况下,由于后继任务不会进行矢量运算,所以可以暂时不保存上下文。
[0031]3、非矢量任务切换到矢量任务:
[0032]在这种情况下,由于后继任务会进行矢量运算但是前继任务不进行矢量运算,所以需要恢复上下文。
[0033]4、非矢量任务切换到非矢量任务:
[0034]在这种情况下,由于两个任务均不会进行矢量运算,所以不需要保存和恢复上下文。
[0035]根据以上四种情况分别采取不同的处理措施:
[0036]1、矢量任务切换到矢量任务
[0037]在这种情况下,进行矢量上下文保存和恢复。
[0038]2、矢量任务切换到非矢量任务
[0039]在这种情况下,暂时不进行矢量上下文的保存工作,而是将前继任务控制块中的成员altivecContext传递给后继任务,即将前继任务控制块中的成员altivecContext进行标记后赋值给后继任务控制块中的成员altivecContext。此时,系统不需要进行矢量上下文的保存工作,仅将矢量任务的矢量上下文地址传递给了非矢量任务,将该保存工作推迟到切换矢量任务时才进行。
[0040]3、非矢量任务切换到矢量任务
[0041]在这种情况下还需要区分为两种情况:
[0042]3.1)前继任务控制块中的成员altivecContext为NULL,即在该任务运行前,没有运行过矢量任务:在这种情况下,不需要进行矢量上下文的保存工作,仅需要恢复矢量上下文。
[0043]3.2)前继任务控制块中的成员altivecContext不为NULL,即在该任务运行前运行过矢量任务:在这种情况下,如果前继任务
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1