Chinaunix
标题:
关于MMU的一个疑问
[打印本页]
作者:
any_wind
时间:
2011-12-05 17:13
标题:
关于MMU的一个疑问
好像在bootloader和kernel中都能直接访问物理地址
记得再bootloader中说的是,因为全部使用物理地址操作,不需要开启MMU,我以前以为在kernel中
所有的物理地址ioremap然后在访问,但发现有简单的___raw_readl(),能直接对物理地址进行操作,读写。
我想问问大家,
MMU应该是一个硬件设备吧,负责物理地址和虚拟地址的转换,那么开启MMU,kernel中为什么也可以直接访问物理地址呢?
请教下MMU这个硬件到底是什么作用,开启和关闭有什么区别?
作者:
any_wind
时间:
2011-12-06 09:43
顶顶
作者:
相逢的日子
时间:
2011-12-06 11:10
MMU字面意思就是Memory management unit,负责逻辑地址和实际内存或者虚拟内存的映射关系。比如在32位的系统里,最大的寻址空间是4GB,假设这时候有一个程序需要800M的内存,但这时候物理内存只有512,这就需要虚拟内存,MMU就负责这种映射。
还有就是实现数据的保护,比如程序1和程序2,他们指向的地址0x1234在MMU运行的时候未必是同一个物理地址,是被映射过的
作者:
any_wind
时间:
2011-12-06 15:54
回复
3#
相逢的日子
这位哥,你说的我知道额,但是不是我要的
作者:
any_wind
时间:
2012-02-13 14:20
自己顶顶
谁能介绍下
作者:
vimedu
时间:
2012-02-14 11:23
开启MMU后,不能访问物理地址吧?
作者:
MagicBoy2010
时间:
2012-02-14 13:12
MMU应该是一个硬件设备吧,负责物理地址和虚拟地址的转换,那么开启MMU,kernel中为什么也可以直接访问物理地址呢?
请教下MMU这个硬件到底是什么作用,开启和关闭有什么区别?
===============================
MMU是SoC内部的一个硬件逻辑部件,如果开启MMU,所有的内核逻辑地址必须经过MMU的转换才能成为物理地址。关闭了的话,逻辑地址就是物理地址,不需要转换了。
作者:
251316192
时间:
2012-02-29 15:36
本帖最后由 251316192 于 2012-02-29 15:54 编辑
#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))
已经映射在高端内存了。在统一编址的体系,很多io口地址已经在内存管理初始化映射在了高端内存区,一般就和虚拟地址差个offset,___raw_readl()添加了地址空间检测,catche或者write buffer等的操作,因为对应的是io口,不能有边际效益。ioremap就是建立虚拟地址和物理地址的空间,因为已经映射好了。就没必要再映射了。都用虚拟地址。开了mmu不可能用物理地址。
作者:
smalloc
时间:
2012-03-04 15:09
有些ARCH有些区域不收MMU影响
作者:
any_wind
时间:
2012-03-12 15:33
thanks for all
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2