上周介绍了arm mmu的部分知识,主要是内存映射方面的一些知识,由于arm对内存映射的处理比较灵活,但是总的原来和x86内存映射的机制原来是一样的。《linux内核情景分析》等书籍中有关于内存映射内核方面详细的介绍,可以触类旁通。本节要补充介绍一些arm mmu的一些内容

Mmu访问权限控制
Linux内核采用了虚拟内存技术,很大一部分作用就是安全作用,隔离各个进程之间的地址空间,防止用户空间的代码随意访问内核地址区域。Mmu支持对内存访问的权限控制,使得上述的安全功能得以实现。

内存域控制
Arm mmu协处理器cp15的c3寄存器是域访问控制寄存器。该寄存器总共32位,每2位控制一个域的访问方式,能够总共控制16个域。

ARM MMU介绍-LMLPHP

访问控制的定义如下:
00表示不能访问该域
01表示检查页表项中的访问控制位
10表示保留值
11表示不需要检查页表项中的访问控制位
从上篇文章中,我们知道一级页表项中有一个domain域,这个域为4位,它的数值表示采用16个域中的其中一个域控制策略。

ARM MMU介绍-LMLPHP
如果一级页表项中的domain域选择了需要进行访问权限检查,那么mmu会根据页表项的ap,cp15中的S、R位来决定cpu对内存的访问权限。

ARM MMU介绍-LMLPHP

Cache 相关的内容
Cpu中引入cache的作用主要是提高cpu对内存的访问速度。Cache种类比较多,主要有全相连cache、直接cache、和组相连cache。ARM920T有16K的数据cache和指令cache。采用的组相连形式,每条cache line为32字节,一个cache有512条cache line,总共分为64组。

ARM MMU介绍-LMLPHP

组相连cache,当cpu访问内存的时候,首先在cache中查找,查找的过程是,首先根据地址的组号,咋回到相应的cache组,然后将cache组中的cache line的区号和块号和地址的区号、块号做比对,如果有命中,就根据块内偏移地址读取cache line中的数据。

Cache写回内存的问题
Cache写回内存的方式有两种,一种是write back方式,也就是cache中的数据被修改后并不是立即写回入内存,而是当这个cache line被替换掉时,才会将原来的内容写回内存中去。另外一种方式是write through的方式,这种方式下,如果cache的内容被修改过后,会被立即回写到内存中。

我们说了这么多cache的东西,这对我们学习内核架构和写程序有什么好处内。当然有好处!记住这是内功,内功能让你练习其它武功是事半功倍。内功就是手中无剑但心中有剑,内功是一句口诀解万千变化!好了,不胡扯了。举个例子,arm芯片是没有IO空间的,寄存器的地址在和主存一样在地址空间中,但是寄存器的虚拟地址对应的页表项是绝对不能允许cache的。另外,当进程切换时,会更换页目录表,更换之后立即清除掉cache缓冲。



01-04 03:58