一.内存管理基本知识

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]变化时,其对应的物理地址全部相同,故不能保存在粗页表中。

转载于:https://www.cnblogs.com/WenlongLiu/p/5272763.html

嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化相关推荐

  1. 嵌入式linux学习笔记--TCP通讯整理

    嵌入式linux学习笔记–TCP通讯整理 之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程.预计会整理linux和window ...

  2. 迅为嵌入式Linux学习笔记4——进程

    迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...

  3. 迅为嵌入式Linux学习笔记5——进程间通信

    迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...

  4. Redis运维和开发学习笔记(7) 内存管理和过期策略

    Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录 Redis运维和开发学习笔记(7) 内存管理和过期策略 内存回收策略 惰性删除 定时任务删除 maxmemory 过期策略allkey ...

  5. linux软件包管理解析,linux学习笔记_09_软件包管理解析.doc

    linux学习笔记_09_软件包管理解析 软件包管理 软件包分类 源码包(C语言编写的源代码) linux主要由C语言来写. 源码包可以用写字板打开 脚本安装包:源码包进行再开发的源码包(提供安装界面 ...

  6. 嵌入式Linux学习笔记—fastboot烧写Android

    本系列为本人在自学过程中的学习笔记,如有错误欢迎大家指正. 学习资料为讯为ITOP4412开发板. fastboot烧写Android 1.主要工具 OTG 接口烧写方式也叫 fastboot 烧写方 ...

  7. 嵌入式Linux学习笔记(1-1)——linux系统搭建

    版权声明:本文为博主原创文章,未经博主允许不得转载. 学习嵌入式linux已经有2年时间,虽然时间不长,但一路走来遇到很多问题,绕了很多弯路.写这篇文章的目的是分享我的经验,以供初学者参考,希望能够帮 ...

  8. arm-linux学习笔记3-linux内存管理与文件操作

    配置好linux系统之后需要vim配置一下,有助于我们的编程,主要的配置如下 在/etc/vim/vimrc文件中 "显示行号 set number "自动缩进 set autoi ...

  9. 嵌入式linux学习笔记(一)

    最近开始学习linux驱动编写,目前直接使用jz2440已移植好的系统配合视频开始学习驱动编写,但是总是出现这样那样的问题.于是决定重头开始,先自己移植内核,在开始驱动学习. 今天参照<嵌入式l ...

最新文章

  1. POJ 2586 Y2K Accounting Bug(贪心)
  2. 裸眼3D将是未来移动端的显示的主要技术
  3. netty 文件传输服务器,Netty之二进制文件传输
  4. Caused by: java.lang.NoClassDefFoundError: Lorg/sl
  5. android之inflater用法
  6. VError - Found 0 matching services的根源分析
  7. JavaScript高级程序设计学习笔记--事件
  8. SQL Server 连接查询(内连接查询)
  9. linux新手入门学习 - linux目录结构
  10. html5按钮组水平均分,ichart.js绘制虚线、平均分虚线效果的实现代码_javascript技巧...
  11. Hive 窗口函数的使用
  12. IT人员的职业生涯规划
  13. ABAP ALV(LVC)下拉框或者F4搜索帮助
  14. centos 更改java版本_centos7更换jdk版本
  15. oracle 11g ins_,Oracle 11.2.0.1 INS-32025 INS-52001 解决方法
  16. 期货交易python回测_python量化交易历史回测
  17. Vue3 + TS 使用 element-plus 的Icon组件(包括动态路由菜单图标)
  18. 经常用到的透视函数(行转列列转行)函数 PIVOT()UNPIVOT
  19. MYSQL再学习2-阿里云服务器Centos安装mysql8.0
  20. 洞见2019-中国智能办公峰会即将召开

热门文章

  1. usaco Prime Palindromes
  2. python文本处理实例_Python 文件处理的简单示例
  3. 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
  4. java如何生成唯一码_java – 如何为方法实例生成唯一的哈希码?
  5. graphpad做折线图坐标轴数字_pandas做数据可视化具体操作,快来看看吧
  6. linux 内核 config_localversion_auto,关于CONFIG_LOCALVERSION_AUTO设置去掉内核版本号SVN后缀...
  7. 使用OpenCV和Python生成视频条形码
  8. 使用Python、OpenCVImageMagick工具箱制作GIF动画
  9. 单片机I/O控制方式(UART中断和DMA中断的区别)
  10. C语言实现AES加解密