高速缓冲存储器控制方法、装置和系统的制作方法

文档序号:6359204阅读:191来源:国知局
专利名称:高速缓冲存储器控制方法、装置和系统的制作方法
技术领域
本发明涉及计算机技术,尤其涉及一种高速缓冲存储器控制方法、装置和系统。
背景技术
中央处理器(Central Process Unit,简称CPU)在运算时需要从主存储器即内存中读取数据,但是,内存的存取速度比CPU的操作速度慢得多,使得CPU的处理能力不能充分发挥,影响整个系统的工作效率。为了缓和CPU和内存速度不匹配的矛盾,通常在CPU和内存之间采用高速缓冲存储器cache, cache可以预先读取内存中的数据,CPU直接对cache进行存取操作。具体的,内存中包括用于存放数据的栈内存和堆内存,其中,栈内存是用于存储程序运行中的临时数据的一段内存,堆内存是为某个应用程序分配的一段内存,cache会保持 与栈内存和堆内存之间的数据一致,以保证CPU的正确读取。例如,当内存中新分配一段栈内存或者堆内存,并在程序对该内存操作时,cache会先读取该新分配地址对应的旧的存储数据,以保持数据一致;但是新分配的栈内存或者堆内存后续会存放新数据,cache读取的这些旧数据实际是无效数据,根本不需要读取。又例如,当程序完成对内存的使用后,进行栈回退或者堆内存释放操作,即释放所占用的内存地址时,为保持数据一致,cache也会将其内存储的在程序运行中改写过的数据写回到内存中,而实际上这些数据是已经使用过的数据,已经成为无效数据,根本不需要写回。因此,现有技术的cache执行了很多不必要的数据同步工作,而这些同步工作会使得在程序运行中CPU的ALU或者其他部件需要等待cache做完这些工作,增加了 CPU的等待时间,降低了 CPU的处理效率,并且,浪费带宽资源。

发明内容
本发明的第一个方面是提供一种高速缓冲存储器控制方法,以减少cache不必要的同步工作,提高CPU的处理效率,节省带宽。本发明的另一个方面是提供一种高速缓冲存储器控制装置,以减少cache不必要的同步工作,提高CPU的处理效率,节省带宽。本发明的又一个方面是提供一种高速缓冲存储器控制系统,以减少cache不必要的同步工作,提高CPU的处理效率,节省带宽。本发明提供的高速缓冲存储器cache控制方法,包括获取目标对象的变化的地址范围;根据所述变化的地址范围确定地址变化类型;若所述地址变化类型为内存地址的分配或者释放;则确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。
本发明提供的高速缓冲存储器cache控制系统,包括地址检测模块,用于获取目标对象的变化的地址范围;cache控制模块,用于根据所述变化的地址范围确定地址变化类型;若所述地址变化类型为内存地址的分配或者释放,则确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。本发明提供的高速缓冲存储器控制装置,包括本发明所述的高速缓冲存储器控制系统。本发明高速缓冲存储器控制方法的技术效果是通过获取目标对象的变化的地址范围得到地址变化类型,并可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache 执行不必要的同步工作,显著提高了 CPU的处理效率。本发明高速缓冲存储器控制装置的技术效果是通过获取目标对象的变化的地址范围得到地址变化类型,并可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。本发明高速缓冲存储器控制系统的技术效果是通过获取目标对象的变化的地址范围得到地址变化类型,并可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。


