嵌入式linux学习之第四课内存管理单元MMU实验

MMU功能

  1. 权限管理
  2. 地址映射
权限管理

芯片在一个时间段只能有一个程序在跑,假设程序不同时间端分别运行程序A,程序B以及内核空间。
当A程序要去访问B程序或者内核空间时就会奔溃,这就是权限管理

地址映射

同时运行Hello1程序和Hello2程序,两个程序同时存在内存里面。设置Hello1程序中a=2,在Hello2中a=3,分别打印其地址和值,结果是两个a的地址相同,但其值是不一样的。同一个地址不可能存储两个不同的值。显然打印出来的地址称为虚拟地址,而实际存储着这两个数据的地址称为物理地址。运行时CPU肯定得通过虚拟地址转换成物理地址来获取物理地址上面的值,而这个从虚拟地址获取物理地址的过程,要经由MMU来完成。

存储管理器管的是跟硬件相关的行地址列地址之类相关的东西。
在这里插入图片描述

对于CPU核,不管是虚拟地址还是物理地址,如果用MMU,这个地址就可以理解成虚拟地址,不用则可以理解成物理地址。

写程序时的链接地址没有虚拟地址和物理地址的区别

虚拟地址(VA)怎么转换成物理地址(PA)
VA=f(PA) (某个函数)
在ARM里面,将虚拟地址转换成物理地址的方法是表格,从术语上来说是页表

映射的种类:段、大页、小页、极小页

段映射:表格里面每一个表项,对应的大小是1M,4G/1M=4096个表格项,第0个表格项映射0~1M的物理地址

实验目的:建立映射VA=>PA,看能否通过虚拟地址来访问物理地址,即通过访问XXXX来访问0x56000050
段映射单位是1M,0xA0000050(即上面的XXXX)/1M=0xA00=2560,我们要到2560这个表项里面把物理地址存进去,0XA0000050<=>0x56000050,通过取整可得0xA0000000对应的0x56000000

建立映射的过程

  1. 建立表格(建立虚拟地址到物理地址的映射)
  2. 把表格地址告诉MMU
  3. 启动MMU

head.S的内容如下所示:

.text
.global _start
_start:
    ldr sp, =4096                       @ 设置栈指针,以下都是C函数,调用前需要设好栈
    bl  disable_watch_dog               @ 关闭WATCHDOG,否则CPU会不断重启
    bl  memsetup                        @ 设置存储控制器以使用SDRAM
    bl  copy_2th_to_sdram               @ 将第二部分代码复制到SDRAM
    bl  create_page_table
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值