在ARM中采用的是组相连的地址影响方式。如果cache块大小为,则同一块中的各地址中的位[31:L], 就是
31---------------------------------- 0
31往右数的L位
如果cache组大小是(每组包含的块数),则虚拟地址位[L+S-1:L]用于选择cache中的某个组。
Cache的分类:
1 独立cache 统一cache
独立是 指令和数据读写时时不同一cache。
2 写通cache和写回cache
写回只写入cache不入主存。
写通,cache,主存都有。
3 读操纵分配cache和写操作分配cache。
读操作分配: 如果cache不命中,只是简单写入主存,要读取时才进行cache预取。
写操作分配: 如果cache不命中,cache预取,
4 缓冲技术:
ARM中 I/O操作经常被映射为存储器读取操作实现。Cache技术要求两次读要有同样的结果,但是I/O操作就不满足上述条件。
写缓冲技术,(buffer),如果I/O操作被缓冲了,等到一个时间再把结果写回到I/O端,就好像又中断了一样。
所以MMU和PU 会将某些地址空间设置成非缓冲的。(uncachable,unbufferable)
5 存储系统的一致性问题。
地址映射关系造成的数据不一致
比如虚拟地址到物理地址的映射关系发生变化前,虚拟地址A1所在的数据块已经预取到cache,当虚拟地址和物理地址映射关系发生变化后,CPU访问A1,再用cache中数据块将发生错误。
6指令cache的数据一致性问题
Cache内容锁定,让关键代码和数据所在的块不会被替换。
CP15中 C7用于控制cache和写缓冲区
C9是cache内容锁定寄存器。
快速上下文切换技术 fast context switch extension , fcse.
一般情况下,两个进程占用的虚拟地址空间有重叠,系统在这两个进程间进行切换时,必须进行虚拟地址到物理地址的重映射。这就涉及到很多东西。MMU中页表,cache,TLB。
Fcse将各进程的虚拟空间切换成不同的虚拟空间。这样进行进程间切换时就不需要进行虚拟地址到物理地址的重映射。