关于MMU与各种地址的理解

如何描述一个MMU ( Memory Management Unit ) 内存管理单元。

目的(功能):对于程序而言,为了将程序分割成一张张的卡片(页面),然后再运行的时候将需要的部分嵌入到物理内存的卡槽(页框)里面。MMU就是为了完成操作系统的这个功能而设计的。MMU可以在被初始化后,形成的一个个虚拟地址对应到物理地址,将一张张的卡片分别映射到相应的物理内存中。举个例子:在linux中的每个进程都维护着自己的页表,在切换进程上下文的时候须要将页表首地址也记录下来( 即记录页表基地址寄存器的值,再将要被切换到的进程的页表基地址还原到这个寄存器中 )。这个时候不同进程的同一个虚拟地址都会对应着不同的页表项,从而对应着不同的物理地址了。

还有另外的一个功能是MPU的功能Memory Protecting Unit 对内存内容进行保护。这里也是通过寄存器设置可达到。

本身机制可以做的事情以及程序员编程时候需要做的事情:

本身机制 :

    输入:虚拟地址

    输出:物理地址

    原理:虚拟地址根据页表基地址寄存器找到页表,通过虚拟地址对应的部分找到条目。。根据本身的不同设置决定是否需要寻找第二页表或者直接得出物理地址。

程序员编程所需要做的事情:

    初始化MMU,设置MMU参数:比较主要的是要设置好页表基地址。页(段:1M 或16M,页:4K 2K 16K )大小。段通常一级页表即可完成地址转换,页地址的转换则需要二级页表。

    建立页表:将需要映射的内存都在相应的内存位置设置好页表

    开启MMU:此时就可以开启MMU,以后在对CPU发送的地址都会通过MMU转换,得到对应的物理地址。

____________________________________________________________________________________

接下来是各种地址。

虚拟地址:未经过MMU的地址,范围应该跟CPU地址线数目相关。32位CPU应该寻址范围为4G

物理地址:真正对应实际内存的地址,如2440的内存地址从0x30000000开始 若为256M 则0x30800000为范围结束的地址

链接地址:程序链接的地址,即程序运行时候应该存在的位置。除了b bl,等一些进行“相对”处理的操作之外,用到绝对地址操作的时候,如果程序在内存运行的地址不对应于链接地址就会发生不可预知的错误。

装载地址:一直都误解了装载地址,现在的理解,装载地址应该是代码块在二进制程序代码文件中的位置,如链接脚本中AT(4096)就是在文件4K处开始放置这个segment


当对这块知识有了一定的了解以后就会对操作系统的内存管理产生兴趣:(以下仅仅是猜测与联想)

如果是用4K页的方式,即有两级页表的情况下,32G地址空间对应会有8k空间来存表。于是操作系统应该也会将物理内存划分成“卡槽”的数据结构形式来记录物理内存的使用情况,这个时候如果进程像操作系统申请内存的时候就会像物理存储空间发出申请,在进程对应的页表中注册相应的表项。、

内存的问题在于如何管理物理内存以及8k空间的页表(或者说,每个进程都具有8K空间的页表进行登记,或者动态的扩容这8k的空间)。


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值