任务处理装置.pdf

上传人:1** 文档编号:974611 上传时间:2018-03-22 格式:PDF 页数:67 大小:3.55MB
返回 下载 相关 举报
摘要
申请专利号:

CN200680055671.1

申请日:

2006.08.24

公开号:

CN101529383A

公开日:

2009.09.09

当前法律状态:

授权

有效性:

有权

法律详情:

专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 9/48变更事项:专利权人变更前:瑞萨电子株式会社变更后:瑞萨电子株式会社变更事项:地址变更前:日本神奈川县变更后:日本东京|||专利权的转移IPC(主分类):G06F 9/48登记生效日:20151104变更事项:专利权人变更前权利人:科尼龙硅公司变更后权利人:瑞萨电子株式会社变更事项:地址变更前权利人:日本神奈川县变更后权利人:日本神奈川县|||授权|||专利申请权的转移IPC(主分类):G06F 9/48变更事项:申请人变更前权利人:内特可力亚斯系统股份有限公司变更后权利人:科尼龙硅公司变更事项:地址变更前权利人:日本神奈川县变更后权利人:日本神奈川县登记生效日:20101020|||实质审查的生效|||公开

IPC分类号:

G06F9/48

主分类号:

G06F9/48

申请人:

内特可力亚斯系统股份有限公司

发明人:

丸山修孝

地址:

日本神奈川县

优先权:

专利代理机构:

北京同达信恒知识产权代理有限公司

代理人:

黄志华

PDF下载: PDF下载
内容摘要

本发明实现了多任务OS的任务调度高速化。任务处理装置(100)包括CPU(150)、保存电路(120)以及任务控制电路(200)。CPU(150)配置有处理寄存器、和将数据从存储器加载到处理寄存器中并按照处理寄存器中的数据来执行任务的执行控制电路(152)。保存电路(120)配置有分别对应多个任务的多个保存寄存器(110)。当执行规定的系统调用命令时,执行控制电路(152)将通知任务控制电路(200)。当收到系统调用命令执行通知时,任务控制电路(200)将处理寄存器中的数据保存到与执行中的任务相对应的保存寄存器(110)中,接着选择下一个应被执行的任务,并将与所选择任务相对应的保存寄存器(110)中的数据加载到处理寄存器(154)中,从而切换执行对象的任务。

权利要求书

1.  一种任务处理装置,包括:
处理寄存器,用于暂时存储用于执行任务的数据;
执行控制电路,用于将命令和操作数从存储器加载到所述处理寄存器中,并按照所述处理寄存器中的命令和操作数执行任务;
多个保存寄存器,用于保存所述处理寄存器中的数据,并分别与多个任务相对应;以及
任务控制电路,用于控制任务的切换;其中
当所述执行控制电路执行规定的系统调用命令时,将规定的系统调用信号发送给所述任务控制电路;
所述任务控制电路接收到所述规定的系统调用信号时,将所述处理寄存器中的数据保存到与执行中的任务相对应的所述保存寄存器中,按照规定规则选择下一个应执行的任务,并将与所选择的任务相对应的所述保存寄存器中的数据加载到所述处理寄存器中,由此来切换成为执行对象的任务。

2.
  根据权利要求1所述的任务处理装置,其特征在于,当所述执行控制电路执行所述规定的系统调用命令时,停止提供用于进行任务执行流程的执行用时钟,并在将所述保存寄存器中的数据加载到所述处理寄存器中后,恢复所述执行用时钟。

3.
  根据权利要求2所述的任务处理装置,其特征在于,
在对多个命令进行流水线处理的情况下,所述执行控制电路在执行所述规定的系统调用命令时,以执行中的其它命令执行到规定的可中断阶段为条件,来使所述执行用时钟停止。

4.
  根据权利要求1所述的任务处理装置,其特征在于,
所述处理寄存器中的数据被不断地输出到多个所述保存寄存器中;
所述任务控制电路向与执行中的任务对应的所述保存寄存器输入写入信号,以将所述处理寄存器中的数据保存到对应的所述保存寄存器中。

5.
  根据权利要求1所述的任务处理装置,其特征在于,该任务处理装置还包括选择电路,用于当要从所述保存寄存器向所述处理寄存器中加载数据时,选择成为数据发送源的所述保存寄存器;其中,
多个所述保存寄存器中的数据被不断地输出到所述选择电路中;
所述任务控制电路将指定了与选为执行对象的任务相对应的所述保存寄存器的输出信号发送给所述选择电路,从而将该保存寄存器中的数据加载到所述处理寄存器中。

6.
  根据权利要求1所述的任务处理装置,其特征在于,所述处理寄存器和多个所述保存寄存器通过具有能够并行传输所述处理寄存器中数据的位数的总线连接。

7.
  根据权利要求2所述的任务处理装置,其特征在于,
当所述任务控制电路从外部接收到规定的中断请求信号时,向所述执行控制电路发送停止请求信号;
所述执行控制电路接收到所述停止请求信号时,停止提供所述执行用时钟,并在将用于执行中断任务的数据加载到所述处理寄存器中后,恢复提供所述执行用时钟,由此执行与所述中断请求信号对应的中断任务。

说明书

