专利名称:执行处理器语境切换和重调度的系统和方法
技术领域:
本发明针对一种计算机处理器,更具体的说是针对处理器的语境切换和重调度。
背景技术:
一种计算机处理器可以执行存储在计算机存储器中的各种语境(程序),其中每个程序都由多条指令组成而每条指令存储在存储器的特定位置上。这些程序使处理器能执行各种任务,如在蜂窝电话中向显示设备输出数据、维护与蜂窝基站的无线链接、或向蜂窝电话用户提供计算器特性。处理器执行程序是通过从存储器中顺序检索对应该程序的指令,并一次一条地处理这些指令。
处理器在处理这些指令时会使用处理器中存在的特定寄存器(即累加器寄存器、变址寄存器)把值置入这些特定寄存器中,并对这些值进行逻辑和算术运算或者以其他方式处理这些值。程序计数寄存器指示了正由处理器处理的当前指令所在存储器位置,并且以刚执行指令的长度字节数增加从而指向将被处理的下一条指令。
尽管各种程序会驻留在存储器中,但并非所有程序在某一给定时刻都需要处理器资源,因为它们可能已经完成了任务正等待处理新的输入。这样的程序被称为处于“非活动态”。其他有事可做的程序被称为处于“活动态”。某些活动程序被称为处于“活动中的挂起态”,其中它们有事可做却在某一给定时刻由于需要等待诸如它们所调用的慢速I/O操作完成而被挂起。活动非挂起程序的优先级确定了在某一给定时刻此程序是不是正被实际执行。
通常,每个程序都在计算机存储器中分配了一个位置,其中该存储位置的状态位指示了此程序是处于活动态(存在“1”)还是非活动态(存在“0”)。当处理器完成了一个程序或者把优先级较高的程序置为活动态时,就会终止当前程序的执行,然后执行具有最高优先级活动态的程序。为了实现这种操作,处理器必须执行用于完成“重调度”的指令。这种重调度操作包含了软件扫描,即按照优先级降序依次连续检测计算机存储器中为每个程序所存的活动标识。所遇到的首个“1”表明该活动程序具有最高优先级并且成为处理器将要执行的当前程序。但是,重调度操作消耗大量微处理器指令来执行每次程序切换,这降低了处理器的效率。此外,由于执行一次重调度需要大量指令,因此每次程序切换消耗了大量电池电量。
本发明旨在克服上述一个或多个问题。
发明概要一方面,本发明提供了一种在多个程序间切换计算机资源的系统,它包括一种处理器以执行计算机程序。这种系统还包括一个耦合到处理器上的寄存器组集合,用于存储多个程序的信息,其中每个寄存器组包括对应该多个程序的多个程序信息寄存器,而寄存器组集合具有一种选择输入用于选择处理器所要执行的当前程序。一种状态寄存器被耦合到处理器,用于以优先级顺序来存储对应每个程序的状态位,其中每个状态位具有一个状态位地址,而且指示了对应程序的状态是活动态或者非活动态之一。一种程序确定逻辑电路被耦合到状态寄存器,用于确定最高优先级活动程序的状态位地址,而且程序确定逻辑电路被耦合到寄存器组集合,用于把最高优先级活动程序的状态位地址提供给选择输入,在这里最高优先级活动程序被选为当前程序。
在一种优选形式中,此系统的程序确定逻辑电路包括一个多输入或门和双向选择器开关的网络,用于确定最高优先级活动程序的状态位地址,同时一种程序地址寄存器被耦合到此网络上用于收集最高优先级活动程序的状态位地址,而且此程序地址寄存器还被耦合到选择输入用于向其提供最高优先级活动程序的状态位地址。
在一种优选形式中,此系统还包括耦合到处理器和状态寄存器的设置/重置逻辑,用于通过改变对应多个程序之一的状态位来改变该程序的状态。
在另一种优选形式中,此系统还包括一种耦合到处理器和状态寄存器的优先级表,它包括多个对应各程序信息寄存器的优先级寄存器,用于存储多个程序的优先级。一种重映射表被耦合到程序确定逻辑电路、寄存器组集合以及优先级表,其中重映射表是优先级表的反转。
在另一种优选形式中,一种可选的优先级表被耦合到处理器和状态寄存器,它包括多个对应程序信息寄存器的可选优先级寄存器,用于在处理器执行当前程序时存储多个程序的优先级。一种可选的重映射表被耦合到程序确定逻辑电路、寄存器组集合以及可选优先级表,其中可选重映射表是可选优先级表的反转。一种选择器被耦合到优先级表、可选优先级表、重映射表、可选重映射表以及处理器上,用于选择用哪个优先级表和可选优先级表以及哪个重映射表和可选重映射表来选择向选择输入发送哪个状态位地址。
在另一种优选形式中,计算机是移动蜂窝电话的组件用于控制蜂窝电话的操作。
另一方面,本发明提供了一种在多个程序间切换计算机资源的方法,其中计算机包括一个用于执行程序的处理器,一个寄存器组的集合用于存储对应该多个程序的多个程序信息寄存器,并具有一种用于选择处理器所要执行的当前程序的选择输入,此方法包括以优先级顺序把对应每个程序的状态位存储到状态寄存器中,并把该状态位从状态寄存器传送到程序确定逻辑电路,其中每个状态位都具有一个状态位地址而且指示了对应程序的状态是活动态或者非活动态之一。在程序确定逻辑电路中确定了指示活动态的最高优先级状态位所在状态位地址。此状态位地址被传送到寄存器组集合的选择输入,用于选择当前程序。在一种优选形式中,确定最高优先级状态位的步骤包括确定在状态寄存器中优先级较高的一半中是否有其中一个状态位指示了活动态,其中如果有一个状态位指示了活动态,则选择状态寄存器状态位中优先级较高的一半而且把“1”或“0”记录到程序地址寄存器中最高有效位置(MSL)。但是,如果没有一个状态位指示了活动态,则选择状态寄存器状态位中优先级较低的一半并把“1”或“0”中另外的一个记录在程序地址寄存器的MSL中。这确定了所选状态位集合中优先级较高的一半中是否有其中一个状态位指示了活动态,其中如果所选状态位中有一个指示了活动态,则选择所选状态位中优先级较高的一半而且把“1”或“0”记录到程序地址寄存器的下一MSL中。但是,如果所选状态位没有一个指示了活动态,则选择所选状态位中优先级较低的一半而且把“1”或“0”中另外的一个记录到程序地址寄存器的下一MSL中。此过程一直重复到所选的状态位集合包含两个状态位,其中所选的状态位集合中最高有效位(MSB)被记录成程序地址寄存器中最低有效位(LSB)。如果状态位地址“0”被指定用作最高优先级,则在把LSB记录到程序地址寄存器中以产生最高优先级活动程序的状态位地址之后,对状态位地址寄存器中的值求补。
在另一优选形式中,在没有状态位指示活动态时计算机被置成低功率运行模式。
在又一优选形式中,改变多个程序之一的状态是通过改变其对应的状态位。改变状态位包括确定对应这个程序的状态位所在的状态位地址,并且把所选的值置入所确定的状态位地址。如果这个程序想要的状态是活动态,则所选的值就是“1”或“0”。但是,如果这个程序想要的状态是非活动态,则所选的值是“1”或“0”中另外的一个。
在又一优选形式中,可以改变状态位的优先级顺序。计算机还包括一种包含多个对应各程序信息寄存器的优先级寄存器的优先级表,其中改变状态位优先级顺序的步骤包括接收多个程序之一的改动优先级。为优先级寄存器确定一个优先级寄存器地址,该优先级寄存器地址对应这个程序,而这个改动的优先级就被存在优先级寄存器地址中。计算机还包括一种包含对应各优先级寄存器的多个重映射寄存器的重映射表,其中为重映射表确定一个重映射表地址,该重映射表地址对应该改动优先级,而这个程序的程序地址就被存在重映射表地址中。
在另一优选形式中,计算机用在蜂窝电话中,而把状态位地址传送到选择输入的步骤中选择了蜂窝电话处理器所要执行的当前程序。
附图简述
图1是一种本发明实施方案的框图;图2是一种说明图1中程序确定逻辑的框图;图3a和3b说明了程序确定逻辑的示例操作;以及图4是一种说明优先级表和重映射表用于改变程序优先级的功能框图。
优选实施方案描述图1表示了一种本发明实施方案的框图。计算机10包括存储器12、控制逻辑14以及执行程序指令的适当处理器算术逻辑单元(ALU)20。处理器20被连到一个寄存器组的集合30,该集合提供对应多个可由处理器20执行的程序的信息的高速存储和可访问性。
寄存器组的集合30包括程序计数寄存器组30a、累加器寄存器组30b、变址寄存器组30c和堆栈指针寄存器组30d。每个寄存器组都包括多个寄存器。寄存器集合包括分别来自每个寄存器组的各一个寄存器,如一个程序计数寄存器40a、一个累加器寄存器40b、一个变址寄存器40c和一个堆栈指针寄存器40d,用于存储处理器20执行具体程序所需的信息。例如,程序计数寄存器40a为具体程序存储了正被执行的当前指令的存储位置。当处理器20正在执行具体程序的当前指令时,累加器寄存器40b、变址寄存器40c和堆栈指针寄存器40d为此处理器存储其累加器寄存器、变址寄存器和堆栈指针寄存器中的内容。每个寄存器组30a-30d用选择输入45a-45d所输入的程序地址作为索引,并选择对应此具体程序的寄存器集合,这样就把此具体程序选为计算机所要执行的当前程序。
处理器20还通过状态位地址输入55被耦合到一种状态寄存器50。状态寄存器50包括多个位置如位置52和54,其中每个位置分别对应每个程序。这些位置分别存储了对应每个程序的状态位。这些状态位以优先级顺序存储,其中每个状态位指示了对应程序的状态是活动态(“1”)或非活动态(“0”)。状态寄存器的索引通过经状态地址输入55所输入的状态位地址进行。在状态地址输入55所输入的地址使处理器20能够仅执行少量的程序指令,就可迅速访问状态位寄存器50中的对应位置。状态值输入51提供来自处理器20(包括设置/重置逻辑)的状态位值,而此值要被存在状态寄存器50中。
状态寄存器50被耦合到一种程序确定逻辑60,后者包括一个多输入或门和双向选择器开关的网络(如图2所示),用于对状态寄存器50所存状态位指示的最高优先级活动程序确定其状态位地址。更具体的说,状态寄存器50的每个位置都被耦合到程序确定逻辑60的一个输入上,并且允许不必执行软件扫描就可确定最高优先级活动程序。此程序确定逻辑60还被耦合到寄存器组集合30的选择输入45a-45d上。
在运行中,程序确定逻辑60处理状态寄存器50中各位置上的状态位,参考图2进一步讨论。确定最高优先级活动程序的状态位地址是通过定位具有“1”的最高优先级位置,其中每个状态位地址直接对应某个程序地址。此状态位地址是二进制数的形式,它包括足够数量的比特来为每个程序提供唯一地址。状态位地址作为程序地址被提供给寄存器组集合30的选择输入45a-45d,这使对应的寄存器集合将被处理器20选为当前程序。当处理器20完成了程序执行,处理器就会把当前程序的程序地址作为状态位地址提供给状态输入55,并把“0”提供给状态值输入51,从而把当前程序状态变为非活动态。程序确定逻辑60再次确定最高优先级活动程序的状态位地址,而且此过程一直重复到所有的活动程序都被处理器20执行完毕。
此外,当前程序可以改变非活动程序或活动中挂起程序的状态(参考图4讨论)。在此情况下,程序确定逻辑60立即确定当时最高优先级活动程序的状态位地址,此地址被发送到寄存器组集合30的选择输入45a-45d来把当时最高优先级活动程序选为当前程序。
另外,在没有程序处于活动态时,程序确定逻辑60提供一种下电指示(参考图2进一步讨论),此时处理器20被置为下电或睡眠模式。
如果程序优先级未被改过,则状态位地址会直接对应着程序地址。但是,当一个或多个程序的优先级都被改变时,则提供表来维护程序确定逻辑电路60所确定状态位地址和程序地址之间的关系,参考图4讨论。
尽管仅有四个寄存器组表示在寄存器组集合30中,但是由于在二进制计算机中首选2的幂所以可以采用每个程序八个寄存器。于是,附加的变址和/或累加器寄存器组可以被包含在寄存器组集合30中。此外,本领域的技术人员应意识到任意数量的寄存器组可以被包括在寄存器组集合30中,以便给具体处理器提供足够存储空间来存储程序信息。
寄存器组集合30可以用随机访问存储器(RAM)构成,它具有的字数等于程序数量,且每个字的位长等于首尾相连排列的、一个寄存器集合中所有寄存器的总位长。例如,如果256个程序的信息被存储在8寄存器组的集合中,而每个寄存器都是32位寄存器,则这种存储器就是一种8KB RAM,用当今技术它只占很小的芯片区域。
状态寄存器50可以由适当的可寻址寄存器构成,它具有的存储单元数量等于程序数量。例如,如果有256个程序,则状态寄存器50可以是用8位状态位地址作索引的256位寄存器。使用显式寄存器来存储每个程序的状态使程序确定逻辑能同时访问状态寄存器的所有位。
状态位已被描述成“1”指示活动态而“0”指示非活动态。但是,本领域的技术人员应意识到也可能是“0”分配给活动态而“1”分配给非活动态。在此情况下,程序确定逻辑60会确定最高优先级“0”作为最高优先级活动程序。
于是,本发明提供了一种系统,允许在另一程序比当前程序具有更高优先级并被突然调用时,处理器20从前一个程序的执行切换到第二个程序的执行。本发明还提供了在较高优先级任务完成后较低优先级任务的迅速恢复。组建作为RAM的寄存器组集合30使处理器20能快速执行由选择输入45a-45d所指示的当前程序。包括状态位寄存器50的可寻址寄存器使处理器20能快速改变对应某程序的状态。程序确定逻辑60具有对状态寄存器50所有位置的同时访问,它几乎立即指示最高优先级活动程序的程序地址而不必执行软件扫描,于是对每次程序切换节省了大量处理器指令和电池电量。
图2说明了该程序确定逻辑60的功能框图。对于优选实施方案,包含256个位置的状态寄存器50被耦合到程序确定逻辑60的第一级110。第一级110包括一个128输入或门115和128双向选择器开关120的第一阵列120。每个双向选择器开关包括第一输入、第二输入和一个输出。例如,双向选择器开关125包括第一输入127、第二输入129和输出130。状态寄存器50位置中优先级最高的一半140被耦合到128输入或门115,还被耦合到选择器开关阵列120中各个选择器开关的对应第二输入。状态寄存器50位置中优先级较低的一半150被耦合到第一阵列选择器开关120中各个选择器开关的对应第一输入。128输入或门115的输出155被耦合到程序地址寄存器160的最高有效位置(MSL)160a,还被耦合到控制着第一阵列120中每个双向选择器的控制信号线157。
信号线157上存在“1”则使得会选择阵列120每个选择器开关的第二输入,而信号线157上存在“0”则选择第一输入。第一级110还被连到第二级170。更具体的说,第一阵列120的输出中优先级最高的一半175被耦合到64输入或门180和第二阵列64双向选择器开关185的第二输入。第一阵列120的输出中优先级最低的一半190被耦合到第二阵列185的第一输入。64输入或门180的输出195被耦合到程序地址寄存器160的第二MSL160b、以及控制第二阵列双向选择器开关185的控制信号线200。第二级170进一步被连到第三级210,使用与第一级110连到第二级170相似的方式,第三级包括32输入或门(未表出)和第三阵列双向选择器开关(未表出)。第三级210到第六级220用与上述相似的方式进行连接,而且都包括或门和双向选择器,其中到或门的输入数量和双向选择器数量以2的幂连续减少。第六级220进一步被耦合到第七级230。第七级包括一个双输入或门235和第七阵列2个双输入选择器开关240。第六级220输出中优先级最高的一半被连到双输入或门235、以及第七阵列双向选择器开关240的第二输入。第六级220输出中优先级最低的一半255被耦合到第七阵列240的第一输入。双输入或门235的输出260被耦合到程序地址寄存器160的第七个MSL 160g、以及耦合到控制第七阵列240的控制信号线265。第七阵列240最高优先级双向选择器开关275的输出270被连到程序地址寄存器160的最低有效位置160h、以及单选择器开关280的第二输入。第七阵列240最低优先级双向选择器开关277被耦合到单一选择器开关280的第一输入,而开关280用于提供下电指示295。输出270进一步被耦合到控制信号线285,用于控制单双向选择器开关280。当存储在状态寄存器50中的所有状态位都指示非活动态(即状态寄存器50中所有位都为“0”)时,则程序确定逻辑60的1-7级使下电指示295上出现“0”,表明处理器可能被置为下电模式如睡眠模式。
在运行中,如果在状态位地址寄存器50的优先级最高的一半140中找到了表明活动态的“1”,则输出155和MSL 160a都变成“1”,而且第一阵列双向选择器开关120由控制信号线157来控制选择第二输入。但是,如果在优先级最高的一半140中不存在“1”,则输出155和MSL 160a都变为“0”,而且控制信号线157使第一阵列120选择第一输入。
在第二级170中,如果来自阵列120的优先级最高一半的任何输出指示了“1”,则64输入或门180的输出195以及第二MSL 160b都变为“1”,而且控制信号线200使第二阵列185选择第二输入。如果输出195是“0”,则第二MSL 160b被置为“0”,而且控制信号线200使第二阵列185选择第一输入,从而选择了第一阵列120输出中优先级较低的一半190。第三级210到第六级220的逻辑用相似的方式运行,确定程序地址寄存器160中对应MSL(未表出)的值。
在第七级230,双输入或门235的输出260设置第七MSL 160g的值,并且在第六级220优先级最高的一半250中指示了一个“1”时,经过控制线265控制第七阵列240选择第二输入。如果输出260指示了“0”,则选择第七阵列240的第一输入,从而选择了第六级220的优先级较低的一半255。然后,最高优先级双向选择器275的输出270把值提供给程序地址寄存器160的最低有效位置160h,并经过控制信号线285进一步控制单双向选择器280。如果输出270的值是“1”,则选择双向选择器280的第二输入。但是如果输出270是“0”,则选择该双向选择器280的第一输入。下电指示295上的值“1”表明了存储在程序地址寄存器160中的值是最高优先级活动程序的地址,而不需要下电。下电指示295上的值“0”表明了当前没有要由处理器20执行的活动程序,在这种情况下,一种诸如把计算机置成睡眠模式的下电模式会有益于保存能量。
如果状态寄存器50中最高优先级位置标识为8位地址“00000000”而最低优先级地址标识为“11111111”,则程序地址寄存器160中的值必须求补来产生最高优先级活动位置的状态位地址。但是,如果状态地址50中最高优先级位置标识为“11111111”而最低优先级位置标识为状态寄存器“00000000”,则程序地址寄存器160中的值直接产生最高优先级活动程序的状态位地址。
在一个可选的实施方案中,单输入或门290被耦合到第七阵列240的输出270,而或门290的输出把此值提供给最低有效位置160h,并经过控制信号线285控制单双向选择器280。
图3a表示了一种具有四个程序的程序确定逻辑60的示例操作,最低优先级程序表示为“00”而最高优先级程序表示为“11”。用相同的参考数字进行标识的图3a中的组件与图2中组件是相同的,且不会再作进一步解释。图3a还说明了一个代表状态寄存器50状态位地址的行300。
在运行中,双输入或门235的输出260成为“1”,由此设置了程序地址寄存器160中位置160g的值,并且如图所示使第七阵列240选择第二输入。输出270把位置160h中的值置成“0”并使单个双向选择器280选择第一输入,从而产生下电指示为“1”表明程序地址寄存器160中的地址代表最高优先级活动程序并不需下电。
图3b表示了另一种具有四个程序的程序确定逻辑60的示例操作,其中最低优先级程序表示为地址“00”而最高优先级程序表示为地址“11”。与应图3a中组件相对应的图3b的组件用相同的参考数字进行标识,且不再作解释。
在运行中,双输入或门235的输出260成为“0”,由此设置了程序地址寄存器160中位置160g的值为“0”,并且如图所示使第七阵列240选择第一输入。输出270变成“0”,把位置160h中的值置为“0”,并使单双向选择器280选择第一输入。下电指示295输出下电指示“0”,表明当前没有任何程序具有活动态。在此情况下,一种有益的行为可能是把处理器20置为下电状态如通过停止算术逻辑单元的时钟,这样就不会从电源处消耗更多的能源。但是,如果状态寄存器50的状态位地址“00”处的值是“1”(未表出),则下电指示295输出“1”,表示最高优先级活动程序处于状态位地址“00”且不需下电。
每个双向选择器125(见图2)最好是一种在本领域熟知的在适当硅基上构建的双向开关。
尽管程序确定逻辑60被表示在程序数量为256的情况中,本领域的技术人员应意识到等同的逻辑可以设计用于处理支持任意数量程序的状态寄存器中的信息。
于是,程序确定逻辑60实际上瞬时确定最高优先级活动程序,该活动程序由状态寄存器50位置中所存储的状态位来指示。由于逻辑门和选择器开关可同时访问状态寄存器50的每个位置,于是不必进行软件扫描便可实现这一点。这节省了软件扫描所需的大量处理器指令,由此保存了电池电量。此外,在当前没有活动程序而采取睡眠模式非常合适的情况下,程序确定逻辑60能比现有系统更快的作出决定。这允许用更迅捷的方式把处理器20置成睡眠模式,从而比起现有系统保存了更多的电池电量。
图4是一种说明具有优先级寄存器(表)和重映射寄存器(表)的系统的功能框图,此系统允许改变程序优先级。当优先级被改变时,状态寄存器50的状态位地址不再直接对应程序地址。优先级表和重映射表映射了状态位地址和程序地址之间的关系。
一种改变不同程序语境的相关优先级的方法是改变程序所分配的寄存器集合。这需要把一个程序在寄存器组的当前内容从当前优先级对应的程序组地址复制到对应想要的优先级的程序组地址。如果对应想要优先级的程序组已被另一程序语境占据,则它的内容首先必须被保存,然后重存到它必须移至的优先级所对应的另一程序组地址,来为第一个程序让出空间。这会引起进一步的连锁反应,直至达到一个稳定的分配集合。在这种寄存器组的正移过程正在进行时,所有的程序执行都必须挂起以避免误操作。这会有一种不想要的结果即低优先级程序要求变成中等优先级时会引起高优先级程序执行的延迟。为避免这种情况的发生,可能会想到在存储器中保持整个程序寄存器组的镜像,脱机操作来正移优先级,然后在正移完成后将其复制到真实程序寄存器组中。但是,这种方法的问题是程序寄存器组的内容随着程序的执行而动态改变,因此在脱机处理镜像时它将已经过时了。因此,用上述方法实现时最好是等到请求改变优先级的程序被调度运行的时候(从而避免了从较高优先级程序窃取周期);然后正移寄存器组内容,同时会在其完成之前禁止任何语境切换;然后重新使能语境切换以便现在的最高优先级程序恢复执行。使用后一方法会由于需要相对较长的时间正移寄存器组内容,总共大约8k字节,而经常会出现正移过程造成高优先级程序恢复执行被延迟的情况。因此,下面会描述一种提高或降低程序优先级的可选和优选的方法,它涉及脱机处理仅256字节的寄存器,而其内容与程序寄存器组相比不会随着程序执行而动态改变。
处理器20经过优先级地址选择器405被连到优先级表400,其中优先级表400是一种包含2N个N位字的寄存器组。例如,如果有256个程序,优先级表400就是具有256个8位字的寄存器组。优先级表400是从地址0到地址2N的11顺序寻址表,此地址直接对应程序地址。优先级表将程序地址映射到状态寄存器50中对应的状态位地址。优先级表400中在对应程序地址位置处存储的值代表了对应程序地址的程序的当前优先级。优先级表400还包括读使能引脚418,用于使提供给优先级地址选择器405的某个地址处所存储的数据能够经过优先级输出415进行输出。优先级输出415被连到状态寄存器50的状态地址输入55。状态寄存器50被耦合到程序确定逻辑60,而程序确定逻辑则被耦合到N极选择器420。
N极选择器420由类似于图2阵列120的一列N双向选择器开关来组成。每个双向选择器具有像第一输入127的第一输入、像第二输入129的第二输入、以及像输出130的输出。与图2中信号线157控制阵列120的方式相同,N双向选择器开关阵列由选择器控制425进行控制。程序确定逻辑60被连到N极选择器420的第一输入427,而处理器20被连到N极选择器420的第二输入430。更具体的说,程序确定逻辑60的程序地址寄存器160中每个位置都被连到N极选择器420中某一N双向选择器开关的对应第一输入,而处理器20的一个N位寄存器中每位都被连到N极选择器420中那个N双向选择器开关的对应第二输入。在程序状态已被改变时,选择器控制425使N极选择器420选择在第一输入427上存在的信息来提供给重映射表435。但是,在一个程序优先级想被改变时,选择器控制425使N极选择器420选择在第二输入430上存在、要在N选择器的输出432上提供的信息,N选择器的输出432被提供给重映射表435。
重映射表435是一个具有2N个N位字的寄存器组。此重映射表是从地址0到地址2N的11顺序寻址表,这些地址直接对应着状态位地址(程序优先级)。重映射表435是优先级表的反转,其中存储在优先级表400中地址Y处的值X对应着存储在重映射表435中地址X处的值Y。于是,重映射表把状态位地址映射到对应的程序地址。重映射表435具有一个重映射输出445和一个读使能引脚448,后者用于使提供给重映射地址选择器437的某个地址处所存储的数据能够经过重映射输出445进行输出。因此,在读使能引脚418被使能时,一个在重映射地址选择器437处所提供的优先级在重映射输出445处产生在重映射表435中对应程序地址。
重映射输出445被连到一种具有与N极选择器420相似结构的N极输出选择器450。该N极选择器450具有一个连到重映射表输出445的N极输入452。N极输出选择器450还包括连到寄存器组集合30的选择输入45a-45d的第一N极输出455、以及连到处理器20的第二N极输出460。N极输出选择器450的控制是通过一个耦合到处理器20的N极控制输入465,它用于控制N极输入452会耦合到双输出的哪个。在一个程序的状态已经改变时,处理器20会对N极控制输入465发送信号,使N极输出选择器450选择第一N极输出455。但是,在一个程序的优先级已经改变时,处理器20对N极控制输入465发送信号使N极输出选择器450选择第二N极输出460。
在计算机运行的同时,各种环境因素会造成一个计算机可执行程序的状态改变。例如,一旦处理器20已经完成一个程序的执行,程序状态就必须从“1”变为“0”。此外,特定程序的执行可能影响另一程序的状态。例如,在计算机用于操作蜂窝电话时,一个正被执行的程序接受来自蜂窝电话键盘的输入如电话号码,当用户向蜂窝电话键盘键入数字时此程序可能引起一个将信息显示在蜂窝电话显示屏上的程序变为活动态。
为改变一个程序的状态,处理器20向读使能引脚418提供信号,允许在优先级输出415处从优先级表读取数据。处理器20还向选择器控制425提供信号来选择第一输入427,由此在一个程序的状态已经改变之后向重映射表435提供最高优先级活动程序的状态位地址。处理器20还向控制输入465提供信号来选择第一输出455,由此使从重映射表435读取的程序地址会被提供给选择输入45a-45d来选择当前程序。
处理器20向优先级地址选择器405提供对应期望其状态改变的程序的程序地址。存储在对应程序地址的位置上的数据(状态位地址)在优先级输出415被输出并提供给状态寄存器50的状态位输入55。处理器20向状态值输入51提供所需的状态值(即“1”代表活动态,“0”代表非活动态),此值被存储在状态地址输入55所提供地址处的状态寄存器50中。此时,程序确定逻辑60确定当时最高优先级活动程序的状态位地址,并将其提供给N极选择器420,而N极选择器又将此状态位地址输出到N极选择器输出432。处理器20向读使能引脚448提供信号允许在重映射输出445处从重映射表读取数据。状态位地址在重映射地址选择器437被接收,其中对应状态位地址的程序地址在重映射输出445被输出并经N极输出选择器450提供给选择输入45a-45d,从而使处理器20将对应程序地址的程序作为当前程序来执行。
在某些情况下需要改变可由处理器执行的程序的优先级。例如,一种维持蜂窝电话和蜂窝基站之间无线链接的程序典型的具有高优先级,而用于支持在没有蜂窝电话呼叫时所用蜂窝电话特性的其他程序,例如计算机程序或游戏程序,则典型的具有低优先级。当计算器或游戏程序被蜂窝电话用户启动时,则分配维护无线链接的计算机资源不如分配计算器或游戏程序资源重要。在这种情况下需要把计算器或游戏程序的优先级改得比维护无线链接更高。
为了在优先级表400中改变优先级,图4还包括一种在优先级表400中的写使能引脚416,它用于允许在优先级数据输入410处的数据可被写入到优先级表中提供给优先级地址选择器405的程序地址处,由此改变了对应所提供程序地址的程序的优先级。优先级数据输入410被连到处理器20以及N极选择器420的第二输入430。同样,写使能引脚446允许把在重映射数据输入440处存在的数据在重映射地址选择器437提供的状态位地址(优先级)处写入到重映射表435。重映射数据输入440被连到优先级地址选择器405和处理器20。于是,优先级要改变的程序的程序地址作为地址被提供给优先级表400,但却作为要存储的数据提供给重映射表435,而所想要的对应新优先级会作为要存储的数据提供给优先级表400,但却作为地址提供给重映射表435。存储器470表示为被耦合到状态寄存器50、处理器20和重映射表435。此存储器包括四个单元,第一和第二状态存储单元475和480分别用于在优先级发生变化时存储程序状态值(“0”或“1”),而第一和第二重映射存储单元485和490分别用于在优先级发生变化时存储程序地址。
为了把某一特定程序的当前优先级改为想要的新优先级,此特定程序被重新分配到对应状态寄存器50中新优先级的状态位地址,而且干预的程序分别向当前优先级移近一个状态位地址。例如,假设状态寄存器50如此配置使得最高优先级在状态位地址“0”而且想要的新优先级是比当前优先级低的优先级。特定程序被放在新优先级(由此降低了它的优先级),而且干预程序在索引中分别下移(降低它们的相对状态位地址),由此提高了它们关于特定程序的相关优先级。当每个干预程序在状态寄存器50中移动时,重要的是,优先级表400和重映射表435中的值进行改变以维持程序地址和状态位地址之间的关系。例如,在状态寄存器50中,在状态位地址“10”处的状态位被移动到状态位地址“01”,而在优先级表400中,对应状态位地址“10”的程序地址处的优先级必须用“01”替换。对应状态位地址“10”的程序地址可以使用重映射表435进行确定。处理器20发送信号经过选择器控制线425以选择第二输入430、发往N极控制输入465以选择第二N极输出460、并发往读使能引脚448。当前优先级(状态位地址)“10”经过N极选择器420被提供给重映射地址选择器437,而且对应的程序地址由处理器20从重映射表435中读取出来。对应的程序地址被提供给优先级地址选择器405(和重映射数据输入440)。新优先级的值“01”被提供给优先级数据输入410(和重映射地址选择器437),而且写使能引脚416被处理器20使能,于是在从重映射表435中读取的对应程序地址处写入新优先级。接着,写使能引脚446被处理器20使能,于是在重映射表435中对应新优先级“01”的状态位地址处写入重映射数据输入440处所提供的对应程序地址。这样,对优先级表400和重映射表435维持状态位地址和程序地址之间的联系。存储单元475、480、485和490都用于暂时存储状态信息和程序地址来防止在优先级被改变时改写信息。
在另一实施方案中提供了可选优先级表495和可选重映射表497,它们使用与优先级表400和重映射表435类似的方式被耦合到系统上。可选的信号线419和449都被耦合到处理器20上,用于激活优先级表400和重映射表435或者可选优先级表495和可选重映射表497。由于允许处理器20在优先级正被改变时执行程序可能是有害的或者不合适的,故提供这些可选表。于是,为了避免相关优先级未被改变的过程其执行被延迟,可能需要“脱机”准备优先级表和重映射表的一个完整拷贝,以便给某一未被激活的过程重新分配优先级。当完成这些“脱机”表时,可选信号经过可选信号线419和449进行确认,由此使“脱机”表处于活动态。这允许其他程序正常执行而不必使机器周期忙于旨在安全改变优先级表和重映射表的最高优先级(即“中断级”)任务。“脱机”准备这些表可以通过在优先级被提高或降低的程序的原有优先级级别上,或者在为这种操作系统实用功能所保留的任意选定的优先级级别上执行某种实用程序。
组成可选优先级表和可选重映射表可以用一种与优先级表400和重映射表435相同大小和配置的寄存器组。可选的是,可选优先级表和可选重映射表可以驻留在存储器12中,其中当可选信号经过可选信号线419和449被发送时,可选优先级表和可选重映射表的内容被复制到优先级表400和重映射表435。
改变特定程序的优先级需要在当前优先级和想要新优先级之间的所有干预程序进行移动,其中程序数量分别等于状态寄存器50、优先级表400和重映射表435中位置数量。这种移动是必要的,因为当特定程序分配了一个区别于旧优先级的期望新优先级时,先前具有其想要新优先级的程序必须移动一个优先级来为此特定程序让出空间。所移动的程序顺序把下一干预程序“挤走”一个优先级,直到干预程序链中最后一个干预程序被移到特定程序的旧优先级。但是,当程序数量少于每个状态寄存器、优先级表和重映射表中位置数量,从而一些优先级没有分配给程序时,则移动中间程序的过程可能会在某一中间程序被移到一个没有分配给程序的优先级位置时结束。在这种情况下,由于遇到一个未占用位置,因此不需为干预程序链中下一干预程序让出空间。
本领域的技术人员应意识到以不同优先级运行的两个或多个程序不能同时被允许处理优先级表,即改变优先级不可能是一种“重入”操作。至于其他非重入功能如与外围设备的I/O、调用浮点协处理器、DSP等等,所用的方法包括构成一种对实用程序的优先级改变请求的队列或“链表”,该实用程序将会处理这些请求。这确保了一个改变优先级的请求会被处理完成,从而在开始处理队列中下一优先级改变请求之前已经产生了有效和完整的可选优先级表和重映射表。重入实用子程序可能被调用来把改变请求准备成要插入链表的数据对象形式,并且为了把它插入链表而采取预防措施防止语境切换(也可能是中断)发生在这种精确时刻队列中最后一个数据对象的链接指针改为指向正在插入的数据对象,以使另一个也调用相同重入实用程序的程序语境不能大意地想把它的数据对象插入队列中相同位置。最早可以这样做的时候也得在再次使能语境切换(或者中断)之后,那时它会发现新的队尾就在刚链入的新数据对象的地方,然后把它的数据对象链到此处。
同样,对队头改变请求的处理可使用提出此请求的语境的优先级和寄存器组来进行,但同时会采取相似预防措施防止语境切换(和/或中断)发生在这种精确时刻返回到这个调用语境并且把执行权转到有关处理队列中下一对象的调用语境时。同步这种操作也可以使用信号量,它指示优先级表是否处于一种未决操作状态或者一种紧随前一操作完成之后的稳定状态。
在另一个实施方案中,本领域的技术人员应意识到每个程序都可被系统进一步细分成多个“子程序”,这是通过在为父程序所保留的堆栈中或者存储器中其他合适的地方,对每个子程序所需寄存器完整集合进行保存和检索而进行的。在这种情况下,子程序以与父程序相同的优先级级别执行。
于是提供这样一种系统在另一程序比当前程序拥有更高优先级并突然被调用时,它允许处理器快速从第一个程序的执行切换到第二个程序的执行。这种系统在用于蜂窝电话时可以空出处理器来执行其他任务并保存蜂窝电话电池电量。该系统包括一个寄存器组的集合,提供对应于蜂窝电话处理器可执行的多个程序的信息的高速存储和可访问性。状态寄存器50具有分别连到程序确定逻辑60的具体单元,它允许不需蜂窝电话处理器执行软件扫描就可以确定最高优先级活动程序的位置。于是,蜂窝电话处理器的效率得到了提高,从而把处理器空出来执行其他任务并保存了蜂窝电话电池电量。此外,在没有活动程序时提供一种下电指示,而且下电指示的确定比在现有系统中更快,从而保存了更多的蜂窝电池电量。
优先级表和重映射表允许改变程序优先级,于是使蜂窝电话处理器可以根据目前任务调整处理器资源的应用。例如,维护与蜂窝基站的无线链接的任务在蜂窝呼叫中被分配了高优先级,而在计算器特性被激活时它的优先级可以被降低。相似地,执行计算器特性的算术计算任务在蜂窝呼叫中被分配了低优先级,而在呼叫完成和计算器特性激活之后它被分配以高优先级。
本领域的技术人员应意识到这种优势也可以引入到蜂窝电话所用处理器以外的其他处理器应用中。例如,这种公开的系统和方法在个人计算机或者任何微处理器应用中会非常有用,其中也正需要提高效率和/或降低电池电量消耗。
还有一方面,本发明的目的和优势可以通过研究说明书、附图和附带的权利要求而获得。但是,应当理解的是本发明可能以可选的形式进行应用,其中可以得到上述的本发明和优选实施方案的部分目的和优势。
权利要求
1.一种用于在多个程序之间切换计算机资源的系统,该系统包括一个执行计算机程序的处理器;一个耦合到处理器用于存储多个程序信息的寄存器组集合,每个寄存器组都包括多个程序信息寄存器,寄存器组集合具有一个选择输入,用于选择处理器所要执行的当前程序;一个耦合到处理器的状态寄存器,用于以优先级顺序存储对应每个程序的状态位,每个状态位都具有一个状态位地址,并指示了对应程序的状态是活动态或者非活动态之一;以及一个耦合到状态寄存器的程序确定逻辑电路,用于确定最高优先级活动程序的状态位地址,所述的程序确定逻辑电路被耦合到寄存器组集合,用于把最高优先级活动程序的状态位地址提供给选择输入,在这里最高优先级活动程序被选为当前程序。
2.权利要求1的系统,其中程序确定逻辑电路包括一个多输入或门和双向选择器开关的网络,用于确定最高优先级活动程序的状态位地址;以及一个耦合到网络的程序地址寄存器,用于收集最高优先级活动程序的状态位地址,所述程序地址寄存器被耦合到选择输入,用于向其提供最高优先级活动程序的状态位地址。
3.权利要求1的系统还包括耦合到处理器和状态寄存器的设置/重置逻辑,用于通过改变对应多个程序之一的状态位来改变此程序的状态。
4.权利要求1的系统还包括一个耦合到处理器和状态寄存器的优先级表,其中包括多个对应各程序信息寄存器的优先级寄存器,用于存储多个程序的优先级;以及一个耦合到程序确定逻辑电路、寄存器组集合和优先级表的重映射表,其中重映射表是优先级表的反转。
5.权利要求4的系统还包括一个耦合到处理器和状态寄存器的可选优先级表,所述可选优先级表包括多个对应程序信息寄存器的可选优先级寄存器,用于在处理器执行当前程序时存储多个程序的优先级;以及一个耦合到程序确定逻辑电路、寄存器组集合和可选优先级表的可选重映射表,其中可选重映射表是可选优先级表的反转。
6.权利要求5的系统还包括一个耦合到优先级表、可选优先级表、重映射表和可选重映射表的选择器,用于选择优先级表和可选优先级表中哪个以及重映射表和可选重映射表中哪个被用来选择向选择输入发送哪个状态位地址。
7.权利要求1的系统,其中计算机是一种用于控制蜂窝电话操作的移动蜂窝电话组件。
8.一种在多个程序之间切换计算机资源的方法,此计算机包括一个用于执行程序的处理器、一个用于存储对应该多个程序的多个程序信息寄存器的寄存器组集合、以及一个用于选择处理器所要执行的当前程序的选择输入,该方法包括以下步骤以优先级顺序把对应每个程序的状态位存入状态寄存器中,每个状态位具有一个状态位地址并指示对应程序的状态是活动态或者非活动态之一;从状态寄存器把状态位传送给程序确定逻辑电路;在程序确定逻辑电路中确定指示活动态的最高优先级状态位的状态位地址;并且把状态位地址传送给寄存器组集合的选择输入来选择当前程序。
9.权利要求8的方法,其中确定最高优先级状态位的步骤包括(a)确定状态寄存器优先级较高一半中是否有某一状态位指示活动态,其中如果其中一个状态位指示了活动态,则选择状态寄存器中优先级较高的一半状态位,并在程序地址寄存器中最高有效位置(MSL)记录“1”或“0”,并且如果没有状态位指示了活动态,则选择状态寄存器中优先级较低的一半状态位,并在程序地址寄存器中最高有效位置(MSL)记录“1”或“0”中另外的一个;(b)确定所选状态位集合中优先级较高的一半中是否有某一状态位指示活动态,其中如果其中一个所选状态位指示了活动态,则选择所选状态位集合中优先级较高的一半状态位,并在程序地址寄存器中下一MSL记录“1”或“0”,并且如果没有所选状态位指示了活动态,则选择所选状态位集合中优先级较低的一半状态位,并在程序地址寄存器中下一MSL记录“1”或“0”中另外的一个;并且(c)重复(b)步骤直到所选状态位集合包含两个状态位,其中所选状态位集合中最高有效位(MSB)在程序地址寄存器中被记录为最低有效位(LSB)。
10.权利要求9的方法还包括在把LSB记录到程序地址寄存器之后对程序地址寄存器中的值求补的步骤。
11.权利要求8的方法还包括在没有状态位指示活动态时把计算机置为低功率运行模式的步骤。
12.权利要求8的方法还包括通过改变多个程序之一对应的状态位来改变其状态的步骤。
13.权利要求12的方法,其中改变状态位的步骤包括确定对应该程序的状态位所在的状态位地址;并且把所选的值置入所确定的状态位地址,其中如果想要的此程序状态是活动态,则所选的值是“1”或“0”,并且如果想要的此程序状态是非活动态,则所选的值是“1”或“0”中另外的一个。
14.权利要求8的方法还包括改变状态位优先级顺序的步骤。
15.权利要求14的方法,其中计算机还包括一个优先级表,它包含多个对应各程序信息寄存器的优先级寄存器,其中改变状态位优先级顺序的步骤包括接收多个程序之一的改动优先级;为优先级寄存器确定一个优先级寄存器地址,该优先级寄存器地址对应此程序;并且把改动优先级存储在该优先级寄存器地址处。
16.权利要求15的方法,其中计算机还包括一个重映射表,它包含多个对应优先级寄存器的重映射寄存器,该方法还包括以下步骤为重映射表确定一个重映射表地址,该重映射表地址对应该改动优先级;并且把此程序的程序地址存储在重映射表地址处。
17.权利要求8的方法,其中计算机用在蜂窝电话中,而且把状态位地址传送到选择输入的步骤选择了蜂窝电话中处理器所要执行的当前程序。
全文摘要
本发明提供一种在多个程序之间切换计算机资源的系统,它包括一个执行计算机程序的处理器。此系统还包括一个耦合到处理器的寄存器组集合用于存储多个程序的信息,其中每个寄存器组包括对应该多个程序的多个程序信息寄存器,这种寄存器组集合具有一种选择输入用于选择处理器所要执行的当前程序。一种状态寄存器被耦合到处理器,用于以优先级顺序存储对应每个程序的状态位,其中每个状态位具有一个状态位地址并指示了对应程序的状态是活动态或者非活动态之一。状态寄存器中每个位置都被连到一种程序确定逻辑电路,用于确定最高优先级活动程序的状态位地址。程序确定逻辑电路被耦合到寄存器组集合,用于把最高优先级活动程序的状态位地址提供给选择输入,在这里最高优先级活动程序被选为当前程序。
文档编号G06F9/48GK1357124SQ00809333
公开日2002年7月3日 申请日期2000年6月6日 优先权日1999年6月23日
发明者P·W·登特 申请人:艾利森公司