任务处理装置制造方法

文档序号:6498538阅读:390来源:国知局
任务处理装置制造方法
【专利摘要】能在多个CPU中同时执行多个任务。在多个CPU上连接有任务控制电路,各CPU执行系统调用命令时,向任务控制电路发送系统调用信号。接到来自CPU0的系统调用信号时,任务控制电路(200)参照处理器管理寄存器,确定CPU0的RUN-任务,接着选择作为执行对象的READY-任务,替换RUN-任务的处理数据与READY-任务的处理数据,以更新处理器管理信息。
【专利说明】
任务处理装置

【技术领域】
[0001]本发明涉及一种OS (Operating System,操作系统)的功能,尤其是涉及一种对应于多处理器的0S。

【背景技术】
[0002]不仅是用于如个人计算机等通用设备的0S,就连如用于移动电话等的专用设备的0S中也逐渐需要高级功能。特别是能够用一个中央处理器(CPU)执行多个任务的OS (以下也将这种类型的0S称作“多任务0S”)正被配置在很多的电子设备中。
[0003]多任务0S将CPU的处理时间分割为单位时间(时间段),并为多个任务顺序分配时间段。每个任务只有当从0S获得时间段时才能够使用CPU。在一个时间段中执行一个任务。由于对于用户而言时间段是非常短的时间,因此多个任务看似是同时执行的。根据这种处理方法,通过在任务A呈等待输入的状态因而暂时不需要用到CPU的处理能力时,通过将执行权交给其它任务B,能够有效利用CPU的处理能力。这里所说的执行权等同于CPU的使用权。
[0004]多任务0S进行的执行权切换被称作“任务转换”。任务转换是在时间段已经届满或任务执行了规定命令时发生。当到达任务转换的执行时刻时,多任务0S将执行中的任务的上下文信息保存到TCB (Task Control Block:任务控制块)中。上下文信息是指任务执行时存储在CPU的寄存器中的数据或与任务执行状态有关的数据。TCB是指用于存储任务固有的信息而在存储器中预留的区域。多任务0S将执行中的任务的上下文信息保存到TCB中后,选择下一个分配执行权的任务,从TCB中读出上下文信息,并将该信息加载到CPU寄存器中。由此,各任务以时间段为单位逐步执行自身的处理。
[0005]多任务0S具有能够高效地执行多个任务的优点,但是也具有新产生与上下文信息的保存/加载相对应的耗时的缺点。通常多任务0S的优点远远大于伴随任务转换的耗时。
[0006]近年来,以嵌入式系统(Embedded System)为中心,正在普及严格要求在规定时间内结束处理的实时0S (以下称作“RT0S (Real-Time Operating System)”)。在这种时间要求严格的RT0S中,存在任务转换时的耗时大大影响系统整体性能的情况。
[0007]本发明人开发出一种利用硬件逻辑来实现任务转换的任务控制装置(参照专利文献4、5)。另外,本发明人还成功实现了利用硬件逻辑来实现队列的管理与中断处理(参照专利文献6、7)。根据这些发明组,大大减少了伴随任务转换的耗时。
[0008][专利文献1]:日本特开平11-234302号公报
[0009][专利文献2]:日本特开平11-272480号公报
[0010][专利文献3]:日本特开2001-75820号公报
[0011][专利文献4]:日本特许4119945号公报
[0012][专利文献5]:日本特许4127848号公报
[0013][专利文献6]:日本特许4088335号公报
[0014][专利文献7]:日本特开2010-049700号公报
[0015][非专利文献I]森久直,坂卷佳寿美,重松宏志,“用于嵌入式控制系统的实时操作系统(OS)的硬件实现“組込办制御'> 7 f A向汁'J 夕4 Λ OS CO /、一卜''々工7*化(Hardware implementat1n of a read-time operating system for embedded controlsystem) ”),东京都立产业技术研究所研究报告,日本,2005年8月4日(收稿),8,第55-58页。


【发明内容】

[0016]本发明要解决的技术问题
[0017]但是,即使是多任务OS,只要CPU的数量为单个,也只是模拟同时执行多个任务。下面,将由单个CPU动作的系统称为“SP系统(Single-Proccessor System:单核处理系统)”,将对应于SP系统的RTOS称为“SPRT0S”。
[0018]另外,正在推广真正通过多个CPU同时执行多个任务的方法。下面,将使多个CPU同时动作的系统称为“MP系统(Mult1-Processors System:多核处理系统)”。另外,将对应于MP系统的RTOS称为“MPRT0S”。
[0019]在MP系统中,需要有多个CPU安全地共有数据的排他控制。根据请求,由于伴随排他控制的耗时(执行成本)变得过大,因此,处理能力没有提高至所期待的程度,甚至处理能力降至SP系统以下。本发明人考虑到如果也能将上述的任务控制电路的设计思想应用于MP系统,是否也能降低伴随排他控制的耗时。
[0020]本发明是根据本发明人的上述着眼点而完成的,其目的在于提供一种用于更高效地在MP系统中执行和控制任务的技术,尤其是提供一种能降低伴随排他控制的耗时的技术。
[0021]为解决技术问题的方法
[0022]本发明的一个方面涉及一种任务处理装置。
[0023]该任务处理装置与多个处理器连接,统一管理多个处理器执行的多个任务的执行状态。处理器在执行系统调用命令时,向任务控制电路发送系统调用信号。
[0024]任务控制电路在从某个处理器A接收到系统调用信号时,通过参照处理器A的处理器ID与注册有该处理器A执行中的任务的任务ID的处理器管理信息,确定处理器A执行中的任务Tl,在READY (预备)状态下主动地从待机中的任务选择作为下一个执行对象的任务T2,使任务Tl的处理数据从处理器A的处理寄存器保存至规定的存储区域,使任务T2的处理数据加载至处理器A的处理寄存器而更新处理器管理信息,由此来执行处理器A的任务转换。
[0025]采用本实施方式,将与作为任务执行主体的CPU等处理器不同硬件的任务控制电路作为MPRTOS来发挥功能。任务处理装置不是根据来自处理器或软件的指示来选择任务,而是通过自身内置的硬件逻辑来主动地选择任务。由于在处理器管理信息中注册有各处理器的任务的执行情况,因此任务控制电路能实时地监视各处理器的状态。
[0026]此外,以上结构要素的任意组合以及通过方法、系统来表现本发明的实现方式,也可以作为本发明的有效方式
[0027]发明效果
[0028]采用本发明,能实现更高效地在MP系统中执行和控制任务。

【专利附图】

【附图说明】
[0029]图1是任务的状态转移图。
[0030]图2是普通RTOS的概念图。
[0031 ]图3是执行软件RTOS的普通CPU的电路图。
[0032]图4是本发明实施方式中的RTOS的概念图。
[0033]图5是基本实施方式中的任务处理装置的电路图。
[0034]图6是图5的CPU的电路图。
[0035]图7是表示执行控制电路152使CPU时钟停止的构造的电路图。
[0036]图8(a)是表示中断请求信号发生时各种信号之间的关系的时序图。
[0037]图8 (b)是表不执行系统调用时各种彳目号之间的关系的时序图。
[0038]图9是用于说明流水线(pipeline)处理中CPU时钟停止时刻的示意图。
[0039]图10是表示状态存储单元和任务切换电路之间的关系的电路图。
[0040]图11是表示普通RTOS进行RUN-任务选择时所采用的任务就绪表的图。
[0041 ]图12是执行选择电路的电路图。
[0042]图13是表示普通RTOS进行信号量处理时所采用的等待信号量表(waitsemaphore list)的图。
[0043]图14是信号量选择电路的电路图。
[0044]图15是任务切换电路的状态转移图。
[0045]图16是图5的任务处理装置中未配置任务控制电路时的任务处理装置的电路图。
[0046]图17是图5的任务处理装置中未配置保存电路时的任务处理装置的电路图。
[0047]图18是虚拟队列实施方式中的任务处理装置的电路图。
[0048]图19是虚拟队列实施方式中的任务控制电路的部分电路图。
[0049]图20是队列控制电路的电路图。
[0050]图21是表示虚拟队列和任务之间的关系的概念图。
[0051]图22是与图21对应的状态寄存器的数据结构图。
[0052]图23是向图21的虚拟队列顺序输入任务(E4)时的概念图。
[0053]图24是与图23对应的状态寄存器的数据结构图。
[0054]图25是向图23的虚拟队列顺序输入任务(E5)时的概念图。
[0055]图26是与图25对应的状态寄存器的数据结构图。
[0056]图27是表示顺序输入的处理过程的流程图。
[0057]图28是最大值选择电路的部分电路图。
[0058]图29是向图25的虚拟队列中逆序输入任务(E6)的概念图。
[0059]图30是与图29对应的状态寄存器的数据结构图。
[0060]图31是表示逆序输入的处理过程的流程图。
[0061]图32是任务选择电路的部分电路图。
[0062]图33是从图29的虚拟队列中抽取任务(E3)的概念图。
[0063]图34是与图33对应的状态寄存器的数据结构图。
[0064]图35是表示抽取处理过程的流程图。
[0065]图36是表示再执行优先型任务调度中的虚拟队列和任务之间的关系的第一概念图。
[0066]图37是表示再执行优先型任务调度中的虚拟队列和任务之间的关系的第二概念图。
[0067]图38是通过普通软件0S进行中断处理的时序图。
[0068]图39是HW中断实施方式的任务处理装置的电路图。
[0069]图40是中断电路的电路图。
[0070]图41是存储部的数据结构图。
[0071]图42是中断操作命令的数据结构。
[0072]图43是表示高速中断处理的过程的顺序图。
[0073]图44是HW中断实施方式的任务切换电路的状态转移图。
[0074]图45是表示HW中断实施方式的任务处理装置进行高速中断处理的处理过程的时序图。
[0075]图46是普通MP系统的硬件结构图。
[0076]图47是示意性地表示存储器的数据结构的图。
[0077]图48是MP实施方式的任务处理装置的电路图。
[0078]图49是MP任务ID的数据结构图。
[0079]图50是处理器管理信息的数据结构图。
[0080]图51是MP实施方式的READY队列的概念图。
[0081]图52是MP实施方式的WAIT队列的概念图。
[0082]图53是与图51、图52对应的状态寄存器的数据结构图。
[0083]图54是表示分派时虚拟队列与任务之间的关系的概念图。
[0084]图55是在任务切换电路中组入处理器切换电路的功能时的任务处理装置的电路图。

