多进程下寄存器文件置入操作时保持数据一致性的方法

文档序号:6393931阅读:179来源:国知局
专利名称:多进程下寄存器文件置入操作时保持数据一致性的方法
技术领域
本发明属于数据通道技术,特别是一种多进程下寄存器文件置入操作时保持数据一致性的方法。
背景技术
目前大多数计算机都是基于冯.诺依曼所提出的可编程计算机模型来开发的。按照冯.诺依曼提出的可编程计算机模型的理论,中央处理器(CPU)主要是由控制器和数据通道组成,其中数据通道代表实现每条指令所必须的逻辑电路,例如加法或者逻辑操作等,而控制器则负责根据取得的指令向数据通道发送控制信号以激活数据通道中相应的处理电路。
数据通道部分主要包括寄存器文件、算术逻辑单元(ALU)和局部存储器,其中寄存器文件是一组通用存储的寄存器,用来存储当前计算链中要使用的数据字,ALU单元是提供所有算术操作和逻辑操作功能的一组电路,而局部存储器又称为高速缓冲存储器,局部存储器既与CPU通讯又与主系统存储器通讯,主要用来提高CPU访问主系统存储器的速度。
寄存器文件的操作包括三种方式,分别为寄存器文件到寄存器文件操作方式、存储操作方式和置入操作方式。在寄存器文件到寄存器文件的操作方式中,数据源是寄存器文件,而经过处理后的数据结果又回写到寄存器文件中,存储操作方式是将寄存器文件中的数据转移到局部存储器中,而置入操作方式是将局部存储器中的数据转移到寄存器文件中。
图1所示为置入操作方式数据流向示意图。如图1所示,数据源为局部存储器,寄存器文件接收来自局部存储器的数据。当置入指令执行时,ALU单元提供数据地址信号,置入和存储单元(LSU)根据ALU单元提供的数据地址信号取出局部存储器中的数据,并且将取出的数据发送到寄存器文件中。LSU单元主要用来处理CPU系统中的置入指令和存储指令。置入指令是完成CPU系统从局部存储器中读回数据到寄存器文件的指令,而存储指令是完成将寄存器文件的数据写入到局部存储器的指令。由于置入和存储指令执行的时间较长,为了不影响CPU主流水线的正常运行,在LSU单元保存的置入和存储命令并不是真正的置入和存储指令的内容,而是翻译后的置入和存储命令。这两个命令中主要包含了命令的源地址、目的地址、数据长度等信息。
LSU单元一般包括命令先入先出缓存器(FIFO)、结果FIFO、读命令控制模块、输出控制模块、命令译码及MEM总线仲裁模块。由于流水线上可能会需要执行多个置入和存储指令,所以用命令FIFO缓存置入和存储指令,用结果FIFO缓存读回来的结果数据。当流水线执行置入指令时,置入指令将被放置到命令FIFO,局部存储器读入的数据将被放置到结果FIFO,而LSU单元中的读命令控制模块持续去读命令FIFO中的内容,并将具体的指令写入到命令译码及MEM总线仲裁模块。命令译码及MEM总线仲裁模块根据指令的内容产生对局部存储器的操作信号。命令译码及MEM总线仲裁模块首先取出源地址,然后将源地址信号再结合读片选信号写到它与局部存储器的接口管脚上,当从局部存储器中成功读回数据后就结合此置入指令的命令字中的目的地址组成一个新的结果数据,同时将其写入到结果FIFO中。当命令译码及MEM总线仲裁模块读入的命令是存储指令时,就先取出命令中的目的地址和数据,然后将这些目的地址和数据信号再结合写片选信号写到它与局部存储器的接口管脚上。
为了能够在一个计算机系统中正确地实现对寄存器文件的操作,数据必须在ALU单元能够访问之前已经从存储器转移到寄存器文件中,因此必须要考虑数据一致性的问题,即每次ALU单元操作时所使用的寄存器文件中寄存器的具体的数值必须是ALU单元应该使用的数值。为了保证寄存器文件数据在CPU处理过程中的一致性,就必须保证ALU单元在能够访问这些数据之前,这些数据已经从存储器转移到寄存器中。例如假设当前一条指令是置入操作,这条置入操作指令是将局部存储器中的某个地址的数据写入到某个寄存器文件中的一个寄存器中,而在接下来的另一条指令要用到这个寄存器的值进行计算处理,那么在这条需要用到寄存器的值进行计算处理的指令能够使用寄存器的数据作为计算处理时的操作符时,前一条置入操作指令必须已经完成将存储器中的数据转入到寄存器文件中的这个寄存器中,否则获得的结果就与期望的结果不相符合。
现有技术中一般是在指令流水线执行时,如果在译码阶段发现指令是置入指令,则在流水线执行过程中插入几个等待周期以保证置入指令能够正确地执行完毕,然后才执行接下来的指令。例如,假设某进程执行一个寄存器文件置入指令而且CPU采用时分复用的方式可以同时执行4个硬件进程,而LSU单元需要进行4个周期才能完成将外部存储空间的数据读取出来,那么按照现有技术的设计方法,此执行置入指令的进程需要等待4个周期才能执行下一条指令,由于硬件进程是每隔4个周期调度一次,那么此时指令执行同正常情况下没有差别,假设LSU单元需要执行8个周期才能完成将外部存储器空间的数据读取出来,此执行置入指令的进程就需要等待8个周期以后才能执行下一条指令。那么在下一次调度到此进程时,该进程就处于无操作状态,而只有当再一次调度到此任务时,也就是正好过了8个周期的时候,该进程才能再执行下一条指令。如果能成功读回存储器数据的间隔时间越长,那么需要插入的等待周期就越多。
图2为现有技术中执行指令的流程图。如图2所示,它包括以下步骤步骤201取指令并对指令译码;步骤202判断指令是否为置入指令,如果是执行步骤203,如果不是执行步骤204;步骤203在置入指令后面插入等待周期;
步骤204执行指令并结束。
图2表明现有技术中执行置入指令和执行别的指令的操作过程是不同的。当不是执行置入指令时将直接执行该指令,而当执行置入指令时,置入指令后面的其它指令只有等待置入指令结束后才能正常进行,因此整个流水线的执行过程都受到影响。
图3为现有技术中指令流水线执行时的时序示意图,如图3所示CPU的流水线包括取指令(Fetch)、指令译码(Decode)、读操作数(Read)、指令执行(Execute)和回写寄存器(Write back)这些阶段。图3所示的load指令为置入指令的一种。在取指令Fetch阶段,首先执行load指令,接着执行sub,addic,multi,addi等几条指令。在指令译码Decode阶段,如果发现是load指令而且整个置入操作需要进行2个周期才能结束,则在load指令后面插入2个等待周期(wait-cycle),只有在这2个等待周期以后才开始执行sub指令。
现有技术是通过在置入指令后面插入等待周期来保证置入操作时的数据一致性,如果CPU指令的执行是按照单进程的方式进行的话,这种插入等待周期的方法是一种必要的手段,但是如果在多进程机制下,这种插入等待周期的方法就完全不能体现多进程执行的优势,因为现有技术中在流水线执行时存在等待周期,而在等待周期内流水线上不能执行置入指令后面的任何指令的任何操作,因此CPU执行指令的效率必然会受到很大程度的影响,从而大大降低了CPU执行指令的效率。