任务处理装置
技术领域
本发明涉及一种OS(Operating System,操作系统)的功能,特别是涉及一种任务调度技术。
背景技术
不仅是如个人计算机一样的通用设备用OS,就连如移动电话一样的专用设备用OS中也逐渐要求高级功能。特别是能够用一个CPU(Central ProcessingUnit,中央处理器)执行多个任务的OS(以下将这种类型的OS称作“多任务OS”)现已经被配置在很多的电子装置中。
多任务OS将CPU的处理时间分割为单位时间(时间片),并为多个任务顺序分配时间片。只有当从OS获得时间片时,各任务才能够使用CPU。在一个时间片中执行一个任务。由于时间片是非常短的时间,对于用户而言,多个任务看似是同时执行的。根据这种处理方法,通过在任务A到达等待输入的状态因而不需要用到CPU的处理能力时,将执行权交给其它任务B,能够有效利用CPU的处理能力。这里所说的执行权等同于使用CPU的权利。
多任务OS进行的执行权转移被称作“任务切换”。任务切换是在时间片已经届满、或任务执行规定命令时发生。当到达任务切换的执行时刻时,多任务OS将执行中的任务的上下文信息保存到TCB(Task Control Block:任务控制块)中。上下文信息是指任务执行时存储在CPU的寄存器中的数据、或与任务执行状态有关的数据。TCB是指为了存储只有任务才有的信息而在存储器中预留的区域。多任务OS将执行中的任务的上下文信息保存到TCB中后,选择将分配给执行权的任务,从TCB中读出上下文信息,并将该信息加载到CPU寄存器中。由此,各任务以时间片为单位一点点地执行自身的处理。
多任务OS具有能够高效地执行多个任务的优点,但是也具有产生与上下文信息保存/加载相对应的开销的缺点。通常多任务OS的优点远远大于与任务切换有关的开销。
[专利文献1]日本特开平11-272480号公报
[专利文献2]日本特开2001-75820号公报
[非专利文献1]森久直,坂卷佳寿美,重松宏志,“用于嵌入式控制系统的实时OS的硬件实现”(“组込み制御システム向けリアルタイムOSのハ一ドウエア化(Hardware implementation of a read-time operating system forembedded control system)”),东京都立产业技术研究所研究报告,日本,2005年8月4日(收稿),8,p.55-58。
发明内容
本发明要解决的问题
近年来,严格要求在规定时间内完成处理的实时OS(以下称作“RTOS(Real-Time Operating System)”)被特别广泛地应用于嵌入式系统(EmbeddedSystem)中。在这种时间要求严格的RTOS中,存在任务切换时的开销大大影响系统整体性能的情况。本发明人意识到:为了进一步提高多任务处理的效率,需要降低与任务切换有关的开销。
本发明是鉴于上述问题而作出的,其主要目的在于提供一种用于在多任务处理中更高效地控制任务执行的技术。
用于解决问题的手段
本发明的一个方面涉及一种任务处理装置。
所述任务处理装置包括处理寄存器、将数据从存储器加载到所述处理寄存器中并按照该处理寄存器中的所述数据执行任务的执行控制电路、分别与多个任务对应的多个保存寄存器、以及任务控制电路;
当执行规定的系统调用命令时,执行控制电路将通知所述任务控制电路;
当收到系统调用命令执行通知时,任务控制电路将所述处理寄存器中的所述数据保存到与执行中的任务相对应的保存寄存器中,接着选择下一个应被执行的任务,并将与所选择任务相对应的保存寄存器中的数据加载到所述处理寄存器中,从而切换执行对象的任务。
加载到所述处理寄存器中的数据可以包括:命令(instruction)和操作数、不具有操作数的命令、或者诸如程序计数器或堆栈指针的简单数据。根据这种处理方法,通过在对应每个任务的保存寄存器和执行用处理寄存器之间适当调换上下文信息,能够实现上下文信息的保存及加载。由于这样实质上不需要为了处理寄存器中数据的保存/加载而访问TCB,因此实现了高速的任务切换。
此外,以上结构要素的任意组合、以及通过方法、系统、记录介质、计算机程序来表现本发明的实现方式,也可以作为本发明的有效方式。
本发明的有益效果
根据本发明,能够在多任务处理中更高效地控制任务执行。
附图说明
图1为任务的状态转换图;
图2为普通RTOS的概念图;
图3为执行软件RTOS的普通CPU的电路图;
图4为一个实施例中的RTOS的概念图;
图5为本实施例中的任务处理装置的电路图;
图6为图5所示CPU的电路图;
图7为表示执行控制电路152使CPU时钟停止的构造的电路图;
图8(a)为表示中断请求信号发生时各种信号之间关系的时序图;
图8(b)为表示执行系统调用时各种信号之间关系的时序图;
图9为用于说明流水线(pipeline)处理中CPU时钟停止时刻的示意图;
图10为表示状态存储单元和任务切换电路之间关系的电路图;
图11为表示普通RTOS进行RUN-任务选择时所采用的任务就绪表的图;
图12为执行选择电路的电路图;
图13为表示普通RTOS进行信号量(Semaphore)处理时所采用的等待信号量表(wait semaphore list)的图;
图14为信号量选择电路的电路图;
图15为任务切换电路的状态转换图;
图16为图5所示的任务处理装置中未配置任务控制电路时的任务处理装置的电路图;
图17为图5所示的任务处理装置中未配置保存电路时的任务处理装置的电路图。
具体实施方式
本发明实施例所示的任务处理装置100由电子电路来实现多任务OS的任务调度功能。在详细说明任务处理装置100之前,首先参照图1说明任务的状态转换。这里虽然是对普通多任务OS中的任务状态转换进行说明,但是这些说明对于任务处理装置100中的任务状态转换同样适用。另外,还对在任务处理装置100中执行的系统调用进行概述。在参照图2和图3描述普通多任务OS的设计思想的基础上,参照图4至图10详细描述本实施例中的任务处理装置100的处理方法。并且,对于与信号量或互斥(Mutex)、事件等有关的处理,也适当通过与一般技术进行比较来说明任务处理装置100的特征。
任务的状态转换
图1是任务的状态转换图。在多任务处理中,各任务都具有“状态(State)”。各任务在多个状态之间转换,通常是处于某一个状态。状态转换由“系统调用的执行”和“检测出中断请求信号”来触发。系统调用是各任务执行的命令中的特殊命令。中断请求信号是在按下键盘或点击鼠标、接收通信数据等从外围设备接收规定数据时发生的信号。当然,当分配给各任务的时间片耗尽时也发生状态转换。
任务大致分为“常规任务”和“特殊任务”。常规任务是响应系统调用而执行的非特殊任务。特殊任务是响应检测出中断请求信号而执行的任务,即所谓的中断处理程序。首先描述各个任务状态,然后说明各种系统调用命令。
(1)STOP状态(休眠状态)
表示任务处于休眠状态。常规任务和特殊任务都能够处于STOP状态。以下将处于STOP状态的任务称作“STOP-任务”。
1-1.常规任务
当其它任务执行指示启动另一项任务的系统调用(以下称作“启动系统调用”)时,处于STOP状态的常规任务转换到后述的READY状态。
1-2.特殊任务
特殊任务通常处于STOP状态。当通过后述的任务切换电路210检测出中断请求信号时,特殊任务从STOP状态转换到后述的RUN状态。此时原来处于RUN状态的任务转换到READY状态。
(2)RUN状态(执行状态)
表示任务正在执行中,即任务被分配了时间片,获得了CPU的使用权的状态。常规任务和特殊任务都能够处于RUN状态。以下将处于RUN状态的任务称作“RUN-任务”。多个任务中处于RUN状态的任务始终只能有一个,而不能有两个任务同时处于RUN状态。
2-1.常规任务
当执行规定的系统调用时,处于RUN状态的常规任务从RUN状态转换到READY状态或者后述的WAIT状态。处于RUN状态的常规任务在耗尽时间片时,也转换到READY状态。在任意一种情况下,原来处于READY状态的常规任务转换到RUN状态,来替代原来处于RUN状态的常规任务。当检测出中断请求信号时,RUN-任务转换到READY状态。此时,原先处于STOP状态的特殊任务转换到RUN状态。
当RUN-任务执行使自身结束的系统调用(以下称作“结束系统调用”)时,该RUN-任务转换到STOP状态。
2-2.特殊任务
当根据中断请求信号从STOP状态转换到RUN状态的特殊任务完成自身处理时,返回到STOP状态。特殊任务只能够处于STOP状态和RUN状态。
(3)READY状态(可执行状态)
表示任务处于可被执行的状态。如果处于READY状态的任务从OS得到执行权,则随时都能够转换到RUN状态。只有常规任务可以处于READY状态。以下将处于READY状态的任务称作“READY-任务”。
当原先处于RUN状态的常规任务由于系统调用的执行而转换到RUN状态以外的状态时,或者当处于RUN状态的特殊任务完成自身处理而转换到STOP状态时,READY-任务进而转换到RUN状态。常规任务只能从READY状态来转换到RUN状态。当有多个处于READY状态的任务时,根据作为上下文信息的一部分的任务优先级,使某一个READY-任务转换到RUN状态。当有多个任务优先级相同的READY-任务时,最先转换到READY状态的任务转换到RUN状态。
(4)WAIT状态(待机状态)
表示等待规定的WAIT解除条件满足的状态。当WAIT解除条件满足时,处于WAIT状态的任务转换到READY状态。只有常规任务能够处于WAIT状态。以下将处于WAIT状态的任务称作“WAIT-任务”。关于WAIT解除条件将在后面详述。
综上所述,只有当任务处于RUN状态时,才能够使用CPU来执行其处理。RTOS一边管理多个任务的状态一边适当切换RUN-任务。由此,实现CPU总是执行某个任务的处理方式。
系统调用
下面附带说明一下系统调用。系统调用大致分为“启动系列”、“WAIT系列”和“SET系列”三种。
(1)启动系列系统调用
启动系列系统调用是与在STOP状态和READY状态之间进行的转换相关联的系统调用。
1-1.启动系统调用
启动系统调用是作为RUN-任务的任务A使另一项常规任务B启动的系统调用。此时,处于STOP状态的常规任务B转换到READY状态。
1-2.结束系统调用
执行该系统调用的任务结束自身处理,并从RUN状态转换到STOP状态。结束系统调用也可以是某项任务使另一项任务结束的命令。
(2)WAIT系列系统调用
WAIT系列系统调用是与在RUN状态和WAIT状态之间进行的转换相关联的系统调用。
2-1.等待信号量系统调用
等待信号量系统调用是请求获得信号量(后述)的系统调用。
2-2.等待互斥系统调用
等待互斥系统调用是请求获得互斥(后述)的系统调用。
2-3.等待事件系统调用
等待事件系统调用是等待建立事件(后述)的系统调用。为了执行,等待事件系统调用接收事件ID、等待标记模式(后述)和标记条件(后述)作为参数。
在任何一种情况下,WAIT系列系统调用都设定各种WAIT解除条件。如果在执行WAIT系列系统调用时已经满足WAIT解除条件,已执行所述系统调用的RUN-任务转换到READY状态。同时,当不满足WAIT解除条件时,RUN-任务转换到等待满足WAIT解除条件的WAIT状态。
(3)SET系列系统调用
SET系列系统调用是与在WAIT状态和READY状态之间进行的转换相关联的系统调用。SET系列系统调用的执行触发WAIT解除条件的建立。
3-1.释放(release)信号量系统调用
其是释放信号量的系统调用。
3-2.释放互斥系统调用
其是释放互斥的系统调用。
3-3.设定事件(Set Event)系统调用
其是建立事件的当前标记模式(后述)的系统调用。
3-4.清除标记系统调用
其是用于将当前标记模式清零的系统调用。
在对本实施例进行说明时,假设采用了以上9种系统调用。除此之外,当然还能够实现其他的各种系统调用。
普通RTOS的设计思想
图2是普通RTOS的概念图。
图示的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的使用权移交给特殊任务来实现任务切换。
因为RTOS是以软件实现的,因此为了执行自身处理,RTOS需要CPU的使用权。换句话说,RTOS和任务在CPU的使用权上是竞争关系。以下将这样通过软件实现的RTOS称作“软件RTOS”。
图3是执行软件RTOS的普通CPU的电路图。
CPU 84包括:执行控制电路90,用于总体地控制存储器访问、命令执行等;处理寄存器组92,用于存储如任务的上下文信息等的各种数据;以及运算电路94,用于执行运算。处理寄存器组92是多种寄存器的组合,大致分为特殊寄存器88和通用寄存器86。特殊寄存器88是存储程序计数器、堆栈指针以及标记等的寄存器。通用寄存器86是存储作业用数据的寄存器,包括R0~R15共16个寄存器。特殊寄存器88存在用户用和系统用两面,但是通用寄存器86只有一面。以下将存储在处理寄存器组92中的数据称作“处理数据”。
执行控制电路90利用指示输出选择器98的控制信号(CTRL),将处理寄存器组92中所期望的寄存器的处理数据输出到运算电路94中。运算电路94按照该处理数据,即命令和变量,来执行运算。运算结果向输入选择器96输出。执行控制电路90利用指示输入选择器96的控制信号(CTRL),向处理寄存器组92中所期望的寄存器输入运算结果。
另外,执行控制电路90通过CPU数据总线从存储器中读出数据,并通过输入选择器96将该数据适时加载到处理寄存器组92中。执行控制电路90同样通过该CPU数据总线将处理数据适时记录到存储器中。执行控制电路90一边更新特殊寄存器88中的程序计数器,一边执行任务。
当发生任务切换时,执行控制电路90将处理数据保存到存储器中预留的区域即TCB中。如果任务A执行系统调用,则认为发生了从任务A到任务B的任务切换。系统调用的执行触发RTOS获取CPU的使用权,因此CPU 84将暂时按照RTOS的程序来运行,其处理过程如下:
<任务A的上下文信息的保存>
1.执行控制电路90将特殊寄存器88从用户用切换到系统用。向系统用特殊寄存器88中加载RTOS处理用的处理数据。
2.执行控制电路90将通用寄存器86中的数据保存到未示出的堆栈中。
3.执行控制电路90将用于RTOS的处理数据从未示出的记录介质中,例如其它寄存器中,加载到通用寄存器86中。在该阶段,处理寄存器组92中的处理数据被完全替换为RTOS用的处理数据。
4.RTOS从存储器中识别出任务A的TCB,并将保存在堆栈中的处理数据写入该TCB中。另外,用户用特殊寄存器88中的处理数据也作为上下文信息的一部分写入该TCB中。由此,任务A的处理数据被保存到该TCB中。RTOS将任务A已从“RUN”状态转换到“READY(或者WAIT)”状态的情况记录在任务A的TCB中。
<任务B的上下文信息的加载>
1.RTOS从存储器中识别出任务B的TCB,并将该TCB中的上下文信息写入堆栈和用户用特殊寄存器88中。RTOS将任务B已从“READY”状态转换到“RUN”状态的情况记录在任务B的TCB中。
2.RTOS将RTOS处理用数据从通用寄存器86保存到未示出的记录介质中。
3.执行控制电路90将堆栈中的上下文信息加载到通用寄存器86中。执行控制电路90将特殊寄存器88从系统用切换到用户用。由此,任务B的处理数据被加载到处理寄存器组92中。
经过如上所述的处理过程,实现了任务切换。通常通用寄存器86是一面结构,因此为了切换任务用的处理数据和RTOS用的处理数据而使用堆栈。如果通用寄存器86也是两面,则将无需通过堆栈来保存/加载数据,因此能够实现更高速的任务切换。
在本实施例中,还通过为每个任务设置保存寄存器110,来实现更高速的任务切换。使用保存寄存器110的任务切换,将参照图5进行详述。在参照图3说明的CPU 84和普通软件RTOS中,在进行任务切换时频繁地访问TCB。在上述例子中,是以从任务A向任务B进行任务切换为例进行的说明,但是实际上,RTOS为了选择下面应执行的任务B也需要执行很多命令。此时,RTOS将频繁地访问存储器。通过采用后述的专门用于任务选择的任务控制电路200,本实施例中的任务处理装置100实现了更高速的任务切换。
根据任务处理装置100的RTOS硬件实现
图4是本实施例中的RTOS的概念图。
与普通软件RTOS不同,本实施例中的RTOS主要是以与CPU分离的硬件来实现的。以下将由硬件实现的RTOS称作“硬件RTOS”。由于本实施例的RTOS主要是与CPU分离的硬件,因此为了执行自身处理,则实质上基本不需要CPU的使用权。换句话说,RTOS和任务在CPU的使用权上基本不是竞争关系。在图2所示的普通软件RTOS中,CPU既是任务执行用电路,还是RTOS执行用电路。相反地,在本实施例的硬件RTOS中,CPU明确为任务执行电路。任务调度功能主要由后述的保存电路120和任务控制电路200来实现。
图5是本实施例中的任务处理装置100的电路图。
除了CPU 150之外,任务处理装置100还包括保存电路120和任务控制电路200。CPU 150是任务的执行主体。保存电路120和任务控制电路200是起到图4所示的RTOS的作用的电路。任务调度处理是由任务控制电路200来主导的。
CPU 150包括执行控制电路152、处理寄存器组154以及运算电路160。CPU 150可以是参照图3说明的普通CPU。但是,本实施例中的CPU 150的信号线连接方式与图3所示的CPU 84的信号线连接方式不同。对于具体的电路结构,将参照下面的图6进行详述。
任务控制电路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执行任务切换。
执行控制电路152在执行系统调用时,将系统调用信号(SC)发送到任务切换电路210。另外,当任务切换电路210检测出中断请求信号(INTR)时,任务切换电路210向执行控制电路152申请停止请求信号(HR)。当CPU 150的操作停止时,执行控制电路152向任务切换电路210申请停止完成信号(HC)。通过这三种信号,CPU 150和任务控制电路200将能够进行配合操作。
保存电路120包括加载选择电路112以及多个保存寄存器110。保存寄存器110也是与每个任务相对应的单元,是用于保存处理寄存器组154中的处理数据的寄存器组。因而,保存寄存器110具有与处理寄存器组154相等以上的数据容量。以下将与任务A对应的保存寄存器110表示为“保存寄存器110_A”。加载选择电路112接受任务切换电路210的指示,将某个保存寄存器110中的数据(以下将保存寄存器110所存储的数据称作“保存数据”)加载到处理寄存器组154中。
各保存寄存器110不断地将各自的保存数据输出到加载选择电路112中。当任务切换电路210向加载选择电路112输入用于指定任务ID的任务选择信号(TS)时,加载选择电路112将与所指定任务对应的保存寄存器110中的保存数据输出到处理寄存器组154中。并且,当任务切换电路210向处理寄存器组154输入写入信号(WT)时,该保存数据实际上被加载到处理寄存器组154中。
另一方面,处理寄存器组154中的全部处理数据也不断地被输出到全部的保存寄存器110中。当任务切换电路210确认向期望的保存寄存器110发送了写入信号(WT)时,处理数据被保存到该保存寄存器110中。这里,连接处理寄存器组154和各保存寄存器110的总线能够一次传输的位数设定为能够并行传输处理数据。因此,任务切换电路210通过向保存寄存器110仅发送一次写入信号,就能够将处理数据一次写入保存寄存器110中。另外,连接保存寄存器110和加载选择电路112的总线以及连接加载选择电路112和CPU 150的总线的位数也同样地设定。
下面分别对系统调用和中断请求信号引起的任务切换的执行方法进行描述。
[1]系统调用的执行
当CPU 150的执行控制电路152执行系统调用时,执行控制电路152使CPU 150的时钟(以下称作“CPU时钟(CLK)”)停止。对于具体的停止方法,将参照图7等在后面详述。执行控制电路152将表示系统调用的执行的系统调用信号(SC)发送给任务控制电路200的任务切换电路210。另外,当CLK的停止完成时,执行控制电路152向任务切换电路210申请停止完成信号(HC)。
在CPU 150和任务切换电路210之间,为了系统调用信号的传输而连接有9根信号线。这9根信号线与前述9种系统调用相对应。执行控制电路152根据所执行的系统调用种类,用对应的某根系统信号线传输数字脉冲。任务切换电路210通过判断是从9根系统信号线中的哪根信号线中检测出数字脉冲,来立即检测出所执行的系统调用种类。任务切换电路210根据系统调用种类,从任务选择电路230输出的数据中选择所需数据,执行由系统调用所指定的处理。该处理是以申请HC为条件来执行的。对于任务切换电路210和任务选择电路230之间的关系,将参照图10进行详述。此外,该系统调用的参数和返回值写入处理寄存器组154中规定的通用寄存器158中。任务切换电路210能够对通用寄存器158执行参数的读出和返回值的写入。这里,假设作为RUN-任务的任务A执行等待信号量系统调用。因而,首先需要将任务A的处理数据保存。
<任务A的上下文信息的保存>
执行控制电路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的状态被更新。
接着,任务切换电路210向保存寄存器110_A输出写入信号(WT)。由于处理寄存器组154中的处理数据不断地被输出到各保存寄存器110中,因此该写入信号(WT)使得任务A的处理数据被保存到任务A的保存寄存器110_A中。
<任务B的上下文信息的加载>
当任务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)进行描述。
[2]中断请求信号的产生
任务切换电路210检测来自外围设备的中断请求信号(INTR)。更具体地说,中断请求信号(INTR)从未示出的中断控制器发送到任务切换电路210。表示中断请求信号(INTR)等级的参数被记录在内置于该中断控制器的寄存器中。任务切换电路210向执行控制电路152申请停止请求信号(HR)后,执行控制电路152使CPU时钟停止。与系统调用执行时相同,任务切换电路210将RUN-任务的处理数据保存到保存寄存器110中。接着,任务切换电路210启动特殊任务。与中断请求信号的参数无关而启动的特殊任务只有1种。该特殊任务从中断控制器的内置寄存器中读出INTR的参数,并执行与该参数相应的处理。该特殊任务所执行的处理,可以是设定事件系统调用或设定信号量系统调用的执行,可以是常规任务的启动。根据该参数,该特殊任务可以不执行任何特别处理就结束。根据INTR的参数执行何种处理,是由特殊任务的实现方式来决定的。当该特殊任务的执行结束时,从READY-任务中选择出下一个RUN-任务。
任务切换电路210将与该特殊任务对应的保存寄存器110中的处理数据加载到CPU 150中。这种从常规任务切换到特殊任务所需的时间,能够根据任务控制电路200的工作时钟来预先估计。当向执行控制电路152申请HR后,任务切换电路210的工作时钟经过规定的时间时,任务切换电路210为了解除CPU时钟的停止而取消(negate)HR。当HR被取消时,执行控制电路152使CPU时钟恢复。此时,任务切换电路210完成了从常规任务到特殊任务的任务切换。关于该处理方法的具体细节,将在后面参照图8(a)进行描述。
在任何情况下,任务切换的核心处理,即(A)处理数据的保存/加载,以及(B)任务状态转换和RUN-任务的选择,都是通过硬件来实现的。在(A)和(B)中,无需访问存储器上的TCB,这对任务切换的高速化也有贡献。任务处理装置100的CPU 150中所要求的只是追加使CPU时钟停止和恢复的功能。此外,这些功能全部由硬件来实现,这并非是要限定本发明的范围。例如,本领域技术人员可以理解,(A)或者(B)的主要功能可以由硬件来实现,而为了辅助硬件功能,RTOS的一部分功能可以由软件来实现。
图6是图5所示的CPU 150的电路图。
与图3所示的CPU 84不同,处理寄存器组154的特殊寄存器156和通用寄存器158都是一面的结构。处理寄存器组154中分别引入了来自加载选择电路112的输入总线、到保存寄存器110的输出总线、以及来自任务切换电路210的写入信号(WT)用信号线。执行控制电路152根据对输出选择器164的控制信号(CTRL),将处理寄存器组92中所期望的寄存器中的数据输入到运算电路160中。运算结果成为输入选择器162的输入。执行控制电路152根据对输入选择器162的控制信号(CTRL),向处理寄存器组154中所期望的寄存器输入运算结果。执行控制电路152一边更新特殊寄存器156中的程序计数器,一边执行任务。
处理数据保存到保存寄存器110中而不是存储器上的TCB中。处理寄存器组154不断地向各保存寄存器110输出处理数据。实际上,如前所述,何时将处理数据保存到保存寄存器110中,是由任务切换电路210来控制的。
保存数据是从保存寄存器110而不是从存储器上的TCB加载到处理寄存器组154中的。实际上,如前所述,加载哪个保存寄存器110中的处理数据以及何时加载,是由任务切换电路210来控制的。
连接处理寄存器组154和加载选择电路112、以及处理寄存器组154和保存寄存器110的总线能够传输的位数,设定为能够在一次处理中并行传输处理数据。因此,根据任务切换电路210发送的写入信号(WT),能够实现一次读出或写入数据。普通软件RTOS在任务切换时,需要暂时占用处理寄存器组154。与此相反,本实施例中的硬件RTOS没有必要将用于任务切换处理的特殊处理数据加载到处理寄存器组154中。当从任务A切换到任务B时,只需要将任务A的处理数据保存,然后加载任务B的处理数据,因此,处理寄存器组154无需配置系统用和用户用两面及通过堆栈执行数据替换处理。
图7是执行控制电路152使CPU时钟停止的构造的电路图。
第二AND门174的输入是原始时钟(CLK0)和第一AND门172的输出,第一AND门172的输出被反相。第一AND门172的输出是停止完成信号(HC)。由于停止完成信号(HC)通常是0,因此第二AND门174直接输出所输入的原始时钟(CLK0)作为CPU时钟(CLK)。CPU 150接收到第二AND门174所输出的CPU时钟时进行操作。当第一AND门172的输出是“1”时,换句话说,当停止完成信号(HC)=1时,第二AND门174的输出固定为零,以使CPU时钟(CLK)停止。
第一AND门172的输入是OR门176的输出和CPU忙信号(CBUSY),该CPU忙信号是负逻辑。CBUSY是从产生CPU 150内部循环的已知状态机中输出的信号。当CPU 150处于可停止状态时,CBUSY变成“1”。例如,当运算电路94完成执行单一命令或者被锁定的多个命令的最后命令从而CPU处于可停止状态时,或者当已经停止提供CPU时钟时,CBUSY变成“0”。
OR门176的输入是命令解码器170的输出(SC_DETECT)和来自任务切换电路210的停止请求信号(HR)。命令解码器170内置有保持SC_DETECT的锁存电路。命令解码器170接收从CPU 150提取(fetch)的数据(FD)。当FD是系统调用命令时,命令解码器170输出SC_DETECT=1。通过内置锁存电路,即使在这之后FD变化,命令解码器170也继续输出SC_DETECT=1。命令解码器170中,还输入任务切换电路210发送给处理寄存器组154的写入信号(WT)。如前所述,当WT从0变为1时,保存数据被加载到处理寄存器组154中。该WT是在规定时间后从1返回到0的脉冲信号。当WT从1变为0时,命令解码器170的锁存电路被复位,命令解码器170取消SC_DETECT。SC_DETECT和写入信号(WT)之间的关系,将参照图8(b)进行详述。本实施例中的命令解码器170,是为了判定执行对象命令是否是系统调用而专门设置在执行控制电路152中的装置。作为变型例,命令解码器170可以与负责CPU 150的解码阶段的CPU解码器共用。这种情况下,可通过向CPU解码器追加当被解码的数据是系统调用命令时输出SC_DETECT=1的功能来实现命令解码器170。
当中断请求信号(INTR)发生时,任务切换电路210向执行控制电路152申请停止请求信号(HR),即当执行系统调用、或当申请停止请求信号(HR)时,OR门176的输出变成“1”。
综上所述,当执行系统调用或发生中断请求信号、且当CPU忙信号变成“0”时,第一AND门172的输出变成“1”,且第二AND门174不输出CPU时钟。
图8(a)是表示中断请求信号发生时各种信号之间关系的时序图。
在图8(a)中,首先,在时刻t0,任务切换电路210检测出来自外部的中断请求信号(INTR)。任务切换电路210为了执行特殊任务,向执行控制电路152申请停止请求信号(HR)。输入时刻t1与检测时刻t0几乎是同时的。在时刻t1,CPU 150的状态机处于“任务执行中”,CBUSY=1。由于HR=1,所以OR门176输出“1”。但是由于CBUSY=1,因此CPU 150不停止。因此,即使输入HR=1,CPU时钟(CLK)也暂且与原始时钟(CLK0)同步输出。
经过一定时间,在时刻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恢复处理时,CPU150使CBUSY从0变为1(时刻t4)。由此,在CPU时钟停止的时刻t2至时刻t3期间,执行从常规任务到特殊任务的任务切换。
作为另一种处理方法,代替以任务控制电路200的工作时钟变化了规定次数为条件,而以任务控制电路200已完成任务切换为条件来取消HR。而且,执行控制电路152可以以取消HR为条件来取消HC。当HC=0时,执行控制电路152恢复CPU时钟(CLK)。由此,可以恢复任务的执行。
图8(b)是表示执行系统调用时各种信号之间关系的时序图。
在图8(b)中,首先,在时刻t0,命令解码器170检测出系统调用,并使SC_DETECT从0变为1。在时刻t0,CPU 150的状态机处于“任务执行中”,CBUSY=1。由于SC_DETECT=1,所以OR门176输出“1”。但是由于CBUSY=1,因此CPU 150不停止。因此,即使输出SC_DETECT=1,CPU时钟(CLK)也暂且与原始时钟(CLK0)同步输出。
经过一定时间,在时刻t1,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时钟停止的时刻t1至时刻t4期间,执行任务切换。
此外,作为其它处理方法,代替以检测出WT:1→0的下降沿为条件,而以任务控制电路200完成任务切换并取消HR为条件,执行控制电路152取消HC。而且,以HC=0为条件,复位SC_DETECT。执行控制电路152恢复CPU时钟(CLK),CBUSY从0变为1。
在任何情况下,CPU 150都无需知道在CPU时钟停止期间进行RUN-任务切换的情况。任务切换电路210在CPU时钟停止而使CPU 150处于冻结期间进行任务切换处理,因此CPU 150的处理和任务控制电路200的处理在事件序列中是分离的。
图9是用于说明流水线处理中CPU时钟停止时刻的示意图。
CPU 150通过从存储器中顺序读出多个命令到处理寄存器组154中并执行这些命令,来执行任务。作为任务执行单位的命令,分解为如下四个阶段(phase)。
1.F(提取(fetch)):从存储器中提取命令。
2.D(解码(decode)):解释命令。
3.E(执行(execution)):执行命令。
4.WB(回写(write back)):将执行结果写入存储器中。
当一个任务顺次执行命令1至命令5时,可以是命令1被执行完从F到WB阶段后,才执行命令2的F阶段。但是,为了更高效地执行,大多是在命令1的执行过程中就开始执行命令2。这种处理方法被称作流水线处理。例如,当命令1到达D阶段时,就开始命令2的F阶段。当命令1到达E阶段时,就执行命令2的D阶段和命令3的F阶段。由此,通过增加单位时间内执行的命令数,能够减少每个任务的执行时间。
并且,各阶段可以进一步细分为两个阶段。例如,F阶段可以分为F1和F2两个阶段。当命令1到达F2阶段时,开始命令2的F1阶段。当命令1到达D1阶段时,执行命令2的F2阶段和命令3的F1阶段。通过细分阶段,能够进一步有效利用CPU 150的计算资源。在图9中,说明了在将各阶段细分为两个阶段来执行的流水线处理中发生系统调用时的CPU时钟停止时刻。
在图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及其后续命令不会从存储器中被提取。
在CPU时钟为“8”的时刻,命令1执行完成,但是命令2~5正在执行中,因此CPU忙信号还是“1”。当到达CPU时钟为“12”的时刻时,命令5执行完成。此时,CPU忙信号变成“0”。之后,按照参照图8(b)所述的流程,停止提供CPU时钟。任务切换电路210将直到命令5的执行结束为止产生的处理数据保存到保存寄存器110中。根据这种停止方法,任务切换能够以不浪费执行系统调用后的命令执行结果的方式实现。当任务切换完成时,CPU忙信号再次设为“1”,命令解码器170的处理也得到恢复。由此,将再次提供CPU时钟。
作为另一种处理方法,也可以在系统调用命令执行完成的时刻,将CPU忙信号设为“0”,以停止提供CPU时钟。这种情况下,与系统调用命令同时执行的其它命令在执行过程中停止。中途停止的命令的中间处理结果记录在处理寄存器组154中后,保存到保存寄存器110中。当下次该任务变成RUN-任务时,接着执行中途停止的命令。例如,当某个命令在读取结束阶段被中途停止时,将从存储器中读出的命令和操作数保存到保存寄存器110中。当该任务恢复时,保存寄存器110中的数据被加载到处理寄存器组154中,以执行解码阶段及后续阶段。
图10是表示状态存储单元220和任务切换电路210之间关系的电路图。
状态存储单元220包括状态寄存器250和定时器252。状态存储单元220存储任务的状态数据。另外,定时器252是在任务转换到READY状态或者WAIT状态时开始的定时器。任务转换到READY状态后所经过的时间称作“READY经过时间”,任务转换到WAIT状态后所经过的时间称作“WAIT经过时间”。定时器252以TIM信号方式不断地输出经过时间的值。在任务切换时,当任务转换到READY状态或者WAIT状态时,任务切换电路210驱动该任务的定时器252来开始测量时间。
状态存储单元220是如下所述的寄存器组。
(A)任务ID寄存器254:用于存储任务ID。任务ID寄存器254不断地向任务选择电路230输出表示任务ID的ID信号。以下将任务A的任务ID寄存器254向任务选择电路230输出的ID信号表示为“ID_A信号”。从状态存储单元220输出的所有其它信号也采用同样的表示方法。
(B)任务优先级寄存器256:用于存储任务优先级。任务优先级寄存器256不断地输出表示任务优先级的PR信号。“0”表示最高优先级,值越大表示任务优先级越低。
(C)任务状态寄存器258:用于存储任务状态。任务状态寄存器258不断地输出表示STOP、READY、RUN、WAIT、IDLE中的某一个的ST信号。此外,IDLE是指任务初始化之前的状态。
(D)任务启动地址寄存器260:用于存储存储器中的任务的TCB地址。任务启动地址寄存器输出AD信号。
(E)待机理由寄存器262:用于在任务处于WAIT状态时,存储构成WAIT解除条件的待机理由。待机理由是“信号量等待”、“事件等待”和“互斥等待”中的某一个。待机理由寄存器262输出WR信号。
(F)信号量ID寄存器264:用于在任务以信号量等待为理由处于WAIT状态时,存储等待对象的信号量(以下简称为“待机信号量”)的信号量ID。信号量ID寄存器264输出SID信号。
(G)互斥ID寄存器265:用于在任务以互斥等待为理由处于WAIT状态时,存储等待对象的互斥(以下简称为“待机互斥”)的互斥ID。互斥ID输出MID信号。
(H)事件ID寄存器266:用于在任务以事件等待为理由处于WAIT状态时,存储等待对象的事件(以下简称为“待机事件”)的事件ID。事件ID寄存器266输出EID信号。
(I)待机标记寄存器268:用于在任务以事件等待为理由处于WAIT状态时,存储待机标记模式。待机标记寄存器268输出FL信号。
(J)标记条件寄存器270:用于在任务以事件等待为理由处于WAIT状态时,存储标记条件。标记条件寄存器270输出FLC信号。待机标记模式和标记条件将在后面详述。
(K)标记初始化寄存器272:用于存储表示是否有待机标记模式的数据。标记初始化寄存器272输出FLI信号。
(L)超时计数器274:超时值是在WAIT系列系统调用中指定的变量。超时计数器274存储超时值。任务切换电路210定期对各超时计数器274的超时值进行递减。超时计数器274输出TO信号。代替任务切换电路210对超时值进行递减,也可以是超时计数器274本身定期对其超时值自动地进行递减。
任务选择电路230根据各状态存储单元220输出的各种信号来选择任务。任务选择电路230包括以下电路。
(A)执行选择电路232:用于在任务切换时,选择下一个RUN-任务。执行选择电路232通常根据状态存储单元220不断输出的状态数据,来选择某一个任务作为RUN-任务。执行选择电路232的输入信号有ID、ST、PR和TIM四种。执行选择电路232输出下一个RUN-任务的任务ID。关于详细的电路结构,将参照图12进行详述。
(B)信号量选择电路234:用于通过释放信号量系统调用的执行,选择应该从WAIT状态转换到READY状态的任务。信号量选择电路234的输入为来自任务切换电路210的释放信号量系统调用释放的信号量(以下简称为“释放信号量”)的信号量ID。来自状态存储单元220的输入信号有ID、ST、WR、PR、SID和TIM六种。信号量选择电路234的输出信号是从WAIT状态转换到READY状态的任务的任务ID。如果不存在该任务,则输出如-1等的规定值。关于更具体的电路结构,将参照图13进行详述。
(C)事件选择电路236:用于通过设定事件系统调用的执行,选择从WAIT状态转换到READY状态的任务。事件选择电路236的输入为来自任务切换电路210的由设定事件系统调用设定的事件(以下简称为“设定事件”)的事件ID。来自状态存储单元220的输入信号有ID、ST、WR、EID、FL和FLC六种。事件选择电路236的输出信号为从WAIT状态转换到READY状态的任务的任务ID、以及该任务的FL、FLC。
(D)超时检测电路238:用于检测出处于WAIT状态的任务中超时计数器274的超时值变成零的任务。每当更新超时值时,驱动超时检测电路238。超时检测电路238的输入信号有ID、ST和TO三种,输出信号是该任务的任务ID。如果不存在该任务,则输出如-1等的规定值。
(E)互斥电路240:用于通过释放互斥系统调用的执行,选择从WAIT状态转换到READY状态的任务。互斥电路240的输入信号为来自任务切换电路210的由释放互斥系统调用释放的互斥(以下简称为“释放互斥”)的互斥ID。来自状态存储单元220的输入信号有ID、ST、WR、PR、SID和TIM六种。互斥电路240输出从WAIT状态转换到READY状态的任务的任务ID。如果不存在该任务,则输出如-1等的规定值。
(F)检索电路242:当任务切换电路210输入任务ID时,检索电路242输出该任务的全部状态数据。
下面通过关于任务切换的描述,对RUN-任务的选择、信号量、事件、互斥和超时,特别是任务选择电路230的处理,与通用技术进行比较说明。
RUN-任务的选择
[1]通过普通软件RTOS进行RUN-任务的选择
图11是表示普通RTOS进行RUN-任务选择时所采用的任务就绪表的图。
任务就绪表形成在存储器上,将各READY-任务的TCB用指针连接。优先级指针280设置在每个任务优先级上,指出对应任务优先级的任务的TCB的开始地址。在图11的任务就绪表中,任务优先级“0”的优先级指针280指向任务A的TCB的地址,任务优先级“1”的优先级指针280指向任务B的TCB的地址。任务A的TCB指向任务D的TCB的地址。
普通软件RTOS一边扫描该任务就绪表一边选择出下一个RUN-任务。在这个处理过程中,RTOS进行如下两个阶段的处理:
A.使RUN-任务从RUN状态转换到READY状态。
B.选择下一个RUN-任务,并使该选择出的任务的任务状态从READY状态转换到RUN状态。
将软件RTOS进行的处理分解成如下各处理。
<RUN-任务的状态转换>
这里,以任务J为RUN-任务来进行说明。
A1.RTOS将RUN-任务的任务ID存储在存储器中。RTOS根据该任务ID,获取任务J的TCB的地址。
A2.访问该TCB,获取任务J的任务优先级。假设该任务优先级为“0”。
A3.参考图11所示的任务就绪表,获取与任务J的任务优先级对应的优先级指针280。
A4.检测所获取的优先级指针280所指的TCB。这里检测出任务A的TCB。
A5.跟踪任务A的TCB所具有的指针,以检测出任务就绪表最末尾的TCB。图11中,任务就绪表的最末尾是任务F。
A6.配置任务F的TCB的指针指向任务J的TCB的地址。由此,任务J的TCB被追加到任务就绪表中。
A7.在任务J的TCB中设定“READY”。另外,处理数据被复制到该TCB的寄存器存储区域。
<READY-任务的状态转换>
B1.RTOS检测任务优先级“0”的优先级指针280指向哪个TCB。如果没有指向任何TCB,则检测任务优先级“1”的优先级指针280指向哪个TCB。RTOS一边以降低的任务优先级顺序检测该任务就绪表,一边试图确定任务直到发现指向的TCB为止。该图中,将指定任务A。
B2.将任务A从任务就绪表中移除。具体地说,重写任务优先级“0”的优先级指针280,以取代任务A来指向任务D的TCB的地址。另外,通过设定NULL使得任务A的指针不指向任务D的地址。由此,任务A的TCB从任务就绪表中移除。
B3.在任务A的TCB中设定“RUN”。另外,保存在任务A的TCB的寄存器存储区域中的处理数据被加载到处理寄存器组中。
如上所述,普通软件RTOS采用该任务就绪表进行任务切换,即RTOS根据下述策略,从多个READY-任务中选择RUN-任务。
1.所选择的任务为READY-任务(第一条件)。
2.所选择的任务为READY-任务中任务优先级最高的任务(第二条件)。
3.当存在多个任务优先级最高的任务时,所选择的任务是转换为READY状态的时间最久的任务(第三条件)。
这三个条件统称为“RUN任务选择条件”。任务处理装置100的执行选择电路232通过硬件来实现这种RTOS的任务调度功能。
[2]通过本实施例的硬件RTOS所进行的RUN-任务的选择
图12是执行选择电路232的电路图。
这里,假设从任务0~任务7共八个任务中选择出RUN-任务。执行选择电路232包括四个第一比较电路290(290a~290d)、两个第二比较电路292(292a、292b)、以及一个第三比较电路294。另外,还包括八个判定电路296(296a~296h)。
判定电路296的输入信号为表示任务状态的ST信号。当该ST信号表示READY时,判定电路296输出的CID信号为“1”;当该ST信号表示READY之外的任务状态时,则输出的CID信号为“0”。判定电路296根据上述RUN-任务选择条件中的第一条件进行判定。第一比较电路290的输入为两个任务的ID、PR和TIM、以及来自判定电路296的CID信号。
以第一比较电路290a为例进行说明。第一比较电路290a比较任务0和任务1,以根据上述的RUN任务选择条件选择出更适合的任务。
第一判定:首先,比较分别从判定电路296a和判定电路296b输出的CID信号。如果某一个CID信号是“1”,换句话说,如果只有一个任务处于READY状态,则第一比较电路290a输出该任务的ID、PR和TIM。如果两个CID信号都是“0”,即哪个任务都不处于READY状态,则第一比较电路290a输出ID=PR=TIM=NULL。这表示哪个任务都没有被选择。如果两个CID信号都是“1”,即两个任务都处于READY状态,则执行下面的第二判定。
第二判定:比较任务0的PR信号和任务1的PR信号,以选择出任务优先级较高的任务。例如,如果任务0的任务优先级是“1”、任务1的任务优先级是“2”,则第一比较电路290a输出任务0的ID、PR和TIM。通过第二判定,能够选择出任务优先级最高的任务作为RUN-任务的候选。如果任务0和任务1的任务优先级相同,则执行下面的第三判定。
第三判定:比较任务0的TIM信号和任务1的TIM信号,以选择出READY经过时间较长的任务。如果对应的READY经过时间相同,则选择任务0。由于仅通过比较经过时间的大小就能够进行判定,因此将无需进行如任务就绪表一样的TCB顺序管理。
由此,任务0和任务1、任务2和任务3、任务4和任务5、以及任务6和任务7,分别根据RUN-任务选择条件进行比较。第二比较电路292通过测试来自两个第一比较电路290的输出,来进一步筛选RUN-任务的候选。第二比较电路292a根据第一比较电路290a和第一比较电路290b的输出来执行任务选择。因此,第二比较电路292a输出任务0~任务3中最符合RUN-任务选择条件的任务的ID、PR和TIM。第三比较电路294也以相同的方式进行操作,第三比较电路294输出任务0~任务7中某一个任务的任务ID。
根据这种处理方法,能够通过硬件来实现RUN-任务选择条件。普通软件RTOS一边访问任务就绪表一边选择RUN-任务。但是本实施例中的执行选择电路232根据从状态存储单元220不断输出的状态数据,选择RUN-任务。由执行选择电路232执行的处理总结如下。
<RUN-任务的状态转换>
这里,假设任务J为该RUN-任务。
A1.任务切换电路210在任务J的任务状态寄存器258中设定“READY”。
A2.任务切换电路210设置任务J的定时器252,以开始测量READY经过时间。
由此,任务J从RUN状态转换到READY状态。如前所述,处理数据保存在任务J的保存寄存器110中。连接处理寄存器组154和保存寄存器110的总线,能够并行传输处理数据,从而A1和A2的处理能够在一个时钟时间内执行。
<READY-任务的状态转换>
B1.当任务J的状态转换完成时,任务切换电路210根据执行选择电路232所输出的任务ID确定RUN-任务,并在该确定的任务的任务状态寄存器258中设定“RUN”。
由此,所确定的任务从READY状态转换到RUN状态。所确定的任务的处理数据从保存寄存器110加载到处理寄存器组154中。连接保存寄存器110和处理寄存器组154的总线,也能够并行传输处理数据,从而B1的处理能够在一个时钟时间内执行。
软件RTOS在任务切换时,由于例如访问任务就绪表等原因会消耗CPU的很多CPU时钟时间。与此相反,本实施例中的任务控制电路200能够在很短的时间内完成任务切换。由于状态存储单元220不断地将状态数据输出给执行选择电路232,因此执行选择电路232不断地输出某一个任务的任务ID。不是在任务切换发生后才开始RUN-任务的选择处理,而是根据任务切换发生时的执行选择电路232的输出来执行RUN-任务的选择,这对任务切换高速化也有贡献。以上说明假设有八个任务,但是通过增加比较电路的阶段数,能够对更多的任务进行寻址。
[信号量处理]
图13是表示由普通RTOS进行的信号量处理中所采用的等待信号量表的图。
在说明等待信号量表之前,先简单说明信号量。信号量表212中对应记录信号量ID和信号量计数器。在信号量计数器中将初始值设定为有限数。例如,假设设定为信号量ID=4,信号量计数器=3。当某一个任务执行将信号量ID=4的信号量作为待机信号量的等待信号量系统调用时,任务切换电路210使待机信号量的信号量计数器递减。每当通过等待信号量事件调用来请求获取时,递减信号量计数器,当信号量计数器变成0时,无法再获取信号量。执行将信号量计数器为0的信号量作为待机信号量的等待信号量系统调用的任务,状态转换到WAIT状态。
另一方面,当某一个任务执行将信号量ID=4的信号量作为释放信号量的释放信号量系统调用时,任务切换电路210使信号量表212的信号量计数器递增。综上所述:
当信号量计数器>0时:执行等待信号量系统调用的任务,从RUN转换到READY。此时递减信号量计数器。
当信号量计数器=0时:执行等待信号量系统调用的任务,从RUN转换到WAIT。不递减信号量计数器。
为了使执行等待信号量系统调用的任务从WAIT状态转换到READY状态,其它任务需要执行释放信号量系统调用。
[1]由普通软件RTOS进行的信号量处理
普通软件RTOS通过采用等待信号量表来管理以信号量等待为理由处于WAIT状态的任务(以下特别称作“信号量等待任务”)的TCB。等待信号量表是具有与图11所示的任务就绪表类似构造的列表,形成在存储器上。各信号量等待任务的TCB由指针连接。优先级指针280指向对应任务优先级的信号量等待任务的TCB的开始地址。
当执行释放信号量系统调用时,普通软件RTOS一边扫描该等待信号量表一边选择应从WAIT状态转换到READY状态的信号量等待任务。执行等待信号量系统调用以及执行释放信号量系统调用时,RTOS执行的处理如下。
<等待信号量系统调用的执行>
这里,假设任务J为RUN-任务。
A1.RTOS将RUN-任务的任务ID存储在存储器中。根据该任务ID,获取任务J的TCB的地址。
A2.检测在等待信号量系统调用中所指定的待机信号量的信号量计数器。以下根据信号量计数器的值,处理被分别说明。
(当信号量计数器>0时)
A3.RTOS使待机信号量的信号量计数器递减。
A4.在任务J的TCB中设定“READY”。这种情况下,任务J的TCB被追加到任务就绪表中。
(当信号量计数器=0时)
A3.RTOS访问该TCB,以获取任务J的任务优先级。假设任务优先级为“0”。
A4.根据等待信号量表,获取与任务J的任务优先级对应的优先级指针。
A5.检测所获取的优先级指针所指的TCB。这里,检测到任务A的TCB。
A6.跟踪任务A的TCB所具有的指针,以检测出该等待信号量表中最末尾的TCB。如图13所示,任务F在该等待信号量表的最末尾。
A7.配置任务F的TCB的指针指向任务J的TCB的地址。由此,任务J的TCB被追加到等待信号量表中。
A8.在任务J的TCB中设定“WAIT”。另外,还设定待机信号量的信号量ID。
<释放信号量系统调用的执行>
B1.RTOS一边按顺序跟踪任务优先级为“0”的任务,一边搜索以释放信号量为待机信号量的信号量等待任务。如果不存在这样的任务,则将任务优先级为“1”的任务设为搜索对象。根据是否搜索到以释放信号量为待机信号量的信号量等待任务,分别执行不同的处理。
(搜索到时)
B2.以搜索到的任务是任务E来进行说明。RTOS在任务E的TCB中设定“READY”。另外,清除待机信号量的信号量ID。
B3.将任务E的TCB从等待信号量表中移除。
B4.使释放信号量的任务的状态从RUN状态转换到READY状态。该任务的TCB被追加到任务就绪表中。
(未搜索到时)
B2.RTOS使信号量计数器递增。
B3.使释放信号量的任务的状态从RUN状态转换到READY状态。该任务的TCB被追加到任务就绪表中。
普通软件RTOS通过管理上述等待信号量表,进行与信号量相关的处理。在释放信号量时,RTOS根据以下策略从多个WAIT-任务中选择READY-任务。
1.所选择的任务应该为WAIT-任务(第一条件)。
2.所选择的任务应该为WAIT-任务中将释放信号量作为待机信号量的任务(第二条件)。
3.当存在多个这种任务时,所选择的任务应该具有最高的任务优先级(第三条件)。
4.如果存在多个任务优先级最高的任务,所选择的任务应该是转换为WAIT状态的时间最久的任务(第四条件)。
这四个条件统称为“信号量待机解除条件”。任务处理装置100的信号量选择电路234通过硬件来实现这种RTOS的任务调度功能。
[2]由本实施例的硬件RTOS进行的信号量处理
图14是信号量选择电路234的电路图。
这里,也是以任务0~任务7共八个任务为例进行说明。信号量选择电路234包括四个第一比较电路300(300a~300d)、两个第二比较电路302(302a、302b)、以及一个第三比较电路304。另外,还包括八个判定电路306(306a~306h)。
判定电路306的输入信号为来自状态存储单元220的ST、WR、SID信号和来自任务切换电路210的表示信号量ID的信号。这里所输入的信号量ID是释放信号量的信号量ID。如果对应的任务是以释放信号量为待机信号量的信号量等待任务,则判定电路306输出的CID信号为“1”,如果不是,则输出的CID信号为“0”。判定电路306输出基于上述信号量待机解除条件中的第一条件和第二条件的判定结果。第一比较电路300的输入信号为两个任务的ID、PR和TIM、以及来自判定电路306的CID信号。
第一比较电路300是根据信号量待机解除条件中的第三条件和第四条件进行判定的电路。第二比较电路302和第三比较电路304也同样。以上已经说明,RUN-任务选择条件的第二条件和第三条件,与信号量待机解除条件的第三条件和第四条件相同。执行选择电路232的各比较电路是比较任务的状态数据(PR、TIM)的电路。另一方面,信号量选择电路234的各比较电路也是比较任务的状态数据(PR、TIM)的电路。因而,执行选择电路232的第一比较电路290和信号量选择电路234的第一比较电路300是内置有相同逻辑的电路,能够共用。各任务在通过判定电路306基于第一条件和第二条件进行判定的基础上,通过第一比较电路300进行判定处理。之后通过与执行选择电路232相同的判定处理,第三比较电路304输出某一个任务ID。当执行等待信号量系统调用以及当执行释放信号量系统调用时进行如下处理。
<等待信号量系统调用的执行>
这里,假设任务J为RUN-任务。
A1.任务切换电路210从信号量表212中检测在等待信号量系统调用中所指定的信号量的信号量计数器。以下根据信号量计数器的值,处理被分别说明。
(当信号量计数器>0时)
A2.任务切换电路210使信号量表212的信号量计数器递减。
A3.在任务J的任务状态寄存器258中设定“READY”。此时,任务切换电路210设置RUN-任务的定时器252,以开始测量READY经过时间。
(当信号量计数器=0时)
A2.任务切换电路210在任务J的任务状态寄存器258中设定“WAIT”,在待机理由寄存器262中设定“信号量等待”,在信号量ID寄存器264中设定待机信号量的信号量ID,并设定定时器252以开始测量WAIT经过时间。
由此,执行等待信号量系统调用的任务,从RUN状态转换到READY状态或者WAIT状态。
<释放信号量系统调用的执行>
B1.任务切换电路210将释放信号量的信号量ID输入到各判定电路306中。各判定电路306根据该信号量ID,判定是否满足信号量待机解除条件中的第一条件以及第二条件。因而,各个第一比较电路300根据第三条件以及第四条件选择任务。
(当某一个判定电路306输出“1”,第三比较电路304输出某一个任务ID时)
B2.任务切换电路210在所检测出的任务的任务状态寄存器258中设定“READY”,清除待机理由寄存器262和信号量ID寄存器264,并使定时器252开始测量READY经过时间。
B3.在执行系统调用的任务的任务状态寄存器258中设定“READY”,并开始测量READY经过时间。
(当没有判定电路306输出“1”,第三比较电路304不输出任何一个任务ID时)
B2.任务切换电路210使信号量表212的信号量计数器递增。
B3.使执行系统调用的任务的状态从RUN状态转换到READY状态。
由于状态存储单元220不断地将状态数据输出给信号量选择电路234,因此当任务切换电路210将信号量ID输入给判定电路306时,信号量选择电路234能够立即执行选择处理。
[互斥处理]
互斥也与信号量相同,用于任务之间的同步处理。互斥和信号量存在以下几点不同。
1.信号量计数器可设定为1以上的整数。与此相对,互斥是信号量计数器为1或者0的特殊信号量。当信号量计数器为2以上时,能够有2个以上的任务获得相同的信号量。但是,在互斥的情况下,能够获得某互斥的任务通常只有一个。
2.能够通过释放信号量系统调用释放信号量的任务,不限于通过等待信号量系统调用来获得信号量的任务。与此相对,能够通过释放互斥系统调用释放互斥的任务,只能是通过等待互斥系统调用来获得互斥的任务。
在释放互斥时,任务切换电路210从多个WAIT-任务中选择READY-任务的策略如下。
1.所选择的任务应该是WAIT-任务(第一条件)。
2.所选择的任务应该是WAIT-任务中以释放互斥为待机互斥的任务(第二条件)。
3.当存在多个这种任务时,所选择的任务应该是任务优先级最高的任务(第三条件)。
4.当存在多个任务优先级最高的任务时,所选择的任务应该是转换为WAIT状态时间最久的任务(第四条件)。
这四个条件统称为“互斥待机解除条件”。
因而,当执行等待互斥系统调用以及当执行释放互斥系统调用时,本实施例的硬件RTOS执行如下处理。信号量表212中对应存储互斥ID和表示该互斥是否被哪一个任务占用的占用状态数据。当该互斥没有被占用时,占用状态数据为“0”,当该互斥被占用时,占用状态数据为占用该互斥的任务的任务ID。
<等待互斥系统调用的执行>
这里,假设任务J为RUN-任务。
A1.任务切换电路210检测在等待互斥系统调用中指定的互斥是否被占用。以下根据该互斥的占用状态,处理被分别说明。
(当互斥没有被占用时)
A2.任务切换电路210将执行系统调用的任务的任务ID作为互斥占用状态数据记录。
A3.在任务J的任务状态寄存器258中设定“READY”。此时,任务切换电路210设置RUN-任务的定时器252,以开始测量READY经过时间。
(当互斥被占用时)
A2.任务切换电路210在任务J的任务状态寄存器258中设置“WAIT”,在待机理由寄存器262中设置“互斥等待”,在互斥ID寄存器265中设定待机互斥的互斥ID,并设定定时器252以开始测量WAIT经过时间。
<释放互斥系统调用的执行>
B1.任务切换电路210在执行系统调用的任务占用释放互斥的条件下,将释放信号量ID输入给互斥电路240。互斥电路240也包括如图14所示的多阶段连接的比较电路、以及判定是否满足互斥待机解除条件中第一条件以及第二条件的判定电路。该判定电路以该互斥为对象,只有当互斥待机条件中的第一条件以及第二条件同时满足时才输出“1”。此外,当没有占用释放互斥的任务执行释放互斥系统调用时,使该任务的状态从RUN状态转换到READY状态。
(当某一个判定电路输出“1”,互斥电路240输出某一个任务ID时)
B2.任务切换电路210在所检测出的任务的任务状态寄存器258中设定“READY”,清除待机理由寄存器262和互斥ID寄存器265,并使定时器252开始测量READY经过时间。
B3.在执行系统调用的任务的任务状态寄存器258中设定“READY”,并开始测量READY经过时间。
(当没有判定电路输出“1”,互斥电路240不输出任何一个任务ID时)
B2.任务切换电路210在信号量表212中将互斥设定为非占用状态。
B3.使执行系统调用的任务的状态从RUN状态转换到READY状态。
[事件处理]
下面简单说明本实施例中的事件管理。事件表214对应记录事件ID和标记模式(以下称作“当前标记模式”)。标记模式是8位的位模式。
设定事件系统调用是以事件ID和标记模式(以下称作“设定标记模式”)为参数来更新当前标记模式的系统调用。当执行设定事件系统调用时,对应该事件的当前标记模式更新为与设定标记模式的逻辑或。例如,假如当前标记模式为“00001100”、设定标记模式为“00000101”,则当前标记模式变为“00001101”。以下关于各标记模式,从左至右依次称作第0位,第1位,…,和第7位。
等待事件系统调用是用于等待待机事件的当前标记模式满足规定条件的系统调用,以事件ID、标记模式(以下称作“待机标记模式”)、和标记条件作为参数。当执行等待事件系统调用时,判定当前标记模式和待机标记模式之间是否满足标记条件。标记条件是逻辑或(OR)或者逻辑与(AND)。在标记条件是逻辑与(AND)的情况下,WAIT解除条件是指对在待机标记模式中为“1”的全部位,当前标记模式中的对应位也全部是“1”。在标记条件是逻辑或(OR)的情况下,WAIT解除条件是指对在待机标记模式中为“1”的至少一位,当前标记模式的对应位也是“1”。例如,在当前标记模式为“00001101”、待机标记模式为“00000011”、标记条件是“逻辑或(OR)”的情况下,待机标记模式的第6位以及第7位是1,当前标记模式的第7位是1,因此这种情况下,在等待事件系统调用中指定的WAIT解除条件满足。另一方面,在标记条件是“逻辑与(AND)”的情况下,由于当前标记模式的第6位是“0”,因此WAIT解除条件不满足。
[1]由普通软件RTOS所进行的事件处理
当执行等待事件系统调用以及当执行设定事件系统调用时,普通RTOS执行如下处理。在普通RTOS中,为了管理事件,在存储器上保持着事件表。在该事件表中,不仅存储有事件ID、当前标记模式,通常还对应存储有以该事件为待机事件而处于WAIT状态的任务(以下称作“事件等待任务”)的任务ID、待机标记模式、和标记条件。
<等待事件系统调用的执行>
A1.RTOS从事件表中读出由系统调用指定的事件的当前标记模式。
A2.按照标记条件比较当前标记模式和待机标记模式,以判定WAIT解除条件是否满足。
(当WAIT解除条件满足时)
A3.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
(当WAIT解除条件不满足时)
A3.在事件表中记录执行系统调用的任务的任务ID。
A4.在事件表中记录待机标记模式。
A5.在事件表中记录标记条件。
A6.使执行系统调用的任务的任务状态从RUN状态转换到WAIT状态。
<设定事件系统调用的执行>
B1.RTOS从事件表中读出与系统调用中指定的事件对应的当前标记模式、任务ID、待机标记模式、以及标记条件。
B2.将当前标记模式和设定标记模式的逻辑或作为新的当前标记模式进行记录。
(当不存在关于指定事件的事件等待任务时,或者当即使存在关于指定事件的事件等待任务,而根据待机标记模式和标记条件,WAIT解除条件不满足时)
B3.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
(当存在关于指定事件的事件等待任务,且WAIT解除条件满足时)
B3.使事件等待任务的任务状态从WAIT状态转换到READY状态。
B4.清除事件表中的待机任务ID、待机标记模式和标记条件。
B5.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。另外,进行RUN-任务的选择。
当执行设定事件系统调用时,RTOS从多个WAIT-任务中选择READY-任务的策略如下。
1.所选择的任务应该是WAIT-任务(第一条件)。
2.所选择的任务应该是WAIT-任务中以指定事件为待机事件的任务(第二条件)。
3.所选择的任务应该是对待机标记模式、当前标记模式和标记条件进行比较,WAIT解除条件满足的任务(第三条件)。
这三个条件统称为“事件待机解除条件”。
[2]由本实施例的硬件RTOS所进行的事件处理
当任务处理装置100执行等待事件系统调用以及执行设定事件系统调用时,RTOS执行如下处理。内置于任务处理装置100的信号量表212对应存储事件ID和当前标记模式。待机任务ID和待机标记模式等信息,存储在状态存储单元220中。
<等待事件系统调用的执行>
A1.任务切换电路210从事件表214中读出当前标记模式。
A2.任务切换电路210根据标记条件比较当前标记模式和待机标记模式,以判定WAIT解除条件是否满足。
(当WAIT解除条件满足时)
A3.在执行系统调用的任务的任务状态寄存器258中设定“READY”。
(当WAIT解除条件不满足时)
A3.任务切换电路210在执行系统调用的任务的任务状态寄存器258中设定“WAIT”,在待机理由寄存器262中设定“事件等待”,在事件ID寄存器266中设定待机事件的事件ID,在待机标记寄存器268中设定待机标记模式,以及在标记条件寄存器270中设定标记条件。
<设定事件系统调用的执行>
B1.任务切换电路210从事件表214中读出当前标记模式,并且将系统调用中指定的事件的事件ID输入给事件选择电路236。
B2.任务切换电路210对设定标记模式和来自事件表214的当前标记模式进行逻辑或运算。
B3.事件选择电路236根据所输入的事件ID选择满足事件待机条件的任务。此时,也可以不考虑任务优先级和WAIT经过时间来选择多个任务。
(当存在满足事件待机解除条件的任务时)
B4.任务切换电路210在事件等待任务的任务状态寄存器258中设定“READY”,清除事件ID寄存器266、待机标记寄存器268、和标记条件寄存器270。
B5.使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
(当不存在满足事件待机解除条件的任务时)
B4.任务切换电路210使执行系统调用的任务的任务状态从RUN状态转换到READY状态。
[超时处理]
当WAIT解除条件满足时,转换到WAIT状态的任务转换到READY状态。但是,如果因为某种外因或应用程序故障而阻碍WAIT解除条件满足时,该任务将不能从WAIT状态离开。因此,通常在任务转换到WAIT状态时设定超时值。超时值定期递减,当变成零时,即使WAIT解除条件不满足,任务也从WAIT状态转换到READY状态,即防止任务在WAIT状态停留的时间超过超时值。
[1]由普通软件RTOS所进行的超时处理
对于普通软件RTOS,在处于WAIT状态的任务的TCB中设定超时值,该超时值周期性地递减。RTOS周期性地向CPU处理申请中断,以检查全部TCB,以及检测出超时值到达0的WAIT-任务。当检测出这种任务时,RTOS使该任务的任务状态从WAIT状态转换到READY状态。
[2]由本实施例的硬件RTOS所进行的超时处理
另一方面,在本实施例中,任务切换电路210周期性地递减各超时计数器274的超时值。当执行WAIT系列系统调用时,超时值设定为参数。任务切换电路210在执行该系统调用的任务的超时计数器274中设定超时值。
由于超时值的递减处理不需要CPU 150参与,因此任务切换电路210能够不依赖于任务执行处理进行超时值的更新。因此,即使在CPU 150执行任务的过程中,任务控制电路200也能够自动地更新超时值。由于状态数据不断地被输入到超时检测电路238中,因此超时检测电路238能够在更新超时值的同时,检测出超时值到达0的任务。超时检测电路238输出检测出的这种任务的任务ID。当从超时检测电路238获得该任务ID时,任务切换电路210便确定发生了超时,随后申请HC以停止提供CPU时钟。任务控制电路200使发生超时的WAIT-任务转换到READY状态,并且使RUN-任务转换到READY状态。任务切换电路210从READY-任务中选择下一个应执行的任务。另外,任务切换电路210重启已发生超时的任务的定时器252,以测量READY经过时间。
根据这种处理方法,在任务执行过程中,即CPU时钟运行过程中发生超时时,能够通过立即向CPU 150申请中断,来执行任务切换。另外,在任务执行过程中,任务切换电路210能够不依赖CPU 150的处理能力独立地执行超时值的更新处理。
[作为有限状态机的任务切换电路210]
图15是任务切换电路210的状态转换图。
在初始化处理(A1)之前,全部任务都处于IDLE状态。当初始化处理完成时(S10),某一个任务成为RUN-任务,任务切换电路210处于任务执行状态(A2)。当检测出中断请求信号时(S12),特殊任务成为RUN-任务,执行中断处理(A3)。当中断处理完成时(S14),任务切换电路210从常规任务中选择RUN-任务,并转换到A2。
另外,在任务执行过程中(A2),执行系统调用时(S16),执行系统调用处理(A4)。在未发生任务切换即RUN-任务切换的情况下(S18),任务切换电路210返回到A2。另一方面,在由于系统调用处理(A4)而发生任务切换的情况下(S20),任务切换电路210根据执行选择电路232的输出来进行RUN-任务的选择(A5)。当任务切换完成时(S22),处理状态转换到A2。
最后,附带说明一下只安装作为任务处理装置100的主要部件的保存电路120和任务控制电路200中的一个的情况。
[未配置任务控制电路200的类型的任务处理装置100]
图16是图5所示的任务处理装置100中未配置任务控制电路200的任务处理装置100的电路图。
代替配置任务控制电路200,追加有寄存器切换控制电路322和处理数据存储单元320。由于未配置任务控制电路200,因此任务调度功能由软件RTOS来实现。因而,RTOS在任务切换时,需要暂时取得CPU 150的使用权。处理数据存储单元320通常存储用于RTOS的处理数据。当RTOS取得CPU 150的使用权时,处理数据存储单元320调换存储在处理数据存储单元320中的RTOS用处理数据和存储在特殊寄存器156中的任务用处理数据。以下以从任务A向任务B切换来说明该处理过程。
A1.当任务A执行系统调用时,将系统调用中的变量以及系统调用ID记录在某些通用寄存器158内。
A2.寄存器切换控制电路322将任务A的处理数据移动到处理数据存储单元320中,并将处理数据存储单元320中的RTOS用处理数据加载到处理寄存器组154中。在该阶段,RTOS取得CPU 150的使用权。
A3.寄存器切换控制电路322向保存寄存器110a输入写入信号,以将处理数据存储单元320中存储的任务A用处理数据保存到保存寄存器110中。
A4.RTOS根据记录在通用寄存器158中的系统调用变量和ID,执行与系统调用相对应的处理。另外,将任务A的TCB中的任务状态数据设定为“READY”,并向任务就绪表中追加任务A的TCB。
B1.接着,RTOS按照前述的RUN-任务选择条件,选择RUN-任务,这里是选择任务B。
B2.RTOS指示寄存器切换控制电路322将指定任务B的任务选择信号输入到加载选择电路112中。由此,处理数据从保存寄存器110b移动到处理数据存储单元320中。
B3.寄存器切换控制电路322调换处理数据存储单元320中的任务B用处理数据和处理寄存器组154中的RTOS用处理数据。由此,任务B取得CPU 150的使用权。
根据这种处理方法,与配置任务控制电路200的图5所示的任务处理装置100相比,能够使任务处理装置100整体电路小型化。RTOS是以软件实现的,但是处理数据的加载/保存是能够由来自寄存器切换控制电路322的信号来硬件控制的。如果将分别连接处理寄存器组154、处理数据存储单元320、加载选择电路112、和保存寄存器110的总线设定为能够并行传输处理数据的位数,则与将处理数据保存到TCB中和从TCB加载处理数据相比,能够实现更高速的任务切换。
[未配置保存电路120的类型的任务处理装置100]
图17是图5所示的任务处理装置100中未配置保存电路120的任务处理装置100的电路图。
代替配置保存电路120,追加有中断接口电路324。由于未配置保存电路120,因此处理数据保存到存储器的TCB中。处理数据的保存/加载由基于软件的RTOS来实现。因而,在任务切换时,RTOS需要暂时取得CPU 150的使用权。以下以从任务A向任务B切换来说明该处理过程。
当通过执行系统调用来启动任务切换时,首先软件RTOS将任务A的处理数据保存到任务A的TCB中。而且,将RTOS用处理数据加载到处理寄存器组154中。此时的处理方法与参照图3说明的内容相似。
软件RTOS向中断接口电路324中写入系统调用的参数。执行控制电路152使CPU 150的CPU时钟停止。中断接口电路324使任务控制电路200执行任务切换。任务切换电路210,首先将任务A的任务状态寄存器258设定为READY,并根据来自任务选择电路230的输出选择作为下一个RUN-任务的任务B。任务切换电路210指示中断接口电路324加载任务B的处理数据。这时,中断接口电路324使执行控制电路152恢复CPU时钟。另外,中断接口电路324通知软件RTOS已经选择了任务B。软件RTOS访问任务B的TCB,以将任务B的处理数据加载到处理寄存器组154中。
根据这种处理方法,与配置保存电路120的图5所示任务处理装置100相比,能够使任务处理装置100整体电路小型化。RTOS功能的一部分是以软件实现的,但是任务选择处理由任务控制电路200来实现。
与参照图2以及图3说明的软件RTOS不同,图16以及图17所示的任务处理装置100,能够任意地将RTOS功能的一部分硬件化。如参照图16所述,由于配置了保存电路120,而无需访问用于处理数据保存/加载的TCB。因此,能够通过寄存器切换控制电路322来执行处理数据的保存/加载处理。另外,如参照图17所述,由于配置了任务控制电路200,因此软件RTOS能够将任务选择功能转移给任务控制电路200。
如参照图5所述,在配置了保存电路120和任务控制电路200的任务处理装置100的情况下,能够将RTOS的任务调度功能完全硬件化。由于在任务转换时没有必要访问存储器中的TCB,因此使任务切换处理的速度进一步提高。本发明人等的实验表明:与参照图3说明的普通软件RTOS相比,本实施例中的任务处理装置100以约100倍的速度进行操作。
以上,参照实施例说明了本发明。这些实施例只是示例,本领域技术人员能够理解,能够对这些结构要素、处理流程的组合进行各种变型,而这些变型也属于本发明的范围。
权利要求中所述的选择电路的功能,由本实施例中的加载选择电路112来实现。
除此之外,本领域技术人员还能够理解,由权利要求中所述的各结构要素实现的其他功能,也能够由本实施例中所述的各功能模块单独或者它们的结合来实现。
能够通过以上实施例以及其变型例包括的本发明的各种方式,已经以包括权利要求范围中所述内容的形式,在下面列出。参照任务控制电路200的特征,理解以下发明。
C1.一种任务处理装置,该任务处理装置包括:
处理寄存器,用于暂时存储用于执行任务的数据;执行控制电路,用于将命令(instruction)和操作数从存储器加载到所述处理寄存器中,并按照所述处理寄存器中的命令和操作数执行任务;
多个状态寄存器,用于存储用于任务调度的每个任务的状态数据,分别与多个任务相对应;
任务切换电路,用于执行任务的切换;以及
任务选择电路,用于以从多个所述状态寄存器中并行输出的状态数据为输入,并根据规定的选择条件来选择任务;其中
当所述执行控制电路执行规定的系统调用命令时,将规定的系统调用信号发送给所述任务切换电路;
所述任务选择电路不依赖于是否有所述规定的系统调用命令,从表示能够执行和等待执行的处于READY(就绪)状态的任务中,选择成为执行对象的任务;
所述任务切换电路通过根据接收到所述系统调用信号时来自所述任务选择电路的输出,选择成为下一个执行对象的任务,将所述处理寄存器中的数据保存到规定的存储区域,并将与执行中的任务对应的所述状态寄存器中的状态数据从表示任务执行中的RUN(运行)状态更新为READY状态,将与所选择的任务对应的并保存在所述存储区域中的数据加载到所述处理寄存器中,并将与该选择的任务对应的所述状态寄存器中的状态数据从READY状态更新为RUN状态,来切换成为执行对象的任务。
C2.根据C1所述的任务处理装置,其中,所述任务选择电路内置有多阶段连接的比较电路;
第1阶段的比较电路根据所述规定的选择条件来比较两个以上任务的状态数据,以将某一个任务的状态数据输出给第2阶段的比较电路;
第n(n是2以上的自然数)阶段的比较电路根据所述规定的选择条件来比较第(n-1)阶段的多个比较电路所输出的状态数据,以输出某一个任务的状态数据,从而选择最后阶段的比较电路所指定的任务作为执行对象。
C3.根据C2所述的任务处理装置,其中,第k(k是自然数)阶段的比较电路在所输入的状态数据都不满足所述规定的选择条件时,不输出任何任务的状态数据。
C4.根据C1所述的任务处理装置,其中,所述状态寄存器将任务优先级作为状态数据的一部分存储;
当任务切换时有多个处于READY状态的任务时,所述任务选择电路选择这些任务中任务优先级最高的任务作为执行对象。
C5.根据C4所述的任务处理装置,其中,当任务切换时存在多个处于READY状态的任务、且这些任务中任务优先级最高的任务也存在多个时,任务选择电路选择转换为READY状态后经过时间最长的任务作为执行对象。
C6.根据C5所述的任务处理装置,该任务处理装置还包括分别与多个任务相对应的多个定时器;其中
当所述任务切换电路设定任务为READY状态时,所述任务切换电路通过设置与该任务对应的定时器,开始测量经过时间。
C7.根据C1所述的任务处理装置,该任务处理装置还包括用于对应存储信号量ID和信号量计数器的信号量信息存储单元;其中
在所述执行控制电路执行指定信号量ID的作为用于请求信号量的系统调用的等待信号量命令的情况下,
所述任务切换电路在所指定的信号量的信号量计数器是1以上时,使该信号量计数器递减,并将执行所述等待信号量命令的任务的状态数据更新为READY状态,以及,当该信号量计数器是0以下时,所述任务切换电路将执行所述等待信号量命令的任务的状态数据设定为表示在满足规定条件之前不能执行该任务的WAIT(等待)状态,并将所述所指定的信号量ID设定在对应的所述状态寄存器中,表示以该ID作为该任务的WAIT状态解除条件;以及
在所述执行控制电路执行指定信号量ID的作为用于释放信号量的系统调用的释放信号量命令的情况下,
所述任务选择电路按照规定的选择条件,从处于等待具有指定信号量ID的信号量的WAIT状态的任务中选择某一个任务,并且
当所述任务选择电路选择出某一个任务时,所述任务切换电路更新该所选任务的状态数据为READY状态,而当没有选择出任何任务时,使所述所指定的信号量的信号量计数器递增。
C8.根据C1所述的任务处理装置,该任务处理装置还包括用于对应存储事件ID和第一标记模式的事件信息存储单元;其中
在所述执行控制电路执行指定事件ID和第二标记模式的作为用于等待事件设定的系统调用的等待事件命令的情况下,
当通过对与所指定的事件对应的第一标记模式和第二标记模式进行运算操作,满足规定的运算条件时,所述任务切换电路将执行所述等待事件命令的任务的状态数据更新为READY状态,以及,当不满足所述规定的运算条件时,所述任务切换电路将执行所述等待事件命令的任务设定为表示在满足规定的条件之前不能执行该任务的状态的WAIT状态,并且将所指定的事件ID和第二标记模式设定在对应的所述状态寄存器中,表示以该事件ID和该第二标记模式作为该任务的WAIT状态解除条件;以及
在所述执行控制电路执行指定事件ID和第三标记模式的作为用于设定第一标记模式的系统调用的设定事件命令的情况下,
所述任务切换电路对与所指定的事件对应的第三标记模式和第一标记模式进行逻辑或运算;
所述任务选择电路选择处于等待该指定的事件ID的事件的WAIT状态的任务;
当所述任务选择电路选择出某一个任务时,所述任务切换电路在存储于所选择出的任务的所述状态寄存器中的第二标记模式和第一标记模式之间满足规定的运算条件的情况下,将所选择的任务从WAIT状态更新为READY状态。
C9.根据C1所述的任务处理装置,其中,所述状态寄存器将超时计数器作为状态数据的一部分存储;
在所述执行控制电路执行附带超时条件的系统调用命令的情况下,
所述任务切换电路将执行所述附带超时条件的系统调用命令的任务的状态数据更新为WAIT状态,并且开始更新超时计数器;
所述任务选择电路检测处于WAIT状态中已超时的任务;
所述任务切换电路将所述已超时的任务的状态数据从WAIT状态更新为READY状态。
C10.根据C1所述的任务处理装置,该任务处理装置还包括用于对应存储互斥ID和互斥获取状态的互斥信息存储单元;其中
在所述执行控制电路执行指定互斥ID的作为用于请求互斥的系统调用命令的等待互斥命令的情况下,
所述任务切换电路在所指定的互斥原来是非占用状态时,设定该所指定的互斥为占用状态,并将执行所述等待互斥命令的任务的状态数据更新为READY状态,以及,在该所指定的互斥是占用状态时,将执行所述等待互斥命令的任务设定为表示在满足规定条件之前不能执行该任务的状态的WAIT状态,并且将所述所指定的互斥ID设定在对应的所述状态寄存器中,表示以所述互斥ID作为该任务的WAIT状态解除条件;以及
当所述执行控制电路执行指示互斥ID的作为用于释放互斥的系统调用命令的释放互斥命令的情况下,
所述任务选择电路按照规定的选择条件,选择处于等待所指定的互斥ID的互斥的WAIT状态的任务中的某一个任务;
所述任务切换电路将所指定的互斥设定为非占用状态,当所述任务选择电路选择出某一个任务时,将所选择的任务的状态数据更新为READY状态。
C11.根据C1所述的任务处理装置,该任务处理装置还包括多个保存寄存器,用于在所述处理寄存器中保存数据,分别与多个任务相对应;其中,
当所述任务切换电路接收到所述规定的系统调用信号时,将所述处理寄存器中的数据保存到与执行中的任务对应的所述保存寄存器中,并将与通过所述任务选择电路所选择的任务对应的所述保存寄存器中的数据加载到所述处理寄存器中。
工业实用性
根据本发明,能够在多任务处理中实现更高效的任务执行控制。

任务处理装置.pdf_第1页
第1页 / 共67页
任务处理装置.pdf_第2页
第2页 / 共67页
任务处理装置.pdf_第3页
第3页 / 共67页
点击查看更多>>
资源描述

《任务处理装置.pdf》由会员分享,可在线阅读,更多相关《任务处理装置.pdf(67页珍藏版)》请在专利查询网上搜索。

本发明实现了多任务OS的任务调度高速化。任务处理装置(100)包括CPU(150)、保存电路(120)以及任务控制电路(200)。CPU(150)配置有处理寄存器、和将数据从存储器加载到处理寄存器中并按照处理寄存器中的数据来执行任务的执行控制电路(152)。保存电路(120)配置有分别对应多个任务的多个保存寄存器(110)。当执行规定的系统调用命令时,执行控制电路(152)将通知任务控制电路(20。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1