【具体实施方式】
[0085]本发明实施方式的任务处理装置100是由电子电路来实现MP系统的任务调度与排他控制,并且提高其处理效率。
[0086]首先,作为“基本实施方式”对通过电子电路来实现SP系统的任务调度的任务处理装置100进行说明。接着,作为“虚拟队列实施方式”对虚拟队列算法的实施方法进行说明,作为“HW中断实施方式”对由硬件主导的中断处理的实施方法进行说明。说明了以上三个例子之后,作为“MP实施方式”对以MP系统为对象的任务处理装置100进行说明。
[0087]下面,提及“本实施方式”时,原则上是表示整个“基本实施方式”、“虚拟队列实施方式”、“HW中断实施方式”以及“HW中断实施方式”。
[0088][基本实施方式(SP系统)]
[0089]本实施方式所示的任务处理装置100由电子电路来实现多任务0S的任务调度功能。在详细说明任务处理装置100之前,首先参照图1说明任务的状态转移。这里虽然是对普通多任务0S中的任务状态转移进行说明,但是这些说明对于任务处理装置100中的任务状态转移同样适用。另外,还对在任务处理装置100中执行的系统调用进行概述。在参照图2和图3描述普通多任务OS的设计思想的基础上,参照图4至图10详细描述本发明实施方式中的任务处理装置100的处理方法。并且,对于与信号量(Semaphore)或互斥量(Mutex)、事件等有关的处理,也适当通过与一般技术进行比较来说明任务处理装置100的特征。
[0090][任务的状态转移]
[0091]图1是任务的状态转移图。
[0092]在多任务处理中,各任务都具有“状态(State) ”。各任务在多个状态之间转换,通常是处于某一个状态。状态转移由“系统调用的执行”和“检测出中断请求信号”来触发。系统调用是各任务执行的命令中的特殊命令。中断请求信号是在按下键盘或点击鼠标、接收通信数据等从外围设备接收规定数据时发生的信号。当然,当分配给各任务的时间段耗尽时也发生状态转移。
[0093]任务大致分为“普通任务”和“特殊任务”两大类。普通任务是响应系统调用而执行的非特殊任务。特殊任务是响应检测出中断请求信号而执行的任务,即所谓的中断处理程序。首先描述各个任务状态,然后说明各种系统调用命令。
[0094](I) STOP状态(休眠状态)
[0095]表示任务处于休眠状态。普通任务和特殊任务都能够处于STOP状态。以下将处于STOP状态的任务称作“STOP-任务”。
[0096]1-1.普通任务
[0097]当其它任务执行指示启动另一项任务的系统调用(下面称作“启动系统调用”)时,处于STOP状态的普通任务转换到后述的READY状态。
[0098]1-2.特殊任务
[0099]特殊任务通常处于STOP状态。当通过后述的任务切换电路210检测出中断请求信号时,特殊任务从STOP状态转换到后述的RUN状态。此时原来处于RUN状态的任务转换到READY状态。
[0100]⑵RUN状态(执行状态)
[0101]表示任务正在执行中,即任务被分配了时间段,获得了 CPU的使用权的状态。普通任务和特殊任务都能够处于RUN状态。下面将处于RUN状态的任务称作“RUN-任务”。多个任务中处于RUN状态的任务始终只能有一个,而不能有两个任务同时处于RUN状态。
[0102]2-1.普通任务
[0103]当执行规定的系统调用时,处于RUN状态的普通任务从RUN状态转换到READY状态或者后述的WAIT状态。处于RUN状态的普通任务在耗尽时间段时,也转换到READY状态。在任意一种情况下,原来处于READY状态的普通任务转换到RUN状态,来替代原来处于RUN状态的普通任务。当检测出中断请求信号时,RUN-任务转换到READY状态。此时,原先处于STOP状态的特殊任务转换到RUN状态。
[0104]当RUN-任务执行使自身结束的系统调用(下面称作“结束系统调用”)时,该RUN-任务转换到STOP状态。
[0105]2-2.特殊任务
[0106]当根据中断请求信号从STOP状态转换到RUN状态的特殊任务结束自身处理时,返回到STOP状态。特殊任务只能够处于STOP状态和RUN状态。
[0107](3) READY状态(可执行状态)
[0108]表示任务处于可被执行的状态。如果处于READY状态的任务从0S得到执行权,则随时都能够转换到RUN状态。只有普通任务可以处于READY状态。以下将处于READY状态的任务称作“READY-任务”。
[0109]当原先处于RUN状态的普通任务由于系统调用的执行而转换到RUN状态以外的状态时,或者当处于RUN状态的特殊任务结束自身处理而转换到STOP状态时,READY-任务进而转换到RUN状态。普通任务只能从READY状态来转换到RUN状态。当有多个处于READY状态的任务时,根据作为上下文信息的一部分的任务优先级,使某一个READY-任务转换到RUN状态。当有多个任务优先级相同的READY-任务时,最先转换到READY状态的任务转换到RUN状态。
[0110]⑷WAIT状态(待机状态)
[0111]表示等待规定的WAIT解除条件满足的状态。当WAIT解除条件满足时,处于WAIT状态的任务转换到READY状态。只有普通任务能够处于WAIT状态。以下将处于WAIT状态的任务称作“WAIT-任务”。关于WAIT解除条件将在后面详述。
[0112]综上所述,只有当任务处于RUN状态时,才能够使用CPU来执行其处理。RT0S—边管理多个任务的状态一边适当切换RUN-任务。由此,实现CPU总是执行某个任务的处理方式。
[0113][系统调用]
[0114]下面附带说明一下系统调用。系统调用大致分为“启动系列”、“WAIT系列”和“SET系列”三种。
[0115](1)启动系列系统调用
[0116]启动系列系统调用是与在STOP状态和READY状态之间进行的转换相关联的系统调用。
[0117]1-1.启动系统调用
[0118]启动系统调用是作为RUN-任务的任务A使另一项普通任务B启动的系统调用。此时,处于STOP状态的普通任务B转换到READY状态。
[0119]1-2.结束系统调用
[0120]执行该系统调用的任务结束自身处理,并从RUN状态转换到STOP状态。结束系统调用也可以是某项任务使另一项任务结束的命令。
[0121](2) WAIT系列系统调用
[0122]WAIT系列系统调用是与在RUN状态和WAIT状态之间进行的转换相关联的系统调用。
[0123]2-1.等待信号量系统调用
[0124]等待信号量系统调用是请求获得信号量(后述)的系统调用。
[0125]2-2.等待互斥量系统调用
[0126]等待互斥量系统调用是请求获得互斥量(后述)的系统调用。
[0127]2-3.等待事件系统调用
[0128]等待事件系统调用是等待建立事件(后述)的系统调用。为了执行,等待事件系统调用接收事件ID、等待标记模式(后述)和标记条件(后述)作为参数。
[0129]在任何一种情况下,WAIT系列系统调用都设定各种WAIT解除条件。如果在执行WAIT系列系统调用时已经满足WAIT解除条件,已执行所述系统调用的RUN-任务转换到READY状态。同时,当不满足WAIT解除条件时,RUN-任务转换到等待满足WAIT解除条件的WAIT状态。
[0130](3) SET系列系统调用
[0131 ] SET系列系统调用是与在WAIT状态和READY状态之间进行的转换相关联的系统调用。SET系列系统调用的执行触发WAIT解除条件的建立。
[0132]3-1.释放(release)信号量系统调用
[0133]其是释放信号量的系统调用。
[0134]3-2.释放互斥量系统调用
[0135]其是释放互斥量的系统调用。
[0136]3-3.设定事件(Set Event)系统调用
[0137]其是建立事件的当前标记模式(后述)的系统调用。
[0138]3-4.清除标记系统调用
[0139]其是用于将当前标记模式清零的系统调用。
[0140]在对本发明实施方式进行说明时,假设采用了以上9种系统调用。除此之外,当然还能够实现其他的各种系统调用。
[0141 ][普通RTOS的设计思想]
[0142]图2是普通RTOS的概念图。
[0143]图示的RTOS是多任务OS。普通RTOS是以软件实现的。下面以从任务A向任务B切换RUN-任务的情况为例进行说明。由于任务A占用着CPU,因此RTOS向CPU申请中断,以从任务A取得CPU的使用权。在此基础上,RTOS将任务A的上下文信息保存到TCB中。RTOS选择任务B作为下一个RUN-任务,并将上下文信息从任务B的TCB加载到CPU的寄存器中。当加载结束时,RTOS将CPU的使用权移交给任务B。由此,通过暂时获取CPU的使用权,RTOS执行从任务A向任务B的任务转换。对于特殊任务的执行也是相同的,这种情况下,也是通过将RUN-任务的上下文信息保存到TCB中后,将CPU的使用权移交给特殊任务来实现任务转换。
[0144]因为RTOS是以软件实现的,因此为了执行自身处理,RTOS需要CPU的使用权。换句话说,RTOS和任务在CPU的使用权上是竞争关系。下面将这样通过软件实现的RTOS称作“软件RTOS ”。
[0145]图3是执行软件RTOS的普通CPU的电路图。
[0146]CPU 84包括:执行控制电路90,用于总体地控制存储器访问、命令执行等;处理寄存器92,用于存储如任务的上下文信息等的各种数据;以及运算电路94,用于执行运算。处理寄存器92是多种寄存器的组合,大致分为特殊寄存器88和普通寄存器86。特殊寄存器88是存储程序计数器、堆栈指针以及标记等的寄存器。普通寄存器86是存储作业用数据的寄存器,包括RO?R15共16个寄存器。特殊寄存器88存在用户用和系统用两面,但是普通寄存器86只有一面。以下将存储在处理寄存器92中的数据称作“处理数据”。
[0147]执行控制电路90利用指示输出选择器98的控制信号(CTRL),将处理寄存器92中所期望的寄存器的处理数据输出到运算电路94中。运算电路94按照该处理数据,即命令和变量,来执行运算。运算结果向输入选择器96输出。执行控制电路90利用指示输入选择器96的控制信号(CTRL),向处理寄存器92中所期望的寄存器输入运算结果。
[0148]另外,执行控制电路90通过CPU数据总线从存储器中读出数据,并通过输入选择器96将该数据适时加载到处理寄存器92中。执行控制电路90同样通过该CPU数据总线将处理数据适时记录到存储器中。执行控制电路90—边更新特殊寄存器88中的程序计数器,一边执行任务。
[0149]当发生任务转换时,执行控制电路90将处理数据保存到存储器中预留的区域即TCB中。如果任务A执行系统调用,则认为发生了从任务A到任务B的任务转换。系统调用的执行触发RT0S获取CPU的使用权,因此CPU 84将暂时按照RT0S的程序来运行,其处理过程如下:
[0150]<任务A的上下文信息的保存>
[0151]1.执行控制电路90将特殊寄存器88从用户用切换到系统用。向系统用特殊寄存器88中加载RT0S处理用的处理数据。
[0152]2.执行控制电路90将普通寄存器86中的数据保存到堆栈(未示出)中。
[0153]3.执行控制电路90将用于RT0S的处理数据从记录介质(未示出)中,例如其它寄存器中,加载到普通寄存器86中。在该阶段,处理寄存器92中的处理数据被完全替换为RT0S用的处理数据。
[0154]4.RT0S从存储器中识别出任务A的TCB,并将保存在堆栈中的处理数据写入该TCB中。另外,用户用特殊寄存器88中的处理数据也作为上下文信息的一部分写入该TCB中。由此,任务A的处理数据被保存到该TCB中。RT0S将任务A已从“RUN”状态转换到“READY (或者WAIT) ”状态的情况记录在任务A的TCB中。
[0155]<任务B的上下文信息的加载>
[0156]1.RT0S从存储器中识别出任务B的TCB,并将该TCB中的上下文信息写入堆栈和用户用特殊寄存器88中。RT0S将任务B已从“READY”状态转换到“RUN”状态的情况记录在任务B的TCB中。
[0157]2.RT0S将RT0S处理用数据从普通寄存器86保存到记录介质(未示出)中。
[0158]3.执行控制电路90将堆栈中的上下文信息加载到普通寄存器86中。执行控制电路90将特殊寄存器88从系统用切换到用户用。由此,任务B的处理数据被加载到处理寄存器92中。
[0159]经过如上所述的处理过程,实现了任务转换。普通寄存器86是一面结构,因此为了切换任务用的处理数据和RT0S用的处理数据而使用堆栈。如果普通寄存器86也是两面,则将无需通过堆栈来保存/加载数据,因此能够实现更高速的任务转换。
[0160]在本发明实施方式中,还通过为每个任务设置保存寄存器110,来实现更高速的任务转换。使用保存寄存器110的任务转换,将参照图5进行详述。在参照图3说明的CPU84和普通软件RT0S中,在进行任务转换时频繁地访问TCB。在上述例子中,是以从任务A向任务B进行任务转换为例进行的说明,但是实际上,RT0S为了选择下面应执行的任务B也需要执行很多命令。此时,RT0S将频繁地访问存储器。通过采用后述的专门用于任务选择的任务控制电路200,本发明实施方式中的任务处理装置100实现了更高速的任务转换。
[0161][根据任务处理装置100的RTOS硬件实现]
[0162]图4是本发明实施方式中的RTOS的概念图。
[0163]与普通软件RTOS不同,本发明实施方式中的RTOS主要是以与CPU分离的硬件来实现的。以下将由硬件实现的RTOS称作“硬件RT0S”。由于本发明实施方式的RTOS主要是与CPU分离的硬件,因此为了执行自身处理,则实质上基本不需要CPU的使用权。换句话说,RTOS和任务在CPU的使用权上基本不是竞争关系。在图2所示的普通软件RTOS中,CPU既是任务执行用电路,还是RTOS执行用电路。相反地,在本发明实施方式的硬件RTOS中,CPU明确为任务执行电路。任务调度功能主要由后述的保存电路120和任务控制电路200来实现。
[0164]图5是本发明实施方式中的任务处理装置100的电路图。
[0165]除了 CPU 150之外,任务处理装置100还包括保存电路120和任务控制电路200。CPU 150是任务的执行主体。保存电路120和任务控制电路200是起到图4所示的RTOS的作用的电路。任务调度处理是由任务控制电路200来主导的。
[0166]CPU 150包括执行控制电路152、处理寄存器154以及运算电路160。CPU150可以是参照图3说明的普通CPU。但是,本发明实施方式中的CPU 150的信号线连接方式与图3所示的CPU 84的信号线连接方式不同。对于具体的电路结构,将参照下面的图6进行详述。
[0167]任务控制电路200包括任务切换电路210、信号量表212、事件表214、任务选择电路230以及状态存储单元220。对于信号量表212和事件表214,将参照图13及其后图进行详述。状态存储单元220是与每个任务相对应的单元。以下将与任务A对应的状态存储单元220表示为“状态存储单元220_A”。各状态存储单元220存储对应任务的状态数据。状态数据是指上下文信息中的特别是任务优先级或任务状态等表示任务属性的信息。对于具体的数据内容,将在后面参照图10进行说明。全部任务的全部状态数据从各状态存储单元220中不断地输出到任务选择电路230中。任务选择电路230是根据各任务的状态数据进行如RUN-任务选择等的各种任务选择的电路。对于任务选择电路230,将参照图10及其后图进行详述。当检测出从执行控制电路152接收的系统调用信号(SC)或来自外部设备的中断请求信号(INTR)时,任务切换电路210执行任务转换。
[0168]执行控制电路152在执行系统调用时,将系统调用信号(SC)发送到任务切换电路210。另外,当任务切换电路210检测出中断请求信号(INTR)时,任务切换电路210向执行控制电路152申请停止请求信号(HR)。当CPU 150的操作停止时,执行控制电路152向任务切换电路210申请停止结束信号(HC)。通过这三种信号,CPU 150和任务控制电路200将能够进行配合操作。
[0169]保存电路120包括加载选择电路112以及多个保存寄存器110。保存寄存器110也是与每个任务相对应的单元,是用于保存处理寄存器154中的处理数据的寄存器组。因而,保存寄存器110具有与处理寄存器154相等以上的数据容量。以下将与任务A对应的保存寄存器110表示为“保存寄存器110_A”。加载选择电路112接受任务切换电路210的指示,将某个保存寄存器HO中的数据(以下将保存寄存器110所存储的数据称作“保存数据”)加载到处理寄存器154中。
[0170]各保存寄存器110不断地将各自的保存数据输出到加载选择电路112中。当任务切换电路210向加载选择电路112输入用于指定任务ID的任务选择信号(TS)时,加载选择电路112将与所指定任务对应的保存寄存器110中的保存数据输出到处理寄存器154中。并且,当任务切换电路210向处理寄存器154输入写入信号(WT)时,该保存数据实际上被加载到处理寄存器154中。
[0171]另一方面,处理寄存器154中的全部处理数据也不断地被输出到全部的保存寄存器110中。当任务切换电路210确认向期望的保存寄存器110发送了写入信号(WT)时,处理数据被保存到该保存寄存器I1中。这里,连接处理寄存器154和各保存寄存器110的总线能够一次发送的位数设定为能够并行发送处理数据。因此,任务切换电路210通过向保存寄存器110仅发送一次写入信号,就能够将处理数据一次写入保存寄存器110中。另夕卜,连接保存寄存器110和加载选择电路112的总线以及连接加载选择电路112和CPU 150的总线的位数也同样地设定。
[0172]下面分别对系统调用和中断请求信号引起的任务转换的执行方法进行描述。
[0173][I]系统调用的执行
[0174]当CPU 150的执行控制电路152执行系统调用时,执行控制电路152使CPU150的时钟(以下称作“CPU时钟(CLK) ”)停止。对于具体的停止方法,将参照图7等在后面详述。执行控制电路152将表示系统调用的执行的系统调用信号(SC)发送给任务控制电路200的任务切换电路210。另外,当CLK的停止结束时,执行控制电路152向任务切换电路210申请停止结束信号(HC)。
[0175]在CPU 150和任务切换电路210之间,为了系统调用信号的发送而连接有9根信号线。这9根信号线与所述9种系统调用相对应。执行控制电路152根据所执行的系统调用种类,用对应的某根系统信号线发送数字脉冲。任务切换电路210通过判断是从9根系统信号线中的哪根信号线中检测出数字脉冲,来立即检测出所执行的系统调用种类。任务切换电路210根据系统调用种类,从任务选择电路230输出的数据中选择所需数据,执行由系统调用所指定的处理。该处理是以申请HC为条件来执行的。对于任务切换电路210和任务选择电路230之间的关系,将参照图10进行详述。此外,该系统调用的参数和返回值写入处理寄存器154中规定的普通寄存器158中。任务切换电路210能够对普通寄存器158执行参数的读出和返回值的写入。这里,假设作为RUN-任务的任务A执行等待信号量系统调用。因而,首先需要将任务A的处理数据保存。
[0176]<任务A的上下文信息的保存>
[0177]执行控制电路152将表示等待信号量系统调用的SC信号输入到任务切换电路210中。执行控制电路152使CLK停止,当停止结束时申请HC。任务切换电路210在向内置于任务选择电路230的各种选择电路中后述的信号量选择电路234输出成为待机对象的信号量的信号量ID后,选择下一个应执行的任务B。任务切换电路210向状态存储单元220_A写入规定数据。例如,作为任务A的状态,从“RUN”更新为“READY”或“WAIT”。更具体地说,任务切换电路210在将表示任务状态“WAIT”的状态数据输出到全部状态存储单元220的基础上,只向状态存储单元220_A输入写入信号(WT_A)。由此,任务A的状态被更新。
[0178]接着,任务切换电路210向保存寄存器110_A输出写入信号(WT)。由于处理寄存器154中的处理数据不断地被输出到各保存寄存器110中,因此该写入信号(WT)使得任务A的处理数据被保存到任务A的保存寄存器110_A中。〈任务B的上下文信息的加载>
[0179]当任务A的状态数据更新、处理数据保存结束时,任务切换电路210将指定任务B的任务选择信号(TS_B)输出到加载选择电路112中。由此,保存寄存器110_B中保存的数据被输出到处理寄存器154中。当任务切换电路210向处理寄存器154输出写入信号(WT)时,任务B的保存数据被加载到处理寄存器154中。另外,任务切换电路210还向任务B的状态存储单元220中写入规定数据。例如,任务B的状态从“READY”更新为“RUN”。当以上处理结束时,执行控制电路152使CPU时钟重启。CPU 150根据所重启的CPU时钟来开始执行任务B。关于该处理方法的更具体细节,将在后面参照图8(b)进行描述。
[0180][2]中断请求信号的产生
[0181]任务切换电路210检测来自外围设备的中断请求信号(INTR)。更具体地说,中断请求信号(INTR)从中断控制器(未示出)发送到任务切换电路210。表示中断请求信号(INTR)等级的参数被记录在内置于该中断控制器的寄存器中。任务切换电路210向执行控制电路152申请停止请求信号(HR)后,执行控制电路152使CPU时钟停止。与系统调用执行时相同,任务切换电路210将RUN-任务的处理数据保存到保存寄存器110中。接着,任务切换电路210启动特殊任务。与中断请求信号的参数无关而启动的特殊任务只有1种。该特殊任务从中断控制器的内置寄存器中读出INTR的参数,并执行与该参数相应的处理。该特殊任务所执行的处理,可以是设定事件系统调用或设定信号量系统调用的执行,可以是普通任务的启动。根据该参数,该特殊任务可以不执行任何特别处理就结束。根据INTR的参数执行何种处理,是由特殊任务的实现方式来决定的。当该特殊任务的执行结束时,从READY-任务中选择出下一个RUN-任务。
[0182]任务切换电路210将与该特殊任务对应的保存寄存器110中的处理数据加载到CPU 150中。这种从普通任务转换到特殊任务所需的时间,能够根据任务控制电路200的工作时钟来预先估计。当向执行控制电路152申请HR后,任务切换电路210的工作时钟经过规定的时间时,任务切换电路210为了解除CPU时钟的停止而取消(negate) HR。当HR被取消时,执行控制电路152使CPU时钟重启。此时,任务切换电路210结束了从普通任务到特殊任务的任务转换。关于该处理方法的具体细节,将在后面参照图8(a)进行描述。
[0183]在任何情况下,任务转换的核心处理,即(A)处理数据的保存/加载,以及(B)任务状态转移和RUN-任务的选择,都是通过硬件来实现的。在(A)和(B)中,无需访问存储器上的TCB,这对任务转换的高速化也有利。任务处理装置100的CPU 150中所要求的只是追加使CPU时钟停止和重启的功能。此外,这些功能全部由硬件来实现,这并非是要限定本发明的范围。例如,本领域技术人员可以理解,(A)或者(B)的主要功能可以由硬件来实现,而为了辅助硬件功能,RT0S的一部分功能可以由软件来实现。
[0184]图6是图5所示的CPU 150的电路图。
[0185]与图3所示的CPU 84不同,处理寄存器154的特殊寄存器156和普通寄存器158都是一面的结构。处理寄存器154中分别引入了来自加载选择电路112的输入总线、到保存寄存器110的输出总线、以及来自任务切换电路210的写入信号(WT)用信号线。执行控制电路152根据对输出选择器164的控制信号(CTRL),将处理寄存器92中所期望的寄存器中的数据输入到运算电路160中。运算结果成为输入选择器162的输入。执行控制电路152根据对输入选择器162的控制信号(CTRL),向处理寄存器154中所期望的寄存器输入运算结果。执行控制电路152 —边更新特殊寄存器156中的程序计数器,一边执行任务。
[0186]处理数据保存到保存寄存器110中而不是存储器上的TCB中。处理寄存器154不断地向各保存寄存器110输出处理数据。实际上,如前所述,何时将处理数据保存到保存寄存器110中,是由任务切换电路210来控制的。
[0187]保存数据是从保存寄存器110而不是从存储器上的TCB加载到处理寄存器154中的。实际上,如前所述,加载哪个保存寄存器110中的处理数据以及何时加载,是由任务切换电路210来控制的。
[0188]连接处理寄存器154和加载选择电路112、以及处理寄存器154和保存寄存器110的总线能够发送的位数,设定为能够在一次处理中并行发送处理数据。因此,根据任务切换电路210发送的写入信号(WT),能够实现一次读出或写入数据。普通软件RTOS在任务转换时,需要暂时占用处理寄存器154。与此相反,本实施方式中的硬件RTOS没有必要将用于任务转换处理的特殊处理数据加载到处理寄存器154中。当从任务A切换到任务B时,只需要将任务A的处理数据保存,然后加载任务B的处理数据,因此,处理寄存器154无需配置系统用和用户用两面及通过堆栈执行数据替换处理。
[0189]图7是执行控制电路152使CPU时钟停止的构造的电路图。
[0190]第二 AND门174的输入是原始时钟(CLKO)和第一 AND门172的输出,第一 AND门172的输出被反相。第一 AND门172的输出是停止结束信号(HC)。由于停止结束信号(HC)通常是0,因此第二 AND门174直接输出所输入的原始时钟(CLKO)作为CPU时钟(CLK)。CPU 150接收到第二 AND门174所输出的CPU时钟时进行操作。当第一 AND门172的输出是“I”时,换句话说,当停止结束信号(HC) = I时,第二 AND门174的输出固定为零,以使CPU时钟(CLK)停止。
[0191 ] 第一 AND门172的输入是OR门176的输出和CPU忙信号(CBUSY),该CPU忙信号是负逻辑。CBUSY是从产生CPU 150内部循环的已知状态机中输出的信号。当CPU 150处于可停止状态时,CBUSY变成“I”。例如,当运算电路94执行了单个命令或者被锁定的多个命令的最后命令从而CPU处于可停止状态时,或者当已经停止提供CPU时钟时,CBUSY变成“O”。
[0192]OR门176的输入是命令解码器170的输出(SC_DETECT)和来自任务切换电路210的停止请求信号(HR)。命令解码器170内置有保持SC_DETECT的锁存电路。命令解码器170接收从CPU 150提取(fetch)的数据(FD)。当FD是系统调用命令时,命令解码器170输出SC_DETECT = I。通过内置锁存电路,即使在这之后FD变化,命令解码器170也继续输出SC_DETECT = I。命令解码器170中,还输入任务切换电路210发送给处理寄存器154的写入信号(WT)。如前所述,当WT从O变为I时,保存数据被加载到处理寄存器154中。该WT是在规定时间后从I返回到O的脉冲信号。当WT从I变为O时,命令解码器170的锁存电路被复位,命令解码器170取消SC_DETECT。SC_DETECT和写入信号(WT)之间的关系,将参照图8(b)进行详述。本实施方式中的命令解码器170,是为了判定执行对象命令是否是系统调用而专门设置在执行控制电路152中的装置。作为变型例,命令解码器170可以与负责CPU150的解码阶段的CPU解码器共用。这种情况下,可通过向CPU解码器追加当被解码的数据是系统调用命令时输出SC_DETECT = I的功能来实现命令解码器170。
[0193]当中断请求信号(INTR)发生时,任务切换电路210向执行控制电路152申请停止请求信号(HR),即当执行系统调用、或当申请停止请求信号(HR)时,OR门176的输出变成
“1”。
[0194]综上所述,当执行系统调用或发生中断请求信号、且当CPU忙信号变成“0”时,第一 AND门172的输出变成“1”,且第二 AND门174不输出CPU时钟。
[0195]图8(a)是表示中断请求信号发生时各种信号之间的关系的时序图。
[0196]在图8(a)中,首先,在时刻t0,任务切换电路210检测出来自外部的中断请求信号(INTR)。任务切换电路210为了执行特殊任务,向执行控制电路152申请停止请求信号(HR)。输入时刻tl与检测时刻t0几乎是同时的。在时刻tl,CPU 150的状态机处于“任务执行中”,CBUSY = 1。由于HR = 1,所以0R门176输出“1”。但是由于CBUSY = 1,因此CPU 150不停止。因此,即使输入HR = 1,CPU时钟(CLK)也暂且与原始时钟(CLK0)同步输出。
[0197]经过一定时间,在时刻t2处,CBUSY = 0。由于已经是HR = 1,所以第一 AND门172输出HC= 1,从第二 AND门174输出的CPU时钟维持为0。另一方面,任务切换电路210以申请HC为契机,开始从普通任务到特殊任务的任务转换。细节将在后面描述。任务转换所需时间是任务控制电路200的工作时钟的数倍。在申请HC后,任务控制电路200的工作时钟变化了规定次数(时刻t3)的条件下,任务控制电路200取消停止请求信号(HR)。由于HR = 0,因此执行控制电路152重启CPU时钟(CLK)。当CPU 150重启处理时,CPU 150使CBUSY从0变为1 (时刻t4)。由此,在CPU时钟停止的时刻t2至时刻t3期间,执行从普通任务到特殊任务的任务转换。
[0198]作为另一种处理方法,代替以任务控制电路200的工作时钟变化了规定次数为条件,而以任务控制电路200已结束任务转换为条件来取消HR。而且,执行控制电路152可以以取消HR为条件来取消HC。当HC = 0时,执行控制电路152重启CPU时钟(CLK)。由此,可以重启任务的执行。
[0199]图8 (b)是表不执行系统调用时各种彳目号之间的关系的时序图。
[0200]在图8(b)中,首先,在时刻t0,命令解码器170检测出系统调用,并使SC_DETECT从0变为1。在时刻to,CPU 150的状态机处于“任务执行中”,CBUSY = 1。由于SC_DETECT=1,所以OR门176输出“1”。但是由于CBUSY = 1,因此CPU 150不停止。因此,即使输出SC_DETECT = 1,CPU时钟(CLK)也暂且与原始时钟(CLK0)同步输出。
[0201]经过一定时间,在时刻tl,CBUSY = 0。由于SC_DETECT = 1、且CBUSY = 1,因此取消HC,并停止CPU时钟。当输入HC = 0时,任务切换电路210开始任务转换处理,并将写入信号(WT)输出到CPU 150。在WT从0变为1的时刻t2,保存数据被加载到处理寄存器154中。由于写入信号(WT)是脉冲信号,因此在经过规定时间后的时刻t3,变成WT = 0。根据检测出的WT:1 — 0的下降沿,锁存在命令解码器170中的SC_DETECT被复位(时刻t4)。此时,CBUSY从0变为1。由于CBUSY = 1,因此HC = 0,从而重启CPU时钟。在CPU时钟停止的时刻tl至时刻t4期间,执行任务转换。
[0202]此外,作为其它处理方法,代替以检测出WT:1 — 0的下降沿为条件,而以任务控制电路200结束任务转换并取消HR为条件,执行控制电路152取消HC。而且,以HC = 0为条件,复位SC_DETECT。执行控制电路152重启CPU时钟(CLK),CBUSY从0变为1。
[0203]在任何情况下,CPU 150都无需知晓在CPU时钟停止期间进行RUN-任务转换的情况。任务切换电路210在CPU时钟停止而使CPU 150处于冻结期间进行任务转换处理,因此CPU 150的处理和任务控制电路200的处理在事件序列中是分离的。
[0204]图9是用于说明流水线处理中CPU时钟停止时刻的示意图。
[0205]CPU 150通过从存储器中顺序读出多个命令到处理寄存器154中并执行这些命令,来执行任务。作为任务执行单位的命令,分解为如下四个阶段(phase)。
[0206]1.F(提取(fetch)):从存储器中提取命令。
[0207]2.D (解码(decode)):解释命令。
[0208]3.E(执行(execut1n)):执行命令。
[0209]4.WB(回写(write back)):将执行结果写入存储器中。
[0210]当一个任务顺次执行命令1至命令5时,可以是命令1被执行完从F到WB阶段后,才执行命令2的F阶段。但是,为了更高效地执行,大多是在命令1的执行过程中就开始执行命令2。这种处理方法被称作流水线处理。例如,当命令1呈D阶段时,就开始命令2的F阶段。当命令1呈E阶段时,就执行命令2的D阶段和命令3的F阶段。由此,通过增加单位时间内执行的命令数,能够减少每个任务的执行时间。
[0211]并且,各阶段可以进一步细分为两个阶段。例如,F阶段可以分为F1和F2两个阶段。当命令1呈F2阶段时,开始命令2的F1阶段。当命令1呈D1阶段时,执行命令2的F2阶段和命令3的F1阶段。通过细分阶段,能够进一步有效利用CPU 150的计算资源。在图9中,说明了在将各阶段细分为两个阶段来执行的流水线处理中发生系统调用时的CPU时钟停止时刻。
[0212]在图9中,命令1在CPU时钟为“0”的时刻开始处理。在CPU时钟为“4”的时刻,命令1的解码结束。假设命令1为系统调用。命令解码器170使SC_DETECT从0变为1。接着,SC_DETECT从1返回到0的条件是:从任务切换电路210到处理寄存器154的写入信号(WT)从1变为0。即使输出的是SC_DETECT = 1,由于命令2?5已经在执行中或者执行启动完,因此还是CBUSY = 1。因此,第二 AND门174继续输出CPU时钟。但是,当SC_DETECT=1时,执行控制电路152暂时停止程序计数器的更新,使得新的命令不被提取。因而,命令6及其后续命令不会从存储器中被提取。
[0213]在CPU时钟为“8”的时刻,命令1执行结束,但是命令2?5正在执行中,因此CPU忙信号还是“1”。当呈CPU时钟为“12”的时刻时,命令5执行结束。此时,CPU忙信号变成“0”。之后,按照参照图8(b)所述的流程,停止提供CPU时钟。任务切换电路210将直到命令5的执行结束为止产生的处理数据保存到保存寄存器110中。根据这种停止方法,任务转换能够以不浪费执行系统调用后的命令执行结果的方式实现。当任务转换结束时,CPU忙信号再次设为“1”,命令解码器170的处理也得到重启。由此,将再次提供CPU时钟。
[0214]作为另一种处理方法,也可以在系统调用命令执行结束的时刻,将CPU忙信号设为“0”,以停止提供CPU时钟。这种情况下,与系统调用命令同时执行的其它命令在执行过程中停止。中途停止的命令的中间处理结果记录在处理寄存器154中后,保存到保存寄存器110中。当下次该任务变成RUN-任务时,接着执行中途停止的命令。例如,当某个命令在读取结束阶段被中途停止时,将从存储器中读出的命令和操作数保存到保存寄存器110中。当该任务重启时,保存寄存器110中的数据被加载到处理寄存器154中,以执行解码阶段及后续阶段。
[0215]图10是表示状态存储单元220和任务切换电路210之间的关系的电路图。
[0216]状态存储单元220包括状态寄存器250和定时器252。状态存储单元220存储任务的状态数据。另外,定时器252是在任务转换到READY状态或者WAIT状态时开始的定时器。任务转换到READY状态后所经过的时间称作“READY占用时间”,任务转换到WAIT状态后所经过的时间称作“WAIT占用时间”。定时器252以TIM信号方式不断地输出占用时间的值。在任务转换时,当任务转换到READY状态或者WAIT状态时,任务切换电路210驱动该任务的定时器252来开始测量时间。
[0217]状态存储单元220是如下所述的寄存器组。
[0218](A)任务ID寄存器254:用于存储任务ID。任务ID寄存器254不断地向任务选择电路230输出表示任务ID的ID信号。以下将任务A的任务ID寄存器254向任务选择电路230输出的ID信号表示为“10_八信号”。从状态存储单元220输出的所有其它信号也米用同样的表不方法。
[0219](B)任务优先级寄存器256:用于存储任务优先级。任务优先级寄存器256不断地输出表示任务优先级的PR信号。“O”表示最高优先级,值越大表示任务优先级越低。
[0220](C)任务状态寄存器258:用于存储任务状态。任务状态寄存器258不断地输出表示STOP、READY、RUN、WAIT、IDLE中的某一个的ST信号。此外,IDLE是指任务初始化之前的状态。
[0221](D)任务启动地址寄存器260:用于存储存储器中的任务的TCB地址。任务启动地址寄存器输出AD信号。
[0222](E)待机理由寄存器262:用于在任务处于WAIT状态时,存储构成WAIT解除条件的待机理由。待机理由是“信号量等待”、“事件等待”和“互斥量等待”中的某一个。待机理由寄存器262输出WR信号。
[0223](F)信号量ID寄存器264:用于在任务以信号量等待为理由处于WAIT状态时,存储等待对象的信号量(以下简称为“待机信号量”)的信号量ID。信号量ID寄存器264输出SID信号。
[0224](G)互斥量ID寄存器265:用于在任务以互斥量等待为理由处于WAIT状态时,存储等待对象的互斥量(以下简称为“待机互斥量”)的互斥量ID。互斥量ID输出MID信号。
[0225](H)事件ID寄存器266:用于在任务以事件等待为理由处于WAIT状态时,存储等待对象的事件(以下简称为“待机事件”)的事件ID。事件ID寄存器266输出EID信号。
[0226](I)待机标记寄存器268:用于在任务以事件等待为理由处于WAIT状态时,存储待机标记模式。待机标记寄存器268输出FL信号。
[0227](J)标记条件寄存器270:用于在任务以事件等待为理由处于WAIT状态时,存储标记条件。标记条件寄存器270输出FLC信号。待机标记模式和标记条件将在后面详述。
[0228](K)标记初始化寄存器272:用于存储表示是否有待机标记模式的数据。标记初始化寄存器272输出FLI信号。
[0229](L)超时计数器274:超时值是在WAIT系列系统调用中指定的变量。超时计数器274存储超时值。任务切换电路210定期对各超时计数器274的超时值进行递减。超时计数器274输出TO信号。代替任务切换电路210对超时值进行递减,也可以是超时计数器274本身定期对其超时值主动地进行递减。
[0230]任务选择电路230根据各状态存储单元220输出的各种信号来选择任务。任务选择电路230包括以下电路。
[0231](A)执行选择电路232:用于在任务转换时,选择下一个RUN-任务。执行选择电路232通常根据状态存储单元220不断输出的状态数据,来选择某一个任务作为RUN-任务。执行选择电路232的输入信号有ID、ST、PR和TIM四种。执行选择电路232输出下一个RUN-任务的任务ID。关于详细的电路结构,将参照图12进行详述。
[0232](B)信号量选择电路234:用于通过释放信号量系统调用的执行,选择应该从WAIT状态转换到READY状态的任务。信号量选择电路234的输入为来自任务切换电路210的释放信号量系统调用释放的信号量(以下简称为“释放信号量”)的信号量ID。来自状态存储单元220的输入信号有ID、ST、WR、PR、SID和--Μ六种。信号量选择电路234的输出信号是从WAIT状态转换到READY状态的任务的任务ID。如果不存在该任务,则输出如_1等的规定值。关于更具体的电路结构,将参照图13进行详述。
[0233](C)事件选择电路236:用于通过设定事件系统调用的执行,选择从WAIT状态转换到READY状态的任务。事件选择电路236的输入为来自任务切换电路210的由设定事件系统调用设定的事件(以下简称为“设定事件”)的事件ID。来自状态存储单元220的输入信号有ID、ST、WR、EID、FL和FLC六种。事件选择电路236的输出信号为从WAIT状态转换到READY状态的任务的任务ID、以及该任务的FL、FLC0
[0234](D)超时检测电路238:用于检测出处于WAIT状态的任务中超时计数器274的超时值变成零的任务。每当更新超时值时,驱动超时检测电路238。超时检测电路238的输入信号有ID、ST和TO三种,输出信号是该任务的任务ID。如果不存在该任务,则输出如-1等的规定值。
[0235](E)互斥量电路240:用于通过释放互斥量系统调用的执行,选择从WAIT状态转换到READY状态的任务。互斥量电路240的输入信号为来自任务切换电路210的由释放互斥量系统调用释放的互斥量(以下简称为“释放互斥量”)的互斥量ID。来自状态存储单元220的输入信号有互斥量电路240输出从WAIT状态转换到READY状态的任务的任务ID。如果不存在该任务,则输出如-1等的规定值。
[0236](F)检索电路242:当任务切换电路210输入任务ID时,检索电路242输出该任务的全部状态数据。
[0237]下面通过关于任务转换的描述,对RUN-任务的选择、信号量、事件、互斥和超时,特别是任务选择电路230的处理,与普通技术进行比较说明。
[0238][RUN-任务的选择]
[0239][I]通过普通软件RTOS进行RUN-任务的选择
[0240]图11是表示普通RTOS进行RUN-任务选择时所采用的任务就绪表的图。
[0241]任务就绪表形成在存储器上,将各READY-任务的TCB用指针连接。优先级指针280设置在每个任务优先级上,指出对应任务优先级的任务的TCB的开始地址。在图11的任务就绪表中,任务优先级“O”的优先级指针280指向任务A的TCB的地址,任务优先级“I”的优先级指针280指向任务B的TCB的地址。任务A的TCB指向任务D的TCB的地址。
[0242]普通软件RTOS—边扫描该任务就绪表一边选择出下一个RUN-任务。在这个处理过程中,RTOS进行如下两个阶段的处理:
[0243]A.使RUN-任务从RUN状态转换到READY状态。
[0244]B.选择下一个RUN-任务,并使该选择出的任务的任务状态从READY状态转换到RUN状态。
[0245]将软件RT0S进行的处理分解成如下各处理。
[0246]〈RUN-任务的状态转移>
[0247]这里,以任务J为RUN-任务来进行说明。
[0248]A1.RT0S将RUN-任务的任务ID存储在存储器中。RT0S根据该任务ID,获取任务J的TCB的地址。
[0249]A2.访问该TCB,获取任务J的任务优先级。假设该任务优先级为“0”。
[0250]A3.参考图11所示的任务就绪表,获取与任务J的任务优先级对应的优先级指针280。
[0251]A4.检测所获取的优先级指针280所指的TCB。这里检测出任务A的TCB。
[0252]A5.跟踪任务A的TCB所具有的指针,以检测出任务就绪表最末尾的TCB。图11中,任务就绪表的最末尾是任务F。
[0253]A6.配置任务F的TCB的指针指向任务J的TCB的地址。由此,任务J的TCB被追加到任务就绪表中。
[0254]A7.在任务J的TCB中设定“READY”。另外,处理数据被复制到该TCB的寄存器存储区域。
[0255]〈READY-任务的状态转移>
[0256]B1.RT0S检测任务优先级“0”的优先级指针280指向哪个TCB。如果没有指向任何TCB,则检测任务优先级“1”的优先级指针280指向哪个TCB。RT0S —边以降低的任务优先级顺序检测该任务就绪表,一边试图确定任务,直到发现指向的TCB为止。该图中,指定任务A。
[0257]B2.将任务A从任务就绪表中移除。具体地说,重写任务优先级“0”的优先级指针280,以取代任务A来指向任务D的TCB的地址。另外,通过设定NULL使得任务A的指针不指向任务D的地址。由此,任务A的TCB从任务就绪表中移除。
[0258]B3.在任务A的TCB中设定“RUN”。另外,保存在任务A的TCB的寄存器存储区域中的处理数据被加载到处理寄存器中。
[0259]如上所述,普通软件RT0S采用该任务就绪表进行任务转换,即RT0S根据下述策略,从多个READY-任务中选择RUN-任务。
[0260]1.所选择的任务为READY-任务(第一条件)。
[0261]2.所选择的任务为READY-任务中任务优先级最高的任务(第二条件)。
[0262]3.当存在多个任务优先级最高的任务时,所选择的任务是转换为READY状态的时间最久的任务(第二条件)。
[0263]这三个条件统称为“RUN任务选择条件”。任务处理装置100的执行选择电路232通过硬件来实现这种RT0S的任务调度功能。
[0264][2]通过根据基本实施方式的硬件RT0S所进行的RUN-任务的选择
[0265]图12是执行选择电路232的电路图。
[0266]这里,假设从任务0?任务7共八个任务中选择出RUN-任务。执行选择电路232包括四个第一比较电路290 (290a?290d)、两个第二比较电路292 (292a、292b)、以及一个第三比较电路294。另外,还包括八个判定电路296 (296a?296h)。
[0267]判定电路296的输入信号为表示任务状态的ST信号。当该ST信号表示READY时,判定电路296输出的CID信号为“I” ;当该ST信号表示READY之外的任务状态时,则输出的CID信号为“O”。判定电路296根据上述RUN-任务选择条件中的第一条件进行判定。第一比较电路290的输入为两个任务的ID、PR和--Μ、以及来自判定电路296的CID信号。
[0268]以第一比较电路290a为例进行说明。第一比较电路290a比较任务O和任务1,以根据上述的RUN任务选择条件选择出更适合的任务。
[0269]第一判定:首先,比较分别从判定电路296a和判定电路296b输出的CID信号。如果某一个CID信号是“1”,换句话说,如果只有一个任务处于READY状态,则第一比较电路290a输出该任务的ID、PR和--Μ。如果两个CID信号都是“0”,即哪个任务都不处于READY状态,则第一比较电路290a输出ID = PR = TIM = NULL。这表示哪个任务都没有被选择。如果两个CID信号都是“1”,即两个任务都处于READY状态,则执行下面的第二判定。
[0270]第二判定:比较任务O的PR信号和任务I的PR信号,以选择出任务优先级较高的任务。例如,如果任务O的任务优先级是“I”、任务I的任务优先级是“2”,则第一比较电路290a输出任务O的ID、PR和--Μ。通过第二判定,能够选择出任务优先级最高的任务作为RUN-任务的候选。如果任务O和任务I的任务优先级相同,则执行下面的第三判定。
[0271]第三判定:比较任务O的--Μ信号和任务I的--Μ信号,以选择出READY占用时间较长的任务。如果对应的READY占用时间相同,则选择任务O。由于仅通过比较占用时间的大小就能够进行判定,因此将无需进行如任务就绪表一样的TCB顺序管理。
[0272]由此,任务O和任务1、任务2和任务3、任务4和任务5、以及任务6和任务7,分别根据RUN-任务选择条件进行比较。第二比较电路292通过测试来自两个第一比较电路290的输出,来进一步筛选RUN-任务的候选。第二比较电路292a根据第一比较电路290a和第一比较电路290b的输出来执行任务选择。因此,第二比较电路292a输出任务O?任务3中最符合RUN-任务选择条件的任务的ID、PR和--Μ。第三比较电路294也以相同的方式进行操作,第三比较电路294输出任务O?任务7中某一个任务的任务ID。
[0273]根据这种处理方法,能够通过硬件来实现RUN-任务选择条件。普通软件RTOS —边访问任务就绪表一边选择RUN-任务。但是本实施方式中的执行选择电路232根据从状态存储单元220不断输出的状态数据,选择RUN-任务。由执行选择电路232执行的处理总结如下。
[0274]〈RUN-任务的状态转移>
[0275]这里,假设任务J为该RUN-任务。
[0276]Al.任务切换电路210在任务J的任务状态寄存器258中设定“READY”。
[0277]A2.任务切换电路210设置任务J的定时器252,以开始测量READY占用时间。
[0278]由此,任务J从RUN状态转换到READY状态。如前所述,处理数据保存在任务J的保存寄存器I1中。连接处理寄存器154和保存寄存器110的总线,能够并行发送处理数据,从而Al和A2的处理能够在一个时钟时间内执行。
[0279]〈READY-任务的状态转移>
[0280]B1.当任务J的状态转移结束时,任务切换电路210根据执行选择电路232所输出的任务ID确定RUN-任务,并在该确定的任务的任务状态寄存器258中设定“RUN”。
[0281]由此,所确定的任务从READY状态转换到RUN状态。所确定的任务的处理数据从保存寄存器110加载到处理寄存器154中。连接保存寄存器110和处理寄存器154的总线,也能够并行发送处理数据,从而B1的处理能够在一个时钟时间内执行。
[0282]软件RT0S在任务转换时,由于例如访问任务就绪表等原因会消耗CPU的很多CPU时钟时间。与此相反,本实施方式中的任务控制电路200能够在很短的时间内结束任务转换。由于状态存储单元220不断地将状态数据输出给执行选择电路232,因此执行选择电路232不断地输出某一个任务的任务ID。不是在任务转换发生后才开始RUN-任务的选择处理,而是根据任务转换发生时的执行选择电路232的输出来执行RUN-任务的选择,这对任务转换高速化也有贡献。以上说明假设有八个任务,但是通过增加比较电路的阶段数,能够对更多的任务进行寻址。
[0283][信号量处理]
[0284]图13是表示由普通RT0S进行的信号量处理中所采用的等待信号量表的图。
[0285]在说明等待信号量表之前,先简单说明信号量。信号量表212中对应记录信号量ID和信号量计数器。在信号量计数器中将初始值设定为有限数。例如,假设设定为信号量ID = 4,信号量计数器=3。当某一个任务执行将信号量ID = 4的信号量作为待机信号量的等待信号量系统调用时,任务切换电路210使待机信号量的信号量计数器递减。每当通过等待信号量事件调用来请求获取时,递减信号量计数器,当信号量计数器变成0时,无法再获取信号量。执行将信号量计数器为0的信号量作为待机信号量的等待信号量系统调用的任务,状态转换到WAIT状态。
[0286]另一方面,当某一个任务执行将信号量ID = 4的信号量作为释放信号量的释放信号量系统调用时,任务切换电路210使信号量表212的信号量计数器递增。综上所述:
[0287]当信号量计数器>0时:执行等待信号量系统调用的任务,从RUN转换到READY。此时递减信号量计数器。
[0288]当信号量计数器=0时:执行等待信号量系统调用的任务,从RUN转换到WAIT。不递减信号量计数器。
[0289]为了使执行等待信号量系统调用的任务从WAIT状态转换到READY状态,其它任务需要执行释放信号量系统调用。
[0290][1]由普通软件RT0S进行的信号量处理
[0291]普通软件RT0S通过采用等待信号量表来管理以信号量等待为理由处于WAIT状态的任务(以下特别称作“信号量等待任务”)的TCB。等待信号量表是具有与图11所示的任务就绪表类似构造的列表,形成在存储器上。各信号量等待任务的TCB由指针连接。优先级指针280指向对应任务优先级的信号量等待任务的TCB的开始地址。
[0292]当执行释放信号量系统调用时,普通软件RT0S —边扫描该等待信号量表一边选择应从WAIT状态转换到READY状态的信号量等待任务。执行等待信号量系统调用以及执行释放信号量系统调用时,RT0S执行的处理如下。
[0293]<等待信号量系统调用的执行>
[0294]这里,假设任务J为RUN-任务。
[0295]A1.RT0S将RUN-任务的任务ID存储在存储器中。根据该任务ID,获取任务J的TCB的地址。
[0296]A2.检测在等待信号量系统调用中所指定的待机信号量的信号量计数器。以下根据信号量计数器的值,处理被分别说明。
[0297](当信号量计数器>0时)
[0298]A3.RTOS使待机信号量的信号量计数器递减。
[0299]A4.在任务J的TCB中设定“READY”。这种情况下,任务J的TCB被追加到任务就绪表中。
[0300](当信号量计数器=O时)
[0301]A3.RTOS访问该TCB,以获取任务J的任务优先级。假设任务优先级为“O”。
[0302]A4.根据等待信号量表,获取与任务J的任务优先级对应的优先级指针。
[0303]A5.检测所获取的优先级指针所指的TCB。这里,检测到任务A的TCB。
[0304]A6.跟踪任务A的TCB所具有的指针,以检测出该等待信号量表中最末尾的TCB。如图13所示,任务F在该等待信号量表的最末尾。
[0305]A7.配置任务F的TCB的指针指向任务J的TCB的地址。由此,任务J的TCB被追加到等待信号量表中。
[0306]A8.在任务J的TCB中设定“WAIT”。另外,还设定待机信号量的信号量ID。〈释放信号量系统调用的执行〉
[0307]B1.RTOS 一边按顺序跟踪任务优先级为“O”的任务,一边搜索以释放信号量为待机信号量的信号量等待任务。如果不存在这样的任务,则将任务优先级为“I”的任务设为搜索对象。根据是否搜索到以释放信号量为待机信号量的信号量等待任务,分别执行不同的处理。
[0308](搜索到时)
[0309]B2.以搜索到的任务是任务E来进行说明。RTOS在任务E的TCB中设定“READY”。另外,清除待机信号量的信号量ID。
[0310]B3.将任务E的TCB从等待信号量表中移除。
[0311 ] B4.使释放信号量的任务的状态从RUN状态转换到READY状态。该任务的TCB被追加到任务就绪表中。
[0312](未搜索到时)
[0313]B2.RTOS使信号量计数器递增。
[0314]B3.使释放信号量的任务的状态从RUN状态转换到READY状态。该任务的TCB被追加到任务就绪表中。
[0315]普通软件RTOS通过管理上述等待信号量表,进行与信号量相关的处理。在释放信号量时,RTOS根据以下策略从多个WAIT-任务中选择READY-任务。
[0316]1.所选择的任务应该为WAIT-任务(第一条件)。
[0317]2.所选择的任务应该为WAIT-任务中将释放信号量作为待机信号量的任务(第二条件)。
[0318]3.当存在多个这种任务时,所选择的任务应该具有最高的任务优先级(第三条件)。
[0319]4.如果存在多个任务优先级最高的任务,所选择的任务应该是转换为WAIT状态的时间最久的任务(第四条件)。
[0320]这四个条件统称为“信号量待机解除条件”。任务处理装置100的信号量选择电路234通过硬件来实现这种RT0S的任务调度功能。
[0321][2]由根据基本实施方式的硬件RT0S进行的信号量处理
[0322]图14是信号量选择电路234的电路图。
[0323]这里,也是以任务0?任务7共八个任务为例进行说明。信号量选择电路234包括四个第一比较电路300 (300a?300d)、两个第二比较电路302 (302a、302b)、以及一个第三比较电路304。另外,还包括八个判定电路306 (306a?306h)。
[0324]判定电路306的输入信号为来自状态存储单元220的ST、WR、SID信号和来自任务切换电路210的表示信号量ID的信号。这里所输入的信号量ID是释放信号量的信号量ID。如果对应的任务是以释放信号量为待机信号量的信号量等待任务,则判定电路306输出的CID信号为“ 1 ”,如果不是,则输出的CID信号为“0”。判定电路306输出基于上述信号量待机解除条件中的第一条件和第二条件的判定结果。第一比较电路300的输入信号为两个任务的ID、PR和--Μ、以及来自判定电路306的CID信号。
[0325]第一比较电路300是根据信号量待机解除条件中的第三条件和第四条件进行判定的电路。第二比较电路302和第三比较电路304也同样。以上已经说明,RUN-任务选择条件的第二条件和第三条件,与信号量待机解除条件的第三条件和第四条件相同。执行选择电路232的各比较电路是比较任务的状态数据(PR、HM)的电路。另一方面,信号量选择电路234的各比较电路也是比较任务的状态数据(PR、HM)的电路。因而,执行选择电路232的第一比较电路290和信号量选择电路234的第一比较电路300是内置有相同逻辑的电路,能够共用。各任务在通过判定电路306基于第一条件和第二条件进行判定的基础上,通过第一比较电路300进行判定处理。之后通过与执行选择电路232相同的判定处理,第三比较电路304输出某一个任务ID。当执行等待信号量系统调用以及当执行释放信号量系统调用时进行如下处理。
[0326]<等待信号量系统调用的执行>
[0327]这里,假设任务J为RUN-任务。
[0328]A1.任务切换电路210从信号量表212中检测在等待信号量系统调用中所指定的信号量的信号量计数器。以下根据信号量计数器的值,处理被分别说明。
[0329](当信号量计数器>0时)
[0330]A2.任务切换电路210使信号量表212的信号量计数器递减。
[0331]A3.在任务J的任务状态寄存器258中设定“READY”。此时,任务切换电路210设置RUN-任务的定时器252,以开始测量READY占用时间。
[0332](当信号量计数器=0时)
[0333]A2.任务切换电路210在任务J的任务状态寄存器258中设定“WAIT”,在待机理由寄存器262中设定“信号量等待”,在信号量ID寄存器264中设定待机信号量的信号量ID,并设定定时器252以开始测量WAIT占用时间。
[0334]由此,执行等待信号量系统调用的任务,从RUN状态转换到READY状态或者WAIT状态。
[0335]<释放信号量系统调用的执行>
[0336]B1.任务切换电路210将释放信号量的信号量ID输入到各判定电路306中。各判定电路306根据该信号量ID,判定是否满足信号量待机解除条件中的第一条件以及第二条件。因而,各个第一比较电路300根据第三条件以及第四条件选择任务。
[0337](当某一个判定电路306输出“1”,第三比较电路304输出某一个任务ID时)
[0338]B2.任务切换电路210在所检测出的任务的任务状态寄存器258中设定“READY”,清除待机理由寄存器262和信号量ID寄存器264,并使定时器252开始测量READY占用时间。
[0339]B3.在执行系统调用的任务的任务状态寄存器258中设定“READY”,并开始测量READY占用时间。
[0340](当没有判定电路306输出“1”,第三比较电路304不输出任何一个任务ID时)
[0341]B2.任务切换电路210使信号量表212的信号量计数器递增。
[0342]B3.使执行系统调用的任务的状态从RUN状态转换到READY状态。
[0343]由于状态存储单元220不断地将状态数据输出给信号量选择电路234,因此当任务切换电路210将信号量ID输入给判定电路306时,信号量选择电路234能够立即执行选择处理。
[0344][互斥量处理]
[0345]与信号量类似,互斥量也用于任务之间的同步处理。互斥量和信号量存在以下几点不同。
[0346]1.信号量计数器可设定为I以上的整数。与此相对,互斥量是信号量计数器为I或者O的特殊信号量。当信号量计数器为2以上时,能够有2个以上的任务获得相同的信号量。但是,对于互斥量,能够获得某互斥量的任务通常只有一个。
[0347]2.能够通过释放信号量系统调用释放信号量的任务,不限于通过等待信号量系统调用来获得信号量的任务。与此相对,能够通过释放互斥量系统调用释放互斥量的任务,只能是通过等待互斥量系统调用来获得互斥量的任务。
[0348]在释放互斥量时,任务切换电路210从多个WAIT-任务中选择READY-任务的策略如下。
[0349]1.所选择的任务应该是WAIT-任务(第一条件)。
[0350]2.所选择的任务应该是WAIT-任务中以释放互斥量为待机互斥量的任务(第二条件)。
[0351]3.当存在多个这种任务时,所选择的任务应该是任务优先级最高的任务(第三条件)。
[0352]4.当存在多个任务优先级最高的任务时,所选择的任务应该是转换为WAIT状态时间最久的任务(第四条件)。
[0353]这四个条件统称为“互斥量待机解除条件”。
[0354]因而,当执行等待互斥量系统调用以及当执行释放互斥量系统调用时,根据基本实施方式的硬件RTOS执行如下处理。信号量表212中对应地存储互斥量ID和表示该互斥量是否被哪一个任务占用的占用状态数据。当该互斥量没有被占用时,占用状态数据为“0”,当该互斥量被占用时,占用状态数据为占用该互斥量的任务的任务ID。
[0355]<等待互斥量系统调用的执行>
[0356]这里,假设任务J为RUN-任务。
[0357]A1.任务切换电路210检测在等待互斥量系统调用中指定的互斥量是否被占用。以下根据该互斥量的占用状态,处理被分别说明。
[0358](当互斥量没有被占用时)
[0359]A2.任务切换电路210将执行系统调用的任务的任务ID作为互斥量占用状态数据记录。
[0360]A3.在任务J的任务状态寄存器258中设定“READY”。此时,任务切换电路210设置RUN-任务的定时器252,以开始测量READY占用时间。
[0361](当互斥量被占用时)
[0362]A2.任务切换电路210在任务J的任务状态寄存器258中设置“WAIT”,在待机理由寄存器262中设置“互斥量等待”,在互斥量ID寄存器265中设定待机互斥量的互斥量ID,并设定定时器252以开始测量WAIT占用时间。
[0363]<释放互斥量系统调用的执行>
[0364]B1.任务切换电路210在执行系统调用的任务占用释放互斥量的条件下,将释放信号量ID输入给互斥量电路240。互斥量电路240也包括如图14所示的多阶段连接的比较电路、以及判定是否满足互斥量待机解除条件中第一条件以及第二条件的判定电路。该判定电路以该互斥量为对象,只有当互斥量待机条件中的第一条件以及第二条件同时满足时才输出“1”。此外,当没有占用释放互斥量的任务执行释放互斥量系统调用时,使该任务的状态从RUN状态转换到READY状态。
[0365](当某一个判定电路输出“1”,互斥量电路240输出某一个任务ID时)
[0366]B2.任务切换电路210在所检测出的任务的任务状态寄存器258中设定“READY”,清除待机理由寄存器262和互斥量ID寄存器265,并使定时器252开始测量READY占用时间。
[0367]B3.在执行系统调用的任务的任务状态寄存器258中设定“READY”,并开始测量READY占用时间。
[0368](当没有判定电路输出“1”,互斥量电路240不输出任何一个任务ID时)
[0369]B2.任务切换电路210在信号量表212中将互斥量设定为非占用状态。
[0370]B3.使执行系统调用的任务的状态从RUN状态转换到READY状态。
[0371][事件处理]
[0372]下面简单说明基本实施方式中的事件管理。事件表214对应地记录事件ID和标记模式(以下称作“当前标记模式”)。标记模式是8位的比特模式。
[0373]设定事件系统调用是以事件ID和标记模式(以下称作“设定标记模式”)为参数来更新当前标记模式的系统调用。当执行设定事件系统调用时,对应该事件的当前标记模式更新为与设定标记模式的逻辑或。例如,假如当前标记模式为“00001100”、设定标记模式为“00000101”,则当前标记模式变为“00001101”。以下关于各标记模式,从左至右依次称作第0比特,第1比特,...,以及第7比特。
[0374]等待事件系统调用是用于等待待机事件的当前标记模式满足规定条件的系统调用,以事件ID、标记模式(以下称作“待机标记模式”)以及标记条件作为参数。当执行等待事件系统调用时,判定当前标记模式和待机标记模式之间是否满足标记条件。标记条件是逻辑或(0R)或者逻辑与(AND)。在标记条件是逻辑与(AND)的情况下,WAIT解除条件是指:对于待机标记模式中为“I”的全部比特,当前标记模式中的对应比特也全部是“I”。在标记条件是逻辑或(OR)的情况下,WAIT解除条件是指:对与待机标记模式中为“I”的至少一比特,当前标记模式的对应比特也是“ I ”。例如,在当前标记模式为“00001101”、待机标记模式为“00000011”、标记条件是“逻辑或(OR) ”的情况下,待机标记模式的第6比特以及第7比特是1,当前标记模式的第7比特是1,因此这种情况下,在等待事件系统调用中指定的WAIT解除条件满足。另一方面,在标记条件是“逻辑与(AND)”的情况下,由于当前标记模式的第6比特是“0”,因此WAIT解除条件不满足。
[0375][I]由普通软件RTOS所进行的事件处理
[0376]当执行等待事件系统调用以及当执行设定事件系统调用时,普通RTOS执行如下处理。在普通RTOS中,为了管理事件,在存储器上保持有事件表。在该事件表中,不仅存储有事件ID、当前标记模式,通常还对应地存储有以该事件为待机事件而处于WAIT状态的任务(以下称作“事件等待任务”)的任务ID、待机标记模式、和标记条件。
[0377]<等待事件系统调用的执行>
[0378]Al.RTOS从事件表中读出由系统调用指定的事件的当前标记模式。
[0379]A2.按照标记条件比较当前标记模式和待机标记模式,以判定WAIT解除条件是否满足。
[0380](当WAIT解除条件满足时)
[0381 ] A3.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
[0382](当WAIT解除条件不满足时)
[0383]A3.在事件表中记录执行系统调用的任务的任务ID。
[0384]A4.在事件表中记录待机标记模式。
[0385]A5.在事件表中记录标记条件。
[0386]A6.使执行系统调用的任务的任务状态从RUN状态转换到WAIT状态。
[0387]<设定事件系统调用的执行>
[0388]B1.RTOS从事件表中读出与系统调用中指定的事件对应的当前标记模式、任务ID、待机标记模式、以及标记条件。
[0389]B2.将当前标记模式和设定标记模式的逻辑或作为新的当前标记模式进行记录。
[0390](当不存在关于指定事件的事件等待任务时,或者当即使存在关于指定事件的事件等待任务,而根据待机标记模式和标记条件,WAIT解除条件不满足时)
[0391 ] B3.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
[0392](当存在关于指定事件的事件等待任务,且WAIT解除条件满足时)
[0393]B3.使事件等待任务的任务状态从WAIT状态转换到READY状态。
[0394]B4.清除事件表中的待机任务ID、待机标记模式和标记条件。
[0395]B5.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。另外,进行RUN-任务的选择。
[0396]当执行设定事件系统调用时,RTOS从多个WAIT-任务中选择READY-任务的策略如下。
[0397]1.所选择的任务应该是WAIT-任务(第一条件)。
[0398]2.所选择的任务应该是WAIT-任务中以指定事件为待机事件的任务(第二条件)。
[0399]3.所选择的任务应该是对待机标记模式、当前标记模式和标记条件进行比较,WAIT解除条件满足的任务(第三条件)。
[0400]这三个条件统称为“事件待机解除条件”。
[0401][2]由根据基本实施方式的硬件RT0S所进行的事件处理
[0402]当任务处理装置100执行等待事件系统调用以及执行设定事件系统调用时,RT0S执行如下处理。内置于任务处理装置100的信号量表212对应存储事件ID和当前标记模式。待机任务ID和待机标记模式等信息,存储在状态存储单元220中。
[0403]<等待事件系统调用的执行>
[0404]A1.任务切换电路210从事件表214中读出当前标记模式。
[0405]A2.任务切换电路210根据标记条件比较当前标记模式和待机标记模式,以判定WAIT解除条件是否满足。
[0406](当WAIT解除条件满足时)
[0407]A3.在执行系统调用的任务的任务状态寄存器258中设定“READY”。
[0408](当WAIT解除条件不满足时)
[0409]A3.任务切换电路210在执行系统调用的任务的任务状态寄存器258中设定“WAIT”,在待机理由寄存器262中设定“事件等待”,在事件ID寄存器266中设定待机事件的事件ID,在待机标记寄存器268中设定待机标记模式,以及在标记条件寄存器270中设定标记条件。
[0410]<设定事件系统调用的执行>
[0411]B1.任务切换电路210从事件表214中读出当前标记模式,并且将系统调用中指定的事件的事件ID输入给事件选择电路236。
[0412]B2.任务切换电路210对设定标记模式和来自事件表214的当前标记模式进行逻辑或运算。
[0413]B3.事件选择电路236根据所输入的事件ID选择满足事件待机条件的任务。此时,也可以不考虑任务优先级和WAIT占用时间来选择多个任务。
[0414](当存在满足事件待机解除条件的任务时)
[0415]B4.任务切换电路210在事件等待任务的任务状态寄存器258中设定“READY”,清除事件ID寄存器266、待机标记寄存器268、和标记条件寄存器270。
[0416]B5.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
[0417](当不存在满足事件待机解除条件的任务时)
[0418]B4.任务切换电路210使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
[0419][超时处理]
[0420]当WAIT解除条件满足时,转换到WAIT状态的任务转换到READY状态。但是,如果因为某种外因或应用程序故障而阻碍WAIT解除条件满足时,该任务将不能从WAIT状态离开。因此,通常在任务转换到WAIT状态时设定超时值。超时值定期递减,当变成零时,即使WAIT解除条件不满足,任务也从WAIT状态转换到READY状态,即防止任务在WAIT状态停留的时间超过超时值。
[0421][I]由普通软件RTOS所进行的超时处理
[0422]对于普通软件RT0S,在处于WAIT状态的任务的TCB中设定超时值,该超时值周期性地递减。RTOS周期性地向CPU处理申请中断,以检查全部TCB,以及检测出超时值呈O的WAIT-任务。当检测出这种任务时,RTOS使该任务的任务状态从WAIT状态转换到READY状态。
[0423][2]由根据基本实施方式的硬件RTOS所进行的超时处理
[0424]另一方面,在基本实施方式中,任务切换电路210周期性地递减各超时计数器274的超时值。当执行WAIT系列系统调用时,超时值设定为参数。任务切换电路210在执行该系统调用的任务的超时计数器274中设定超时值。
[0425]由于超时值的递减处理不需要CPU 150参与,因此任务切换电路210能够不依赖于任务执行处理进行超时值的更新。因此,即使在CPU 150执行任务的过程中,任务控制电路200也能够主动地更新超时值。由于状态数据不断地被输入到超时检测电路238中,因此超时检测电路238能够在更新超时值的同时,检测出超时值呈O的任务。超时检测电路238输出检测出的这种任务的任务ID。当从超时检测电路238获得该任务ID时,任务切换电路210便确定发生了超时,随后申请HC以停止提供CPU时钟。任务控制电路200使发生超时的WAIT-任务转换到READY状态,并且使RUN-任务转换到READY状态。任务切换电路210从READY-任务中选择下一个应执行的任务。另外,任务切换电路210重启已发生超时的任务的定时器252,以测量READY占用时间。
[0426]根据这种处理方法,在任务执行过程中,即CPU时钟运行过程中发生超时时,能够通过立即向CPU 150申请中断,来执行任务转换。另外,在任务执行过程中,任务切换电路210能够不依赖CPU 150的处理能力独立地执行超时值的更新处理。
[0427][作为有限状态机的任务切换电路210]
[0428]图15是任务切换电路210的状态转移图。
[0429]在初始化处理(Al)之前,全部任务都处于IDLE状态。当初始化处理结束时(SlO),某一个任务成为RUN-任务,任务切换电路210处于任务执行状态(A2)。当检测出中断请求信号时(S12),特殊任务成为RUN-任务,执行中断处理(A3)。当中断处理结束时(S14),任务切换电路210从普通任务中选择RUN-任务,并转换到A2。
[0430]另外,在任务执行过程中(A2),执行系统调用时(S16),执行系统调用处理(A4)。在未发生任务转换即RUN-任务转换的情况下(S18),任务切换电路210返回到A2。另一方面,在由于系统调用处理(A4)而发生任务转换的情况下(S20),任务切换电路210根据执行选择电路232的输出来进行RUN-任务的选择(A5)。当任务转换结束时(S22),处理状态转换到A2。
[0431]最后,结合基本实施方式,还附带说明一下只安装作为任务处理装置100的主要部件的保存电路120和任务控制电路200中的一个的情况。
[0432][未配置任务控制电路200的类型的任务处理装置100]
[0433]图16是图5所示的任务处理装置100中未配置任务控制电路200的任务处理装置100的电路图。
[0434]代替配置任务控制电路200,追加有寄存器切换控制电路322和处理数据存储单元320。由于未配置任务控制电路200,因此任务调度功能由软件RTOS来实现。因而,RTOS在任务转换时,需要暂时取得CPU 150的使用权。处理数据存储单元320通常存储用于RTOS的处理数据。当RTOS取得CPU 150的使用权时,处理数据存储单元320调换存储在处理数据存储单元320中的RTOS用处理数据和存储在特殊寄存器156中的任务用处理数据。以下以从任务A向任务B切换来说明该处理过程。
[0435]A1.当任务A执行系统调用时,将系统调用中的变量以及系统调用ID记录在某些普通寄存器158内。
[0436]A2.寄存器切换控制电路322将任务A的处理数据移动到处理数据存储单元320中,并将处理数据存储单元320中的RT0S用处理数据加载到处理寄存器154中。在该阶段,RT0S取得CPU 150的使用权。
[0437]A3.寄存器切换控制电路322向保存寄存器110a输入写入信号,以将处理数据存储单元320中存储的任务A用处理数据保存到保存寄存器110中。
[0438]A4.RT0S根据记录在普通寄存器158中的系统调用变量和ID,执行与系统调用相对应的处理。另外,将任务A的TCB中的任务状态数据设定为“READY”,并向任务就绪表中追加任务A的TCB。
[0439]B1.接着,RT0S按照所述的RUN-任务选择条件,选择RUN-任务,这里是选择任务B0
[0440]B2.RTOS指示寄存器切换控制电路322将指定任务B的任务选择信号输入到加载选择电路112中。由此,处理数据从保存寄存器110b移动到处理数据存储单元320中。
[0441]B3.寄存器切换控制电路322调换处理数据存储单元320中的任务B用处理数据和处理寄存器154中的RT0S用处理数据。由此,任务B取得CPU 150的使用权。
[0442]根据这种处理方法,与配置任务控制电路200的图5所示的任务处理装置100相t匕,能够使任务处理装置100整体电路小型化。RT0S是以软件实现的,但是处理数据的加载/保存是能够由来自寄存器切换控制电路322的信号来硬件控制的。如果将分别连接处理寄存器154、处理数据存储单元320、加载选择电路112、和保存寄存器110的总线设定为能够并行发送处理数据的位数,则与将处理数据保存到TCB中和从TCB加载处理数据相比,能够实现更高速的任务转换。
[0443][未配置保存电路120的类型的任务处理装置100]
[0444]图17是图5所示的任务处理装置100中未配置保存电路120的任务处理装置100的电路图。
[0445]代替配置保存电路120,追加有中断接口电路324。由于未配置保存电路120,因此处理数据保存到存储器的TCB中。处理数据的保存/加载由基于软件的RT0S来实现。因而,在任务转换时,RT0S需要暂时取得CPU 150的使用权。以下以从任务A向任务B切换来说明该处理过程。
[0446]当通过执行系统调用来启动任务转换时,首先软件RT0S将任务A的处理数据保存到任务A的TCB中。而且,将RT0S用处理数据加载到处理寄存器154中。此时的处理方法与参照图3说明的内容相似。
[0447]软件RT0S向中断接口电路324中写入系统调用的参数。执行控制电路152使CPU150的CPU时钟停止。中断接口电路324使任务控制电路200执行任务转换。任务切换电路210,首先将任务A的任务状态寄存器258设定为READY,并根据来自任务选择电路230的输出选择作为下一个RUN-任务的任务B。任务切换电路210指示中断接口电路324加载任务B的处理数据。这时,中断接口电路324使执行控制电路152重启CPU时钟。另外,中断接口电路324通知软件RTOS已经选择了任务B。软件RTOS访问任务B的TCB,以将任务B的处理数据加载到处理寄存器154中。
[0448]根据这种处理方法,与配置保存电路120的图5所示任务处理装置100相比,能够使任务处理装置100整体电路小型化。RTOS功能的一部分是以软件实现的,但是任务选择处理由任务控制电路200来实现。
[0449]与参照图2以及图3说明的软件RTOS不同,图16以及图17所示的任务处理装置100,能够任意地将RTOS功能的一部分硬件化。如参照图16所述,由于配置了保存电路120,而无需访问用于处理数据保存/加载的TCB。因此,能够通过寄存器切换控制电路322来执行处理数据的保存/加载处理。另外,如参照图17所述,由于配置了任务控制电路200,因此软件RTOS能够将任务选择功能转移给任务控制电路200。
[0450]如参照图5所述,在配置了保存电路120和任务控制电路200的任务处理装置100的情况下,能够将RTOS的任务调度功能完全硬件化。由于在任务转换时没有必要访问存储器中的TCB,因此使任务转换处理的速度进一步提高。本发明人等人的实验表明:与参照图3说明的普通软件RTOS相比,基本实施方式中的任务处理装置100以约100倍的速度进行工作。
[0451][虚拟队列实施方式(SP系统)]
[0452]下面说明通过硬件来实现双输入型队列算法的虚拟队列实施方式中的任务处理装置100。基本实施方式中的任务处理装置100配置了基于定时器管理的任务调度功能。基本实施方式中的任务调度是“当任务优先级相同时,优先向等待时间最长的任务分配执行权”的算法。以下将这种任务调度称作“公平型任务调度”。
[0453]参照图11说明根据公平型任务调度的构思管理任务就绪表的方法。当为RUN-任务的任务J返回到READY状态时,任务J被安排在该表最末尾的任务F的后面。在任务J之后,任务A转换为RUN-任务。因此在任务优先级“O”的优先级指针280中,以任务D、...、任务F、任务J的顺序连接有各任务的TCB。直到任务F的执行结束之前,不向任务J提供执行权。公平型任务调度中的处理方法类似于FIFO的算法,即队列算法。因为该算法适用于基于定时器的管理,因此能够采用定时器通过硬件来实现公平型任务调度。
[0454]另一方面,某些软件OS采用“当任务优先级相同时,优先向曾经转换为RUN-任务的任务分配执行权”的任务调度。以下将这种任务调度称作“再执行优先型任务调度”。在再执行优先型任务调度中,返回到READY状态的任务J (其为RUN-任务)被放入表的起始处而不是最末尾。在任务J之后,任务A转换为RUN-任务。因此在任务优先级“O”的优先级指针280中,以任务J、任务D、...、任务F的顺序连接有各任务的TCB。当任务A结束时,优先于任务D、任务F再次向任务J提供执行权。当尽可能想总体执行曾经得到过执行权的任务时,再执行优先型任务调度是有效的。可以说再执行优先型任务调度包括LIFO算法,即堆栈算法。在虚拟队列实施方式中,通过硬件实现基本上为FIFO设计但也能够与LIFO相容的双输入型队列算法,从而实现再执行优先型任务调度。
[0455]此外,双输入型队列算法不仅在再执行优先型任务调度中还在普通应用程序中有用。因此,通过硬件实现双输入型队列算法有效提高了各种计算机程序的处理速度。
[0456]图18是虚拟队列实施方式中的任务处理装置100的电路图。
[0457]除了 CPU 150之外,虚拟队列实施方式中的任务处理装置100还包括保存电路120和任务控制电路200。但是,虚拟队列实施方式中的任务切换电路210包括主电路400、写入电路402、队列控制电路404以及最大值选择电路406。主电路400是具备与基本实施方式中的任务切换电路210大体相同的功能的电路。因此,虚拟队列实施方式中的任务切换电路210被配置成除了与基本实施方式中的任务切换电路210—致的主电路400,还包括写入电路402、队列控制电路404以及最大值选择电路406。状态存储单元220不仅向任务选择电路230而且还向最大值选择电路406、队列控制电路404不断地输出全部任务的全部状态数据。
[0458]图19是虚拟队列实施方式中的任务控制电路200的部分电路图。
[0459]任务控制电路200的基本结构与图10所示的电路结构大体相同。分别与各任务相对应的各状态寄存器250包括任务ID寄存器410、任务优先级寄存器412、队列顺序寄存器414、以及队列标识寄存器416。状态寄存器250也可以包括其它的寄存器,但是这里重点说明与双输入型队列算法相关的那些寄存器。
[0460](A)任务ID寄存器410:用于存储任务ID,与基本实施方式所示的任务ID寄存器254相同。任务ID寄存器410不断地输出表示任务ID的EID_S信号。
[0461](B)任务优先级寄存器412:用于存储任务优先级(PR),与基本实施方式所示的任务优先级寄存器256相同。PR_S信号被不断地输出。
[0462](C)队列顺序寄存器414:用于存储表示后述的虚拟队列中的输入顺序的“顺序值(0DR)”。顺序值越大,表示任务置于虚拟队列的更深处。详细情况将在后面描述。顺序值作为0DR_S信号被不断地输出。
[0463](D)队列标识寄存器416:用于存储表示虚拟队列的“队列ID(QID) ”。QID_S信号被不断地输出。
[0464]任务优先级寄存器412、队列顺序寄存器414以及队列标识寄存器416特别是作为用于管理虚拟队列的队列寄存器而工作。
[0465]虚拟队列是与任务状态相对应的队列。例如,QID = 0的虚拟队列(以下表述为“虚拟队列(0)”)可以与READY状态相对应,虚拟队列⑴可以与等待信号量状态相对应,虚拟队列(2)可以与等待互斥量状态相对应。或者,虚拟队列(1)可以与信号量ID = 0的等待信号量状态相对应,虚拟队列(2)可以与信号量ID = 1的等待信号量状态相对应。QID与任务状态之间的对应可以通过软件任意设定。
[0466]当任务A处于READY状态时,在队列标识寄存器416_A中设定与READY状态相对应的虚拟队列的QID。任务选择电路230或队列控制电路404能够通过参照各队列标识寄存器416来判别各任务的任务状态。因此,队列标识寄存器416能够实现与基本实施方式中的任务状态寄存器258、待机理由寄存器262、信号量ID寄存器264、互斥量ID寄存器265以及事件ID寄存器266等相同的功能。
[0467]虚拟队列不是物理上存在的,而是根据队列顺序寄存器414和队列标识寄存器416的配置而假设的概念性队列,这点很重要。例如,当各队列标识寄存器416和队列顺序寄存器414被配置为:
[0468]任务A:QID = 0,0DR = 0
[0469]任务B:QID = 0,ODR = I
[0470]任务C:QID = 0,ODR = 2
[0471]任务D:QID = 1,ODR = O
[0472]时,表示在虚拟队列(O)中按照顺序依次输入任务C、B、A,而在虚拟队列⑴中只输入任务D。通过定义QID和ODR的数值范围能够灵活地变更虚拟队列的数量和大小。
[0473]任务选择电路230根据状态寄存器250输出的状态数据来选择应该转换状态的任务。主电路400向任务选择电路230输入CND信号。CND是表示任务选择条件的信号,包括表示队列ID的QID_C和表示任务优先级的PR_C。例如,在希望从虚拟队列(O)中抽取任务的情况下,主电路400在CND中设定QID_C = O。任务选择电路230输出表示在被指定的虚拟队列(O)中成为抽取对象的任务(以下简称为“抽取任务”)的任务ID的EID_A1,申请EID_A1_EN。另外,PR_A1和0DR_A1分别表示抽取任务的任务优先级和顺序值。由此,主电路400能够通过指定QID_C = Qn来查询任务选择电路230,从而识别虚拟队列(Qn)的抽取任务。任务选择电路230实现用于选择抽取任务的抽取候选电路的功能。更详细的情况将在后面参照图32进行描述。
[0474]向最大值选择电路406中输入来自主电路400的CND信号。当CND表明QID_C =Qn时,最大值选择电路406输出表示虚拟队列(Qn)中的最大顺序值的0DR_A2,并申请EID_A2_EN。更详细的情况将在后面参照图28进行描述。
[0475]队列控制电路404通过设定各状态寄存器250中的状态数据来控制各任务的状态转移。队列控制电路404接收来自主电路400的CMD和EID_C。除此之外,还接收CND (QID_C、PR_C)、0DR_A1、0DR_A2、0DR_A2_EN和各状态寄存器250中的状态数据。
[0476]CMD表示用于操作虚拟队列的命令。成为CMD对象的虚拟队列的队列ID、任务的任务ID和任务优先级分别由QID_C、EID_C和PR_C来指定。命令是ENQ_TL、ENQ_TP和DEQ三个中的任意一个。
[0477]当输入顺序输入命令ENQ_TL时,由EID_C信号指定的任务被输入虚拟队列的最末尾。以下将在队列的最末尾进行的输入称作“顺序输入”。当输入抽取命令DEQ时,在虚拟队列的起始处抽取任务。ENQ_TL和DEQ以FIFO模式控制队列。当输入逆序输入命令ENQ_TP时,由EID_C信号指定的任务被输入虚拟队列的起始处。以下将这种在队列的起始处进行的输入称作“逆序输入”。逆序输入不是FIFO模式的输入,因此逆序输入是特殊的输入方式。
[0478]当从主电路400输入CMD时,写入电路402申请WT,从而将从队列控制电路404输出的数据写入到各状态寄存器250中。队列控制电路404、写入电路402、任务选择电路230和最大值选择电路406等实现用于控制虚拟队列的虚拟队列处理电路的功能。
[0479]队列控制电路404的电路结构将参照下面的图20进行详述。
[0480]图20是队列控制电路404的电路图。
[0481]队列控制电路404是多个寄存器值生成电路420的集合。各寄存器值生成电路420是相同的电路。寄存器值生成电路420与每个任务相对应,也可以说与每个状态寄存器250相对应。寄存器值生成电路420_En与任务ID = En的任务(以下称为“任务(En) ”)相对应。对应任务的任务ID作为ELM_ID信号被固定地输入到寄存器值生成电路420中。
[0482](?1^、010_3和PR_S是从状态寄存器250输出的状态数据,分别表示顺序值、队列ID和任务优先级。向与任务(En)相对应的寄存器值生成电路420_En输入表示任务(En)的顺序值、队列ID和任务优先级的ODR_S_En、QID_S_En和PR_S_En。CMD和EID_C是从主电路400输入的。ODR_A2_EN和ODR_A2是从最大值选择电路406输入的。当申请ODR_A2_EN时,表示最大顺序值的ODR_A2是有效的。0DR_A1是从任务选择电路230输入的。ODR_Al表示抽取任务的任务ID。QID_C和PR_C是从主电路400输入的CND信号,分别表示作为任务选择条件的QID和PR。
[0483]寄存器值生成电路420_En将任务(En)的顺序值、队列ID、任务优先级分别作为QID_N_En、0DR_N_En、PR_N_En 输出,当通过写入电路 402 申请 WT 时,将 QID_N_En、0DR_N_En、PR_N_En写入到状态寄存器250_En。
[0484]当写入电路402申请WT时,来自全部的寄存器值生成电路420的QID_N_En、0DR_N_En、PR_N_En被写入到全部的状态寄存器250中。受到CMD影响的与任务相对应的寄存器值生成电路420将根据后述的算法指定的新数据写入到状态寄存器250中。另一方面,不受CMD影响的与任务相对应的寄存器值生成电路420也通过重新输出与写入状态寄存器250中的数据相同的数据来进行写入操作。
[0485]此外,允许来自寄存器值生成电路420的数据被写入的WT也可以不是输入到各状态寄存器250,而是直接输入到队列控制电路404中。在这种情况下,只有内置在队列控制电路404中的寄存器值生成电路420中的与应该通过CMD变更状态的任务相对应的寄存器值生成电路420,可以将新数据写入状态寄存器250中。
[0486]寄存器值生成电路420进行的具体处理细节将在后面描述。
[0487]图21是表示虚拟队列与任务之间的关系的概念图。
[0488]这里,假设虚拟队列(QO)和虚拟队列(Ql)两个虚拟队列。虚拟队列(QO)是输入任务优先级PR = O的任务的优先队列(以下表述为“优先队列(Q0:0) ”)和输入任务优先级PR = I的任务的优先队列(Q0:1)的集合。虚拟队列(Ql)也同理。实际上是假设四个优先队列。例如,虚拟队列(QO)可以对应于READY状态,而虚拟队列(Ql)可以对应于WAIT状态。
[0489]在各虚拟队列中,左侧所示为输入口,右侧所示为抽取口。在顺序输入中,从左侧输入任务;在逆序输入中,从右侧输入任务。任务抽取通常是从右侧进行的。
[0490]在图21中,任务ID = E0、El、E2、E3的四个任务被输入虚拟队列中。任务(EO)、任务(E2)和任务(E3)被输入虚拟队列(QO)中。其中,任务(EO)和任务(E3)是任务优先级PR = O的任务,因此被输入优先队列(Q0:0)中。任务(E2)是PR = I的任务,因此被输入优先队列(Q0:1)中。输入虚拟队列(QO)中的任务(E3)、任务(E2)和任务(EO)的顺序值ODR分别为2、I和O。任务优先级PR = O的任务(El)被输入虚拟队列(Ql)中。该任务的 ODR 是“O”。
[0491]图22是与图21的状态相对应的状态寄存器250的数据结构图。
[0492]图21所示的各任务在虚拟队列中的输入状态通过状态寄存器250的设定来表现。在图21所示的状态中,任务(EO)至任务(E7)中被输入虚拟队列中的是任务(EO)至任务(E3)。因此,在其他任务的队列标识寄存器416中设定表示该任务未被输入任何队列的“Non”。在输入虚拟队列(QO)中的任务(EO)、任务(E3)和任务(E2)的队列标识寄存器416中设定“Q0”。另外,在输入虚拟队列⑴中的任务(El)的队列标识寄存器416中设定“Q1”。通过队列标识寄存器416的设定来表现哪个任务被输入哪个虚拟队列中。
[0493]在输入虚拟队列(Q0)中的包括任务(E0)、任务(E3)和任务(E2)的三个任务的队列顺序寄存器414中,分别将0DR设定为0、2和1。因为输入虚拟队列(Q1)中的任务只有任务(E1),因此顺序值被设定为最小的“0”。通过队列顺序寄存器414的设定来表现各任务在虚拟队列中的位置。
[0494]任务(E0)、任务(E1)和任务(E3)的任务优先级PR是“0”。因此,在这些任务的任务优先级寄存器412中设定“0”。由于任务(E2)的任务优先级PR是“1”,因此在任务优先级寄存器412_E2中设定“1”。通过任务优先级寄存器412的设定来表现各任务被输入哪个优先队列中。
[0495]根据以上的设定,将详述顺序输入、逆序输入和抽取中的处理细节。
[0496][顺序输入]
[0497]图23是向图21所示的虚拟队列顺序输入任务(E4)的概念图。
[0498]这里假定向虚拟队列(Q1)顺序输入任务优先级PR = 0的任务(E4)。主电路400配置CMD = ENQ_TL(顺序输入命令),以使EID_C = E4、QID_C = Q1,以及PR_C = 0。当内置在队列控制电路404中的寄存器值生成电路420_E4检测出EID_C = ELM_ID = E4时,输出 QID_N_E4 = QID_C = Q1、0DR_N_E4 = 0 以及 PR_N_E4 = PR_C = 0。QID_N_E4 表示输入任务(E4)的虚拟队列的QID,0DR_N_E4表示输入的顺序值,PR_N_E4表示任务(E4)的任务优先级。顺序输入的任务的0DR_N通常设定为“0”。“0”是表示队列中最新输入的顺序值。
[0499]寄存器值生成电路420_E4以及输入QID_S_En = QID_C = Q1的寄存器值生成电路420_En都对该命令作出响应。这样作出响应的寄存器值生成电路420_En输出0DR_N_En=0DR_S_En+l。在这种情况下,寄存器值生成电路420_E1检测QID_S_E1 = QID_C = Ql,并输出0DR_N_E1 = 0+1 = 1。0DR_N_E1表示输入任务(El)后的顺序值。已经输入顺序输入任务(E4)的虚拟队列(Q1)中的任务的顺序值将受影响。经过这种处理过程,形成虚拟队列(Q1)的任务(E4)和任务(E1)的状态数据得到调整。
[0500]图24是与图23的状态相对应的状态寄存器250的数据结构图。
[0501]在图24中,添加下划线的部分表示相对于图22所示的状态寄存器250的设定有变化的地方。QID_N_E4在与任务(E4)顺序输入虚拟队列(Q1)中相对应的队列标识寄存器416_E4中设定“Q1”。任务(E4)的0DR是“0”,PR是“0”。由于顺序输入任务(E4),已经输入虚拟队列(Q1)中的任务(E1)的0DR从“0”递增到“1”。修改后的状态寄存器250的设定表现图23所示的虚拟队列(Q1)的状态。
[0502]图25是向图23所示的虚拟队列中顺序输入任务(E5)的概念图。
[0503]这里假定向虚拟队列(Q0)顺序输入任务优先级PR = 1的任务(E5)。主电路400配置CMD = ENQ_TL(顺序输入命令),以使EID_C = E5、QID_C = Q0以及PR_C = 1。寄存器值生成电路 420_E5 输出 QID_N_E5 = QID_C = Q0、0DR_N_E5 = 0 以及 PR_N_E5 = PR_C=1。
[0504]寄存器值生成电路420_E5以及输入QID_C = QID_S_En = Q0的寄存器值生成电路420_En都在检测出QID_C = QID_S_En时输出0DR_N_En = 0DR_S_En+l。在该例子中,与任务(E0)、任务(E2)和任务(E3)相对应的寄存器值生成电路420就是这样的寄存器。经过这种处理过程,形成虚拟队列(Q0)的任务(E5)、任务(E0)、任务(E2)和任务(E3)的状态数据得到调整。
[0505]图26是与图25的状态相对应的状态寄存器250的数据结构图。
[0506]在图26中添加下划线的部分表示相对于图24所示的状态寄存器250的设定有变化的地方。首先,在与任务(E5)顺序输入虚拟队列(QO)中相对应的队列标识寄存器416_E5中设定“Q0”。任务(E5)的ODR是“0”,PR是“I”。由于顺序输入任务(E5),因此原先输入虚拟队列(QO)中的任务(EO)、任务(El)和任务(E3)的ODR分别递增。
[0507]图27是表示顺序输入的处理过程的流程图。
[0508]主电路400设定被顺序输入的任务(以下称作“顺序输入任务”)的输入条件(SlO)。具体地说,以CMD = ENQ_TL设定EID_C、QID_C和PR_C。队列控制电路404中与顺序输入任务相对应的寄存器值生成电路420分别在顺序输入任务的任务优先级寄存器412、队列顺序寄存器414和队列标识寄存器416中设定PR_C、0和QID_C(S12)。
[0509]在已经向虚拟队列(QID_C)输入了其它任务的情况下(S14中的Y),已经输入的各任务的ODR相应递增(S16)。在图25所示的例子中,任务(EO)、任务(E2)和任务(E3)的ODR递增。步骤S12、S14和S16在时间上是大体并行执行的。
[0510][逆序输入]
[0511]图28是最大值选择电路406的部分电路图。
[0512]最大值选择电路406是由主电路400驱动用于逆序输入的电路。当接收到表示QID_C = Qn的CND信号时,最大值选择电路406输出表示虚拟队列(Qn)中的最大顺序值的0DR_A2,并申请0DR_A2_EN。与基本实施方式所示的执行选择电路232和信号量选择电路234相似,最大值选择电路406由多段的比较电路构成。最大值选择电路406包括四个第一比较电路422 (422a、422b等)、两个第二比较电路424 (424a等)和一个第三比较电路(图中未示出)。另外,最大值选择电路406还包括八个判定电路426 (426a、426b、426c、426d
坐^
寸/ ο
[0513]以第一比较电路422a为例进行说明。第一比较电路422a比较任务O和任务1,如果两者都被输入虚拟队列(Qn)中,则选择顺序值较大的任务。第一比较电路422a接收分别表示任务O和任务I的任务ID和顺序值的EID_S、0DR_S。
[0514]第一判定:如果任务O已经被输入虚拟队列(Qn)中,则判定电路426a申请EID_11A_EN。如果任务I已经被输入虚拟队列(Qn)中,则判定电路426b申请EID_11B_EN。第一比较电路422a首先参照分别从判定电路426a和判定电路426b输出的EID_11_EN信号。如果两个信号中的一个是“1”,则只有一个任务被输入虚拟队列(Qn)中。此时,第一比较电路422a将输入虚拟队列(Qn)中的任务的任务ID (EID_S)和顺序值(0DR_S)分别作为EID_21A 和 0DR_21A 输出,并申请 EID_21A_EN。
[0515]当判定电路426a和判定电路426b都输出“O”时,哪个任务都没有被输入虚拟队列(Qn)中。此时,取消EID_21A_EN,此后在第二比较电路424a中任务O和任务I都不会成为比较对象。
[0516]当判定电路426a和判定电路426b都输出“I”时,意味着两个任务都已经被输入虚拟队列(Qn)中,此时执行下面的第二判定。
[0517]第二判定:比较任务O的0DR_S_0和任务I的0DR_S_1,选择顺序值较大的任务。第一比较电路422a将分别表示顺序值较大的任务的任务ID (EID_S)和顺序值(0DR_S)的EID_21A 和 0DR_21A 输出,并申请 EID_21A_EN。
[0518]其它第一比较电路422的处理也同理,分别比较任务0和任务1、任务2和任务3、任务4和任务5、任务6和任务7。第二比较电路424通过比较来自两个第一比较电路422的输出来进一步选择顺序值较大的任务。以第二比较电路424a为例进行说明。第二比较电路424a比较第一比较电路422a的输出信号和第一比较电路422b的输出信号,以选择顺序值较大的任务。分别从第一比较电路422a和第一比较电路422b向第二比较电路424a输入EID_21、0DR_21和EID_EN。第二比较电路424从任务0至任务3中选择虚拟队列(Qn)中顺序值最大的任务。其它第二比较电路424也同理,虚拟队列(Qn)中的最大顺序值最终作为0DR_A2信号输出。当选择某一个任务时,申请0DR_A2_EN;当虚拟队列(Qn)中不存在任何任务时,取消0DR_A2_EN。
[0519]此外,也可以向第一比较电路422、第二比较电路424和第三比较电路输入用于使优先级判定无效的PR无效信号。当PR无效信号有效时,各比较电路从判定条件中排除优先级后选择任务。图32所示的各比较电路也同理。
[0520]图29是向图25所示的虚拟队列中逆序输入任务(E6)的概念图。
[0521]这里假定向虚拟队列(Q0)中逆序输入任务优先级PR = 1的任务(E6)。首先,主电路400将表示输入目标QID = Q0的QID_C信号输入到最大值选择电路406。最大值选择电路406将表示虚拟队列(Q0)的最大顺序值的0DR_A2输出到队列控制电路404,并申请0DR_A2_EN。参照图25,虚拟队列(Q0)的最大顺序值是任务(E3)的“3”,因此,0DR_A2 =3。
[0522]接着,主电路400设定CMD = ENQ_TP (逆序输入命令),以使EID_C = E6、QID_C =Q0以及PR_C = 1。此时,当检测出EID_C = ELM_ID = E6时,内置在队列控制电路404中的寄存器值生成电路 420_E6 输出 QID_N_E6 = QID_C = Q0、0DR_N_E6 = 0DR_A2+1 = 3+1=4 以及 PR_N_E6 = PR_C = 1。
[0523]当发出CMD = ENQ_TP (逆序输入命令)时,只有与由EID_C指定的任务相对应的寄存器值生成电路420工作。因此,只有被逆序输入的任务(E6)的状态数据被变更。
[0524]图30是与图29的状态相对应的状态寄存器250的数据结构图。
[0525]在图30中添加下划线的部分是相对于图26所示的状态寄存器250的设定有变化的地方。首先,在与任务(E6)逆序输入虚拟队列(Q0)中相对应的队列标识寄存器416_E6中新设定“Q0”。任务(E6)的0DR是“4”,PR是“1”。通过逆序输入任务(E6),其它任务的状态数据不受影响。
[0526]图31是表示逆序输入的处理过程的流程图。
[0527]主电路400首先将逆序输入目标的虚拟队列的QID = Qn输入到最大值选择电路406中(S20)。主电路400将虚拟队列(Qn)的最大顺序值输出到队列控制电路404中(S22)。主电路400设定被逆序输入的任务(以下称作“逆序输入任务”)的输入条件(S24)。具体地说,在CMD = ENQ_TP (逆序输入命令)中设定EID_C、QID_C和PR_C。队列控制电路404中与逆序输入任务相对应的寄存器值生成电路420分别在逆序输入任务的任务优先级寄存器412、队列顺序寄存器414和队列标识寄存器416中设定PR_C、最大顺序值+1、以及QID_C(S26)。但是,当最大顺序值=0而取消0DR_A2_EN时,即未向虚拟队列(Qn)输入任务时,在队列顺序寄存器414中设定表示初始输入的顺序值“0”。
[0528]如上所述,在顺序输入时存在调整其它任务的顺序值的可能性,但是在逆序输入时不需要这种调整。当虚拟队列为FIFO模式时,越是以前输入的任务,设定越大的顺序值。换句话说,越是输入到虚拟队列深处的任务,顺序值越大。相反地,也可以是越是输入到虚拟队列深处的任务,顺序值越小。在这种情况下,在顺序输入时不需要调整其它任务的顺序值,但是在逆序输入时存在调整其它任务的顺序值的可能性。
[0529][抽取]
[0530]图32是任务选择电路230的部分电路图。
[0531]任务选择电路230的基本结构与作为基本实施方式而参照图12所说明的相同。虚拟队列实施方式中的任务选择电路230,当接收到来自主电路400的询问时确定抽取任务。这里,说明与确定该抽取任务相关的电路结构。当接收到表示QID_C = Qn的CND信号时,任务选择电路230从虚拟队列(Qn)中任务优先级最高的优先队列中选择抽取任务,输出表示抽取任务的任务ID、任务优先级和顺序值的EID_A1、PR_A1和0DR_A1,并申请EID_Al_ENo与基本实施方式所不的执行选择电路232和信号量选择电路234相似,任务选择电路230由多段的比较电路构成。任务选择电路230包括四个第一比较电路430(430a、430b等)、两个第二比较电路432(432等)和一个第三比较电路(未示出)。另外,任务选择电路230还包括八个判定电路434(434a、434b、434c、434d等)。
[0532]以第一比较电路430a为例进行说明。第一比较电路422a比较任务O和任务1,如果两者都被输入虚拟队列(Qn)中,则选择任务优先级较高的任务。如果任务优先级相同,则选择顺序值较大的任务。第一比较电路430a接收表示任务O和任务I的任务ID、任务优先级和顺序值的EID_S、PR_S和0DR_S。
[0533]第一判定:如果任务O已经被输入虚拟队列(Qn)中,则判定电路434a申请EID_11A_EN。如果任务I已经被输入虚拟队列(Qn)中,则判定电路434b申请EID_11B_EN。第一比较电路430a首先参照分别从判定电路434a和判定电路434b输出的EID_11_EN信号。如果两个信号中的一个是“1”,则只有一个任务输入到虚拟队列(Qn)中。此时,第一比较电路430a输出表示输入虚拟队列(Qn)中的任务的任务ID(EID_S)、任务优先级(PR_S)以及顺序值(0DR_S)的 EID_21A、PR_11A 以及 0DR_21A,并申请 EID_21A_EN。
[0534]当判定电路434a和判定电路434b都输出“O”时,哪个任务都没有被输入到虚拟队列(Qn)中。此时,取消EID_21A_EN,此后在第二比较电路432a中任务O和任务I都不会成为比较对象。
[0535]当判定电路434a和判定电路434b都输出“I”时,意味着两个任务都已经被输入到虚拟队列(Qn)中,此时执行下面的第二判定。
[0536]第二判定:比较任务O的PR_S_0和任务I的PR_S_1,选择任务优先级较高的任务,即PR_S较小的任务。第一比较电路430a输出分别表示任务优先级较高的任务的任务ID(EID_S)、任务优先级(PR_S)以及顺序值(0DR_S)的 EID_21A、PR_21A 以及 0DR_21A,并申请EID_21A_EN。如果两个任务的任务优先级相同,则执行下面的第三判定。
[0537]第三判定:比较任务O的0DR_S_0和任务I的0DR_S_1,选择顺序值较大的任务。第一比较电路430a输出分别表示顺序值较大的任务的任务ID(EID_S)、任务优先级(PR_S)以及顺序值(0DR_S)的 EID_21A、PR_21A 以及 0DR_21A,并申请 EID_21A_EN。
[0538]其它第一比较电路430的处理也同理,分别比较任务O和任务1、任务2和任务3、任务4和任务5、任务6和任务7。第二比较电路432通过比较来自两个第一比较电路430的输出来进一步圈定抽取任务的候选。最终,从虚拟队列(Qn)中任务优先级最高的优先队列中选择抽取任务。当选择某一个任务时,申请EID_A1_EN;当虚拟队列(Qn)中不存在任何任务时,取消EID_A1_EN。
[0539]图33是从图29所示的虚拟队列中抽取任务(E3)的概念图。
[0540]这里假定从虚拟队列(Q0)中抽取一个任务。主电路400将QID_C = Q0输入到任务选择电路230。参照图29,在与虚拟队列(Q0)中最高的任务优先级相对应的优先队列(Q0:0)中,输入顺序值“1”的任务(E0)和顺序值“3”的任务(E3)。任务选择电路230选择顺序值较大的任务(E3)作为抽取任务。任务选择电路230设定EID_A1 = E3、PR_A1 =0 以及 0DR_A1 = 3,并申请 EID_A1_EN。
[0541]接着,主电路400设定CMD = DEQ(抽取命令),以使EID_C = EID_A1 = E3以及QID_C = Q0。寄存器值生成电路 420_E3 输出 QID_N_E3 = Non、0DR_N_E3 = 0 (复位)、PR_N_E3 = 0(复位)。由此,在状态寄存器250中任务(E3)和虚拟队列(Q0)之间的关系被解除。
[0542]当检测出QID_C = QID_S_En时,寄存器值生成电路420_E3以及输入QID_S_En =QID_C = Q0的寄存器值生成电路420_En都判定是否为0DR_S_En>0DR_Al。这里,0DR_A1是抽取任务(E3)被抽取前的顺序值。如果0DR_S_En>0DR_Al,即顺序值比抽取任务的顺序值还大的任务(En)的寄存器值生成电路420_En输出0DR_N_En = 0DR_S_En_l。在图29所示的例子中,相当于与任务(E6)相对应的寄存器值生成电路420_E6。寄存器值生成电路420_E6输出0DR_N_E6 = 0DR_S_E6_1 = 4-1 = 3。由此,形成虚拟队列(Q0)的任务(E6)的状态数据得到调整。
[0543]图34是与图33的状态相对应的状态寄存器250的数据结构图。
[0544]在图34中添加下划线的部分是相对于图30所示的状态寄存器250的设定有变化的地方。首先,对应于从虚拟队列(Q0)抽取任务(E3),在队列标识寄存器416_E3中新设定“Non”。另外,在队列顺序寄存器414和任务优先级寄存器412中分别设定“0”作为复位值。由于抽取任务(E3),原先输入虚拟队列(Q0)中的任务(E0)、任务(E2)、任务(E5)、任务(E6)中顺序值比抽取任务(E3)更大的任务(E6)的0DR递减。
[0545]图35是表示抽取处理过程的流程图。
[0546]主电路400首先向任务选择电路230输入成为抽取目标的虚拟队列的QID =Qn(S30)。任务选择电路230从虚拟队列(Qn)中选择抽取任务(S32)。当主电路400向队列控制电路404输入抽取任务的任务ID = En时,队列控制电路404从抽取任务(En)的状态数据中清除QID = Qn(S34)。此时,将PR和0DR复位为“0”,或者,也可以不进行复位。
[0547]当向虚拟队列(Qn)中输入其它任务(S36中的Y),且存在0DR_S_En>0DR_Al的任务(S38中的Y)时,相应任务的顺序值递减(S40)。此外,步骤S30至S40并非必须顺次执行,也可以在时间上并行执行。
[0548]在另一种实现方式中,也可以从虚拟队列的中间抽取任务。例如,在图33中,需要从虚拟队列(Q0)的正中央抽取任务(E2)。任务(E2)可在某个标志A被设定为打开的条件下执行。当该标志A处于关闭时,需要从虚拟队列(Q0)的中间取出任务(E2)。或者,当任务(E2)的预先设定的等待时间已经超时时,需要从虚拟队列(Q0)的中间取出任务(E2)。在这种情况下,通过清除任务(E2)的QID,使顺序值比任务(E2)的顺序值“2”大的任务的ODR递减,从而能够从虚拟队列(QO)的中间取出任务(E2)。在图33所示的情况下,任务(E6)的ODR变为2。由于虚拟队列是以不受物理限制的形式由硬件形成,因此在队列的中间也能够实现输入或抽取处理。
[0549]根据以上所述的虚拟队列控制,能够通过硬件逻辑来实现特殊的队列,该特殊的队列不仅能够以FIFO模式工作而且能够以LIFO模式工作。如果用软件来实现双输入型队列算法,则通常是根据连接表来实现的。但是,当基于软件进行处理时,必然产生伴随访问存储器和地址管理的耗时。相反地,改进实施方式所示的虚拟队列控制是由硬件逻辑来实现的,因此能够实现简单且高速的控制。特别是在时间要求严格的RTOS中,通过硬件实现双输入型队列算法的意义很大。下面说明通过上述虚拟队列控制方法来实现再执行优先型任务调度的方式。
[0550]图36是表示再执行优先型任务调度中的虚拟队列和任务之间的关系的第一概念图。
[0551]这里,假设与READY状态相对应的虚拟队列(QO)和与WAIT信号量状态相对应的虚拟队列(Ql)两个虚拟队列。虚拟队列(QO)是用于输入任务优先级PR = O的任务的优先队列(以下表述为“优先队列(Q0:0))和用于输入任务优先级PR= I的任务的优先队列(Q0:1)两个优先队列的集合。虚拟队列(Ql)也同理,实际上是假设四个优先队列。
[0552]在图36中,PR = I的任务(El)处于RUN状态,也是PR = I的任务(EO)和任务(E2)在优先队列(Q0:1)中处于READY状态。另外,PR = O的任务(E3)在优先队列(Ql: O)中处于WAIT信号量状态。这里,任务(El)是希望在得到执行权时集中或优先执行的任务。
[0553]首先,处于RUN状态的任务(El)执行释放信号量系统调用并返回到READY状态
(SI)。由于任务(El)是希望在尽可能早的阶段中再执行的任务,因此被“逆序输入”到优先队列(Q0:1)中。另一方面,释放信号量系统调用的执行使得任务(E3)的WAIT解除条件被满足。任务(E3)是从优先队列(Ql:O)中抽取的,并向优先队列(Q0:0)中顺序输入(S2)。接着,任务选择电路230选择新的RUN-任务。任务选择电路230选择处于READY状态的任务中任务优先级最高的任务(E3)作为抽取任务。由此,刚从WAIT状态跳转到READY状态的任务(E3)变成从优先队列(Q0:0)抽取的新的RUN-任务。根据这种任务调度,如果WAIT解除条件满足,则任务优先级高的任务能够在较早的阶段中获得执行权。
[0554]图37是表示再执行优先型任务调度中的虚拟队列和任务之间的关系的第二概念图。
[0555]当任务(E3)执行等待信号量系统调用时,任务(E3)被顺序输入到优先队列(Ql: O)中。接着,任务选择电路230选择新的RUN-任务。任务选择电路230选择处于READY状态的任务中任务优先级最高的任务,但是在这里,任务(EO)、任务(E2)和任务(El)的任务优先级相同。在这种情况下,从优先队列(Q0:1)中抽取任务(El) (S5)。任务(El)成为新的RUN-任务。根据这种处理方法,关于任务(El)的、不需要设定任务优先级PR = O但需要一旦开始执行则希望尽可能连续地执行该任务的规定能够得到适当的解决。
[0556]在再执行优先型任务调度中,根据执行情况或任务的种类区分使用顺序输入和逆序输入,从而能够控制任务的执行顺序。因此,不仅保持基本实施方式所示的任务处理装置100的高速处理性能,而且还能够实现更精细的任务调度。[HW中断实施方式(SP系统)]
[0557]下面,作为HW中断实施方式,说明通过硬件逻辑来实现中断处理的任务处理装置100。
[0558]图38是通过普通软件0S进行中断处理的时序图。
[0559]当软件0S从中断控制器(未图示)接收中断请求信号时,将启动中断处理程序,即在基本实施方式中的特殊任务。按下键盘、接收通信包、结束DMA发送、或仅仅经过规定时间等各种各种的现象,都可能成为中断请求信号的发生起因。特殊任务是通过软件实施的任务,对应中断原因来执行各种中断处理。
[0560]在该图中,首先,在执行普通任务中检测出中断请求信号INTR。当为应该立即对应的中断请求信号时,中断执行当中的普通任务,将执行权转移至OS(S10)。0S将普通任务的上下文信息保存至TCB(S102),启动特殊任务(S104)。
[0561]特殊任务对中断原因进行解析(S106)。由于根据中断请求信号执行向中断原因寄存器(未图示)的各种各样的写入,因此通过调查中断原因寄存器能确定中断原因。在特殊任务中,对应中断原因来判定应执行的中断处理而开始中断处理。在中断处理的过程中,执行各种各样的系统调用命令。当执行系统调用命令时,再次将执行权转移至os (S108)。0S执行指定的系统调用命令(S110)。执行系统调用命令之后,将执行权再转移至特殊任务(S112)。由于中断处理是优先级较高的处理,因此通常如果特殊任务的处理未结束,执行权不会转移至普通任务。
[0562]当特殊任务继续中断处理(S114),再次执行系统调用命令时,将执行权转移至OS (S116)。这样,一边特殊任务与0S交替获得执行权,一边将最后的执行权转移至特殊任务(S118),特殊任务结束中断处理(S120)。当结束中断处理时,执行权转移至OS (S122),执行从特殊任务向普通任务的任务转换(S124)。这样,重启由普通任务进行的通常处理(S126)。
[0563]基本实施方式和虚拟队列实施方式所示的任务处理装置100,与软件0S的不同点是通过硬件逻辑来实现RT0S的功能,但是在中断处理中的基本流程与软件0S基本相同。但是,如关联基本实施方式进行说明的那样,与软件0S相比,S102和S124的任务转换或S110等系统调用执行更为高速。
[0564]在基本实施方式的任务处理装置100中,用S100、S108、S116、S122使CPU时钟(CLK)停止之后,再执行RT0S的处理。另外,通过S104、S112、S118、S126而使CPU时钟(CLK)重启之后,执行特务任务或普通任务的处理。特殊任务是任务优先级特高的任务,但在作为按照CPU时钟(CLK)进行动作的基于上下文的任务这一点与普通任务相同。
[0565]在HW中断实施方式中,这样的中断处理中,具体而言通过硬件逻辑来实现特殊任务的功能的一部分,由此使中断处理更为高速。
[0566]中断处理的内容是各种各样的,但根据中断请求信号,简单且定型的处理内容较多。例如,假设一个普通任务A开始进行DMA发送,等待结束DMA的发送的情况。在普通任务A开始DMA发送时,执行等待事件系统调用,转移至WAIT状态。当结束DMA发送时,向(基本实施方式的)任务切换电路210输入规定的中断请求信号。此时起动的特殊任务中执行设定事件系统调用,在事件表214设定表示结束DMA发送的内容的标记模式。通过改变事件表214的当前标记模式,满足普通任务A的WAIT解除条件,将普通任务A转换到READY状态。这样,随着结束DMA发送而执行的中断处理的内容是比较简单的。
[0567]对此,在HW中断实施方式的任务处理装置100中,中断处理的内容比较简单,优选预先注册作为“高速中断请求信号INTR(H) ”的产生频率较高的中断请求信号。HW中断实施方式的中断请求信号大体分为高速中断请求信号INTR(H)与“普通中断请求信号INTR(N) ”两类。
[0568]图39是HW中断实施方式的任务处理装置100的电路图。
[0569]HW中断实施方式的任务处理装置100中,也是除了 CPU150外还包含保存电路120和任务控制电路200。HW中断实施方式的任务处理装置100还追加有中断电路450。
[0570]高速中断请求信号INTR(H)输出至中断电路450。对中断电路450的结构和中断电路400的高速中断请求信号的处理方法在后面进行叙述。与基本实施方式相同,普通中断请求信号INTR(N)直接输入至任务切换电路210,通过特殊任务进行中断处理。关于高速中断请求信号进行的中断处理(下面,称为“高速中断处理”)比关于普通中断请求信号进行的中断处理(下面,称为“通常中断处理”)高速。另外,当进行通常中断处理时,作为软件的特殊任务,具有能灵活地定义详细的处理内容的优点。HW中断实施方式的任务处理装置100通过并用高速中断请求信号和普通中断请求信号,能维持作为RTOS的通用性且实现高速化。
[0571]图40是中断电路450的电路图。
[0572]中断电路450包含信号选择电路452、操作电路454和存储部456。不定期地向信号选择电路452输入INTR(H) — O?INTR(H) — i_l的i个高速中断请求信号。有时在较短期间内输入多个高速中断请求信号INTR (H),也有时同时输入多个高速中断请求信号INTR(H)。信号选择电路452能暂时存储所接收的高速中断请求信号INTR(H)。
[0573]信号选择电路452基于规定的选择规则,从正在缓冲的高速中断请求信号INTR(H)中选择一个高速中断请求信号INTR(H)。此时的选择规则根据设计要求做任意确定即可。例如可以这样做:预先设定各高速中断请求信号INTR(H)的优先级,当缓冲有多个高速中断请求信号INTR(H)时,从中选择优先级最高的高速中断请求信号INTR(H)。或可以选择向信号选择电路452的输入时刻最迟的高速中断请求信号INTR (H),还也可以随机选择。当选择了高速中断请求信号INTR(H) —n(n是O?i_l的整数)时,信号选择电路452申请对应的信号QINT —η。
[0574]当申请了 QINT —η时,操作电路454申请ISROP信号。通过申请ISROP信号,将向信号选择电路452传递正处于高速中断处理中的情况。当申请了 ISROP信号时,信号选择电路452不再申请下一个QINT,直至ISROP信号被取消。当取消ISROP信号时,信号选择电路452能选择作为下一个处理对象的高速中断请求信号INTR(H)。
[0575]当申请了 QINT —η时,为了向任务切换电路210请求执行高速中断处理,操作电路454也申请ISR —RQ。当申请了 ISR —RQ时,任务切换电路210使CPU时钟(CLK)供给停止。这样,停止执行普通任务。
[0576]操作电路454根据QINT — n,换言之,根据所选择的高速中断请求信号INTR(H) _η,对 DSC — ADD“k-l: O”设定规定的地址 ADD“n”。通过输入 DSC — ADD“k_l: 0”= ADD“n”,向任务切换电路210发送作为ISR —DT “31:0”而保持在存储部456的地址ADD “η”的中断操作命令PO。任务切换电路210按照所接收的中断操作命令ρ0来执行高速中断处理。
[0577]如参照图42在后面叙述的那样,本实施方式的中断操作命令被标准化为32位大小,通过其最高位ISR —DT “31”表示是否存在后续的中断操作命令。此外,除了 32位以夕卜,中断操作命令也可以被标准化为64位、128位等任意大小。当最高位ISR —DT“31”=I时,任务切换电路210申请ISR — NX,向操作电路454请求后续的中断操作命令pi。操作电路454将之前的地址ADD “η”再加上I字节(本实施方式是32位)的地址ADD “η” +1设定为DSC_ADD “k-l:0”。向任务切换电路210发送作为ISR_DT “31:0”而保持在地址ADD “n”+l的中断操作命令pi。任务切换电路210按照所接收的中断操作命令pi继续执行高速中断处理。
[0578]当最高位ISR —DT “31” = O时,任务切换电路210申请ISR — END,向操作电路454通知已结束高速中断处理。操作电路454取消ISR0P。当ISROP被取消时,信号选择电路452能选择其他的高速中断请求信号INTR(H)而重新申请QINT。
[0579]此外,在HW中断实施方式中,向操作电路454输入ISR — END信号,操作电路454通过取消ISROP来控制信号选择电路452。在变形实施方式中,当结束高速中断处理时,任务切换电路210也可以直接地向信号选择电路452发送ISR —END信号来控制信号选择电路 452。
[0580]图41是存储部456的数据结构图。
[0581]HW中断实施方式的存储部456是存储器。高速中断请求信号INTR(H) —O所对应的中断操作命令组被保持在地址“OX000?0X0FF”。同样地,高速中断请求信号INTR(H)—I所对应的中断操作命令组被保持在地址“0X 100?OX IFF”。HW中断实施方式的中断操作命令是系统调用命令。例如,当信号选择电路452选择了高速中断请求信号INTR(H)— O时,操作电路454指定DSC —ADD “k_l:0”为高速中断请求信号INTR(H) — O的最初地址“0X000”。从存储部456向任务切换电路210发送该中断操作命令“systemcall _00”。由于在中断操作命令“systemcall — 00”中存在后续的中断操作命令“systemcall —01”,因此中断操作命令“systemcall —00”的最高位被设定为“I”。任务切换电路210执行中断操作命令“ systemcalI — 00”之后,为请求后续的中断操作命令而申请ISR — NX。
[0582]操作电路454重新指定DSC — ADD “k_l:0”为“O X 000”加上I字节的地址“0X001”。从存储部456向任务切换电路210发送后续的中断操作命令“systemcall _01”。“syscall —01”的最高位被清为“0”,作为关于高速中断请求信号INTR(H) — O的高速中断处理,任务切换电路210能知晓“syscall—01”是最后的中断操作命令。当结束中断操作命令“syscall —01”的执行时,任务切换电路210申请ISR — END,通知结束高速中断处理。
[0583]图42是表示中断操作命令的数据结构。
[0584]如上所述,ISR _ DT “31 ”表示有无后续的中断操作命令。由ISR —DT “30:24”表示系统调用的种类。ISR —DT “30:24” = 0000001表示“设定事件系统调用”。因此,中断操作命令460a是设定事件系统调用的执行命令。ISR —DT “23:8”表示设定标记模式,ISR_ DT “7:0”表示事件ID。当任务切换电路210接收中断操作命令460a时,使用与基本实施方式同样的处理方法来设定事件表214。
[0585]ISR _ DT “30:24” = 0000010表示“释放信号量系统调用”。因此,中断操作命令460b是释放信号量系统调用的执行命令。ISR —DT “7:0”表示释放信号量的信号量ID。ISR_DT “30:24” = 0000011表示“释放等待系统调用”。因此,中断操作命令460c是释放等待系统调用的执行命令。ISR —DT “4:0”表示从WAIT状态应释放的任务的任务ID。ISR_ DT “30:24” = 0000100表示“叫醒任务系统调用”。因此,中断操作命令460d是叫醒任务系统调用的执行命令。ISR —DT “4:0”表示从WAIT状态应释放的任务的任务ID。ISR_ DT “30:24” = 0000101表示“启动系统调用”。因此,中断操作命令460e是启动系统调用的执行命令。ISR —DT “4:0”表示应启动的任务的任务ID。也可以在存储部406注册作为中断操作命令的其他的各种各样的系统调用。
[0586]存储部456可以被提供为ROM (Read Only Memory:只读存储器),还可以被提供为可读写的RAM (Random Access Memory:随机存储器)。只要能用应用程序改写存储部456的内容,就能用软件设定或改变高速中断处理的内容。
[0587]图43是表示高速中断处理的过程的顺序图。
[0588]首先,信号选择电路452选择作为处理对象的高速中断请求信号INTR(H) _n(S130),申请QINT —n(S132)。操作电路454申请ISR0P,向信号选择电路452通知正处于高速中断处理当中的信息(S134)。当信号选择电路452申请了 ISROP时,即使接收新的高速中断请求信号,也会预先缓冲,不会申请QINT。
[0589]另外,当操作电路454申请了 QINT — n时,申请ISR —RQ,向任务切换电路210请求开始高速中断处理(S136)。此时,任务切换电路210使CPU时钟(CLK)停止,准备开始高速中断处理。操作电路454指定DSC _ ADD为对应QINT _ η的地址ADD “η”,从存储部456读出中断操作命令pO (S138)。向任务切换电路210发送作为ISR — DT “31:0”的中断操作命令p0(S140)。
[0590]任务切换电路210按照所接收的中断操作命令PO,改变信号量表212、事件表214和状态存储单元220的设定内容。更具体地说,任务切换电路210通过执行与普通任务发行释放信号量系统调用(发信信号量系统调用)或设定事件系统调用(设定标记系统调用)时同等的处理流程,来改变信号量表212、事件表214和状态存储单元220的设定内容。关于中断操作命令的处理内容与基本实施方式所示的系统调用命令的处理内容相同。只要将中断操作命令的最高位设定为“1”,任务切换电路210就申请ISR —NX,向操作电路454请求下一个中断操作命令Pl (S144)。操作电路454加载下一个中断操作命令pi (S146),向任务切换电路210发送中断操作命令pi (S148)。
[0591]当任务切换电路210执行了最终的中断操作命令px时,即,当执行了最高位被设定为“O”的中断操作命令px时,任务切换电路210申请ISR —END(S152)。操作电路454知晓结束高速中断处理,取消ISR0P(S154)。这样,信号选择电路452能选择下一个高速中断请求信号。
[0592]图44是HW中断实施方式的任务切换电路210的状态转移图。
[0593]在HW中断实施方式中,除了图15所示的状态转移图以外,还增加有高速中断处理(A6)。另外,通常中断处理(A3)与图15所示的中断处理(A3)相同。除此之外,标注与基本实施方式同一的附图标记的结构表不同一处理内容。
[0594]在执行任务当中(A2),当检测出高速中断请求信号INTR(H)时(S24),申请ISR —RQ,执行高速中断处理(A6)。当中断电路400向任务切换电路210发送中断操作命令时(S26),任务切换电路210执行所对应的系统调用处理(A4)。当结束执行系统调用命令时,状态转移至高速中断处理(A6)(S28)。另外,如果没有剩余应处理的中断操作命令时,结束高速中断处理(S30),选择下一个应执行的普通任务(A5)。
[0595]图45是表示HW中断实施方式的任务处理装置100进行高速中断处理的处理过程的时序图。
[0596]在该图中,首先,在执行普通任务中检测出中断请求信号INTR。如果是应立即对应的中断请求信号时,通过停止CPU时钟(CLK)而中断执行当中的普通任务,开始进行通过中断电路450与任务切换电路210的高速中断处理(S160)。
[0597]中断电路450适当地读出中断操作命令,任务切换电路210执行作为中断操作命令的指定的系统调用命令。当结束通过这样一系列的系统调用实现的高速中断处理时(S162),任务切换电路210选择下一个RUN-任务(S164)。选择之后,重启CPU时钟(CLK)而重启基于普通任务的通常处理(S166)。
[0598]采用HW中断实施方式所示的任务处理装置100,通过中断电路450与任务切换电路210的配合而由硬件等级实现高速中断处理。根据本发明人的实验,确认相比基本实施方式的任务处理装置100,HW中断实施方式的任务处理装置100能在大致4倍的速度下进行动作。存储部456形成为可写入的存储器,即使是高速中断处理,也能在一定程度下灵活地设定其处理内容。
[0599]{MP实施方式}
[0600]图46是普通MP系统500的硬件结构图。
[0601 ] 首先,参照图46、图47说明普通MP系统500的结构与其问题点,之后,说明本MP实施方式的任务处理装置100。
[0602]在普通MP系统500中,经由总线504相互地连接多个CPU150a?150c、存储器502、中断电路506。在存储器502中保存软件MPRTOS的程序。CPU150内置有内存或本地存储器。所有的CPU150均根据需要将软件MPRTOS加载至内置内存或者内置本地存储器中并执行。在图46、图47中,各CPU150中准备多个任务就绪表(参照图11),对于所有CPU150仅准备一个等待信号量表这样等待类的表(参照图13)。另外,任务是被固定分派至任意的CPU150中。例如,一个任务Tn仅在CPU150a中执行而不在其他的CPU中执行。
[0603]图47是示意性地表示存储器502的数据结构的图。
[0604]程序508和数据510被存储在存储器502中。程序508中包含软件RTOS本身的程序(执行代码)512与任务本身的程序(执行代码)514。均为目标代码。数据510中包含在软件RTOS管理下的RTOS数据516、任务中固有的任务数据518以及所有任务中共通的通用数据522。TCB是RTOS数据516的一种,任务就绪表和等待类表等各种表也是RTOS数据516的一种。能在所有任务中被访问的通用变量均作为通用数据522被存储。各任务中固有的数据,例如任务(应用程序)的本地变量等作为任务数据518被存储。
[0605]软件MPRTOS需要进行CPU访问存储器502的排他控制。例如,当CPUl访问等待类表时,可能发生CPU2也访问同一等待类表的情况。软件MPRTOS使用被称为原子操作命令的特别命令进行访问等待类表的排他控制。
[0606]具体而言,当CPUl访问等待类表时,首先CPUl的软件MPRTOS禁止中断CPU1。由此,CPUl在访问中禁止任务转换。接着,CPUl的软件MPRTOS获取对等待类表的访问权(锁定)。如果没得到访问权,CPUl维持禁止中断而继续等待。当结束访问时,解锁对等待类表的访问权,最后解除禁止中断。这样,在原子操作命令中将产生中断禁止与其解除、资源锁定与解锁等附加的执行成本(耗时)。当CPUl执行原子操作命令时,CPU2将等待直至CPUl的访问结束。当CPUl的访问结束时,CPU2将根据同样的原子操作命令访问等待类表。为了提高MP系统500的处理能力,需要降低伴随原子操作命令的耗时。
[0607]当访问在每个CPU中准备的任务就绪表时,也需要排他控制。例如,设为CPUl执行任务Tl,CPU2执行任务T2a而任务T2b为WAIT状态。在此,设为作为任务Tl执行了释放信号量系统调用等SET类系统调用命令的结果而任务T2b的WAIT解除条件成立。
[0608]当执行释放信号量系统调用命令时,在CPUl中加载软件MPRT0S。另外,CPUl的软件MPRTOS确认作为共有资源的等待信号量表,使WAIT中的任务T2b从WAIT状态变为READY状态。为了改变状态,CPUl的软件MPRTOS还需要访问CPU2用的任务就绪表。只要从WAIT状态释放的任务T2b的任务优先级高于现在CPU2中正执行的任务T2a的任务优先级,在CPU2中也需要任务转换。此时,CPUl的软件MPRTOS对CPU2实施中断。由于来自CPUl的中断,CPU2中也加载软件MPRTOS,并执行从任务T2a向任务T2b的任务转换。
[0609]下面,将由一个CPU执行系统调用等而在同一或者另外的CPU上发生任务转换的现象称为“分派”。由于当CPUl执行释放信号量系统调用而在CPU2发生了任务转换,因此上述处理相当于分派。
[0610]在上述的例中,至少需要伴随如下访问进行排他控制:(Al)MPRTOS(CPUl)访问等待信号量表,(A2)MPRTOS (CPUl)访问CPU2的任务就绪表,(A3)MPRTOS (CPU2)访问CPU2的任务就绪表。若为软件MPRT0S,由于有时多个CPU同时执行多个软件MPRT0S,因此容易增大排他控制的执行成本。
[0611 ] 相比普通软件RT0S,采用基本实施方式等所示的任务处理装置100 (硬件RT0S)能大幅减少任务转换的执行成本。另外,在MP实施方式中,通过导入下面所示的硬件逻辑来减少排他控制的执行成本。
[0612]图48是MP实施方式的任务处理装置100的电路图。
[0613]在MP实施方式中,任务控制电路200与多个CPUO、CPUl…CPUm连接。在任务控制电路200中追加有处理器切换电路530与处理器管理寄存器524。CPU不与保存电路120直接连接,而是经由处理器切换电路530连接。
[0614]从处理器切换电路530向CPUO发送停止请求信号(HRO)、写入信号(WTO)与保存数据,从CPUO向处理器切换电路530发送停止结束信号(HCO)、系统调用信号(SCO)和处理数据。与基本实施方式同样地,当CPUO执行系统调用命令时,申请系统调用信号(SCO)。当CPUO执行系统调用命令时,CPUO自动停止。可以完全停止(Stop)CPU时钟,也可以对CPU时钟进行无效等处理而暂时停止(Suspend)。无论怎样,“CPU的停止”只要是使CPU呈不再继续执行任务的状态即可。当申请系统调用信号(SCO)时,任务控制电路200则申请停止请求信号(HRO)。当申请写入信号(WTO)时,则在CPUO的处理寄存器中加载从保存电路120发出的保存数据。另外,始终向处理器切换电路530输出CPUO的处理数据。其他的CPUl?CPUm也是同样。CPU与处理器切换电路530之间的信号与基本实施方式中CPU与任务切换电路210之间的信号基本相同。
[0615]从处理器切换电路530向任务切换电路210发送系统调用信号(SC)、处理器通知信号(SCP)和停止结束信号(HC),从任务切换电路210向处理器切换电路530发送系统调用确认信号(SCACK)、处理器指定信号(HRP)和写入信号(WT)。
[0616]当CPUO申请系统调用信号(SCO)时,处理器切换电路530则申请系统调用信号(SC)与HRO信号,由处理器通知信号(SCP)发送作为CPU的ID的处理器ID。当处理器切换电路530申请系统调用信号(SC)时,任务切换电路210则申请系统调用确认信号(SCACK)。在MP实施方式中,任务切换电路210判断为从发送系统调用信号(SC)开始直至经过规定时间之后,能执行系统调用处理等。当结束系统调用处理时,则取消SCACK信号以及取消HRO信号。CPUO因HRO信号的取消而重启。在基本实施方式中,CPU时钟因执行系统调用命令时写入信号(WT)的下降而重启(有效),但在图48所示的结构中,CPU时钟因SCACK信号和HRO信号的取消而重启(有效)。
[0617]有时任务控制电路200也使CPUO停止。此时,任务切换电路210申请停止请求信号(HR),通过处理器通知信号(HRP)发送作为停止对象的CPUO的处理器ID(O)。处理器切换电路530申请HRO信号,使CPUO停止。当CPUO停止时,则申请HCO信号以及申请停止结束信号(HC)。通过申请HC信号,任务切换电路210知晓CPUO已停止并判断为能执行任务转换等。在MP实施方式中的HC信号是专用于对HR信号的应答。
[0618]处理器管理寄存器524用于存储各CPU中的RUN任务与表示这些任务的优先级等的处理器管理信息。参照图50在后面详细叙述处理器管理信息。
[0619]此外,在本实施方式的说明中,任务分别固定地对应于某一 CPU,对各CPU分别准备READY队列(后面叙述),全部CPU共用WAIT队列(后面叙述)。
[0620]图49是MP任务ID的数据结构图。
[0621]将MP实施方式中的任务ID称为MP任务ID(MEID)。本实施方式的MP任务ID为7位,前三位是处理器ID(PID),后四位是任务本身的任务ID(EID)。S卩,可实施的CPU是最大8个,任务是最大16个。可以根据PID和EID的大小来确定可实施的CPU数量和任务数量。
[0622]图50是处理器管理信息的数据结构图。
[0623]处理器管理寄存器524包含处理器管理信息。在处理器管理信息中注册由各CPU执行的任务(RUN-任务)、任务优先级和种类。根据图50,在处理器ID = O的CPUO中,任务(E4)是在执行当中、任务优先级PR为O、种类是普通任务(N)。在CPU2中,作为特殊任务(S)的任务(E15)在被执行当中。任务切换电路210通过访问处理器管理寄存器524,能实时地监视在全部CPU中正在执行的任务。换言之,不是通过软件而是通过硬件等级就能知晓全部RUN-任务。此外,也可以将一部分或全部处理器管理信息不存储在处理器管理寄存器524而是存储在状态存储单元220中。
[0624]图51是MP实施方式的READY队列的概念图。
[0625]对每个CPU准备对应于READY状态的虚拟队列(下面称为“READY队列”)。虚拟队列(QRO)是CPUO的READY队列。如图50所示,在CPUO、CPUUCPUm中分别正在执行任务(E4)、任务(E9)、任务(E2)。另外,向CPUO的READY队列(QR0:0)中输入任务(El)。
[0626]图52是MP实施方式的WAIT队列的概念图。
[0627]对全部CPU准备共用的对应于WAIT状态的虚拟队列(下面称为“WAIT队列”)。虚拟队列(QWa)是以信号量a作为对象的WAIT队列,虚拟队列(QWb)是以信号量b作为对象的WAIT队列。在图52中,向WAIT队列(QWa:0)输入任务(E3),向WAIT队列(QWb:0)与WAIT队列(QWb:1)分别输入任务(E8)与任务(E7)。图53是与图51、图52对应的状态寄存器的数据结构图。由于RUN-任务(E2)不在虚拟队列中而设定“Non”。在MP实施方式中,与虚拟队列实施方式同样地对每个虚拟队列设定顺序值。作为变形例,也可以对全部的虚拟队列设定连号的唯一的顺序值。在图51的例中,向虚拟队列(QRO)输入任务(El)、向虚拟队列(QRl)输入任务(EO)、向虚拟队列(QRm)输入任务(E5)、任务(E6)。只要输入的顺序是任务(El)、任务(E5)、任务(EO)、任务(E6),在连号的情况下,顺序值分别设为3、2、1、0即可。
[0628]在MP实施方式中,MP任务ID(MEID)中包含任务ID(EID)和处理器ID(PID)。因此,图32所示的任务选择电路230的结构发生局部变化。当接收到来自主电路400的询问时由任务选择电路230确定抽取任务(例如,下一个RUN-任务)。虚拟队列实施方式中,在选择RUN-任务之时的第一条件是“READY-任务”,而在MP实施方式中还加上“具有指定的处理器ID (PID) ”这一条件。在MP实施方式中,任务被固定地分配至CPU中。因此,当CPUl执行任务转换时,仅包含CPUl的PID的任务作为RUN-任务的候选,因此只要在判定电路434中追加用于确认PID的逻辑即可。具体地说,只要从状态存储单元220提供的PID与由从主电路400提供的QID指定的PID不一致,判定电路434判定为不申请EID — XX —EN信号即可。关于图28所示的最大值选择电路406等也同样地,由于仅追加了 PID,因此实质上基本不产生电路变化。
[0629]接着,说明对应于MP系统500的任务处理装置100的系统调用处理与截取处理。
[0630][执行系统调用]
[0631]参照图51等,说明CPUO的任务(E4)执行系统调用命令,发生从任务(E4)向任务(El)的任务转换。
[0632]S1.任务(E4)执行系统调用命令,并申请SCO信号。CPUO自动停止。
[0633]S2.处理器切换电路530申请HRO信号。但是,由于CPUO已经停止,因此CPUO的状态不会因申请HRO信号而改变。之所以申请HRO信号,是用于之后使CPUO知晓HRO信号的取消时刻(后面叙述)。
[0634]S3.处理器切换电路530还申请SC信号,并且在SCP信号中指定处理器ID = O。
[0635]S4.任务切换电路210申请SCACK信号。当申请了 SCACK信号时,处理器切换电路530则知晓开始进行了系统调用处理,等待直至SCACK被取消。处理器切换电路530用于连接保存电路120和CPUO。
[0636]S5.按照同于基本实施方式的流程,任务控制电路200执行系统调用处理。当在CPUO中发生任务转换时,则申请WT信号,替换任务(E4)的处理数据与任务(El)的保存数据。当结束系统调用处理时,任务切换电路210取消SCACK信号。任务切换电路210将任务(El)作为CPUO的新RUN-任务注册在处理器管理寄存器524中。
[0637]S6.处理器切换电路530对取消SCACK信号做出反应而取消HRO信号。CPUO因HRO信号的取消而重启,并执行任务(El)。
[0638][截取处理]
[0639]任务控制电路200主动中断CPU的处理而发生任务转换一事被称为“截取”。因超时、中断、执行系统调用等而发生截取。例如,当WAIT-任务T3超时而立刻变为RUN-任务时,任务控制电路200检测出超时而停止CPU,执行任务转换。
[0640]首先,说明呈WAIT状态的任务(E3)超时的情况。将任务(E3)作为由CPU2执行的任务(PID = 2)。
[0641]S1.任务选择电路230检测出任务(E3)超时。
[0642]S2.任务控制电路200按照与基本实施方式同样的流程执行超时处理。当任务(E3)未变为RUN-任务时,即不需要任务转换时,向CPU2的READY队列输入任务(E3),结束超时处理。如果需要任务转换,则进入S3之后。
[0643]S3.任务切换电路210申请HR信号,根据HRP信号指定CPU2。
[0644]S4.处理器切换电路530申请HR2信号,使CPU2停止。
[0645]S5.CPU2 申请 HC2 信号。
[0646]S6.处理器切换电路530申请HC信号。处理器切换电路530使处理数据保存在保存寄存器110中,在处理寄存器154中加载保存数据并进行任务转换。
[0647]S7.当CPU2的任务转换结束之后,任务切换电路210取消HR信号。
[0648]S8.处理器切换电路530取消HR2信号。重启CPU2的CPU时钟,执行任务(E3)。
[0649]中断处理的处理过程也与超时处理的处理过程基本相同。
[0650]高速中断请求信号INTR(H)的处理过程与HW中断实施方式中所示的处理相同。在普通中断请求信号INTR(N)时需要启动特殊任务。即,通常中断处理一定伴随有截取(任务转换)。任务控制电路200使中断目标的CPU停止,执行针对特殊任务的任务转换。执行特殊任务的CPU可以固定,也可以按照规定的规则进行选择。
[0651]在高速中断处理中有时也会发生截取。当伴随高速中断处理发生任务转换时,同样地,任务控制电路200使中断目标的CPU停止,执行任务转换。在HW中断实施方式(SP系统)中,在进行高速中断处理时申请ISR —RQ信号而停止CPU。但是,在无截取(任务转换)伴随的高速中断处理中,由于不需要使CPU停止,因此不停止CPU而能执行高速中断处理。采用该处理方法,由于能完全并列执行由CPU实现的任务执行与由任务控制电路200实现的高速中断处理,因此能进一步提高效率。具体地说,即使检测出高速中断请求信号INTR(H),任务切换电路210也判断为不需要进行任务转换时,只要不申请HR信号即可。对于频发高速中断请求信号INTR(H)类型的应用程序/软件有不停止CPU而能同时执行高速中断处理优点更多。
[0652][系统调用的竞争]
[0653]设为由CPUO的任务(E4)来执行系统调用命令,此后立即由CPUl的任务(E9)来也执行系统调用命令。停止CPUO和CPU1。另外,发送SCO信号和SCl信号。处理器切换电路530首先对应于S⑶信号,用SCP信号指定了 CPUO后申请SC信号。任务切换电路210执行CPUO的系统调用处理。另外,处理器切换电路530虽然申请HRO信号与HRl信号这双方,但由处理器切换电路530保留CPUl的系统调用信号(SCl)。当结束CPUO的系统调用处理时,取消SCACK信号以及HRO信号而重启CPU0。接着,处理器切换电路530对应于SCl信号,用SCP信号指定了 CPUl后再次申请SC信号。被保留的CPUl的系统调用处理在CPUO的系统调用处理之后执行。
[0654]这样,由处理器切换电路530连续执行多个系统调用命令。即使任务(E4)与任务(E9)完全同时地发送来系统调用信号,处理器切换电路530根据随机、循环等任意的规则来确定执行系统调用处理的顺序即可。由于处理器切换电路530统一地连续接收来自多个(PU的系统调用命令,因此理论上不会发生同时访问信号量表212和状态存储单元220等共有资源的情况。因此在由任务处理装置100构成的硬件MPRTOS中,在访问READY队列等共有资源时,不需要中断禁止与解除、资源锁定与解锁。
[0655][系统调用与截取的竞争]
[0656]设为由CPUO的任务(E4)来执行系统调用命令,此后立即或同时地发生以其他CPUl作为对象的截取。此时,优先进行截取。处理器切换电路530使CPUO停止,保留系统调用信号(SCO)。当结束截取处理时,处理器切换电路530执行被保留的CPUO的系统调用处理。即使是正在保留CPUO的系统调用信号时发生对其他CPU的截取时,也优先进行截取处理。
[0657]另外,由CPUO的任务(E4)来执行系统调用命令,此后立即或同时地发生以相同的CPUO作为对象的截取时,优先进行系统调用处理而保留截取。首先,伴随执行系统调用命令,停止CPUO而申请HR信号、HRO信号。当结束系统调用处理而取消SCACK信号时,处理器切换电路530暂且取消HR信号、HRO信号等。由此,重启CPU0。接着,对应于截取,再次申请HR信号、HRO信号而再次停止CPUO。这样执行截取处理。
[0658]图54是表示分派时虚拟队列与任务之间的关系的概念图。
[0659]在此,说明由CPUO的任务(E4)来执行系统调用命令的结果是在CPUl发生任务转换的情况。设为WAIT队列(QWb:0)的任务(E8)是应由CPUl执行的任务。
[0660]S1.设为由CPUO的RUN-任务(E4)来执行释放信号量系统调用。如图50所示,RUN-任务(E4)的任务优先级PR为O。由于READY-任务(El)的任务优先级PR也为0,因此执行系统调用之后,任务(E4)仍为RUN-任务。即,不发生任务转换,处理器管理寄存器524未被更新。
[0661]S2.通过执行释放信号量系统调用,抽取WAIT队列(QWb:0)中的WAIT-任务(E8)。此时,任务切换电路210参照处理器管理寄存器524来比较CPUl的RUN-任务(E9)与WAIT-任务(E8)的任务优先级。由于WAIT-任务(E8)的任务优先级高于RUN-任务(E9)的任务优先级,因此任务切换电路210执行以CPUl作为对象的任务转换。具体地说,指定CPUl来申请HR信号而使CPUl停止。
[0662]当WAIT-任务(ES)的任务优先级为RUN-任务(E9)的任务优先级以下时,由于向CPUl的READY队列(QRl: O)仅输入WAIT-任务(E8),因此不需要任务转换(分派)。
[0663]S3.在停止CPUl之后,向READY队列(QRl: 2)输入RUN-任务(E9)。READY-任务(E9)的处理数据从处理寄存器92保存至保存寄存器110。
[0664]S4.WAIT-任务(E8)成为新的RUN-任务。处理器管理寄存器524也被更新。从保存寄存器110向处理寄存器92加载任务(E8)的处理数据。
[0665]分派例如发生在,通过释放信号量系统调用或设定标记系统调用等SET类系统调用,将某一 CPU的任务从WAIT状态转移至RUN状态时。另外,分派也发生在,通过启动系统调用或结束系统调用而强制地使别的CPU的任务RUN或者STOP时。
[0666]图55是向任务切换电路532中组入处理器切换电路530的功能时任务处理装置100的电路图。
[0667]也可以向任务切换电路532组入处理器切换电路530的功能。保存电路120中包含的第一加载选择电路526与图48的加载选择电路112相同。在图55中还具有新的第二加载选择电路528。
[0668]当申请SCO?SCm信号中任一者、INTR信号或者超时信号时,图55所示的任务控制电路200进行动作。任务切换电路532向第二加载选择电路528发送PID信号。根据PID信号指定作为控制对象的CPU。第二加载选择电路528用于连接由PID信号指定的CPU与保存电路120。通过第二加载选择电路528来实现处理器切换电路530的功能中用于连接多个CPU中的任一方与保存电路120的功能,通过任务切换电路532来实现其他功能。
[0669]在本MP实施方式中,说明了任务与CPU之间的关系是被固定的,但也可以分别处理任务ID(EID)与处理器ID(PID)。例如,当执行启动系统调用时,通过指定任务ID与处理器ID,也可以设定MEID为任意的PID。另外,也可以输入使任务从一个CPU移动至另一个CPU的移动系统调用命令。当执行该移动系统调用命令时,通过指定任务ID与移动目标CPU的处理器ID,也可以改变MEID的处理器ID。由于全部任务的执行状态通过状态存储单元220与处理器管理寄存器524进行管理,因此仅通过改写状态存储单元220或处理器管理寄存器524的数据就能实现任务的移动。
[0670]例如,在图51中,将CPUO的READY-任务(El)变为CPUl的READY-任务时,可以对任务(El)的MEID设定CPUl的处理器ID后顺序输入至虚拟队列(QRl: O)。能够这样设定虚拟队列,换言之仅通过改写状态存储单元220就能实现移动,因此基本上不发生移动系统调用命令的执行成本。
[0671]以上,说明了能对应于MP系统500的任务处理装置100。
[0672]任务处理装置100不仅能大幅减少任务转换的执行成本而且能大幅减少伴随排他任务的执行成本。在一般实施方式中,在各CPU中适当地加载软件MPRT0S。为了使在CPUl中加载的软件MPRTOS知晓另一个CPU2的执行状态,必须用原子操作命令来访问存储器502。由于存储器502的资源始终被竞争利用,因此用于进行调整的执行成本容易增多。具体地说,中断禁止与解除、资源锁定与解锁这样的耗时,容易变大至不容忽视的程度。
[0673]在MP实施方式中,任务控制电路200将READY队列或WAIT队列等众多共有资源置于管理之下。另外,任务控制电路200通过处理器管理信息能实时地且以硬件等级知晓全部RUN-任务的执行情况。其结果,任务控制电路200能总体地管理全部CPU与全部任务的状态数据。访问由任务控制电路200管理的资源时,不需要进行由处理器切换电路530进行的用于连续的中断禁止与解除、资源锁定与解锁等排他控制用追加处理。虽然任务控制电路200使各种截取主动地发生,但与系统调用同样地,也连续地进行截取。
[0674]另外,不仅能通过多个CPU同时执行任务,而且能在不停止CPU的情况下执行不伴随截取的高速中断处理。即,由于高速中断处理时不中断任务执行,因此能进一步实现高速化。
[0675]由于任务控制电路200通过硬件逻辑实现READY队列或WAIT队列等状态管理,因此系统调用处理或截取处理的执行成本本身少于软件RT0S。分派也是同样的。相比软件RTOS进行的多处理器控制,减少伴随任务转换以及排他控制的执行成本的结果还能减少耗电。
[0676]此外,在本实施方式中,以CPU作为控制对象进行了说明,但也能应用DSP(Digital Signal Processor:数字信号处理器)等其他的处理器。
[0677]在本实施方式中,任务控制电路200通过WT信号或HRP信号等加载以及保存处理数据。在基本实施方式(SP系统)中,任务控制电路200通过申请WT信号或TS信号等来执行处理数据的加载与保存。在MP实施方式中,通过任务切换电路210申请WT信号并用HRP信号指定作为对象的CPU,处理器切换电路530执行处理数据的加载以及保存。
[0678]但是,“基于任务控制电路200的处理数据的保存和加载”不限于任务控制电路200直接操作处理数据的情况。例如,任务控制电路200也可以向外部的寄存器等写入任务转换指示命令,通过在CPU150上执行的监视软件检测出该寄存器的写入来执行处理数据的加载以及保存。采用这样的结构时,由于需要在CPU150上执行任务转换执行用的软件,因此不是完全的硬件RT0S。尽管如此,相比普通软件RT0S,能显著减少执行成本。
[0679]以上基于实施方式说明了本发明。这些实施方式只是示例,本领域的技术人员能够理解,可以对这些各结构要素和处理流程的组合进行各种变型,而这些变型也属于本发明的范围。
[0680][工业实用性]
[0681]根据本发明,能够通过硬件逻辑来实现可与MP系统对应的RT0S。
【权利要求】
1.一种任务处理装置,其特征在于, 具有任务控制电路,其管理多个处理器执行的多个任务的执行状态, 所述处理器在执行系统调用命令时,向所述任务控制电路发送系统调用信号, 所述任务控制电路接收到来自第一处理器的第一系统调用信号时,通过参照处理器的处理器ID与注册有该处理器正在执行中的任务的任务ID的处理器管理信息,确定所述第一处理器正在执行中的第一任务,主动选择作为下一个执行对象的第二任务,将所述第一任务的处理数据从所述第一处理器的处理寄存器保存至规定的存储区域,将所述第二任务的处理数据加载至所述第一处理器的所述处理寄存器以更新所述处理器管理信息,由此来执行所述第一处理器的任务转换。
2.根据权利要求1所述的任务处理装置,其特征在于, 在所述第一处理器的任务转换未结束之前由第二处理器发来第二系统调用信号时,所述任务控制电路保留所述第二系统调用信号,在所述第一处理器的任务转换结束之后执行所述第二处理器的任务转换。
3.根据权利要求2所述的任务处理装置,其特征在于, 在接收到所述第一系统调用信号时,所述任务控制电路在所述第一处理器停止之后执行任务转换,在所述第一处理器的任务转换未结束之前由所述第二处理器发来所述第二系统调用信号时,保留所述第二系统调用信号,所述第一处理器的任务转换结束时,重启所述第一处理器并执行所述第二处理器的任务转换。
4.根据权利要求1所述的任务处理装置,其特征在于, 还具有多个状态寄存器,它们分别对应于多个任务,用于保持任务的状态数据, 所述任务控制电路通过参照由多个所述状态寄存器输出的状态数据,确定以READY状态等待的任务,在保存所述第一任务的处理数据时,将所述第一任务的状态寄存器中的状态数据从RUN状态变更设定为别的状态,并且加载所述第二任务的处理数据时,在所述第二任务的状态寄存器中设定表示RUN状态的状态数据。
5.根据权利要求1所述的任务处理装置,其特征在于, 作为所述第一处理器的第一系统调用命令的执行结果,发生第三处理器的任务转换时,在所述第一处理器的系统调用处理结束之后,所述任务控制电路主动产生针对所述第三处理器的中断并执行所述第三处理器的任务转换。
6.根据权利要求5所述的任务处理装置,其特征在于, 作为所述第一处理器的第一系统调用命令的执行结果,在所述第三处理器预定执行的第三任务的执行状态为解除WAIT (等待)状态,且所述第三任务的优先级高于在所述第三处理器中正在执行的第四任务的优先级时,所述任务控制电路产生针对所述第三处理器的中断。
7.根据权利要求1所述的任务处理装置,其特征在于, 所述任务控制电路包含: 处理器切换电路,其用于执行处理器的切换;以及 任务切换电路,其用于执行任务的切换, 所述处理器向所述处理器切换电路发送系统调用信号, 所述处理器切换电路在接收到来自所述第一处理器的所述第一系统调用信号时,向所述任务切换电路发送所述第一处理器的处理器ID, 所述任务切换电路根据接收到的来自所述处理器切换电路的所述处理器ID与所述处理器管理信息来确定所述第一任务,将所述第一任务的处理数据从所述第一处理器的处理寄存器保存至规定的存储区域,将所述第二任务的处理数据加载至所述第一处理器的所述处理寄存器用以更新所述处理器管理信息,由此来执行所述第一处理器的任务转换。
8.根据权利要求7所述的任务处理装置,其特征在于, 所述第一处理器在执行所述第一系统调用命令之后停止, 所述任务切换电路在所述第一处理器的任务转换已结束时,向所述处理器切换电路发送结束信号, 所述处理器切换电路接收到所述结束信号时,重启所述第一处理器。
9.根据权利要求8所述的任务处理装置,其特征在于, 所述任务切换电路在产生了针对第四处理器的中断现象时,产生截取信号并发送至所述处理器切换电路后,执行对应于所述中断现象的截取处理, 所述处理器切换电路在接收到所述截取信号时停止所述第四处理器,所述截取处理结束之后重启所述第四处理器。
【文档编号】G06F9/52GK104272256SQ201280072694
【公开日】2015年1月7日 申请日期:2012年5月24日 优先权日:2012年5月24日
【发明者】丸山修孝 申请人:科尼龙硅公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1