
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
对CPU的内存管理(MMU)和linux系统的内存管理两者的理解:
上面的一段话,其实是告诉我们:在CPU提供MMU的情况下(也就是分段、分页机制),首先是分段机制做第一步的虚拟地址到线性地址转换,然后由操作系统实现(这就是意味着linux系统会有大量的内存管理代码的实现方法)分页机制(同时选择CPU某一引脚来决定是否采用分页机制),直到进程的虚拟地址映射到可用的物理地址上面。
这意味着,从虚拟地址到物理地址的转换情况如下:
至于虚拟内存的哪个页面映射到物理内存的哪个页帧,这是通过页表(Page Table)来描述的,页表保存在物理内存中,MMU会查找页表来确定一个虚拟地址应该映射到什么物理地址。总结一下这个过程:
1. 在操作系统初始化或者分配、释放内存时,会执行一些指令在物理内存中填写页表,然后用指令设置MMU,告诉MMU页表在物理内存中的什么位置。
2. 设置好之后, CPU每次执行访问内存的指令都会自动引发MMU做查表和地址转换的操作,地址转换操作完全由硬件完成,不需要用指令控制MMU去做。
MMU除了提供地址转换机制之外,还提供内存保护机制,解析如下:
1. 用户模式和特权(也就是内核)模式的区分
2. 设置每个内存页面的访问权限(读、写、执行)
1. 注意:物理内存本身是不限制访问的,正是MMU的内存保护机制的作用
具体的处理过程如下:
这样设定好之后,当CPU要访问一个VA时, MMU会检查CPU当前处于用户模式还是特权模式,访问内存的目的是读数据、写数据还是取指令,如果和操作系统设定的页面权限相符,就允许访问,把它转换成PA,否则不允许访问,产生一个异常(Exception)。