Mmu访问权限控制
Linux内核采用了虚拟内存技术,很大一部分作用就是安全作用,隔离各个进程之间的地址空间,防止用户空间的代码随意访问内核地址区域。Mmu支持对内存访问的权限控制,使得上述的安全功能得以实现。
内存域控制
Arm mmu协处理器cp15的c3寄存器是域访问控制寄存器。该寄存器总共32位,每2位控制一个域的访问方式,能够总共控制16个域。
访问控制的定义如下:
00表示不能访问该域
01表示检查页表项中的访问控制位
10表示保留值
11表示不需要检查页表项中的访问控制位
从上篇文章中,我们知道一级页表项中有一个domain域,这个域为4位,它的数值表示采用16个域中的其中一个域控制策略。
组相连cache,当cpu访问内存的时候,首先在cache中查找,查找的过程是,首先根据地址的组号,咋回到相应的cache组,然后将cache组中的cache line的区号和块号和地址的区号、块号做比对,如果有命中,就根据块内偏移地址读取cache line中的数据。
Cache写回内存的问题
Cache写回内存的方式有两种,一种是write back方式,也就是cache中的数据被修改后并不是立即写回入内存,而是当这个cache line被替换掉时,才会将原来的内容写回内存中去。另外一种方式是write through的方式,这种方式下,如果cache的内容被修改过后,会被立即回写到内存中。
我们说了这么多cache的东西,这对我们学习内核架构和写程序有什么好处内。当然有好处!记住这是内功,内功能让你练习其它武功是事半功倍。内功就是手中无剑但心中有剑,内功是一句口诀解万千变化!好了,不胡扯了。举个例子,arm芯片是没有IO空间的,寄存器的地址在和主存一样在地址空间中,但是寄存器的虚拟地址对应的页表项是绝对不能允许cache的。另外,当进程切换时,会更换页目录表,更换之后立即清除掉cache缓冲。