嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
一.内存管理基本知识
1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表。页的大小有三种:大页(64KB),小页(4KB),极小页(1KB)。条目也称为"描述符",有:段描述符,大页描述符,小页描述符,极小页描述符——他们保存大页,小页,极小页的起始物理地址;粗页表描述符,细页表描述符——他们保存二级页表的物理地址。
2.一级页表描述符的最低两位,可分为以下四种情况:
(1).0b00:无效。
(2).0b01:粗页表。
(3).0b10:段。
(4).0b11:细页表。
3.二级页表描述符的最低两位,可分为以下四种情况:
(1).0b00:无效。
(2).0b01:大页描述符。
(3).0b10:小页描述符。
(4).0b11:极小页描述符。
4.一级页表地址,将它写入协处理器CP15的寄存器C2(称为页表基址寄存器)
二.地址转化过程(基址+变址的形式)
1.段的地址转化过程
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b10,称为段描述符;
NO2.段描述符[31:20]+MVA[19:0]构成一个32位的物理地址——这就是MVA对应的PA。
2.大页的地址转化过程
(1).大页描述符保存在粗页表中
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b01,称为粗页表描述符;
NO2.粗页表描述符[31:10]+MVA[19:12]+低两位为0构成一个新的32位地址,找到其中存储的描述符,此描述符最低两位为0b01,称为大页描述符;
NO3.大页描述符[31:16]+MVA[15:0]构成一个32位的物理地址——这就是MVA对应的PA。
(2).大页描述符保存在细页表中
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b11,称为细页表描述符;
NO2.细页表描述符[31:12]+MVA[19:10]+低两位为0构成一个新的32位地址,找到其中存储的描述符,此描述符最低两位为0b01,称为大页描述符;
NO3.大页描述符[31:16]+MVA[15:0]构成一个32位的物理地址——这就是MVA对应的PA。
3.小页的地址转化过程
(1).小页描述符保存在粗页表中
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b01,称为粗页表描述符;
NO2.粗页表描述符[31:10]+MVA[19:12]+低两位为0构成一个新的32位地址,找到其中存储的描述符,此描述符最低两位为0b10,称为小页描述符;
NO3.小页描述符[31:16]+MVA[15:0]构成一个32位的物理地址——这就是MVA对应的PA。
(2).小页描述符保存在细页表中
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b11,称为细页表描述符;
NO2.细页表描述符[31:12]+MVA[19:10]+低两位为0构成一个新的32位地址,找到其中存储的描述符,此描述符最低两位为0b10,称为小页描述符;
NO3.小页描述符[31:16]+MVA[15:0]构成一个32位的物理地址——这就是MVA对应的PA。
4.极小页的地址转化过程
NO1.一级页表基址C2[31:14]+MVA[31:20]+低两位为0构成一个32位的物理地址,找到其中存储的描述符,此描述符最低两位为0b11,称为细页表描述符;
NO2.细页表描述符[31:12]+MVA[19:10]+低两位为0构成一个新的32位地址,找到其中存储的描述符,此描述符最低两位为0b11,称为极小页描述符;
NO3.极小页描述符[31:16]+MVA[15:0]构成一个32位的物理地址——这就是MVA对应的PA。
三.粗页表细页表每个条目表示的物理空间的由来
1.粗页表中连续16个条目都保存同一大页描述符
用于粗页表索引的MVA[19:12]与用于大页内寻址的MVA[15:0]有重合的位,粗页表中保存的描述符[31:16]作为物理地址的基址,为了保证基址相同,变址变化,即描述符 不变,MVA[15:0]变化,当MVA[15:12]由0b0000变化到0b1111时,里面存储的描述符应该相同——所以,粗页表中连续16个条目都保存同一大页描述符。
2.细页表中连续4个条目保存同一小页描述符
用于细页表索引的MVA[19:10]与用于小页内寻址的MVA[11:0]有重合的位,粗页表中保存的描述符[31:12]作为物理地址的基址,为了保证基址相同,变址变化,即描述符 不变,MVA[11:0]变化,当MVA[11:10]由0b00变化到0b11时,里面存储的描述符应该相同——所以,粗页表中连续4个条目都保存同一小页描述符。
四.为什么极小页描述符只能保存在细页表中
MVA[31:20]索引一级页表,MVA[19:12]索引二级页表中的粗页表,MVA[19:10]索引二级页表中的细页表,MVA[9:0]表示极小页的寻址空间。又每一个MVA对应一个 不同的物理地址PA,当极小页的描述符保存在粗页表中时,MVA[11:10]变化时,其对应的物理地址全部相同,故不能保存在粗页表中。
嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化的更多相关文章
- 韦东山嵌入式Linux学习笔记05--存储管理器
SDRAM: 原理图如下: jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接 ...
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
- XV6学习笔记(2) :内存管理
XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...
- 嵌入式Linux学习笔记之第一阶段---基础篇
嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编 ...
- Linux内核学习笔记——内核内存管理方式
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...
- Linux System Programming 学习笔记(九) 内存管理
1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系 ...
- 【转】嵌入式Linux学习笔记
一 嵌入式系统定义: 应用于特定环境的硬件体系. 二 两样非常重要的能力: 1. 掌握各种新概念的能力 2. 调试的能力( 包括软件, 硬件 ) 三 需要的基础知识: 1. 操作系统理论基 ...
随机推荐
- C++设计模式-Decorator装饰模式
Decorator装饰模式作用:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图如下: Component是定义一个对象接口,可以给这些对象动态地添加职责. ...
- c#进制转换(转)
//十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));//十进制转八进制Console.Wri ...
- SQL Server 2008通过LinkServer连接MySQL
链接过程就不过多描述了,搜索下都有一大堆的内容. 链接成功以后,如何调用的问题,通过“编写select脚本”的方式生成的脚本如下: [备注:asset_manager是数据库名,admin是表名] - ...
- django 快速实现完整登录系统
django 实现完整登录系统 本操作的环境: =================== Windows 7 64 python3.5 Django 1.10 =================== 创 ...
- JS的多线程
注:以下内容基于IE中GIF的onload事件的基础上,故所有测试IE only 需要用到的几个图片 先看一个简单的事实: 复制代码代码如下: <SCRIPT LANGUAGE="Ja ...
- codis安装手册
本文属原创,转载请注明此信息:http://www.cnblogs.com/robinjava77/p/5465150.html (Robin) codis交流群 240361424 感谢群里各位群 ...
- JS 弹出层
var name='提示'; //网页名称,可为空; var iWidth=550; //弹出窗口的宽度; var iHeight=250; //弹出窗口的高度; var iTo ...
- 基本变换(读书笔记5 --- Real-Time rendering)
刚体变换 即变换不改变了被变换顶点之间的距离,以及偏手性(不会让左右手坐标系颠倒). 下面的平移变换.旋转变换即属于刚体变换 平移 从一个位置变到另一个位置可以用平移矩阵T来表示,这个矩阵将一个实体变 ...
- 微信官方demo(php)
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); ...
- --- shell 扩展的顺序
1. 扩展(expansion)是bash 解释器的重要的概念: 2. 命令替换是扩展里面的一种 3. 基本结构是: “字符串准备(花括号,波浪线,参数和变量扩展,命令替换),单词分割,路径扩展” h ...