MMU:内存管理单元。

CPU寻址的方式:

未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx)。

使用MMU  :CPU发出地址(VA) MMU接收CPU发来的地址 经过某种转换

变成实际的物理地址去寻址。

那么是MMU是如何实现VA到PA的转化的呢?

 建立VA与PA的对应关系:

MMU有段描述符(1M)(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))

我们这里说段页表的建立。

比如32位CPU,4G的寻址空间可分为4094个段(4G/1MB)

所以可以建立4096个对应的关系而实际的内存肯定没到4G(VA-PA 可多对一)

所以首先要在内存中指定存放该对应表的其实位置(可通过CP15协处理器指定)

映射表的大概示意图如下

VA(0-4095)                PA(高12位)

0              ----        有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符

1              ----        有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符

2              ----        有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符

···

···

4094       ----        有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符

4095       ----        有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符

AP:AP权限为所有用户可读写 在多进程时使用 用来保护进程

DOMAIN:配合AP使用 权限管理

cacheable :C位 使能MMU缓存

bufferable :B位 使能MMU缓冲区

描述符:MMU使用段描述符(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))

以下是建立1MB映射的C语言描述:

phyaddr = 0x30000000;

viraddr   = 0xa0000000;

*(mmu_ttb_base + (viraddr >> 20)) = ((phyaddr & 0xfff00000) | 低20位的属性描述);

VA到PA转化过程:

CPU发出VA:比如0xa0000123,转化过程如下图:

OK,到此,便得到了实际的物理地址!


MMU段式映射(VA -> PA)过程分析的更多相关文章

  1. MMU_段式映射

    首先, 段式映射的示意图如下: 该例程有5个文件构成: head.s-------------入口程序 mmu.lds-----------连接文件 init.c---------------初始化文 ...

  2. 对MMU段式转换的理解

    本文将详细介绍MMU段式转换的过程,并在文末附上一篇讲MMU比较详细的文章.具体什么是MMU,什么时段是转换就不在本文讲了,直接戳文末的链接. 首先,进行段式转换的条件.我们要拥有一个虚拟地址,还有一 ...

  3. 内存管理单元--MMU

    现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍M ...

  4. MMU内存管理单元

    arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...

  5. 硬件篇之MMU

    <背景> MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一.可以说,不懂MMU使很多人一直停 ...

  6. MMU介绍【转】

    转自:http://blog.csdn.net/martree/article/details/3321578 虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前 ...

  7. [转帖]MMU内存管理单元

    MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...

  8. ARMv7-A 架构下的MMU

    ARM架构中MMU的作用主要就是将CPU发出的虚拟地址转换成为物理地址,从实现内核和用户程序和用户程序之间的虚拟地址空间隔离.MMU的主要组成为两部分,其一是内部的TLBs缓存:还有就是转换表装换单元 ...

  9. Linux内存管理 (2)页表的映射过程

    专题:Linux内存管理专题 关键词:swapper_pd_dir.ARM PGD/PTE.Linux PGD/PTE.pgd_offset_k. Linux下的页表映射分为两种,一是Linux自身的 ...

随机推荐

  1. TypeScript 教程&手册

    参考:https://www.w3cschool.cn/typescript/ https://www.gitbook.com/book/zhongsp/typescript-handbook/det ...

  2. 回溯和DFS效率分析

    回溯和DFS效率分析 一.心得 多组数据记得初始化 两组样例,找圆点点的个数 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# . ...

  3. Mac 终端 Termial 高亮配置(PS1变量配置)

    操作环境: 系统:Mac 10.12 编辑器:vim 一.无脑配置: 1. 打开中端输入: vi ~/.bash_profile 2. 打开并编辑 .bash_profile 文件: 按键盘“i”,进 ...

  4. Shell 概述、截取字符操作等

    Shell 是用C语言编写的程序,便于用户与Linux内核系统进行交互. Linux的Shell种类众多,常见的有: Bourne Again Shell (/bin/bash) Bourne She ...

  5. 【spark】连接Hbase

    0.我们有这样一个表,表名为Student 1.在Hbase中创建一个表 表明为student,列族为info 2.插入数据 我们这里采用put来插入数据 格式如下   put  ‘表命’,‘行键’, ...

  6. LeetCode OJ:Linked List Cycle(链表循环)

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  7. 2017.11.13 python+ Jlink+EFM32 批量烧录

    1 Add whl files to Python a. install the  environment variable of path b . useing the CMD command  : ...

  8. postgresql recovery.conf改变需要重启吗

    之前在研究pgpoll时,发现trigger_file参数指定的文件存在后,会自动将standby节点提升为可写节点.不需要手动执行pg_ctl promote,但是这个时间一般有延迟,因为进程会定期 ...

  9. Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)

    不要心急,一点一点的进步才是最靠谱的. 读完本文你将了解: 前言 Message 如何获取一个消息 Messageobtain 消息的回收利用 MessageQueue MessageQueue 的属 ...

  10. Beego的controller怎么用嵌入实现继承问题

    Go Lang是无继承层次的轻量级面向对象编程范式.Go Lang中的接口与实现之间完全是非侵入式的.这种接口实现方式很值得称赞.不但如此,在Go Lang中只有类型嵌入而没有类型继承.这规避了很多与 ...