专利名称:处理器的制作方法
技术领域:
本发明涉及一种多任务处理器,具体来说,涉及一种有效执行任务的技术。
背景技术:
多任务的意思是单一计算机系统同时执行多个任务,即,由多个程序实现多个处理。然而,由于具有单一程序执行机制的计算机系统在一个时刻只能执行一个任务,其它控制机制例如OS(操作系统)使程序执行机制在极短的间隔内交替执行多个任务。这给用户一种错觉好像多个任务是同时执行。
作为实现这种多任务的一种方法,循环方法已经为公众所知,其中多个任务按照分配给各任务的预先确定的时间周期循环执行。如果分配给任务用于程序执行机制的时间周期(下文中称为“时间片”)用完,该任务的执行暂时挂起。然后,重新设定执行该任务的顺序。当再次轮到该任务,重新开始该任务剩余部分的执行。
当该任务的执行被暂时挂起时,保留在各种寄存器(下文中称为“寄存器组”)中该执行所需要的控制信息(下文中称为“上下文”)存储在存储器中。当该执行重新开始,存储在存储器中的上下文被存储在寄存器组中并且该执行从挂起点重新开始。
关于该多任务,公开号为No.2003-271399的日本专利申请公开了一种为了通过在多个寄存器组之间执行切换避免程序执行机制的浪费以有效执行多个任务的技术。在该技术中,当采用寄存器组之一执行任务时,下一个要执行的任务的上下文预先存储在寄存器组的另一个中。一旦分配给采用该一个寄存器组正在执行的任务的执行时间周期结束,则采用另一个寄存器组执行下一个要执行的任务。这样,增加了执行多个任务的效率。
发明内容
本发明要解决的问题然而,当正在执行任务时,可能发生的一种情况为不能使用分配给任务的全部执行时间周期执行任务,即,高速缓存丢失等导致在分配的执行时间周期期间发生任务执行的挂起的情况。如果这种情况发生,在分配的执行时间周期的剩余时间周期中什么也不执行,或者按照在循环方法中设置的调度将要执行下一个要执行的任务。
在剩余的时间周期中不执行意味着处理器将使程序执行机制空闲。同时,为了执行下一个要执行的任务,可能发生任务需要在寄存器组中的上下文存储完成之后执行的情况。因此,任何一种情况都没有有效地利用程序执行机制。
本发明是考虑到关于任务执行的挂起的以上问题作出的,并且其目的在于提供一种能够采用单一程序执行机制以伪并行的方式更有效地执行多个任务的处理器。
解决该问题的手段为了解决以上问题,根据本发明的处理器是一种根据分配给各任务的执行时间周期循环执行多个任务的处理器,所述处理器包括存储单元,用于存储分别对应所述任务的执行控制信息条目;多个寄存器组;执行单元,用于顺序采用寄存器组之一以基于保留在正在使用的寄存器组中的执行控制信息执行任务;选择单元,用于在所述任务中选择下一个要执行的任务;恢复单元,用于当任务其中之一正在执行分配给其的一个执行时间周期时,将对应选择的任务的一条执行控制信息恢复到除了正在使用的寄存器组之外的寄存器组其中之一内;检测单元,用于检测正在执行的任务之一的挂起原因;以及控制单元,用于(1)如果在恢复开始之前检测到挂起原因,使执行单元挂起执行并使用除了已经用于执行的寄存器组之外的寄存器组其中之一执行所述任务其中之一,以及(2)如果下一个要使用的寄存器组是其中恢复将要开始的寄存器组,使恢复单元取消恢复。
本发明的效果通过以上结构,即使正在执行的任务需要挂起,根据本发明的处理器简单地通过基于在任务的执行被挂起之前刚执行的任务的信息在寄存器组之间执行切换来执行任务,所述信息保留在另一个寄存器组。因此,可以没有浪费地使用程序执行机制。
同时,存储单元还可以存储各表示直到解决在正在执行的各任务时发生的挂起原因的时间周期的时间信息条目,并且只有在恢复完成之前检测到挂起原因并且控制单元基于对应的时间信息条目判断挂起原因在恢复完成之后被解决,控制单元使执行单元挂起该执行并且使用除了已经用于执行的寄存器组之外的寄存器组之一执行所述任务其中之一。
通过以上结构,如果在正在执行的任务中发生的挂起原因在通过切换到另一各寄存器组开始另一个任务的执行之前被解决,该处理器可以等待挂起原因的解决。因此,与无条件地通过切换到另一个寄存器组执行任务的情况相比,可以更有效地使用程序执行机制。
同时,存储单元还可以存储各关于在各任务执行时可能发生的挂起原因的信息条目,检测单元检测多种类型挂起原因,如果控制单元使执行单元基于检测到的挂起原因挂起所述任务其中之一的执行,选择单元参照有关挂起原因的存储信号的相应条目选择所述任务中不会发生与检测到的挂起原因相同类型的挂起原因的另一个任务。
通过以上结构,在正在执行的任务中发生的挂起原因被解决之前,可以选择并执行不会发生与在正在执行的任务中发生的挂起原因类型相同的挂起原因的任务。因此,可以在程序执行机制用于处理挂起原因的能力范围之内执行任务。因此,可以更有效地使用程序执行机制。
同时,处理还可以包括解决检测单元,用于检测挂起原因的解决,其中检测单元检测多种类型的挂起原因,并且如果(1)已经执行的任务的执行通过检测的挂起原因被挂起之后,所述任务中另一任务正在执行,并且(2)如果在检测到挂起原因的解决之前检测到与检测到的挂起原因相同类型的另一个挂起原因,控制单元可以使执行单元挂起所述中另一任务的执行并且不执行任务直到检测到解决。
通过以上结构,如果与在正在执行的任务中发生的挂起原因相同类型的挂起原因在正在执行的任务中发生的挂起原因已经被解决之前发生,该任务不执行直到前一个挂起原因被解决。这可以防止相同类型的挂起原因的连续发生。
换句话说,当任务的执行被挂起时,发生其中程序执行机制没有使用的时间周期。然而,这可以防止由于相同类型挂起原因的连续发生,超过程序执行机制的处理能力。
因此,这样可以更有效地利用程序执行机制。
此外,在当任务的执行被挂起时没有使用程序执行机制的时间周期中,不提供时钟。这可以抑制电功率损耗。
图1中图1(A)表示根据本发明的处理器中多任务执行的实施例的时序图,而图1(B)是表示在传统处理器中正在执行的任务被挂起的实施例的时序图;图2表示处理器中已经执行的任务被挂起的实施例的时序图;图3表示在一实施方式中处理器1000的结构的功能方框图;图4中图4(A)表示任务控制表1810的结构及其内容的实施例,而图4(B)表示任务信息1820的结构及其内容的实施例;图5表示任务控制表1810和任务信息1820之间的对应的实施例;图6表示程序信息1910的结构及其内容的实施例;图7表示上下文信息1930的结构及其内容的实施例;图8表示任务切换处理(第一种方法)的流程图;图9表示下一个任务选择处理(第一种方法)的流程图;图10表示正在执行的任务的执行历史信息1822的转换,其中图10(A)表示其中在正在执行的任务中不发生挂起原因的实施例,而图10(B)表示其中正在执行的任务中发生挂起原因的实施例;图11表示任务切换处理(第二种方法)的流程图;图12表示下一个任务选择处理(第二种方法)的流程图;图13表示在执行任务切换处理(第二种方法)的情况下执行历史信息1822的转换,其中图13(A)表示其中挂起原因发生一次的情况,而图13(B)表示其中挂起原因发生两次的情况;图14表示在执行任务切换处理(第二种方法)的情况下任务控制表1810的实施例;图15表示在执行任务切换处理(第二种方法)的特定情况中下执行历史信息1822的转换;图16表示在执行任务切换处理(第二种方法)的该特定情况下任务控制表1810的实施例;图17表示在没有选择任务的情况下执行任务和执行历史信息1822的转换,其中在该情况下发生其类型和正在执行的任务中发生的挂起原因的类型相同的挂起原因;以及图18表示在发生其类型和已经执行的任务中发生的挂起原因的类型相同的挂起原因的情况下执行任务的转换。
符号说明1000和1010便携式通信终端1100调度控制单元1200程序执行控制单元1300上下文存储单元1400和1500寄存器组1600寄存器切换单元1700程序执行单元1800任务管理信息存储单元1810任务控制表1820任务信息1900程序信息存储单元1910程序信息1930上下文信息2000外部处理器3000外部存储器实施本发明的最佳模式实施方式处理器的运行原理根据本发明的处理器包括两个寄存器组,并且以伪并行的方式执行多个任务。利用图1(A)说明处理器的运行。
图1(A)是处理器中多任务执行的实施例的时序图。
处理器可以在两个寄存器组之间切换并且即使利用两个寄存器组中任何一个以相同的方式执行任务。
“当前寄存器”表示现在正用来执行任务的寄存器。“REG1”和“REG2”是包括在处理器中的寄存器组。在该实施例中,处理器通过在REG1和REG2之间交替地切换来执行任务。
同时,“执行任务”表示使用当前寄存器正在执行的任务。在该实施例中,处理器以任务A、任务B和任务C的顺序循环执行任务。
REG1和REG2分别表示对应其中保存的上下文的任务。
例如,在分配给程序执行机制的时间周期的时间片101中,寄存器REG2被用作当前寄存器来执行任务B。任务B的上下文在从时刻t10至时刻t11的时间周期中被写入(下文中称为“恢复”)到REG2中。
该恢复在时间片100中执行。换句话说,当使用REG1执行任务A时,处理器恢复在正在执行的任务A下一个要执行的任务B的上下文到寄存器REG2,其中REG2不是正在使用的寄存器,而是下一个要使用的寄存器(下文中,这种寄存器称为“备用寄存器”。)。
如上所述,通过下一个要执行的任务的上下文的加速恢复,处理器可以简单通过寄存器之间的切换有效地执行多个任务。换句话说,处理器可以使程序执行机制没有空闲地执行任务。
注意到,在从时刻t10至时刻t11的时间周期中,处理器不仅执行恢复处理还保存保留在寄存器中的上下文到存储器中并选择下一个要执行的任务。
接着,用图1(B)说明在正在执行的任务中发生挂起原因并且从而任务的执行被挂起的情况。
图1(B)是表示在传统处理器中正在执行的任务的执行被挂起的实施例的时序图。
在时间片120中,任务B正在当前寄存器中执行。在时刻t12发生挂起原因(由箭头表示),并且任务B的执行被挂起。
有两种方法来解决这种情况。一种方法,处理器在时间片120剩余的时间周期中不执行什么。然后,当时间片120结束,处理器切换到备用寄存器REG1开始执行任务C。
另一种方法,处理器没有等时间片120结束就执行下一个要执行的任务C。
如果挂起原因发生的时刻t12在时刻t14之后,任务C的上下文已经恢复到备用寄存器REG1。因此,处理器立即切换到REG1来开始执行任务C。
如果,时刻t12早于时刻t14,处理器立即恢复任务C的上下文到备用寄存器REG1并切换到REG1来开始执行如任务C。如果时刻t12在时刻t13和时刻t14之间,处理器在任务C的上下文恢复完成之后开始执行任务C。
后一种方法执行任务比前一种方法更有效。然而,如果时刻t12早于时刻t13之前,处理器使程序执行机制空闲恢复处理所需要的时间周期。
即使在这种情况下,即,正在执行的任务由挂起原因挂起并且下一个要执行任务的上下文还没有恢复到备用寄存器,处理器可以尽可能地避免使其空闲来运行程序执行机制。
利用图2说明处理器运行的概要。
图2表示处理器中已经执行的任务被挂起的实施例的时序图。
如果在时间片131中当使用当前寄存器(REG2)正在执行任务B时,在时刻t22发生挂起原因(由箭头表示),处理器切换到备用寄存器(REG1)并再次使用REG1作为当前寄存器执行任务A。即,处理器使用保留在备用寄存器(REG1)中的上下文。
通过如上所述执行寄存器之间的切换,时间片131中的任务B和时间片132中的任务A连续执行。因此,处理器没有使程序执行机制空闲。
然而,时刻t22需要早于时刻t23,t23是调度下一个要执行的任务恢复到备用寄存器(REG1)以开始的时刻。这是因为如果时刻t22早于恢复开始,在当前正在执行的任务B之前执行的任务A的上下文仍旧保留。
总而言之,如上所述有很多挂起原因在下一个任务恢复到备用寄存器开始之前发生的情况。
这是因为,处理器选择下一个要执行的任务并在任务之间切换之前立即恢复该任务是最优选的。
原因如下。对各任务,分配在任务中要执行的程序,并且该程序不总是可执行的。程序的可执行性的概率随着时间前进而增加。换句话说,在大多情况下,处理器不能执行程序的原因是处理器在等待数据或资源。因此,程序的可执行性的概率随着处理器后面的判断而增加。
换句话说,下一个任务的恢复的开始在一个时间片中是最长的。因此,挂起原因的发生概率在该时间周期中是最高的。
这里,存在循环执行任务的循环被打乱的问题。在该实施例中,因为打乱了循环,存在任务A比其他任务可能优先执行的可能性。
一般来说,已经分配任务的程序在任务中执行。考虑任务的时间片的长度分配程序。换句话说,例如,如果处理器需要以高速执行程序或需要保证执行的时间周期,处理器把程序分配给具有更长时间片的任务。
因此,保持循环是给任务分配程序的前提。
根据本发明的处理器中,任务执行的循环被临时打乱。然而,打乱的循环被快速调整,并且从预先确定的时间宽度看保持一致性。
在该实施例中,从时间片130至时间片135的范围内,任务A、任务B、和任务C分别被执行两次。从时间片130至时间片135的该时间宽度相比程序的整个执行时间周期是非常小的,因此对于程序的执行没有影响。
下面说明根据本发明的处理器和多任务执行的方法。
结构图3表示在一实施方式中处理器1000的结构的功能方框图。
处理器1000包括调度控制单元1100、程序执行控制单元1200、上下文存储单元1300、第一寄存器组1400、第二寄存器组1500、寄存器切换单元1600、程序执行单元1700、任务管理信息存储单元1800、和程序信息存储单元1900。
处理器1000有多个集成电路构成。
图3没有表示通常在处理器中包括的通信功能、中断功能,等等。
第一,调度控制单元1100控制任务的执行顺序。具体的,基于关于存储在下面提到的上下文存储单元1300中的任务的信息,调度控制单元1100选择下一个要执行的任务。此外,调度控制单元1100管理时间,并在分配给各任务的执行时间周期结束之前恢复上下文到寄存器。
程序执行控制单元1200控制程序执行。具体的,根据从正在执行的程序接收到的向外部存储器3000的访问请求和向外部处理器2000的处理请求,程序执行控制单元1200与外部存储器3000和外部处理器2000交换数据。同时,程序执行控制单元1200检测正在执行的程序中发生的挂起原因。此外,程序执行控制单元1200指示寄存器切换单元1600在寄存器组之间进行切换。
上下文存储单元1300存储上下文,该上下文为有关任务执行的控制信息。当多个任务同时执行时,上下文存储单元1300存储各任务的上下文。当任务的一个时间片结束从而该任务的执行被暂时挂起时,从当前寄存器写该上下文。并且然后,当任务的执行重新开始,该上下文被读入备用寄存器。
第一寄存器组1400和第二寄存器组1500是暂存例如指令、地址、要操作的数据、和运行的结果的数据的存储位置从而程序执行单元1700执行处理。此外,根据本发明的寄存器包括处理器执行任务所需要的所有寄存器,例如,其功能受限制的寄存器,例如栈寄存器和程序计数器,以及其功能没有限制的通用寄存器。
第一寄存器组1400基本上和第二寄存器组1500相同。由寄存器切换单元1600选择这两个寄存器组其中之一,并且使用选择的寄存器组执行任务。该选择当前正用于执行任务的寄存器组这里称为当前寄存器。在另一方面,当前没有选择的寄存器组,即,计划下一个选择的寄存器组在这里被称为备用寄存器。
程序执行单元1700使用当前寄存器执行程序。程序执行单元1700是所谓的程序执行机制,并且在一个时刻只能执行单一程序。
下面,任务管理信息存储单元1800存储同时正在执行的多个任务的状态。
此外,程序信息存储单元1900存储表示分配给任务的程序的状态的信息。
在该实施方式中,任务管理信息存储单元1800和程序信息存储单元1900是运行非常快的存储器件。
数据下面用图4至图8说明在根据本发明的处理器中使用的主要数据。
图4(A)表示任务控制表1810的结构及其内容的实施例,而图4(B)表示任务信息1820的结构及其内容的实施例。
任务控制表1810和任务信息1820存储在任务管理信息存储单元1800中。
图4(A)表示的任务控制表1810保留分别表示当前执行的任务、下一个要执行的任务、和之前刚执行的任务的信息条目。
前一任务表示之前刚执行的任务。当前任务表示当前正执行的任务。下一任务表示下一个要执行的任务。
具体地,任务控制表1810存储表示任务信息1820对应的任务的信息条目,例如,索引值、地址等等。
在一个时间片结束的各时刻,存储在任务控制表1810中的任务通过调度控制单元1100改写。任务主要以下面的方式改写。
当正在执行的当前任务的执行结束时,调度控制单元1100设置当前任务为新的前一任务,设置下一任务为新的当前任务,并设置新的当前任务的下一个任务为新的下一任务。
下面,图4(B)表示的任务信息1820由任务ID1821、执行历史信息1822、和程序历史1824构成。
任务ID1821是任务的标识符,并特指该任务。在该实施例中,任务ID1821表示为“T0”等。
此外,任务以在任务信息1820中排列的任务的顺序执行。在该实施例中,具有任务ID“T0”的任务被第一个执行,然后是具有任务ID“T1”的任务、具有任务ID“T2”的任务、以及具有任务ID“T3”的任务被循环执行。
执行历史信息1822是表示各任务的时间片已经被执行的次数。
执行历史信息1822由3比特数据构成。执行历史信息1822的初始值是“000”。每次时间片被执行一次,执行历史信息1822的值加上“1”。该值如下增加“001”、“010”、“100”、和“000”。
该执行历史信息1822通过调度控制单元1100基于分配给各任务的程序的性质、其执行的状态,等建立。因此,执行历史信息1822不总显示相同的值。此外,在该实施例中为了方便说明了四个任务。然而,当然任务的数目不局限于四个。
程序历史1824表示分配给各任务的程序。例如,分配给具有任务ID“T0”的任务的程序用“P0”表示。在该实施方式中,该任务和该程序彼此一一对应来说明。然而,下面的也可以采用有多个程序作为分配给任务的候选程序,并且在候选程序当中选择最合适的程序并根据情况分配给任务。
图5表示任务控制表1810和任务信息1820之间的对应的实施例。
在该实施例中,保存在任务控制表1810中的前一任务对应具有在任务信息1820保存的任务ID1821为“T2”的任务。同样的方法,当前任务对应具有任务ID1821为“T0”的任务,以及下一任务对应具有任务ID1821为“T1”的任务。
这表示当前正在执行的任务是任务“T0”,之前刚执行的任务是任务“T2”,并且正在执行的任务“T0”之后下一个要被执行的任务是任务“T1”。调度控制单元1100利用该指针以选择下一个要执行的任务。同时,每次要执行的任务改变时,调度控制单元1100改写该指针。
下面,图6表示程序信息1910的结构及其内容的实施例。
程序信息1910存储在程序存储单元1900中。
程序信息1910由程序ID1911、挂起原因信息1912、解决时间信息1913、和程序状态信息1914构成。
程序ID1911是程序的识别信息。由程序ID1911表示的值是由任务信息1820的程序历史1824表示的值。
挂起原因信息1912表示当具有程序ID1911的程序正在执行时可能发生的挂起原因。
挂起原因表示不可避免地引起正在执行的任务的执行被挂起的原因。在该实施方式中,挂起原因包括三种原因一种原因“高速缓存丢失”;一种原因“等待DMA”;以及一种原因“等待外部处理”。
“高速缓存丢失”的原因表示虽然可以访问高速缓存但找不到所需要的数据并且需要时间周期从硬盘等读取数据的情况。
“等待DMA”的原因表示发生用于在存储器和各设备之间交换数据的时间周期的情况。注意到DMA(直接存储器访问)表示用于在存储器和各设备之间不经过为程序执行机制的程序执行单元1700交换数据的方法。
“等待外部处理”的原因表示当在程序正在执行时发生需要由外部处理器2000处理的数据并且该处理器请求外部处理器2000执行处理并等待要执行的处理时的情况,或者当发生上述数据时由外部处理器执行的处理的完成晚了并且数据被挂起并且因此处理器等待来自外部处理器的数据的情况。
下面,解决时间信息1913表示解决挂起原因所需要的预期时间周期。该解决时间信息1913表示要解决由挂起原因信息1912表示为“是”的挂起原因所需要的时间周期。该解决时间信息1913被预先建立。
例如,具有程序ID1911为“P1”的程序具有当程序正在执行时可能发生挂起原因“缓存丢失”的可能性。该挂起原因期望在“100”时钟内被解决。
程序状态信息1914表示程序的状态,例如程序是否是可执行的。在该实施方式中,该状态包括三种状态状态“执行中”;状态“等待执行”;和状态“挂起中”。
状态“执行中”表示程序正被执行的状态。状态“等待执行”表示执行程序的准备已经完成并且该程序等待轮到其执行的状态。同时,状态“挂起中”表示执行该程序的准备还没有完成的状态。
图7表示上下文信息1930的结构及其内容的实施例。
上下文信息1930存储在程序信息存储单元1900中。
各程序有一个上下文的存储区域,并且该上下文存储在对应该程序的存储区域中。当程序的执行被挂起时,当前寄存器组的内容被写在该程序的上下文区域。同时,当该程序被再次执行时,读取存储在要被执行的程序的上下文区域中的上下文,并且写入备用寄存器。这些处理通过调度控制单元1100执行。
以下用图8至图16说明处理器100的上述运行。
这里,说明了切换到要执行的任务的处理,即,选择下一个要执行的任务的处理。执行任务的其他处理与在通用处理器中的处理(参见公开号为No.2003-271399的日本专利申请)相同。
该流程图表示用于解决下述两种情况下的任务切换处理,该两种情况包括在使用当前寄存器正在执行的任务中发生挂起原因的情况,以及按照调度正在执行任务的情况。
在该实施方式中,说明了两种用于任务切换处理的方法。
在两种方法中,都使用任务信息1820的执行历史信息1822执行任务切换处理(参见图4(B))。
首先,说明第一种方法。
第一种方法在第一种方法中,任务信息1820的执行历史信息1822用作执行程序的时间片的计数器。
图8是表示任务切换处理(第一种方法)的流程图。
利用图10说明图8。图10表示当任务正在执行时执行历史信息1822的转换。在图10中,显示了有三个任务执行的实施例。
图10(A)表示其中在正在执行的任务中不发生挂起原因的实施例。
任务是以“T0”、“T1”、和“T2”的顺序循环执行。例如,首先,任务的各条执行历史信息1822分别显示“000”。在时间片200中,执行任务“T0”,即,程序“P0”,给由任务“T0”的执行历史信息1822显示的值加上“1”,并且从而由执行历史信息1822显示的值是“001”。在图10中,为了方便,只在发生变化时说明执行历史信息1822。
然后,各任务每按顺序执行一次,给由对应该任务的执行历史信息1822显示的值加上“1”。
图10(B)表示其中正在执行的任务中发生挂起原因的实施例。
用图10(B)说明运行。同时分配给任务的程序等待执行。
首先,在时间片210中,程序执行单元1700用当前寄存器(这里,使用第一寄存器组1400)执行分配给任务“T1”的程序“P1”。
程序“P1”通过程序执行控制单元1200访问外部存储器3000以读取数据。然而,在程序“P1”中发生挂起原因“高速缓存丢失”,并且外部存储器3000通知程序执行控制单元1200发生挂起原因。
一旦接收到发生挂起原因的通知,程序执行控制单元1200请求调度控制单元1100执行任务切换处理。
一旦接收到任务切换处理的请求,调度控制单元1100判断该请求是对挂起原因发生(步骤S10是)情况的请求。调度控制单元1100判断下一个任务“T2”的上下文是否已经恢复到备用寄存器“第二寄存器组”(步骤S11)。
调度控制单元1100可以判断该请求是对由于调度控制单元1100执行时间管理而发生挂起原因的情况的请求。如果在该程序正在执行的时间片结束之前收到该请求,调度控制单元1100判断该请求是由于挂起原因发生的请求。同时,调度控制单元1100执行恢复处理,并且因此可以判断恢复处理是否是当前正在执行的。
注意,关于在时间片210任务“T1”中挂起原因发生的时刻是下一个任务的恢复处理还没有开始的时刻(下文中,如果没有特别说明与上述时刻相同)。
因此,调度控制单元1100判断下一任务“T2”的上下文还没有恢复到备用寄存器“第二寄存器组”(步骤S11否)并且恢复处理还没有开始(步骤S12是)。这样,调度控制单元1100继续用于执行保留在备用寄存器“第二寄存器组”中的上下文的处理,即,任务“T0”。
调度控制单元1100给由分配给在备用寄存器中准备的任务“T0”的程序“P0”的执行历史信息1822显示的值加上“1”,并且由执行历史信息1822显示的值是“011”(步骤S14)。然后,调度控制单元1100通知程序执行控制单元1200完成任务切换处理。
一旦接收到完成任务切换处理的通知,为了用备用寄存器“第二寄存器组”执行任务,程序执行控制单元1200通知寄存器切换单元1600切换备用寄存器“第二寄存器组”到当前寄存器。然后,程序执行控制单元1200通知程序执行单元1700该开始执行。然后,开始执行任务“T0”(步骤S15)。
这样,任务“T0”在时间片211中执行。
此外,如果下一任务“T2”的上下文已经存储到备用寄存器“第二寄存器组”(步骤S11是),调度控制单元1100继续用于执行已经恢复到备用寄存器“第二寄存器组”的上下文的处理,即,任务“T2”。
同时,如果下一任务“T2”的上下文还没有恢复到备用寄存器“第二寄存器组”(步骤S11否)并且当前正在恢复(步骤S12否),调度控制单元1100等待完成下一任务“T2”的上下文的恢复(步骤S13),并且继续用于执行已经恢复到备用寄存器“第二寄存器组”的上下文的处理,即,下一任务“T2”。
下面,说明在时间片212中执行选择任务的方法。
在时间片211结束之前,调度控制单元1100执行任务切换处理。
由于任务切换处理是对于时间片用完(步骤S10否)的情况的切换处理,调度控制单元1100执行用于选择下一个要执行的任务的处理(步骤S16)。
用图9详细说明下一个任务的选择处理。
图9是表示下一个任务选择处理(第一种方法)的流程图。
当选择下一个要执行的任务时,调度控制单元1100搜索任务信息1820的执行历史信息1822来选择具有由执行历史信息1822显示的最小值的任务(步骤S20)。
如果找到的任务的数目是一个(步骤S21否),调度控制单元1100确定该找到的任务作为下一个要执行的任务(步骤S23)。
此外,如果找到的任务有多个(步骤S21是),调度控制单元1100确定在找到的任务中具有最早执行顺序的任务为下一个要执行的任务(步骤S22)。
在该实施例中,在时间片211中,调度控制单元1100选择要在时间片212中执行的任务。因此,在步骤S20中搜索到任务“T2”。
同时,搜索到的任务的数目是一个,因此,下一个要执行的任务是任务“T2”。
调度控制单元1100选择下一个任务“T2”,并且将保留在备用寄存器“第一寄存器组”中的上下文,即,在任务“T0”中执行的程序“P0”的上下文写入存储在任务管理信息存储单元1800中的上下文信息1930的程序“P0”的上下文区域上,即,保存该上下文。然后,调度控制单元1100从上下文信息1930读取下一个要执行的任务“T2”中要执行的程序“P2”的上下文到备用寄存器“第一寄存器组”,即,恢复上下文(步骤S17)。
然后,调度控制单元1100执行用于使用保存在备用寄存器“第一寄存器组”中的上下文执行任务“T2”的处理(步骤S14和步骤S15)。
这样,任务“T2”在时间片212中执行。
如果这之后没有发生挂起原因,当任务“T0”在时间片213中执行,任务“T0”在时间片211中的加速执行被抵消,并且确保任务之间的执行时间周期。
第二种方法下面,说明任务切换处理的第二种方法。
在第一种方法中,调度控制单元1100使用任务信息1820的执行历史信息1822作为任务执行的时间片的计数器。相比第一种方法,在第二种方法中,执行历史信息1822被用作预先没有预料到地执行任务的时间片的计数器。
图11是表示任务切换处理的流程图(第二种方法)。
利用图13描述图11,图13表示当任务正在执行时执行历史信息1822的转换,其中图13(A)表示其中挂起原因发生一次的实施例,而图13(B)表示挂起原因连续发生。图13(B)中,为了方便采用四个任务说明该转换。
描述主要集中在图11表示的任务切换处理(第二种方法)与图8所示的任务切换处理(第一种方法)的不同之处。
图11中步骤10至步骤12中的处理和图8中的相同。
当在时间片300中任务“T1”正在执行时,程序执行控制单元1200发现发生了挂起原因,并且请求调度控制单元1100执行任务切换处理。
一旦接收到该请求,调度控制单元1100判断该请求是针对发生挂起原因发生的情况的请求(步骤S10是),并且继续用于用保留在备用寄存器“第二寄存器组”中的前一执行任务“T0”的上下文来执行任务的处理(步骤11是和步骤12是)。
步骤43中的处理是特定情况,并且因此在后面用图15和图16说明。正常情况下,步骤43的处理分支至“否”。
调度控制单元1100给由分配给在备用寄存器中准备的任务“T0”的程序“P0”的执行历史信息1822显示的值加上“1”,并且因此执行历史信息1822是“01”(步骤S41)(参见图13(A))。然后,调度控制单元1100通知程序执行控制单元1200任务切换处理的完成。
一旦接收到该通知,程序执行控制单元1200切换到另一寄存器以执行程序(步骤S15)。
与图9所示的任务切换处理(第一种方法)不同,在任务切换处理(第二种方法)中,只有用保留在备用寄存器中之前刚执行的任务的上下文执行任务,该程序执行控制单元1200给由执行历史信息1822显示的值加上“1”。
按照该差别,在任务切换处理(第二种方法)中的下一任务选择处理在正常时间片完成的情况下不同于任务切换处理(第一种方法)(步骤S42)。
利用图12至图14说明下一任务选择处理(第二种方法)。
首先,利用图13描述图12。
图12是表示下一任务选择处理(第二种方法)的流程图。图13表示其中执行下一任务选择处理(第二种方法)的情况下执行历史信息1822的转换。
当选择下一个要执行的任务时,调度控制单元1100搜索由任务控制表1810中的下一任务显示的任务的执行历史信息1822。如果由执行历史信息1822显示的值是零(0x00),即,如果该任务以前没有执行至少一次(步骤S50否),该调度控制单元1100确定下一任务为下一个要执行的任务(步骤S53)。
如果由执行历史信息1822显示的值大于零(0x00),即,如果该任务以前已经至少执行一次(步骤S50是),调度控制单元1100从由该任务的执行历史信息1822显示的值减去“1”(步骤S51)。换句话说,调度控制单元1100执行处理从额外任务执行的数目预先减去一以跳过一次任务执行。
然后,调度控制单元1100更新任务控制表1810的内容因为下一任务被认为已经执行。即,调度控制单元1100确定现在的下一任务的下一个任务作为当前任务,当前任务的下一个任务作为下一任务,并且现在的当前任务作为前一任务(步骤S52)。
然后调度控制单元1100重复从步骤50至步骤52的处理。如果出现由执行历史信息1822显示的值为零的任务,该调度控制单元1100确定该任务为下一个要执行的任务(步骤S53)。
在该实施例中,在时间片302中正在执行的任务“T2”之后下一个要执行的任务是任务“T0”。然而,由任务“T0”的执行历史信息1822显示的值是“01”,调度控制单元1100从由执行历史信息1822显示的值减去“1”从而是“00”,并且跳过任务“T0”的执行。因此,在时间片303中,没有执行任务“T0”而是执行任务“T1”。
利用图13和图14说明在执行任务切换处理(第二种方法)的情况下执行历史信息1822和任务控制表1810的转换。图14表示任务切换处理(第二种方法)中任务控制表1810的实施例。
图13(A)中,时间片300中正在执行的任务“T1”的执行被挂起,并且之前刚执行的任务“T0”在时间片301执行。
图14(1)表示其中任务“T1”正在执行的实施例。然后,如果任务“T1”的执行被挂起而任务“T0”被执行,前一任务用当前任务替换,并且这在图14(2)中表示。
这时,给由任务“T0”的执行历史信息1822显示的值加上“1”从而成为“01” 。
然后,在时间片302,下一任务“T2”变成当前任务,并被执行。这时的任务控制表1810在图14(3)中表示。
当任务“T2”的执行完成,调度控制单元1100执行跳过处理,即,从由任务“T0”的执行历史信息1822显示的值减去“1”,并且切换当前任务到任务“T0”的下一任务“T1”。这是因为由应该为下一任务的下一任务“T0”的执行历史信息1822显示的值不是零(参见图12中的步骤50)。这时的任务控制表1810在图14(4)中表示。
在时间片303中,正在执行任务“T1”并且由任务“T0”的执行历史信息1822显示的值是“00”。
图13(B)表示任务执行发生多次挂起的实施例。在这种情况下,为了方便,并行执行的任务的数目是四个。
由于在时间片310中正在执行的任务“T1”的执行的挂起,任务“T0”预先执行并且由任务“T0”的执行历史信息1822显示的值是“01”。同时,由于时间片311中正在执行的任务“T2”的执行的挂起,任务“T0”再次预先执行并且由任务“T0”的执行历史信息1822显示的值是“10”。
然后,随着任务执行数目的增加,由任务“T0”的执行历史信息1822显示的值逐步回到“00”。即,当任务“T0”的执行历史信息1822显示的值变成“00”时,任务执行的时间片的数目回到调度的数目。
下面,用图15和图16说明图11所示的步骤S43。
步骤S43是在任务执行的挂起连续发生两次的情况下执行的处理,即,前一任务连续执行两次的情况。图13(B)所示的实施例与图15所示的相同除了在图15所示的实施例中以伪并行方式执行的任务的数目是三。这里说明的方法是用于解决根据以伪并行方式执行的任务的数目、挂起计数的数目等可能发生的特定情况。
图15表示执行任务切换处理(第二种方法)的情况下执行历史信息1822的转换。图16表示执行任务切换处理(第二种方法)的情况下任务控制表1810的实施例。
在图15中,在时间片400正在执行的任务“T1”的执行被挂起,并且在时间片401之前刚执行的任务“T0”被执行。
图16(1)表示其中任务“T1”正在执行的实施例。如果任务“T1”的执行被挂起并且任务“T0”被执行,调度控制单元1100用当前任务替换前一任务。这由图16(2)表示。
这时,给由任务“T0”的执行历史信息1822显示的值加上“1”,并且因此由任务“T0”的执行历史信息1822显示的值为“01”。
然后,在时间片402,下一任务“T2”代替当前任务并被执行。这时的任务控制表1810在图16(3)中表示。
当任务“T2”执行时发生挂起原因。调度控制单元1100应该执行前一任务“T0”作为当前任务。然而,如果这时在任务“T2”中没有发生挂起原因,任务“T2”下一个要执行的任务,即,下一任务,也是任务“T0”。即,由于挂起原因的发生要执行的任务和按照正常次序下一个要执行的任务是相同的任务。
因此,在这种情况下,没有改变执行历史信息1822,与正常处理以相同的方式执行处理。该判断处理如图11中步骤S43所示。如果由于挂起原因的发生要执行的任务,即,备用寄存器中的任务,和按照正常次序要执行的任务是同一任务(步骤S43是),调度控制单元1100通过切换备用寄存器到当前寄存器来执行任务。
虽然任务“T0”在时间片403中执行,但是由任务“T0”的执行历史信息1822显示的值仍旧是“01”。这时的任务控制表1810如图16(4)所示。
第一修改实施例概要在第一修改实施例中,如果挂起原因发生,为了用保留在备用寄存器中的上下文执行任务,可以防止与正在发生的挂起原因相同的挂起原因的发生。这是因为,解决挂起原因的能力有限。因此,如果相同的挂起原因连续发生,挂起原因的解决可能需要比预期更长的时间。
运行用图17所示的转换图表和图6所示的程序信息1910说明其中相同挂起原因没有连续发生的任务的实施例。
图17表示其中当任务正在执行时发生挂起原因的情况下执行任务和执行历史信息1822的转换。
在第一修改实施例中,如果挂起原因发生,调度控制单元1100改写由分配给正在执行的任务的程序的程序状态信息1914显示的状态为“挂起中”。此外,调度控制单元1100在内部存储器中(未示出)存储挂起原因,并且只留下最新的挂起原因。如果挂起原因解决,调度控制单元1100改写由程序状态信息1914显示的状态为“等待执行”。
此外,参照对应分配给任务的程序的程序信息1910,调度控制单元1100通过选择由程序状态信息1914显示的状态时“等待执行”并且没有发生与存储在挂起原因信息1912中挂起原因相同的挂起原因的程序作为下一个要执行的程序,防止挂起原因的连续发生。
说明以上情况的特定实施例。
当任务“T0”在时间片600中正在执行时,发生挂起原因。并且任务“T0”的执行被挂起。由程序“P0”的程序状态信息1914显示的状态称为“挂起中”,并且存储该挂起原因。该实施例中的挂起原因时“高速缓存丢失”。
然后,当任务“T1”在时间片601中执行,挂起原因发生。该挂起原因是“高速缓存丢失”。
这里,虽然调度控制单元1100试图选择之前刚执行的任务“T0”,但是具有程序ID“P0”的程序的程序状态信息1914显示的状态是“挂起中”。因此,调度控制单元1100尝试选择下一任务“T2”。
虽然由分配给任务“T2”的程序“P2”的程序状态信息1914显示的状态是“等待执行”,但是挂起原因信息1912的挂起原因“高速缓存丢失”显示为“是”。因此,调度控制单元1100不选择任务“T2”,并尝试选择任务“T3”。
关于任务“T3”,由对应程序“P3”的程序状态信息1914显示的状态是“等待执行”,并且挂起原因信息1912的挂起原因“高速缓存丢失”显示为“否”。因此,调度控制单元1100选择任务“T3”作为下一个要执行的任务。
在时间片602中,任务“T3”预先执行。这时,由于调度控制单元1100判断在要执行的程序中是否发生相同的挂起原因,发生某些性能恶化690。然而,这确保相同的挂起原因将不会发生。换句话说,由于在这里执行任务“T3”,所以可以避免如果执行任务“T2”在任务“T1”中发生的挂起原因之后将重复发生的挂起原因。
然后,分配给在时间片602执行的任务“T3”的执行时间周期结束,并且任务“T2”在时间片603执行。正在执行的任务“T2”中发生挂起原因,并且因此任务“T2”的执行被挂起。时间片603的下一时间片604中,执行之前刚执行的任务“T3”。
第二修改实施例概要在第二修改实施例中,如果挂起原因发生,调度控制单元1100根据解决挂起原因需要的时间周期判断是否在任务之间进行切换。
在第二修改实施例中,说明了两种情况。
在第一种情况中,其中挂起原因在下一任务的执行开始之前解决的情况下,不执行任务直到发生的挂起原因被解决。
在第二种情况下,其中预期挂起原因的解决需要时间周期,如果相同挂起原因接连重复发生,不提供时钟直到第一个发生的挂起原因被解决,以减少电能的损耗。
以下是两种情况中公共的。即,如果当任务正在执行时发生挂起原因,之前刚执行的任务无条件地不执行。除此之外,任务的执行可以在预先确定的条件下挂起。
运行用图18所示的转换图表和图6所示的程序信息1910说明发生的挂起原因等待解决的实施例。
图18表示其中挂起原因在已经执行的任务中发生的情况下执行任务的转换。
首先,说明第一种情况。
如果在时间片700中正在执行的任务“T1”中发生挂起原因,调度控制单元1100查找由分配给任务“T1”的程序“P1”的解决时间信息1913表示的时间周期。在该实施例中,如果挂起原因是“高速缓存丢失”,为“高速缓存丢失”的解决时间周期是“100”。
如果调度控制单元1100判断解决发生的挂起原因的时刻早于通过寄存器之间的切换开始执行下一任务的时刻,则调度控制单元1100挂起该任务的执行直到该挂起原因被解决。注意解决发生的挂起原因的时刻是从发生挂起原因开始经过解决时间周期之后的时刻。
图18中,调度控制单元1100参照在时间片700执行的任务“T1”中发生的挂起原因判断解决挂起原因的时刻在下一任务开始执行的时刻之前,并且因此该任务的执行被挂起。
接着,说明第二种情况。
在时间片701执行的任务“T2”中发生第一挂起原因“高速缓存丢失”。这时,调度控制单元1100执行在时间片701之前刚执行的任务“T1”的下一任务。
同时,调度控制单元1100查找程序信息1910的解决时间信息1913,并且获得解决第一挂起原因所需要的时间周期。如果获得的时间周期不少于预先确定的时间周期,则调度控制单元1100屏蔽该调度从而避免处理由于相同调度原因的调度原因,即,第二个“高速缓存丢失”。即,虽然调度控制单元1100从程序执行控制单元1200接收到发生相同挂起原因的通知,但是调度控制单元1100不执行之前刚执行的其上下文保留在备用寄存器中的任务。
在时间片702执行任务“T1”,并且在时间片703执行任务“T0”。如果当正在执行任务“T0”时发生第二“高速缓存丢失”,则调度控制单元1100停止向除了调度控制单元1100之外的单元提供时钟直到第一“高速缓存丢失”被解决,因为该调度被屏蔽了。
然后,如果第一“高速缓存丢失”解决了,则调度控制单元1100开始提供时钟,并且由于第二“高速缓存丢失”执行任务切换处理。在任务切换处理中,由任务“T1”的执行历史信息1822表示的值更新为“00”。
在下一个时间片704中,调度控制单元1100重新开始执行在任务切换处理中选择的任务“T2”。第二“高速缓存丢失”在此时还没有解决。因此,调度控制单元1100屏蔽该调度从而避免处理“高速缓存丢失”即使其再次发生。
然而,即使第一“高速缓存丢失”经过由第一“高速缓存丢失”的解决时间信息1913显示的时间周期结束之后还没有解决,在时间周期结束之后执行任务切换处理。在该任务切换处理中,由任务“T1”的执行历史信息1822表示的值更新为“10”。
在下一个时间片704中,调度控制单元1100重新开始执行在任务切换处理中选择的任务“T2”。第二“高速缓存丢失”在此时还没有解决。因此,调度控制单元1100屏蔽该调度从而避免处理“高速缓存丢失”即使其再次发生。
第一和第二修改实施例中的这些处理在下一任务选择处理中附加执行(图9和图12)。
补充说明虽然已经基于实施方式说明了根据本发明的处理器,但是该处理器可以部分地修改并且当然本发明不局限于该实施方式。也可以使用下面的实施方式。
(1)在实施方式中,以伪并行方式执行的任务的数目是三个或四个。然而,任务的数目可以大于四。
(2)在实施方式中,提供给除调度控制单元1100之外的单元的时钟被停止。然而,至其它单元的提供也可以被停止。例如,提供给除了包括在调度控制单元1100中用于控制时钟的一部分之外的单元的时钟可以被停止。
(3)在该实施方式中,采用两个寄存器组。然而,可以采用不少于三个寄存器组。
在这种情况下,如果正在执行的任务的执行被挂起,调度控制单元1100用保留在除了用于执行其执行被挂起的任务的寄存器组之外的寄存器组中的上下文执行任务。换句话说,在该实施方式中,如果之前执行的任务的上下文保留在其为下一个要用的寄存器组的备用寄存器中,用保留的上下文执行任务。然而,在多个寄存器组用于执行任务的情况下,如果上下文保留在之前执行的寄存器组中,用这些寄存器组之一执行任务(参见图8,等等。)。
用图2说明了一特定实施例。在该实施例中,采用了两个寄存器组REG1和REG2。然而,假定还使用REG3的情况下也可以说明该实施例。
在时间片131中,当用REG2正在执行任务B时,任务C没有恢复到REG1而是REG3并且准备任务B的下一个任务C的执行。任务A的上下文保留在REG1中。
在这种情况下,如果,当任务B正在执行时,在早于任务C的恢复的时刻22,挂起原因发生并且因此任务B的执行被挂起,则可以执行其上下文保留在REG1的任务A。任务C按照调度恢复到REG3。
然而,如果调度控制单元1100尝试恢复任务C不是到REG3而是REG1,则调度控制单元1100不恢复任务C并执行其上下文保留在REG1的任务A。
工业应用在具有单一程序执行机制的处理器中采用循环执行多个任务的多个寄存器,当正在执行的任务意外挂起的情况下,本发明对继续处理特别有用。
权利要求
1.一种根据分配给各任务的执行时间周期循环执行多个任务的处理器,所述处理器包括存储单元,用于存储分别对应所述任务的执行控制信息条目;多个寄存器组;执行单元,用于顺序采用寄存器组之一以基于保留在正在使用的寄存器组中的执行控制信息执行任务;选择单元,用于在所述任务中选择下一个要执行的任务;恢复单元,用于当任务其中之一正在执行分配给其的一个执行时间周期时,将对应选择的任务的一条执行控制信息恢复到除了正在使用的寄存器组之外的寄存器组其中之一内;检测单元,用于检测所述正在执行的任务其中之一的挂起原因;以及控制单元,用于(1)如果在恢复开始之前检测到挂起原因,使执行单元挂起执行并使用除了已经用于执行的寄存器组之外的寄存器组其中之一执行所述任务其中之一,以及(2)如果下一个要使用的寄存器组是其中恢复将要开始的寄存器组,使恢复单元取消恢复。
2.根据权利要求1所述的处理器,其特征在于,所述存储单元还存储表示直到解决在正在执行各任务时发生的挂起原因的时间周期的时间信息条目,并且只有在恢复完成之前检测到挂起原因并且控制单元基于对应的时间信息条目判断挂起原因在恢复完成之后被解决,控制单元使执行单元挂起该执行并且使用除了已经用于执行的寄存器组之外的寄存器组之一执行所述任务其中之一。
3.根据权利要求1所述的处理器,其特征在于,存储单元还存储各关于在各任务执行时可能发生的挂起原因的信息条目,检测单元检测多种类型的挂起原因,如果控制单元使执行单元基于检测到的挂起原因挂起所述任务其中之一的执行,选择单元参照有关挂起原因的存储信号的相应条目选择所述任务中不会发生与检测到的挂起原因相同类型的挂起原因的另一个任务。
4.根据权利要求1所述的处理器,其特征在于,还包括解决检测单元,用于检测挂起原因的解决,其中检测单元检测多种类型的挂起原因,并且如果(1)已经执行的任务的执行通过检测到的挂起原因被挂起之后,所述任务中另一任务正在执行,以及(2)如果在检测到挂起原因的解决之前检测到与检测到的挂起原因相同类型的另一个挂起原因,控制单元可以使执行单元挂起所述任务中所述另一任务的执行并且不执行任务直到检测到所述解决。
全文摘要
在包括多个寄存器组的处理器中,当使用寄存器组之一执行任务,下一个要执行的任务的上下文被恢复到另一寄存器组。如果当前正在执行的任务的执行在恢复开始之前被挂起,则通过使用其中保留之前执行的任务的上下文的寄存器组并执行该任务以继续任务执行。
文档编号G06F9/46GK101027642SQ200580029708
公开日2007年8月29日 申请日期2005年6月1日 优先权日2004年9月17日
发明者蔵田和司 申请人:松下电器产业株式会社