发明内容
有鉴于此,本发明的主要目的是提供一种多进程下寄存器文件置入操作时保证数据一致性的方法,以提高CPU执行指令的效率。
为达到上述目的,本发明的技术方案是这样实现的一种多进程下寄存器文件置入操作时保持数据一致性的方法,包括以下步骤
A1、预先为寄存器文件的条目设置记分牌标志位,置入操作时将目的条目的记分牌标志位的值设置为占用值,置入操作完成时,将目的条目的记分牌标志位的值设置为空闲值;A2、判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是占用值则设置执行此指令的进程状态为挂起并执行下一进程,如果不是占用值则执行指令。
步骤A1所述的设置寄存器文件的条目的记分牌标志位的方法为将D寄存器设置为寄存器文件的条目的记分牌标志位、或将随机存储器RAM的一位或多位设置为寄存器文件的条目的记分牌标志位。
步骤A1所述的将记分牌标志位的值设置为占用值或空闲值的方法为置入操作时,ALU单元将所述的记分牌标志位的值设置为占用值,置入操作完成时,LSU单元将所述记分牌标志位的值设置为空闲值。
步骤A2为ALU单元判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是占用值,LSU单元向进程选择切换模块发送记分牌标志位占用信号,进程选择切换模块根据所述的记分牌标志位占用信号设置执行此指令的进程状态为挂起并执行下一进程;如果不是占用值则执行指令。
在步骤A2所述的进程挂起之后,进程切换选择模块进一步判断是否所有的进程都挂起,如果是则在指令执行流水线插入空指令,否则执行下一进程。
该方法进一步包括进程挂起后,如果置入指令完成,则LSU单元将记分牌标志位的值更新为空闲值,向进程切换选择模块发送记分牌标志位空闲信号,进程切换选择模块判断是否还有其它引起进程挂起的原因,如果没有,进程切换选择模块设置进程的状态为准备;如果有,进程继续等待,直至接收其它设置进程状态为准备的信号。
从以上技术方案可以看出,本发明采用记分牌技术和进程挂起机制相结合的方法来保证多进程下寄存器文件置入操作时的数据一致性。首先给寄存器文件的条目设置记分牌标志位,当置入指令运行时将置入指令的寄存器文件的目标条目的记分牌标志位的值设置为占用值,等成功回写该条目后再将记分牌标志位设置为空闲值,而当CPU指令试图访问记分牌标志位为占用值的寄存器文件条目时,该进程就处于挂起状态,同时下一个周期,选择别的进程来执行,而不是现有技术中在置入指令后面插入等待周期而造成流水线指令执行的中断,所以应用本发明后在严格保证了寄存器文件置入操作时的数据一致性的同时又保证了流水线的连续运行,而不会在流水线的执行中造成中断,并不受有的进程由于执行寄存器文件置入指令时对应的寄存器文件的条目没有及时更新而需要使该进程进入等待状态的影响,从而极大地提高了CPU执行指令的效率。


