任务切换装置、方法和程序 【技术领域】
本发明涉及操作系统中的任务切换,尤其涉及通过对分配了任务的时间段(time slot)进行切换来切换在处理器内应执行的任务的任务切换装置。
背景技术
操作系统的主要功能是硬件管理、任务管理、数据管理、和输入输出管理。其中任务管理是管理任务的执行顺序的功能,是用于使CPU和存储器以及输入输出装置等高效工作的重要功能。
所谓任务是指对程序的起动及其执行、结束等流程进行综合管理的控制单位。在操作系统的管理下工作的程序作为任务被处理,与程序的执行有关的操作系统的操作全部以任务为单位被执行。
决定任务执行顺序的算法之一,有分时调度法和按优先度地切换法。分时调度法对任务分配某一执行时间,在被分配的时间期间,处理器的执行权属于任务,被分配的时间过后,执行权转移给别的任务。这样,平等地按设定的时间给所有的任务分配执行权。
并且,关于按优先度的切换方法,专利文献1和2均公开了按任务的优先度来切换任务的调度装置。
[专利文献1]特开2000-20323号公报;[专利文献2]特开平4-101233号公报。
但是,根据上述现有技术,存在的问题是:为了确保各任务的必要性能,程序员在指定各个任务的优先度方面,程序设计困难,并且一旦设计结束后缺乏更改的灵活性。
【发明内容】
本发明的目的在于提供一种任务切换装置,该任务切换装置使得指定用于满足各任务必要性能的优先度的程序设计容易进行,具有程序设计的灵活性。
为了达到上述目的,本发明的任务切换装置,在处理器中通过切换时间段来切换分配到时间段的任务的执行,其特征在于,具有:
分配装置,把第1类的多项任务都分配到一个时间段,把与第1类不同的第2类的多项任务分配到一个特定的时间段;
任务选择装置,在切换后的时间段不是上述特定的时间段时,选择分配到该时间段的任务,在切换后的时间段是上述特定的时间段时,从第2类的多个任务中选择一个任务来执行。
根据该结构,第1类任务按一对一分配时间段的结果,对第1类任务,在包括全部时间段的一个周期内至少选择执行一次,所以能保证连续的处理性能。另一方面,第2类任务多个对一个地分配时间段的结果,不能保证连续处理性能。其结果,程序员对需要满足连续处理性能的任务,不必考虑优先度,分为第1类即可。并且,程序员对不要求处理性能的任务分为第2类即可。这样,对所有的任务都不必单独给定优先度,能够方便于确保处理性能用的程序设计,能确保程序设计的灵活性。
在此,也可以是:上述第2类任务具有优先度,上述任务选择装置在第2类的多项任务中按照优先度选择一项任务。
根据该结构,第2类任务从优先度高的开始执行,所以,程序员对第1类任务不必考虑优先度,把不要求连续处理性能的任务分为第2类,赋予优先度即可,所以,能使程序设计和更改容易进行。
并且,也可以采用这样的结构:上述分配装置,从预定的一个周期的时间中减去分配第1类任务的时间段的合计时间,把剩余的时间作为上述特定时间段的时间。
根据该结构,上述第2类任务在上述剩余时间内执行,所以,能尽量排除由于第2类任务的执行而影响第1类各项任务的处理性能。
再者,也可以采用这样的结构:上述分配装置每次把第1类新任务分配到时间段时,再次计算上述剩余时间,作为上述特定时间段的时间。
根据该结构,既能保证第1类各项任务的处理性能,又能动态地为第2类任务分配最大限度的剩余时间。
并且,也可以采用这样的结构:上述第1类任务是具有分配时间的指定的任务,上述分配装置在欲增加第1类新任务时,如果已分配的任务的分配时间的合计和新任务的分配时间的总和超过一周期的时间,则拒绝该新任务的时间段分配。
根据该结构,能排除第1类新任务的增加,保证已有第1类任务的处理性能。
再者,上述任务切换装置也可采用这样的结构,它具有:
存储装置,存储锁定信息,该锁定信息表示是否因某一任务对可由任务存取的资源的存取而使该资源处于锁定状态;以及,
变更装置,在执行中的任务欲存取锁定状态资源时,把该任务从可执行状态变更为等待状态,在该资源的锁定状态被解除时把等待状态的任务变更为可执行状态,
上述任务选择装置把处于等待状态的任务从选择对象中排除。
并且,上述任务切换装置也可以采用这样的结构:具有转移装置,在第1类和第2类任务中可执行状态的任务一个也不存在的情况下,使上述处理器转移到省电状态。
在此,上述处理器至少具有2个用于保存任务的前后关系的寄存器组,上述任务切换装置还具有切换装置,该切换装置把寄存器组中的一个供给执行中的任务使用,在另一个寄存器组中通过后台处理使下一次应执行的任务的前后关系复原,当时间段切换时,对寄存器组进行切换。
根据该结构,对寄存器组进行切换来取代用程序来执行的保存和复原前后关系,所以能使任务切换高速化。并且,使下一次应执行的任务的前后关系通过后台处理来恢复,所以能高效利用处理器时间的空闲处理等,实现任务切换的高速化。
如以说明的那样,根据本发明的任务切换装置,程序员不必对需要满足连续处理性能的任务考虑优先度,只要分为第1类即可;对不要求处理性能的任务分为第2类即可。这样,不必对全部任务分别赋予优先度,其效果是:容易进行用于确保处理性能的程序设计,能确保程序设计的灵活性。
并且,第2类任务从优先度高的开始执行,所以程序员对第1类任务不必考虑优先度,把不要求连续处理性能的任务分为第2类,赋予优先度即可,容易进行程序设计和更改。
再者,本发明的任务切换方法及其程序,也是和上述一样的结构,具有同样的作用和效果。
本发明的上述和其他目的以及其优点和特征,将通过结合下述附图来举例详细说明本发明的实施例,会更加明了。
【附图说明】
图1是表示本发明的实施方式中进行任务切换的程序执行装置的主要部分结构的方框图。
图2是表示时间段存储部内的时间段信息和任务存储部内的任务管理模块的具体例。
图3表示在mutex存储部内存储的mutex管理块和任务存储部内存储的等待队列。
图4是表示时间段切换部和任务选择部进行任务切换的情况的说明图。
图5是表示B类任务结束时的任务切换情况的说明图。
图6是表示B类任务锁定操作失败时的情况的说明图。
图7是表示A类任务锁定操作失败时的情况的说明图。
图8表示任务锁定解除时的情况的说明图。
图9表示任务锁定解除时的情况的另一说明图。
图10是表示调度处理的详细内容的流程图。
图11是表示任务增加处理详细内容的流程图。
图12是表示mutex控制部进行锁定处理的详细内容的流程图。
图13是表示mutex控制部进行mutex锁定处理的详细内容的流程图。
图14是表示程序执行装置的变形例的结构图。
【具体实施方式】
[整体结构]
图1是表示本发明的实施方式中进行任务切换的程序执行装置的主要部分结构的方框图。该图以模块示出通过在处理器中执行作为操作系统的一部分功能进行任务切换的软件来实现的功能。处理器的硬件结构可采用一般结构。
该程序执行装置构成为:对具有分配时间的指定的任务和具有优先度的任务这两种任务在一个处理器中进行处理,确保前者的任务的必要性能,并按照优先度选择执行后者的任务。
如该图所示,程序执行装置由任务调度部10、程序存储部20、定时控制部30和执行控制部40构成。
任务调度部10进行2种任务的调度。也就是说,任务调度部10对前者的任务,对具有分配时间指定的各项任务分配一个时间段,进行在预定的周期内至少选择一次各项任务的分时调度。任务调度部10对后者的任务,进行在1个周期内的上述时间段合计时间的剩余时间内,在具有优先度的多项任务中选择一个任务的调度。在此,所谓时间段,是指处理器中执行程序的时间在周期内按分配时间划分的时间。
程序存储部20存储作为任务调度部10的调度对象的任务主体的程序以及与程序有关的信息。
定时控制部30,在由任务调度部10每次设定分配时间时,开始计算时间,当达到该分配时间时输出“时间已过(time out)”。为了通知时间段的切换时间,向任务调度部10通知该时间已过。
执行控制部40执行由任务调度部10选择的任务。执行控制部40相当于执行处理器任务的硬件。
[任务调度部10的结构]
任务调度部10由任务接受部11、时间段存储部12、任务存储部13、时间段切换部14、任务选择部15、mutex存储部16和mutex控制部17构成。
<1、任务接受部11>
任务接受部11根据来自用户操作和用户程序等的指示,接受任务增加请求,从程序存储部20中作为与该任务有关的信息,读出<任务信息>、<优先度>和<分配时间>,生成时间段信息和任务管理块,使该任务成为调度的对象,并设定到时间段存储部12、任务存储部13中。
在此,<任务信息>由程序开始地址和栈指针构成。程序开始地址是写入任务的起始地址。栈指针是位置信息,表示在发生任务切换时暂时保存任务状态的存储地址。
<优先度>是对于具有分配时间的指定任务和具有优先度的任务进行区分的标准,且在为后者时表示优先度,具有这两种意思。
也就是说,优先度0的任务是具有分配时间的任务(以下称为A类任务),优先度不是0的任务是具有优先度的任务(以下称为B类任务),其意思如下。
A类任务是具有分配时间指定的任务,在任务调度部10中,对时间段按1对1对应地分配,在该时间段的分配时间内切实执行。由于以执行时间的长度来决定处理性能,所以,应当把所谓时间驱动(time driven)型的任务作为A类。例如,动画数据的译码/编码处理、声音数据的译码/编码处理等连续需要一定的处理性能的任务,希望作为A类。
B类任务和另一B类任务一起被分配到一个时间段,在该时间段保持的分配时间内,执行优先度高的任务。在此,优先度从高到底依次取1、2、3……的值。所谓事件驱动型的任务应当作为B类。例如,把用户操作作为事件,用文字和静态图像构成的菜单进行显示的处理等,不连续需要一定的处理性能,但不定期地随时发生的任务希望作为B类。在该情况下,例如越是处理严格要求响应速度的事件的任务,可使其优先度越高。
<分配时间>仅在任务为A类时有效,是对与任务相对应的时间段的分配时间进行指定的值。该分配时间和优先度由程序指定。
并且,任务接受部11,在有来自用户操作和用户程序等的指示的情况下,或者在任务执行结束的情况下,删除时间段存储部12、任务存储部13中存储的该任务的时间段信息和任务管理块。
<2、时间段存储部12>
时间段存储部12用于存储时间段信息,该信息用于生成作为任务切换标准的时间段。
图2是表示时间段存储部12内的时间段信息和任务存储部13内的任务管理模块的具体例。如该图所示,时间段存储部12存储多个时间段信息100、110、120……。时间段信息100表示分配了多项B类任务的时间段。该时间段信息100中可以不存在B类任务,也可以预先生成。此外的时间段信息110、120……表示分配了A类任务的时间段。
时间段信息100与时间段之一相对应,由分配时间100a、标记100b和指针100c构成。其他时间段信息也一样。
分配时间表示可执行与该时间段相对应的任务的时间。当任务实际执行的时间达到分配时间时,切换到下一时间段上。与A类任务相对应的分配时间110a、120a……,在生成时间段信息的同时进行设定。与B类多项任务相对应的分配时间100a作为从同步寄存器18中保存的一个周期的时间中,减去其他时间段的分配时间110a、120a……的合计时间的剩余时间。该剩余时间在每次增加、删除任务时发生变化。
执行标记表示该时间段有效或无效。在生成时间段信息时设定为有效,在执行任务过程中存取地址的资源处于锁定状态而成为等待状态时设定为无效,之后,从等待状态返回到可执行状态时设定为有效。在执行标记表示无效时,时间段切换部14将其视为不存在时间段信息。
指针指向与该时间段相对应的任务管理块。
这些时间段信息100、110、120……构成数组,其顺序表示时间段的生成顺序。
<3、任务存储部13>
任务存储部13存储分配到时间段的与任务相对应的任务管理块200、201……。任务管理块200、201……分别与一个任务相对应,是用于管理该任务的信息。
任务管理块200由任务信息200a、优先度200b、连接地址200c构成。
任务信息200a包括程序开始地址(或应当再起动程序的地址)和栈指针。在生成任务管理块时,对由任务接收部输入的上述任务信息进行保存。当切换任务时,表示中断的任务的执行地址和这时的栈指针值。
优先度200b表示该任务的优先度。
在该任务作为要素与执行队列或等待队列相连接的情况下,连接地址200c保存一指针,该指针指向作为执行队列或等待队列中的下一个要素的任务管理块。
具体来说,在与A类任务相对应的任务管理块中,连接地址(210c等),在该任务处于可执行状态的情况下为nu11(无效);在该任务处于等待状态的情况下为指向等待队列的下一要素的指针。在与B类任务相对应的任务管理块中,在该任务处于可执行状态的情况下,连接地址200c为指向形成执行队列的下一要素的指针;在该任务处于等待状态的情况下,连接地址200c为指向形成等待队列的下一要素的指针。
<4、时间段切换部14>
时间段切换部14在当前时间段内,当任务执行时间达到分配时间时,进行时间段的切换。由定时控制部30用时间已到(time out)来通知是否已达到分配时间。收到通知的时间段切换部14选择下一时间段信息。在本实施例中,下次选择的时间段信息按照该排列顺序。时间段切换部14从已选择的时间段信息中取得分配时间,设定到定时控制部30。由此,开始下一时间段的分配时间的计算。
<5、任务选择部15>
任务选择部15在上述时间段切换部14切换时间段时,以及有来自执行中的程序中的指示时,将当前执行中任务的执行地址、栈指针等在该任务的任务管理块中作为任务信息进行保存,从应下次执行的任务的任务管理块中取出任务信息,输出到执行控制部40。与此同时也进行执行中任务的前后关系(寄存器数据等)保存和应下一次执行的任务的前后关系的恢复。这样,应当下次执行的任务变成执行状态。
图4是表示时间段切换部14和任务选择部15进行任务切换的情况的说明图。在该图中,T是在周期寄存器18中保存的周期;t0是与B类任务相对应的时间段信息100所对应的时间段,其长度表示分配时间。t1~tn是分别与A类的n个任务相对应的n个时间段信息110、120……所对应的时间段。其长度表示分配时间。S表示由时间段选择部14和任务选择部15进行任务切换的调度处理。如该图所示,在时间段t0开始时的调度处理中,选择执行B类的多项任务B1、B2、B3中优先度最高的任务B1。在时间段t1开始时的调度处理中,执行与时间段信息110相对应的任务A1。对时间段t2~tn也是一样。这样,A类任务在一个周期T之间一定执行一次。
此外,图5是表示在时间段t0中执行中的任务结束时的任务切换情况的说明图。在该图中,任务B1在本身的处理已结束的情况下,将此意通知任务选择部15。根据该通知,进行任务B1的删除处理(图中的E)和任务的切换处理(图中的S1)。在删除处理E中因为任务B1已结束,所以删除任务B1的任务管理块。在切换处理S1中,在任务B1的任务管理块被删除后,利用任务选择部15选择并执行优先度最高的任务B2。这样,B类的多项任务在被分配的时间段t0内从优先度最高的任务开始依次执行。
<6、mutex存储部16>
mutex(mutual exclusion:互相排斥)是指在2项以上的任务竞争存取一个资源的情况下进行调解的机构,是包含在mutex控制部17内的功能,通过对资源的锁定状态和锁定解除状态进行管理的对象(object)(程序)来实现。该机构对可能有2个以上的任务竞争存取的每个资源均进行配置。当某任务在mutex的锁定操作中成功时,mutex(或资源)变成锁定状态,即使其他任务进行锁定操作也要等到变成锁定解除状态。这样,锁定操作成功的任务能专用相应的资源。当进行了锁定操作的任务进行锁定解除操作后,其他任务能够进行锁定操作。执行中的任务在存取资源的情况下,仅在对与该资源相对应的mutex进行锁定操作成功时才能存取资源。在已处于锁定状态的情况下,要等待到变成锁定解除状态。
图3表示在mutex存储部16内存储的mutex管理块300、301……和任务存储部13内存储的等待队列。
在该图中,mutex管理块300、301……对应于有2个以上的任务竞争存取的可能性的各个资源被设置。
mutex管理块300包括锁定变量300a和指针300b。
锁定变量300a表示2种状态(1:锁定状态;0:锁定解除状态)中的某一种。初始值为0,为了从锁定解除状态变成锁定状态,必须进行锁定操作。为了从锁定状态变成锁定解除状态,只允许进行了锁定操作的任务进行操作。
指针300b指向等待队列的起始任务管理块,该任务管理块表示在锁定状态下进行了锁定操作的任务(锁定操作失败的任务)。与等待队列相链接的任务管理块200′、201′……,与锁定操作失败的任务相对应,分别形成按连接地址200′c、201′c……依次连接的等待队列。
<7、mutex控制部17>
mutex控制部17,当进行mutex的锁定操作和锁定解除操作时,进行锁定变量操作,并进行对任务选择部15的任务管理块的操作请求和对时间段切换部14的通知和执行标记的操作请求。
图6是表示B类任务锁定操作失败时的情况的说明图。在该图中表示对在时间段t0中执行中的任务B1欲存取的资源所对应的mutex进行锁定操作(图中的L:锁定处理),并失败的情况。在该mutex已是锁定状态的情况下,任务B1在锁定操作中失败,所以,如该图所示通过锁定处理L从任务存储部13的执行队列转移到等待队列中,并且,通过任务切换处理S1切换到任务B2。在该mutex从锁定状态变成锁定解除状态期间,任务B1被从执行队列中排除,所以任务B1被从调度对象中排除。
这样,在与B类任务相对应的时间段t0,当执行中的任务变成等待状态时,切换到下一顺序的任务。
并且,任务B1在锁定处理中,在锁定操作成功的情况下,不切换到任务B2,在时间段t0期间继续执行(存取资源)。
图7是表示A类任务锁定操作失败时的情况的说明图。在该图中,在A类任务A2锁定操作失败,转移到等待队列的情况下,即使未到时间段t0的分配时间,也能通过调度处理(图中为S)切换到该时间段上。与A类任务相对应的时间段中,只分配一个任务,所以即使尚有时间段的剩余时间,也要切换时间段。
并且,在任务A2锁定操作成功的情况下,在已到时间段t2的分配时间时,切换到下一时间段。
图8表示任务锁定解除时的情况的说明图。如该图所示,在执行中的任务A1对处于锁定状态的mutex进行锁定解除的情况下,通过锁定解除处理R,与该mutex相对应的等待队列R的任务B1返回到执行队列B中。这样,任务B1在选择了与其以后的任务相对应的时间段t0的情况下执行。
图9表示任务锁定解除时的情况的另一说明图。在该图中在执行中的任务A2对处于锁定状态的mutex进行锁定解除的情况下,通过锁定解除处理R,与该mutex相对应的等待队列S的任务B2返回执行队列B。与图8不同,任务B2返回到任务B1和B3之间。这是因为按优先度顺序排列返回执行队列。该情况相当于在任务B2位于等待队列中的期间,生成相优先度比其更高的任务B1等的情况。在此之后选择时间段t0的情况下,选择执行优先度最高的任务B1。
[处理的详细内容]
以下,关于本发明的程序执行装置中处理的详细内容,说明调度处理(图4~图9中的S)、mutex锁定处理(图6、图7中的L)和mutex锁定解除处理(图8、9中的R)、任务切换处理(图5、图6中的S1)、任务增加处理、任务删除处理(图5中的E)。
<1、调度处理>
图10是详细示出调度处理的的流程图。该图中,在定时控制部30把时间已到通知给时间段切换部14时、以及执行中任务在锁定操作中失败时(参见图7),调度处理被调用并开始执行。图中,i为用于计数执行标记无效的时间段信息的变量,(n+1)表示存在的时间段信息的个数。
首先,时间段切换部14把作为计数器使用的变量i初始化为0(S401),将当前执行中任务的状态保存到任务管理块中(S402)。
然后,任务选择部15在变量i上加1(S403),选择时间段信息排列中的下一顺序的时间段信息,在没有下一要素的情况下,选择时间段信息排列的起始要素,取得已选定的时间段信息(S404)。再者,时间段切换部14取出已选的时间段信息中所包含的分配时间,设定到定时控制部30(S405)。这样,定时控制部30开始计数,一直计数到分配时间结束。
再者,时间段切换部14对已取得的时间段信息是否是时间段信息100进行判断。也就是说,对下面应当执行的任务是B类还是A类进行判断(S406)。
在判断结果是A类的情况下,取得该时间段信息中的指针指向的任务管理块(S407),若时间段信息中的执行标记是1(有效)(S408),则根据任务管理块中的任务信息,使该任务状态恢复(S411)。这样,切换到A类任务上。
并且,在判断结果为B类的情况下,时间段切换部14对在时间段信息100中的指针上是否连接了任务管理块的执行队列(指针有效与否)进行判断(S412)。在判断为已连接了执行队列的情况下,取得优先度最高的起始任务管理块(S413),根据该任务管理块中的任务信息,使该任务状态恢复(S411),这样,切换到B类任务中优先度最高的任务上。并且,在判断为未连接执行队列的情况下,不存在能够执行的B类任务。在此情况下,为了选择下一个时间段信息,返回S403。
在上述S408中,若执行标记为无效(S408:否),则时间段切换部14再次返回到S403、S404(S409:否),选择下一时间段。并且,通过这样反复进行,在n+1任务管理信息为无效的情况下(S409:是),也就是说,能够执行的任务一个也没有的情况下,使程序执行装置转到省电状态(S410)。
这样,由任务调度部10进行调度处理时,进行A类任务和B类任务不同的调度。也就是说,任务调度部10,在选择了A类时间段(时间段信息1、2、……所对应的时间段)的情况下,切换到对该时间段仅分配了一个的A类任务。并且,任务调度部10,在选择了已分配B类任务的时间段(与时间段信息100相对应的时间段)的情况下,切换到多个B类任务中优先度最高的任务。
并且,图5和图6所示的切换处理S1与图10的调度处理大致相同即可。例如在切换处理S1中,也可以从图10调度处理中的S412开始。
<2、任务增加处理>
图11是详细示出任务调度部10中的任务增加处理的流程图。该任务增加处理,在由用户操作和用户程序等发出任务增加请求时开始进行。
接受任务增加请求,任务接受部11取得应增加的任务的任务信息、优先度和分配时间(S501),对应当增加的任务类别是A类还是B类(该优先度是否为0)进行判断(S502)。
在判断为应增加的任务是A类的情况下,任务接受部11对能否增加时间段进行检查。也就是说,任务接受部11从时间段存储部12中读出与A类任务相对应的时间段信息110、120、……内的分配时间,计算出合计值,在该合计值上加上应当增加的任务的分配时间后的总和,如果没有超过周期寄存器18内保存的周期值,那么就判断为能够增加与该任务相对应的时间段(S503)。如果超过该周期值,那么对增加请求返回一个错误(S504)。
如果判断为能够增加,那么任务接受部11生成已设定了分配时间和执行标记(这时为0)的时间段信息(S505),生成包括任务信息和优先度在内的任务管理块(S506)。
在生成了时间段信息和任务管理块之后,任务接受部11为了表示其对应关系,把任务管理块的存放位置设定为时间段信息的指针(S507)。最后使该时间段的执行标记生效(S508)。
在上述S502中判断出应当增加的任务是B类的情况下,任务接受部11生成应当增加的任务的任务管理块(S509),增加到与时间段信息100相对应的执行队列中,向执行队列内的增加,按照从执行队列的前头开始按照优先度高低顺序排列,寻找应当增加的位置,增加该任务管理块(S510)。并且,在时间段信息100内的执行标记中设定1(S508)。
这样,在增加处理中,对已有的时间段信息和任务管理块(参见图2),在应当增加的任务是A类的情况下,增加新的时间段信息和新的任务管理块;在应当增加的任务是B类的情况下,在与执行队列的优先度相对应的位置上增加新的任务管理块。
并且,图5所示的任务删除处理E,在应当删除的任务是A类的情况下,删除与该任务相对应的时间段信息和任务管理块;在应当删除的任务是B类的情况下,从与该任务相对应的任务管理块执行队列中删除。
<3、mutex锁定处理>
图12是详细示出mutex控制部17进行锁定处理的的流程图。该锁定处理是图6和图7的锁定处理L,是为了于在执行中的任务存取资源之一前,锁定与该资源相对应的mutex,由执行中的任务来进行调用的处理。
被执行中的任务调用时,mutex控制部17对与资源相对应的mutex管理程序进行锁定变量的读出和有效值“1”的写入(S601)。为了防止在该读出和写入之间因其他任务进行同样的处理而使值产生矛盾,用一个指令来进行读出和写入。这可以利用处理器中安装的read-modifg-write(读出修改写入)指令来实现。
如果读出的锁定变量是0(锁定解除状态)(S602:是),那么,是锁定操作的成功,通过上述写入使“1”设定完毕,所以结束锁定处理。这样,执行控制返回到调用锁定处理的任务,该任务专有与mutex相对应的资源,可对其进行存取。
如果读出的锁定变量是1(锁定状态)(S602:否),则资源已被其他任务专用,所以,调用元的任务在成为锁定解除状态之前不能存取该资源。在此情况下,mutex控制部17对调用元的任务是A类还是B类进行判断。
如果判断结果是A类(优先度为0)(S603:是),则使对应的时间段信息的执行标记无效(S604)。这样,该时间段信息从调度对象中除去。并且,mutex控制部17把调用元的任务的任务管理块从执行队列中取出,连接到该mutex管理块的等待队列上(S605)。与等待队列相连接是为了表示处于哪个mutex的锁定解除等待(哪个资源的专用状态解除等待)。再者,mutex控制部17调用调度处理S(S606)。这样,该时间段即使在分配时间的过程中,也能强制切换到下一时间段上(参见图7)。
而且,在S604中,不用执行标记无效,代之可以把时间段信息的指针变更为指向B类任务的执行队列起始地址。这样,B类任务即使在该时间段也能执行。
若判断结果是B类(优先度不是0)(S603:否),则mutex控制部17把调用元的任务的任务管理块从执行队列中取出(S607)。这样把该任务从调度对象中除去。再者,为了表示等待哪个资源的专用状态被解除,把上述任务管理块增加到mutex管理块的等待队列内(S608)。并且,通过调用任务切换处理S1,切换到下一顺序的任务(S609)。这样,在时间段的分配时间的剩余时间内执行下一顺序的任务(参见图6)。
<4、mutex锁定解除处理>
图13是详细示出mutex控制部17进行mutex锁定处理的流程图。该处理是图8和图9所示的锁定解除处理R,是当执行中的任务结束对一个资源的存取时,由该执行中的任务调用的处理。
当被调用时,mutex控制部17从与该资源相对应的mutex管理块的等待队列中取出开头的任务管理块(S701),根据取出的任务管理块内的优先度来判断处于等待状态的任务的种类(S702)。mutex控制部17若优先度为O(A类),则将取出的任务管理块所对应的时间段信息中的执行标记设定为1(有效)(S703)。取出的任务管理块所对应的时间段信息,例如在执行标记为0的时间段信息所连接的任务管理块中,通过检索具有与取出的任务管理信息相同的任务信息的任务管理块,加以确定即可。再者,mutex控制部17在该mutex管理块内的锁定变量中写入0(使其成为锁定解除状态)(S705)。
并且,如果从等待队列中取出的任务管理块的优先度不是0(B类),那么,mutex控制17把该任务管理块增加到B类的执行队列中。向执行队列中的增加,是在从开头起按优先度高的顺序进行排列的位置上增加(S704),在该mutex管理块内的锁定变量中写入0。
这样,处于等待状态的任务返回到能够执行状态,所以,变成调度对象,在下次处于执行状态时可以再次进行资源的锁定操作。
如以上说明,根据本发明实施方式的程序执行装置,A类的任务按照1对1来分配时间段的结果,在一个周期内一定能被选择执行,所以能继续保证处理性能。另一方面,B类任务按照多对1来分配一个时间段的结果,不能继续保证处理性能,而从优先度高的开始执行。其结果,程序员对于必须继续满足处理性能的任务,也不必考虑优先度,仅将其分成A类即可,对于不要求处理性能的任务,分成B类即可。这样,不必对全部任务单独规定优先度,容易进行为确保处理性能用的程序设计,能确保程序设计的灵活性。
而且,在上述实施方式中,说明了分配时间指定包括在任务信息中的例子,但也可以用这样的结构:任务接受部11从外部接受分配时间指定。并且,在没有分配时间指定的情况下,也可以作为已定的分配时间。
并且,对于A类任务,一个任务分配了一个时间段,但也可以对1个任务分配2个以上的时间段。
再者,对于B类任务,对多个任务分配一个时间段,但也可以分配固定的2个以上的时间段中的某一个。例如,也可以是:把优先度为奇数的任务分配给时间段A,把偶数的任务分配给时间段B。
并且,也可以是:在mutex管理块内,设置用于记录任务名称的所有任务栏,当锁定被解除时,把所有任务栏改写成从队列中取出的任务名称,使锁定变量仍保持有效状态。在此情况下,所有任务栏内所存储的任务,可以不进行锁定操作,使其能切实使用资源。
最后,图14示出程序执行装置的变形例,与图1所示的程序执行装置的结构相比较,不同点是增加了在切换时间段的同时能够进行切换的8个寄存器组RS0~RS7。
一个寄存器组与一个时间段相对应,保存任务的前后关系。
B类的多个任务与一个寄存器组相对应,所以在切换到A类任务的时间段时,任务调度部10和上述实施方式一样,对寄存器组RS0进行保存和复位。
A类任务与一个寄存器组相对应,所以切换到A类任务的时间段上时,任务调度部10进行寄存器组的切换来代替前后关系的保存和复位,在此情况下不需要前后关系的保存和复位,所以,能使任务切换高速化。因此,周期寄存器18的周期和时间段的分配时间能缩短到极小。例如A类时间段时间能缩短到保存和复位所需的时间长短,能缩短一个周期。
而且,可以是这种结构:图14的寄存器组的数可以是任意个数,在时间段的个数多于寄存器组的数的情况下,例如,寄存器组的某一个由多个时间段来兼用,对该寄存器组,在时间段切换时,进行前后关系的保存和复位。
并且,在图14中寄存器组的数也可以定为2。在此情况下,也可以将寄存器组之一作为执行中的任务所使用的表面寄存器组;另一个作为将下次执行的任务的前后关系通过后台处理而复位用的里面寄存器组。若采用这种结构,则可以利用空闲状态,通过后台处理使前后关系复位,通过高效地切换里面寄存器组和表面寄存器组这2个寄存器组,能实现高速化。
再者,当寄存器组的个数为2时,存在通过锁定解除从等待状态返回到可执行状态的任务,在该任务是下次执行的任务的情况下,返回到背后寄存器组的前后关系可能不同于下次执行的任务的前后关系。对此可采用以下结构。也就是说,在锁定解除处理(参见图13)中,在S705的紧前面,增加这样一个步骤:在该任务的任务管理块内设定一种通知标记,用于通知存在从等待状态恢复到可执行状态的任务,在调度处理(参见图10)中,在S411的紧前面增加这样的步骤:如果通知标记表示是从等待状态返回的任务,则使该任务的前后关系恢复到背面寄存器组之后,切换寄存器组的里面和表面。
以上,用附图和实施方式详细说明了本发明,但显然可做出上述以外的各种变更和修改,因此,不脱离本发明范围的其他变更和修改,均可解释为属于本发明。