内存CACHE中invaild、clean、flush的作用
这里说的内存,主要是指主存。它的读写速度虽然比磁盘快很多。但是相对于CPU的速度依旧还是慢。为加快cpu访问内存的速度,CPU和主存储器之前都会增加一级乃至三级高速缓存,cpu访问cache时,如果能到找到匹配的地址,会直接从缓存中取数据或将写入数据,而无需访问主存。
缓存cache被平均分成了多个cache line, cache line是cache和cpu之间数据传输的最小单位 如果系统上的cache line大小是64 bytes,在cache缺失后,CPU即使读取一个byte,cache也会从主存中load 64字节填充整个cache line。
cache的3种操作:
1.clean
检查对应内存cache line 的dirty bit。如果dirty bit为1,将cache line的内容写回下一级存储,并将dirty bit置为0;
CPU先读了内存中某块地址中的内容, DMA/其他硬件改写了这段DDR后,要将这段cache置为invalid,即OSIDcaheInvalidata ,目的是检查内存cahe line 的valid 位是否为1,为1则置为0,这样后续CPU访问此内存时,就不会使用cache中的数据,保证cpu访问的是改写后的数据,而不是cache中的旧数据。
2.invalid
检查对应内存cache line 的valid bit.如果valid bit 为1,置为0;
CPU写入新内容到内存的某块地址中,如果cache存储器中修改的部分被写入的主存位置的cache行有效,那么代码有可能只会被写入到cache中,而没有写入主存,程序跳转执行该处指令代码时,可能会导致执行主存中的原代码,而不是修改后的代码,OSIDcaheClean的意思是把脏的(即被改写过,dirty bit 为1)cache line强制写回到主存,并把cache行中的dirty位清零。这样便可以重建cache与主存之间的一致性。
3.flush
每条cache line 先clean,之后再invalid(如果能确认数据访问的流向,可以只使用clean或者invalid,而不必使用flush)