图1为寄存器文件置入操作方式数据流向示意图。
图2为现有技术指令执行流程图。
图3为现有技术指令流水线执行时序示意图。
图4为CPU多进程执行示意图。
图5为本发明一实施例指令执行流程图。
图6为本发明一实施例的因需访问尚未更新完毕的寄存器文件的条目而挂起的进程状态改变流程图。
图7为本发明一实施例指令流水线执行时序示意图。
具体实施例方式
为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明的主要思想为通过记分牌标志位和进程挂起机制相结合的方式来严格保证寄存器文件置入操作时的数据一致性。首先给寄存器文件的条目设置记分牌标志位,当置入指令执行时,ALU单元将置入指令的目的条目的记分牌标志位设置为占用值,等到数据成功回写该寄存器文件条目后,LSU单元再将该记分牌标志位设置为空闲值。当CPU的指令试图访问记分牌标志位为占用值的寄存器文件条目时,执行该指令的进程处于挂起状态,而到下一个周期就会选择别的进程来执行,只有当别的所有的进程都挂起的情况下,才在流水线中插入空指令。如果不是所有进程都被挂起,流水线便能正常执行,而不会受到执行寄存器文件置入操作时前一个进程由于对应的寄存器文件条目内容没有及时更新而需要使该进程进入等待状态的影响。
CPU按照时分复用的方式同时可以执行多个硬件进程,而且每一个硬件进程又可以包含多个软件进程。时分复用时硬件进程的个数可以相应调整,软件进程的个数也可以相应调整,并且硬件进程执行的顺序是固定的。假设有4个硬件进程,图4为4个硬件进程时CPU多进程执行示意图。如图4所示,CPU采用时分复用的方式在一个周期内同时可执行4个硬件进程,并且这4个硬件进程执行的顺序是固定的。比如在一个周期内,先执行硬件进程process0,然后依次执行硬件进程process1、硬件进程process2和硬件进程process3,其中每一个时钟(CLK)内执行1个硬件进程,因此每个硬件进程占用CPU 25%的带宽。每一个硬件进程又可以包含多个软件进程。假设有4个硬件进程而且每个硬件进程包含的软件进程的个数都是n,那么整个系统便包含4n个软件进程,进程切换就是在这4n个软件进程之间进行。进程切换是指条件不允许的软件进程让给条件允许的软件进程先执行,即将条件不允许的软件进程先挂起,让别的软件进程先执行,等该进程条件允许后再重新与别的软件进程一起竞争执行。进程间的切换由专门的进程切换选择模块根据CPU的资源使用情况每隔一个时钟周期进行切换。
软件进程在执行的过程中总是处于激活(Active)、挂起(Suspend)、准备(Ready)这三种状态中的一种。上电复位后,一个硬件进程对应的n个软件进程刚开始都处于准备态,然后按照一定的原则来从这n个软件进程中选择1个软件进程并将其状态迁移到激活态,而软件进程的挂起状态则是由处于激活状态的软件进程在执行过程中由于资源冲突的原因而切换过来的。例如当CPU去访问一个应该更新而实际尚未更新的寄存器就是这种从激活状态到挂起状态的一种。当某软件进程由于某个原因而挂起后,如果在接下来的某个时刻该进程对应的执行条件又获得了满足,此时此软件进程的状态马上从挂起态转变为准备态。每一个时钟周期将从硬件进程中选择一个硬件进程,同时在选中的硬件进程中选择一个处于激活状态的软件进程,并将选中的软件进程放到流水线的下一级,使下一级能够处理这个软件进程。在下一个时钟周期,再从下一个硬件进程选择一个软件进程,并将其放到流水线的下一级。
本发明主要通过记分牌标志位和进程挂起机制相结合的方式来严格保证寄存器文件置入操作时的数据一致性。当指令试图访问内容尚未更新完成的寄存器文件条目时,执行该指令的进程挂起,并且利用记分牌标志位来表示置入指令的寄存器文件目标条目的内容更新状况。
寄存器文件中的内容从逻辑上可以由多个条目组成,预先设置寄存器文件的条目的记分牌标志位。记分牌标志位可以为寄存器文件的D寄存器、或随机存储器(RAM)的一位或多位。设定当记分牌标志位的值为1代表寄存器文件的条目的内容没有更新完毕,当记分牌标志位的值为0代表寄存器文件的条目的内容已经更新完毕。
基于图4所示的CPU多进程执行示意图,图5为应用本发明一实施例的指令执行流程图。如图5所示,包括以下步骤步骤501取指令并对指令译码;步骤502判断指令是否为置入指令,如果是则执行步骤503及其后续步骤,如果不是则执行步骤504及其后续步骤;步骤503判断置入指令的目标条目的记分牌标志位的值是否为1,如果是则执行步骤508,如果不是则执行步骤505及其后续步骤;步骤504判断需要访问的寄存器文件的条目的记分牌标志位的值是否为1,如果是则执行步骤508,如果不是则执行步骤509;步骤505ALU单元设置记分牌标志位的值为1;步骤506执行置入操作;步骤507LSU单元设置记分牌标志位的值为0并发送记分牌标志位空闲信号到进程切换选择模块并结束;步骤508LSU单元发送记分牌标志位占用信号到进程切换选择模块,进程切换选择模块设置进程状态为挂起并结束;步骤509进程执行指令并结束。
以上过程中,也可以预先设定当记分牌标志位的值为0代表记分牌标志位被占用,当记分牌标志位为的值1代表记分牌标志位空闲。
以上过程中,当进程挂起后,每一个时钟周期将从硬件进程中选择一个硬件进程,同时在选中的硬件进程中再选择一个处于激活状态的软件进程,并将选中的软件进程放到流水线的下一级,使下一级能够处理这个软件进程。
以上过程中,寄存器文件的条目还可以对应多于1个记分牌标志位。当一个条目对应多个记分牌标志位的时候,在置入指令写入条目的时候,将这个条目所对应的所有记分牌标志位都设置为预先设定的占用值,当置入指令完成写入该条目时,设置该条目所对应的所有记分牌标志位为预先设定的空闲值。
以上过程中,其中在步骤508之后进程切换选择模块可以进一步判断是否所有的进程都已经被挂起,如果是则在流水线插入空指令,否则执行下一个选中的软件进程。
当进程试图访问寄存器文件的某条目时,ALU单元判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是占用值,LSU单元向进程选择切换模块发送记分牌标志位占用信号,该进程挂起,同时进程切换选择模块记录此进程挂起的原因。当LSU单元完成对寄存器文件的条目的更新操作时,LSU单元更新记分牌标志位并且发送记分牌标志位空闲信号到进程切换选择模块,进程切换选择模块收到此信号则认定引起该进程挂起的这个原因已不存在,同时将判断是否还有别的引起进程挂起的原因,如果没有别的引起进程挂起的原因,进程切换选择模块将该进程的状态从挂起设置为准备。
基于图4和图5所示,图6为本发明一实施例的因需访问尚未更新完毕的寄存器文件的条目而挂起的进程状态改变流程图。如图6所示,包括以下步骤步骤601当进程因需访问的寄存器文件的条目的记分牌标志位的值为占用值而挂起时,进程切换选择模块记录进程挂起的原因;步骤602寄存器文件的条目更新完毕后,LSU单元更新记分牌标志位的值为空闲值并发出记分牌标志位空闲信号到进程切换选择模块;步骤603进程切换选择模块判断是否还有其他引起进程挂起的原因,如果是则执行步骤604,否则执行步骤605;步骤604进程继续保存挂起状态,等待其他改变进程状态的信号并结束;步骤605进程切换选择模块根据LSU单元发出的记分牌标志位空闲信号设置进程状态为准备并结束。
当进程的状态为准备以后,进程切换选择模块就可以按照一定的选择原则而执行该进程。
图7为本发明一实施例指令流水线执行时序示意图。如图7所示,在指令译码Decode阶段执行完load指令后立即就执行sub指令,而不用插入任何等待周期。在这种情况下,CPU的整个流水线在执行load指令同执行别的指令一样,对整个流水线丝毫没有影响,而不会因为插入了等待周期而降低效率。
以上过程中,以4个硬件进程为例说明CPU多进程各进程之间的切换,而实际上硬件进程的个数可以相应调整,并且软件进程的个数也可以相应调整。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种多进程下寄存器文件置入操作时保持数据一致性的方法,其特征在于,包括以下步骤A1、预先为寄存器文件的条目设置记分牌标志位,置入操作时将目的条目的记分牌标志位的值设置为占用值,置入操作完成时,将目的条目的记分牌标志位的值设置为空闲值;A2、判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是占用值则设置执行此指令的进程状态为挂起并执行下一进程,如果不是占用值则执行指令。
2.根据权利要求1所述的方法,其特征在于,步骤A1所述的设置寄存器文件的条目的记分牌标志位的方法为将D寄存器设置为寄存器文件的条目的记分牌标志位、或将随机存储器RAM的一位或多位设置为寄存器文件的条目的记分牌标志位。
3.根据权利1所述的方法,其特征在于,步骤A1所述的将记分牌标志位的值设置为占用值或空闲值的方法为置入操作时,ALU单元将所述的记分牌标志位的值设置为占用值,置入操作完成时,LSU单元将所述记分牌标志位的值设置为空闲值。
4.根据权利1所述的方法,其特征在于,步骤A2为ALU单元判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是占用值,LSU单元向进程选择切换模块发送记分牌标志位占用信号,进程选择切换模块根据所述的记分牌标志位占用信号设置执行此指令的进程状态为挂起并执行下一进程;如果不是占用值则执行指令。
5.根据权利1所述的方法,其特征在于,在步骤A2所述的进程挂起之后,进程切换选择模块进一步判断是否所有的进程都挂起,如果是则在指令执行流水线插入空指令,否则执行下一进程。
6.根据权利3所述的方法,其特征在于,该方法进一步包括进程挂起后,如果置入指令完成,则LSU单元将记分牌标志位的值更新为空闲值,向进程切换选择模块发送记分牌标志位空闲信号,进程切换选择模块判断是否还有其它引起进程挂起的原因,如果没有,进程切换选择模块设置进程的状态为准备;如果有,进程继续等待,直至接收其它设置进程状态为准备的信号。
全文摘要
本发明公开了一种多进程下寄存器文件置入操作时保持数据一致性的方法,包括以下步骤预先设置寄存器文件的条目的记分牌标志位,置入指令执行时置记分牌标志位为占用值,置入指令完成置记分牌标志位为空闲值;判断指令需要访问的寄存器文件的条目的记分牌标志位的值是否为占用值,如果是则挂起执行当前指令的进程并执行下一进程,否则执行指令。本发明所提供的这种方法,在严格保证寄存器文件置入操作时的数据一致性的同时又保证了流水线的连续运行,而不会在流水线的执行中造成中断,从而极大地提高了CPU执行指令的效率。
文档编号G06F9/38GK1673954SQ20041002974
公开日2005年9月28日 申请日期2004年3月24日 优先权日2004年3月24日
发明者孙文华, 李敏秋, 刘义, 盛春明, 安辉 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1