图I为本发明高速缓冲存储器控制系统一实施例的应用结构示意图;图2为本发明高速缓冲存储器控制系统另一实施例的工作流程示意图;图3为本发明高速缓冲存储器控制系统再一实施例的工作流程示意图;图4为本发明高速缓冲存储器控制方法实施例的流程示意图。
具体实施例方式实施例一本发明实施例首先提供一种高速缓冲存储器控制系统,为了使得对于该系统的结构和原理的说明更加清楚,本实施例是将该系统应用在中央处理器CPU中为例对系统进行描述。图I为本发明高速缓冲存储器控制系统一实施例的应用结构示意图,如图I所示,本实施例的系统可以包括地址检测模块11、cache控制模块12 ;其中,地址检测模块11,用于获取目标对象的变化的地址范围;例如,所述的目标对象可以包括栈内存、堆内存,或者用于存放代码段、数据段等数据的内存等。所述的变化的地址范围指的是,例如,对于栈内存,该变化的地址范围对应于栈增长或者栈回退的地址范围,可以获取该地址范围对应的初始内存地址和最新内存地址;对于堆内存,该变化的地址范围对应于堆内存分配或者释放时的地址范围,可以获取该地址范围对应的起始地址和结束地址。例如,该地址检测模块11与CPU中的算术逻辑单元算数逻辑单元(ArithmeticLogic Unit,简称ALU)连接,可以从ALU中获取栈内存的初始内存地址和最新内存地址。举例说明,原来的栈所占用的内存地址范围为al a2,在新分配栈内存后,新的栈所占用的内存地址范围为al a3,则该栈内存的初始内存地址为a2,最新内存地址为a3 ;堆内存的地址同理。cache控制模块12,与地址检测模块11连接,用于根据地址检测模块11检测到的目标对象的初始内存地址和最新内存地址确定地址变化类型,所述地址变化类型包括内存地址的分配或者释放;
例如,所述的内存地址的分配包括栈增长、堆分配;所述的内存地址的释放包括栈回退、堆释放。例如,仍以上述的栈内存变化为例,假设该栈内存为向高地址增长型。则若地址a3大于地址a2,则表明该栈内存的变化为“栈增长”,即,新分配了一段栈内存;若地址a3小于a2,则表明该栈内存的变化为“栈回退”,即,释放一段栈内存。所以,通过检测内存地址,可以根据该内存地址的变化分析得到变化类型;而一般新分配内存表示可能有新的应用程序将要运行并使用该内存,释放内存表示应用程序已经运行完毕;即,通过感知变化的地址范围得到了应用程序的运行行为。该cache控制模块12,还用于在所述地址变化类型为内存地址的分配或者释放时,确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。例如,若地址变化类型为内存地址的分配,则cache控制模块12确定与变化的地址范围对应的cache操作地址范围,即与分配的内存地址对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息,其中,cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。例如,在所述cache建立与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并将状态标识设置为clean,根据cache的工作原理,只要设置为未修改标识例如clean就能够禁止clean-line从下级存储器执行数据读入同步。若地址变化类型为内存地址的释放,则确定与变化的地址范围对应的cache操作地址范围,即与释放的内存地址对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息,其中,cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。例如,确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并禁止高速缓存行单元向下级存储器执行数据写出同步。所述的禁止执行数据同步的具体实施可以是,例如,将cache-line的状态标识设置为clean ;或者,将cache-line的状态标识设置为无效(即表示该cache-line未使用);或者,将cache-line的状态标识设置有效,但是在状态标识处增加一比特位,用于存储标识cache-line中的数据无效的状态标识;上述措施均可以使得cache-line不再执行数据同步。所述的下级存储器包括cache中的下一级cache或者内存。例如,cache中通常是按照高速缓存行单元(cache-line)来存储的,即cache中一般设置有多个存储数据的cache-line,操作指令也通常是对整个cache-line的操作。由地址检测模块11所获得的初始内存地址和最新内存地址构成的地址范围有可能其中一部分地址对应的是部分cache-line,不是完整的一个cache-line,此时一般是不进行操作的。举例说明,假设一个cache-line的长度是32字节,有两个cache-line,其中一个是O 32字节且均写满数据,另一个是33 64字节且只有33 36字节存储数据其他空间为空。现在发生了栈回退,栈回退对应的地址范围是28 36字节,则如果该栈回退对应的地址范围均设置为禁止数据同步,则两个cache-line需要全部禁止同步,这显然不合理,因为,第一个cache-line中的O 27字节的数据是需要同步的,否则会造成数据不一致。因此,只能是对第二个cache-line禁止同步,第一个cache-line需要同步。由此可以看到,cache操作地址范围与实际检测到的内存地址变化范围并不一定是完全相同的,需要根据cache的内部结构即是按照cache-line组织存储,以及cache中的操作方式即以整个cache-line为操作对象,来确定具体的cache操作地址范围,这里的 cache操作地址范围可以理解为,对cache中的哪几个cache-line执行操作,或者这几个cache-line对应的地址。其中,cache中的每一个cache-line都对应设置有一个该cache-line的状态标识,cache-line也是按照该状态标识进行操作的。例如,应用程序在运行时,所涉及到的大部分数据存取操作都是CPU直接从cache执行的,cache中的数据被改写,cache将被改写的cacheline标记为dirty,表示被改写,后续cache会将数据写回到下级存储器(内存或下级cache),以保证数据的正确性。相应的,本实施例在内存地址分配或者释放时,禁止所述cache在所述cache操作地址范围执行数据同步。例如,确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并将cache-line的状态标识设置为clean,使得cache-line根据该状态标识不再读写无效数据,从而减少CPU的等待延时,提高CPU的处理效率,并且节省了带宽资源。
更进一步的,本实施例的cache控制模块12可以包括地址和操作生成单元13、cache指令生成单元14、cache操作控制单元15。其中,地址和操作生成单元13,与地址检测模块11连接,可以接收地址检测模块11得到的目标对象的变化的地址范围,并可以根据上述变化的地址范围判断得到地址变化类型为分配或者释放;以及,可以确定该分配或者释放的内存地址对应的cache操作地址范围,所述的cache操作地址范围为仅包括所述分配或者释放的内存地址中的地址的高速缓存行单元;还确定所述地址变化类型对应的cache操作信息。例如,若为内存地址的分配,则所述cache操作信息为所述在cache建立与分配的内存地址对应的高速缓存行单元,并禁止所述cache在所述高速缓存行单元执行数据同步;若为内存地址的释放,则所述cache操作信息为所述禁止所述cache在所述高速缓存行单元执行数据同步。其中,cache指令生成单元14,与地址和操作生成单元13连接,用于接收地址和操作生成单元13传送的所述cache操作地址范围、以及所述cache操作信息;并将上述信息转换为用于控制cache操作的cache控制指令,例如,生成“cache操作地址和指令”序列。可选的,cache指令生成单元14,具体用于将所述cache操作地址范围转换为地址范围指令,或者,将所述cache操作地址范围转换为对应的地址序列指令。S卩,控制cache操作可以是对cache中的地址范围或者地址序列,例如,通常在对cache控制时是根据地址序列,假设某一个cache-line的地址范围是al a2,另一个cache-line的地址范围是a3 a4,如果要对这两个cache-line操作,则控制指令是地址序列“a2、a4”,即从每个cache-line的地址范围中选择一个单独的地址,用于标识该cache-line,通过地址序列“a2、a4”就可以得知控制的是a2对应的cache-line以及a4对应的cache-line。本实施例对此进行了扩展,通过地址范围控制cache,控制指令可以为“al a2”, cache就可以根据该地址范围得知需要操作的是哪个cache-line。其中,cache操作控制单元15,位于cache中,并且与cache指令生成单元14连接,用于根据cache指令生成单元14生成的cache控制指令,控 制对应的cache操作信息,例如,将cache的与变化的地址范围对应的高速缓存行单元的状态标识设置为禁止数据同步同步标识例如clean。可选的,地址和操作生成单元13,具体用于由所述cache操作地址范围中选取部分操作地址范围,在所述部分操作地址范围执行cache操作信息即禁止执行数据同步。即,操作的cache地址范围可以是部分地址,只实现部分地址的cache操作。例如,由内存地址变化得到的初始cache操作地址范围包括三个cache-line,可以选择其中的两个cache-line作为实际的cache操作地址范围,另一个cache-line不进行相关cache操作信肩、O可选的,当地址变化类型为内存地址的释放时,cache控制模块12,具体用于将cache的高速缓存行单元的状态标识设置为未修改标识;或者,将所述cache的高速缓存行单元的状态标识设置为无效标识;或者,为所述cache的高速缓存行单元中的存储数据设置无效标识。可选的,地址检测模块11中存储栈地址或者堆地址的方式可以为通过寄存器方式,将上述地址存储在地址检测模块11的寄存器中;或者,可以是指令方式,通过地址传输指令,传递相关地址和操作到地址检测模块11中。所述指令方式,可以采用现有指令,操作通用寄存器,将上述地址送到地址检测模块11中,或者在已有指令集基础上新增指令,该新增的指令将上述地址存储到地址检测模块11。地址和操作生成单元13可以根据地址检测模块11后续送入的地址,产生cache操作地址范围和操作指令。指令方式每次操作可以是一个地址,分2次操作;或者一次指令操作两个地址;指令操作码可以包含对应的操作类型,如将所述的地址对应的cache-line的状态置为clean、无效或者数据无效。例如,通过对cache操作的指令来完成上述的“对特定的cache-line”进行“禁止所述cache在所述高速缓存行单元执行数据同步”的操作;以代码的方式表示,可以是CaChe_Clean rl, r2,或者Cache_operationrI, r2, clean ;其中rI, r2是通用寄存器,存放地址范围,可以是起始地址+长度,也可以是起始地址+结束地址等。需要说明的是,本实施例的各模块的划分只是一种示例,具体实现中,并不限制在本实施例的模块划分方式,只要能实现该整个系统的功能即可。例如,地址序列的产生可以在地址和操作生成单元,也可以在cache指令生成单元等。并且,本实施例的各个模块或者单元,可以是硬件实现,也可以是软件实现,不做限制。此外,本实施例的方案适用于一级或者多级cache,当cache为包括多级存储单元的多级cache时,多级cache通常下级为上级提供数据缓存,容量更大,但速度更低,例如L2cache、L3cache,各级cache存储的数据需要保持一致。交互主要也是数据同步。针对多级cache,在每一级cache都包括本实施例的地址和操作生成单元、cache指令生成单元和cache操作控制单元,该三个单元可采取与前级相同的处理,不再赘述;只是,由于各级cache-line size不同,各级cache对应的cache操作地址范围是不同的。可选的,多级存储单元中的上一级存储单元分别向下一级存储单元发送所述cache操作地址范围,以使得所述下一级存储单元根据所述cache操作地址范围以及下一级存储单元的高速缓存行单元的长度,生成对应所述下一级存储单元的cache操作地址范围。或者,多级存储单元中的最高一级存储单元将所述变化的地址范围同时发送至所有下级存储单元,以使得所述下级存储单元根据所述变化的地址范围,分别得到对应所述下级存储单元的cache操作地址范围。本实施例的高速缓冲存储器控制系统,通过检测栈或堆内存的地址变化类型,可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。 实施例二图2为本发明高速缓冲存储器控制系统另一实施例的工作流程示意图,本实施例是结合图I所示的系统结构,以及该图2所示的系统工作流程,以栈增长、栈回退的cache控制为例,对高速缓冲存储器控制系统的工作原理进行说明。其中,本实施例是以CPU中不存在内存管理单元(Memory Management Unit,简称MMU)为例,即cache地址和所检测到的内存地址的格式是一致的,不需要进行虚拟地址(程序内存地址)到物理地址(cache地址)的转换。201、地址检测模块检测栈指针的值,获得栈内存的初始内存地址和最新内存地址;其中,栈内存的地址是由栈指针标识的,CPU在改变栈内存的地址时,会相应使得ALU中的栈指针寄存器的值发生改变。高速缓冲存储器控制系统中的地址检测模块11可以获取ALU中的栈指针值,该栈指针值即为内存地址,检测栈指针值是否发生变化;并在发生变化时,将旧栈指针对应的初始内存地址、以及新栈指针对应的最新内存地址发送至地址和操作生成单元13。202、地址和操作生成单元根据栈指针值判断栈内存的变化类型;栈增长的方向可以分为栈向低地址增长、栈向高地址增长;本实施例以栈向低地址增长为例,但是对于栈向高地址增长也同样适用。例如,地址和操作生成单元比较新、旧栈指针的值,如果新地址比旧地址小,则表明栈内存的变化类型为栈增长;如果新地址比旧地址大,则表明栈内存的变化类型为栈回退。203、地址和操作生成单元根据栈内存的变化,确定cache操作地址范围;并根据栈内存的变化类型,得到与该变化类型对应的cache操作信息;其中,所述的与栈内存的变化类型对应的cache操作信息可以是预先设定在地址和操作生成单元的,地址和操作生成单元在确定地址变化类型后,可以查询获得对应的cache操作信息。
具体的,如果是栈增长,则对应的cache操作信息是在cache建立与分配的内存地址对应的高速缓存行单元即cache-line,并将高速缓存行单元的状态标识设置为禁止数据同步,例如标记为clean ;由于标记为clean, cache-line就会认为该数据不需要执行同步,所以不会从下级存储器件获取同步数据;所述的高速缓存行单元为cache操作地址范围;例如,对于栈向低地址增长的类型,cache操作地址范围是从新的栈地址向低地址按cache-line对齐开始,到旧的栈地址向低地址按cache-line长度对齐对齐,即cache操作地址范围[SI, S2] = [floor (new SP (新的栈地址),cache-line size), floor (oldSP (旧的栈地址),cache-line size )];举例说明假设旧的栈地址为136,新的栈地址为68,由于68 < 136,所以为栈增长,单个cache-line的长度为32,地址高于136的数据,还在被使用,所以不能优化,故地址136所在的cache-line不能被优化,由此则cache操作地址范围[S1,S2] = [floor (68,32), floor(136,32)] = [64,128]。可能可选的,该cache操作地址范围,在具体实现中,可以是从地址范围开始,按照cache-line增长,也可以是地址范围本身起始和结束地址按照cache-line对齐。例如,地址范围可以采用如下方式I)[起始地址,结束地址];如上述
;2)[起始地址,长度];如上述地址范围可表述为
;3)[起始地址,次数];如上述地址范围可表述为
;4)[起始地址对齐到cache line,结束地址对齐到cache line];如上述地址范围可表述为
;5)[起始地址对齐到cache line,长度];如上述地址范围可表述为
;6)[起始地址对齐到cache line,次数];如上述地址范围可表述为
;具体的,如果是栈回退,则对应的cache操作信息是控制所述cache在所述cache的高速缓存行单元禁止执行数据同步;例如,具体实现中,可以是将对应的cache操作地址范围对应的cache-line的状态标识设置为clean,则该数据将不再被同步;或者,由于栈回退的数据是已经使用过的无效数据,也可以直接将所述的cache-line的数据进行消除。从而避免了 cache执行不必要的数据同步工作,提高了 CPU的处理效率。所述对应的cache操作地址范围是从新的栈地址向低地址按cache_l ine对齐开始,到旧的栈地址向上按cache-line长度对齐对齐,S卩[SI,S2] = [floor (old SP,cache-line size), floor(new SP,cache-line size)]。举例说明假设旧的栈地址为68,新的栈地址为136,由于136 > 68,所以为栈回退,单个cache-line的长度为32,地址高于136的数据,还在被使用,所以不能优化,故地址136所在的cache-line不能被优化,由此则cache操作地址范围[S1,S2] = [floor (68,32), floor(136,32)] = [64,128]。204、地址和操作生成单元将cache操作地址范围、cache操作信息发送至cache指令生成单元,由cache指令生成单元生成cache控制指令;其中,cache指令生成单元14在接收到cache操作地址范围、cache操作信息之后,将其生成用于控制cache的指令序列;205、cache指令生成单元将cache控制指令发送至cache操作控制单元15 ;由cache操作控制单兀15根据所述cache控制指令,控制cache在所述cache操作地址范围执行所述cache操作信息。进一步的,上述的工作流程是以栈内存的变化为例;对于堆内存的变化,系统的工作流程与上述流程基本相同,也是从ALU中获取到堆内存的地址范围,并执行上述的流程,不再赘述。其中,在对于堆内存的变化时,堆内存的地址范围可以是由软件从ALU中获取后写入到地址检测模块11中的寄存器的。
其中,在对于堆内存的变化时,举例说明堆内存释放时的cache操作地址范围的确定堆内存释放时,释放的内存地址从0x80202012-0x80203034,这段地址范围内的数据不会再被使用,因此也不需要同步到下级存储器。但是0x80202012之前的数据,以及0x80203034之后的数据(不含这2个地址,都有可能被程序使用),因此cache优化操作不能对这部分数据进行优化。因此实际操作的地址范围是[roof (0x80202012,32),floor (0x80203034,32)] =
,共涵盖 128 个 cache-line。其中,针对堆内存变化的cache操作地址范围的确定,可归纳为[roof (start,cache-line size, floor (end, cache-line size)],针对栈内存变化的 cache 操作地址范围的确定,可以归纳为如果向低地址增长,则向低地址对齐,即为[floor(start,cache-line size, floor (end, cache-line size)];如果向高地址增长,则向高地址对齐,即为[roof (start, cache-line size, roof (end, cache-line size)]。本实施例的高速缓冲存储器控制系统,通过检测栈或堆内存的地址变化类型,可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。实施例三图3为本发明高速缓冲存储器控制系统再一实施例的工作流程示意图,本实施例与图2所示实施例的区别在于,本实施例的系统所应用的CPU中存在MMU,需要进行虚拟地址(内存地址)到物理地址(cache地址)的转换;并且以通过检测MMU得知发生了任务切换为例,所述的任务指的是应用程序,切换是指程序切换到另一个栈运行。例如intel x86CPU的cr3寄存器的值发生变换,则说明任务发生切换。此外,具体实施中,也可以检测MMU中的转译查找缓存(Translation LookasideBuffer,简称TLB),通过将栈指针虚拟地址送给TLB,TLB转换得到物理地址,如果所命中的TLBentry中的ASID不一样,则说明发生了切换。例如,如果MMU的映射关系未发生变化,但是通过TLB转换栈指针的虚拟地址到物理地址时,所命中的TLB中的ASID发生变化,即可认为是发生了任务切换。另外,对于一个CPU,栈的范围是受限的,所以也可以通过比较栈指针的变化范围是否大于设定阈值,来确定栈是否发生切换。这个特定值可由软件提供到特定的寄存器,也可由硬件短路硬编码固定。即,在MMU的映射关系信息发生变化时,栈内存一定发生切换;在MMU的映射关系信息未发生变化时,如果栈内存的变化的地址范围超过设定阈值,则也断定任务切换即栈内存发生切换。此时可以获取变化之后的内存映射关系信息对应的栈内存的初始内存地址和最新内存地址,或者,超过设定阈值的栈内存对应的初始内存地址和最新内存地址。301、地址检测模块检测栈指针的值,获得栈内存的初始内存地址和最新内存地址;并且,地址检测模块还通过MMU/TLB查询内存地址对应的cache地址,以及是否发生任务切换;可选的,也可以是地址和操作生成单元执行所述的地址转换操作,即通过MMU/TLB查询内存地址对应的cache地址。同时,地址检测模块还通过检测MMU/TLB的信息查看是否发生任务切换。具体的,MMU/TLB中存储有当前任务的主要信息,例如,与任务对应的内存映射关系信息,当任务发生变化时,MMU/TLB中的内存映射关系信息也会发生变化,地址检测模块就可以通过检测 MMU的信息变化,检测到是否发生任务切换。假设本实施例中发生了任务切换;302、地址检测模块将转换后的cache地址发送至地址和操作生成单元,并且通知地址和操作生成单元,发生了任务切换;303、地址和操作生成单元将之前接收到的地址检测模块检测到的栈地址设置为无效状态,并接收新任务的栈指针值,作为新任务的初始内存地址;因为任务切换前后,栈指针变化之间的空间并不构成一个栈帧;所以在任务切换完成前,栈指针的值是无效的。任务切换时,先保存被切换出去的任务的运行环境(寄存器等),再切换内存映射,在内存映射完成后,将新切换进来的任务的运行环境恢复,此时将新任务的栈指针值写入栈指针寄存器,新任务的程序继续运行;地址检测模块将新任务的栈指针值发送到地址和操作生成单元,该栈指针是该新任务上次的内存地址,即可以作为该新任务的初始内存地址。此时,地址和操作生成单元将接收到的栈指针值又重新设置为有效状态。304、地址检测模块检测到新任务的栈指针发生变化,将新的栈指针值发送到地址和操作生成单元;305、地址和操作生成单元根据303中的初始内存地址和304中的最新内存地址,生成新任务的地址范围、地址变化类型以及对应的cache操作信息;306、cache指令生成单元接收cache操作地址范围、cache操作信息,并转换为cache控制指令发送至cache操作控制单兀;307、cache操作控制单兀根据cache控制指令,控制cache在所述cache操作地址范围执行所述cache操作信息。本实施例的高速缓冲存储器控制系统,通过检测栈或堆内存的地址变化类型,可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。实施例四
图4为本发明高速缓冲存储器控制方法实施例的流程示意图,本实施例的方法可以由本发明任意实施例的高速缓冲存储器控制系统所执行,本实施例对该方法只做简单说明,具体可以结合参见实施例所述。如图4所示,该方法可以包括401、获取目标对象的变化的地址范围;402、根据所述变化的地址范围确定地址变化类型;所述地址变化类型包括内存地址的分配或者释放;403、若所述地址变化类型为内存地址的分配或者释放,则确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。例如,若为内存地址的分配,则在所述cache建立与分配的内存地址对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并禁止所述cache在所述高速缓存行单元执行数据同步;例如,若为内存地址的释放,则确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并禁止所述cache在与所述高速缓存行单元执行数据同步。具体的,所述控制cache在cache操作地址范围执行cache操作信息,包括根据 所述变化的地址范围以及地址变化类型,得到所述cache操作地址范围、以及与所述地址变化类型对应的所述cache操作信息;将所述cache操作地址范围、所述cache操作信息转换为cache控制指令;根据所述cache控制指令,控制cache在所述cache操作地址范围执行所述cache操作信息。例如,当所述目标对象为栈内存时,所述获取目标对象的变化的地址范围,具体为检测与所述栈内存对应的栈指针的值,获得所述栈内存的初始内存地址和最新内存地址。可选的,所述目标对象为栈内存;还包括检测MMU中的内存映射关系信息或者栈内存的变化的地址范围是否超过设定阈值;若所述内存映射关系信息发生改变或者所述地址范围超过设定阈值,则所述获取目标对象的变化的地址范围,具体为获取变化之后的内存映射关系信息对应的栈内存的初始内存地址和最新内存地址,或者,超过设定阈值的栈内存对应的初始内存地址和最新内存地址;相应的,所述确定与分配的内存地址对应的cache操作地址范围,包括查询所述MMU获得与所述栈内存的初始内存地址和最新内存地址分别对应的cache地址;根据所述cache地址确定与分配的内存地址对应的cache操作地址范围。可选的,所述确定与分配或者释放的内存地址对应的cache操作地址范围,包括确定仅包括所述分配或者释放的内存地址中的地址的高速缓存行单元为所述cache操作地址范围。可选的,还包括由所述cache操作地址范围中选取部分操作地址范围;相应的,所述控制cache在cache操作地址范围执行cache操作信息,具体为控制cache在部分cache操作地址范围执行cache操作信息。可选的,若所述地址变化类型为内存地址的释放,则所述控制cache的高速缓存行单元禁止执行数据同步,具体包括将cache的高速缓存行单元的状态标识设置为未修改标识;或者,将所述cache的高速缓存行单元的状态标识设置为无效标识;或者,为所述cache的高速缓存行单元中的存储数据设置无效标识。可选的,所述cache操作地址范围转换为cache控制指令,具体为将所述cache操作地址范围转换为地址范围指令;或者,将所述cache操作地址范围转换为对应的地址序列指令。可选的,所述cache包括多级存储单元;还包括所述多级存储单元中的上一级存储单元分别向下一级存储单元发送所述cache操作地址范围,以使得所述下一级存储单元根据所述cache操作地址范围以及下一级存储单元的高速缓存行单元的长度,生成对应所述下一级存储单元的cache操作地址范围;或者,所述多级存储单元中的最高一级存储单元将所述变化的地址范围同时发送至所有下级存储单元,以使得所述下级存储单元根据所述变化的地址范围,分别得到对应所述下级存储单元的cache操作地址范围。本实施例的高速缓冲存储器控制方法,通过检测栈或堆内存的地址变化类型,可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进 行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。实施例五本发明实施例还提供一种高速缓冲存储器控制装置,该装置包括本发明任意实施例的高速缓冲存储器控制系统。例如,该装置可以为中央处理器CPU,参见图I所示,该CPU中包括本发明任意实施例的高速缓冲存储器控制系统,还包括算术逻辑单元ALU、高速缓冲存储器cache等。其中,高速缓冲存储器控制系统中的地址检测模块与ALU连接,用于从ALU中获取栈或者堆的内存地址;cache控制模块与cache连接,可以根据检测的栈或堆内存地址的变化得到对应的cache操作地址范围、以及cache操作信息,并据此控制cache执行对应操作,使得cache在分配新内存或者释放内存时不再进行不必要的数据同步,从而提高CPU的处理效率。进一步的,该CPU还可以包括MMU/TLB,高速缓冲存储器控制系统中的地址和操作生成单元,与所述MMU连接,可以通过MMU进行地址转换,将内存的虚拟地址转换为对应的cache地址,以及通过检测MMU中的信息变化或者栈内存的变化范围查看是否发生任务切换等。本实施例的高速缓冲存储器控制装置,通过检测栈或堆内存的地址变化类型,可以根据该变化类型控制cache执行对应操作,即在内存地址分配或者释放时,禁止cache进行数据同步,从而解决了 CPU等待延时的问题,避免了 cache执行不必要的同步工作,显著提高了 CPU的处理效率。本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方 案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种高速缓冲存储器cache控制方法,其特征在于,包括 获取目标对象的变化的地址范围; 根据所述变化的地址范围确定地址变化类型;若所述地址变化类型为内存地址的分配或者释放;则 确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。
2.根据权利要求I所述的高速缓冲存储器控制方法,其特征在于,若所述地址变化类型为内存地址的分配,则 所述确定与变化的地址范围对应的cache操作地址范围,包括在所述cache建立与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范 围; 所述禁止所述cache在所述cache操作地址范围执行数据同步具体为禁止所述cache在所述高速缓存行单元执行数据同步。
3.根据权利要求I所述的高速缓冲存储器控制方法,其特征在于,若所述地址变化类型为内存地址的释放,则 所述确定与变化的地址范围对应的cache操作地址范围,包括确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围; 所述禁止所述cache在所述cache操作地址范围执行数据同步具体为禁止所述cache在所述高速缓存行单元执行数据同步。
4.根据权利要求1-3任一所述的高速缓冲存储器控制方法,其特征在于,所述控制cache在cache操作地址范围执行cache操作信息,包括 根据所述变化的地址范围以及地址变化类型,得到所述cache操作地址范围以及所述cache操作信息; 将所述cache操作地址范围、所述cache操作信息转换为cache控制指令; 根据所述cache控制指令,控制cache在所述cache操作地址范围执行所述cache操作信息。
5.根据权利要求1-4任一所述的高速缓冲存储器控制方法,其特征在于,当所述目标对象为找内存时,所述获取目标对象的变化的地址范围,具体为 检测与所述栈内存对应的栈指针的值,获得所述栈内存的初始内存地址和最新内存地址; 相应的,所述根据所述变化的地址范围确定地址变化类型,所述地址变化类型包括内存地址的分配或者释放,具体为 若根据所述栈内存的初始内存地址和最新内存地址获知为栈增长,则确定所述地址变化类型为内存地址的分配;或者, 若根据所述栈内存的初始内存地址和最新内存地址获知为栈回退,则确定所述地址变化类型为内存地址的释放。
6.根据权利要求1-4任一所述的高速缓冲存储器控制方法,其特征在于,如果存在MMU,所述目标对象为栈内存,所述方法还包括检测MMU中的内存映射关系信息是否发生改变,若所述内存映射关系信息发生改变,则所述获取目标对象的变化的地址范围具体为获取内存映射关系信息发生改变之后的栈内存的初始内存地址和最新内存地址; 相应的,所述确定与变化的地址范围对应的cache操作地址范围,包括 查询所述MMU获得与所述栈内存的初始内存地址和最新内存地址分别对应的cache地址; 根据所述cache地址确定与所述变化的地址范围对应的cache操作地址范围。
7.根据权利要求1-4任一所述的高速缓冲存储器控制方法,其特征在于,如果存在MMU,所述目标对象为栈内存,所述方法还包括 检测栈内存的变化的地址范围是否超过设定阈值;若所述地址范围超过设定阈值,则所述获取目标对象的变化的地址范围具体为获取超过设定阈值的栈内存对应的初始内存地址和最新内存地址; 相应的,所述确定与变化的地址范围对应的cache操作地址范围,包括 查询所述MMU获得与所述栈内存的初始内存地址和最新内存地址分别对应的cache地址; 根据所述cache地址确定与所述变化的地址范围对应的cache操作地址范围。
8.根据权利要求1-7任一所述的高速缓冲存储器控制方法,其特征在于,所述确定与变化的地址范围对应的cache操作地址范围,包括 确定仅包括所述变化的地址范围中的地址的高速缓存行单元为所述cache操作地址范围。
9.根据权利要求1-7任一所述的高速缓冲存储器控制方法,其特征在于,所述控制cache在cache操作地址范围执行cache操作信息,具体为由所述cache操作地址范围中选取部分操作地址范围,在部分cache操作地址范围执行cache操作信息。
10.根据权利要求3所述的高速缓冲存储器控制方法,其特征在于,若所述地址变化类型为内存地址的释放,则所述禁止cache在所述高速缓存行单元执行数据同步,具体包括 将所述高速缓存行单元的状态标识设置为未修改标识;或者, 将所述高速缓存行单元的状态标识设置为无效标识;或者, 为所述高速缓存行单元中的存储数据设置无效标识。
11.根据权利要求2所述的高速缓冲存储器控制方法,其特征在于,若所述地址变化类型为内存地址的分配,则所述禁止cache在所述高速缓存行单元执行数据同步,具体包括 将所述高速缓存行单元的状态标识设置为未修改标识;或者, 为所述高速缓存行单元中的存储数据设置无效标识。
12.根据权利要求4所述的高速缓冲存储器控制方法,其特征在于,所述cache操作地址范围转换为cache控制指令,具体为 将所述cache操作地址范围转换为地址范围指令, 或者,将所述cache操作地址范围转换为对应的地址序列指令。
13.—种高速缓冲存储器cache控制系统,其特征在于,包括 地址检测模块,用于获取目标对象的变化的地址范围; cache控制模块,用于根据所述变化的地址范围确定地址变化类型;若所述地址变化类型为内存地址的分配或者释放,则确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。
14.根据权利要求13所述的高速缓冲存储器cache控制系统,其特征在于,若地址变化类型为内存地址的分配,则 所述cache控制模块,具体用于在所述cache建立与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并禁止所述cache在所述高速缓存行单元执行数据同步。
15.根据权利要求13所述的高速缓冲存储器cache控制系统,其特征在于,若地址变化类型为内存地址的释放,则 所述cache控制模块,具体用于确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并禁止所述cache在所述高速缓存行单 元执行数据同步。
16.根据权利要求13-15任一所述的高速缓冲存储器控制系统,其特征在于,所述cache控制模块,包括 地址和操作生成单元,用于根据所述变化的地址范围确定地址变化类型,所述地址变化类型包括内存地址的分配或者释放;以及,用于根据所述变化的地址范围以及地址变化类型,得到所述cache操作地址范围以及所述cache操作信息; cache指令生成单元,用于将所述cache操作地址范围、所述cache操作信息转换为cache控制指令; cache操作控制单兀,用于根据所述cache控制指令,控制cache在所述cache操作地址范围执行所述cache操作信息。
17.根据权利要求13-16任一所述的高速缓冲存储器控制系统,其特征在于,所述目标对象为栈内存;相应的, 所述地址检测模块,具体用于检测与所述栈内存对应的栈指针的值,获得所述栈内存的初始内存地址和最新内存地址; 所述cache控制模块,具体用于根据所述栈内存的初始内存地址和最新内存地址,确定地址变化类型;若为栈增长,则所述地址变化类型为内存地址的分配;或者,若为栈回退,则所述地址变化类型为内存地址的释放。
18.根据权利要求13-16任一所述的高速缓冲存储器控制系统,其特征在于,如果存在MMU,所述目标对象为栈内存,则 所述地址检测模块,具体用于检测MMU中的内存映射关系信息是否发生改变;若所述内存映射关系信息发生改变,则获取内存映射关系信息发生改变之后的栈内存的初始内存地址和最新内存地址; 所述地址和操作生成单元,具体用于查询所述MMU获得与所述栈内存的初始内存地址和最新内存地址分别对应的cache地址,并根据cache地址确定与所述变化的地址范围对应的cache操作地址范围。
19.根据权利要求13-16任一所述的高速缓冲存储器控制系统,其特征在于,如果存在MMU,所述目标对象为栈内存,则所述地址检测模块,具体用于检测栈内存的变化的地址范围是否超过设定阈值;若所述地址范围超过设定阈值,则获取超过设定阈值的栈内存对应的初始内存地址和最新内存地址; 所述地址和操作生成单元,具体用于查询所述MMU获得与所述栈内存的初始内存地址和最新内存地址分别对应的cache地址;并根据cache地址确定与所述变化的地址范围对应的cache操作地址范围。
20.根据权利要求13-19任一所述的高速缓冲存储器控制系统,其特征在于, 所述地址和操作生成单元,具体用于确定仅包括所述变化的地址范围中的地址的高速缓存行单元为所述cache操作地址范围。
21.根据权利要求13-19任一所述的高速缓冲存储器控制系统,其特征在于, 所述地址和操作生成单元,具体用于由cache操作地址范围中选取部分操作地址范围,控制cache在部分cache操作地址范围执行cache操作信息。
22.根据权利要求13所述的高速缓冲存储器控制系统,其特征在于, 所述cache控制模块,具体用于在所述地址变化类型为内存地址的释放时,确定与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并将所述高速缓存行单元的状态标识设置为未修改标识;或者,为所述高速缓存行单元中的存储数据设置无效标识;或者,为所述高速缓存行单元中的存储数据设置无效标识; 或者,具体用于在所述地址变化类型为内存地址的分配时,在所述cache建立与所述变化的地址范围对应的高速缓存行单元,所述高速缓存行单元为所述cache操作地址范围;并将所述高速缓存行单元的状态标识设置为未修改标识;或者,为所述高速缓存行单元中的存储数据设置无效标识。
23.根据权利要求13所述的高速缓冲存储器控制系统,其特征在于, 所述cache指令生成单元,具体用于将所述cache操作地址范围转换为地址范围指令,或者,将所述cache操作地址范围转换为对应的地址序列指令。
24.一种高速缓冲存储器控制装置,其特征在于,包括权利要求13-23任一所述的高速缓冲存储器控制系统。
25.根据权利要求24所述的高速缓冲存储器控制装置,其特征在于,所述高速缓冲存储器控制装置为中央处理器CPU ;所述CPU还包括算术逻辑单元ALU、高速缓冲存储器cache ; 所述高速缓冲存储器控制系统中的地址检测模块,与所述ALU连接; 所述高速缓冲存储器控制系统中的cache控制模块,与所述cache连接。
26.根据权利要求25所述的高速缓冲存储器控制装置,其特征在于,所述CPU还包括内存管理单元MMU ; 所述高速缓冲存储器控制系统,与所述MMU连接。
全文摘要
本发明提供一种高速缓冲存储器控制方法、装置和系统,其中方法包括获取目标对象的变化的地址范围;根据变化的地址范围确定地址变化类型,若为内存地址的分配或者释放,则确定与变化的地址范围对应的cache操作地址范围,并控制cache在cache操作地址范围执行cache操作信息;所述cache操作信息为禁止所述cache在所述cache操作地址范围执行数据同步。本发明避免了cache执行不必要的同步工作,显著提高了CPU的处理效率,降低了对总线和内存带宽的需求。
文档编号G06F12/08GK102725741SQ201180003800
公开日2012年10月10日 申请日期2011年12月31日 优先权日2011年12月31日
发明者蔡安宁 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1