arm-linux内存分段的分析
来源:互联网 发布:pdf.js 中文字体 编辑:程序博客网 时间:2024/04/29 19:14
linux下虚拟地址到物理地址的映射:
以分段这种简单的情况分析:
4GB的空间分段管理,每段1MB,共4k段,显然每段需要一定内存开销来描述该
段虚拟地址到物理地址的映射及该段的其他特性。
规定以4字节来描述每段,则4k段需要4k*4=16kB字节的开销来描述整个内存分
段的特性.
我们把这连续的16kB字节称为页表,如下图所示.其中每行的4字节称为一个页
表项(根据上面的描述,我们知道每个页表项描述了对应的1MB的内存空间).这
连续的16kB的首地址称为页表基地址,需要存储在MCU的协处理器cp15的c2寄
存器中,cp15的c2寄存器称为页表基址寄存器.
假设我们的页表基地址为0x30004000
|--------|--------|--------|--------| 0x30004000<----页表基地址
|--------|--------|--------|--------| 0x30004004
|--------|--------|--------|--------| 0x30004008
|........|........|........|........| 0x3000400c<----PageIndex
|--------|--------|--------|--------|
|--------|--------|--------|--------|
|........|........|........|........|
|--------|--------|--------|--------|
|--------|--------|--------|--------|
|--------|--------|--------|--------|
|--------|--------|--------|--------| 0x30007ffc
不管虚拟地址还是物理地址,都是由32bit来表示,当只用到一级页表时,这32bit
分成两个部分:
基地址(12bit)+偏移地址(20bit)
因为我们每段为1MB所以这个偏移地址需要20bit来表示.相对于每一个1MB的段
来说,其对应的关系就在于它们的基地址存在着对应关系,而这种对应关系就存
在于上述页表中.
在MCU需要查每个虚拟地址对应的物理地址时,MCU把这个虚拟地址的高12bit取
出来,作为一个12bit的数Index1:
假设我们令虚拟地址为VA,物理地址为PA,则Index1 = VA >> 20 ;
然后我们再把index1向左移动2位,得到Index2: Index2 = Index1*(2^2)
即: Index2 = (VA >> 20)*4
得到这个Index2后,我们可以把"Index2 + 页表基地址" 得到一个页表项的地址:
PageIndex
然后,我们取这个PageIndex地址所对应的数据,该数据就描述了虚拟地址和物理
地址的对应关系.我们以[PageIndex]表示这个数.
由前面的分析我们知道,我们需要一个物理地址所对应的12bit的基地址,其中:
[PageIndex][31:20]即[PageIndex]的第31~20位作为我们的PA[31:21],它和我们
的VA[19:0]构成了一个32位的物理地址.
其中[PageIndex][19:0]用于描述该段1MB空间内存的读写权限等其他属性.
- arm-linux内存分段的分析
- arm-linux内存分段的分析
- linux 内存分段机制
- linux进程内存分段
- ARM linux 分析之 内存初始化 一
- arm linux 内存箮理分析一
- linux内存管理-分段管理
- ARM+Linux 的启动分析
- 深入理解Linux内存寻址的分段机制
- Linux内存地址的分段、分页机制(上)
- linux的分段
- Linux的分段分页
- Linux的分段机制
- Linux的分段机制
- Linux内核及ARM的内存管理
- ARM Linux权限内存控制的实现
- Linux内核及ARM的内存管理 .
- linux arm的高端内存映射
- VC++中生成DLL和LIB文件
- 我们的未来不是梦
- C++虚函数表解析(转)
- Head First C# 中文版 第九章 读写文件 page410
- Java中的动态代理类
- arm-linux内存分段的分析
- 在应用程序中监视剪贴板的变化和内容
- Struts2 使用中遇到的问题 (个人笔记,不定期更新)
- 四月感受C++与.NET
- 3G机遇和学习手机开发的一些体会[转]
- 太无聊
- 绿色感悟
- 不出两小时就能搞懂你提出这个问题。而你抛却一切基础,直接就去搭建空中楼阁,所以才会半年都没有进展。
- 清除杂念