MMU工作原理
MMU的工作原理就是把虚拟地址转换成物理地址。
虚拟地址:由编译器和连接器在定位程序时分配。
物理地址:用来访问实际的主存硬件模块。
使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。

自己写的裸机程序:
void mem_init(unsigned long *ttb); void mmu_init(); void mmu_enable(); void mmap(unsigned long *ttb,unsigned long pa,unsigned long va); int (*printf)(const char *format, ...) = (void *)0x43e11a2c;
_start() { unsigned long *va = (void *)0x76500000; unsigned long *pa = (void *)0xfff00000;
*va = 123;
mmu_init();
mmu_enable();
mmap((void *)(0x70000000),(unsigned long)(pa),(unsigned long)(va)); =%d\n",*va); //123 }
void mem_init(unsigned long *ttb)
unsigned long i;
for(i=0x0000000;i<=0x14000000;i+=(1<<20)) { ttb[i>>20]=(i & 0xfff00000) | 0x2; }
for(i=0x40000000;i<=0x80000000;i+=(1<<20)) { ttb[i>>20]=(i & 0xfff00000) | 0x2; } }
void mmu_init() { unsigned long *ttp = (void *)(0x70000000);
__asm__ __volatile__ ( "MCR P15,0,%0,C2,C0,0;" "mvn r0,#0x0;" "MCR P15,0,r0,C3,C0,0;" : :"r"(ttp) :"r0" ); }
void mmu_enable() { __asm__ __volatile__ ( "MRC P15,0,r0,C1,C0,0;" "orr r0,r0,#1;" "MCR P15,0,r0,C1,C0,0;" : : :"r0" ); }
void mmap(unsigned long *ttb,unsigned long pa,unsigned long va) { ttb[pa>>20] = (va & 0xfff00000) | 0x2; }
MMU工作原理的更多相关文章
- MMU工作原理(转)
源: MMU工作原理
- 嵌入式Linux之我行——ARM MMU工作原理剖析【转】
转自:http://blog.chinaunix.net/uid-20698426-id-136197.html 一.MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时 ...
- TLB的作用及工作原理
TLB的作用及工作过程 以下内容摘自<步步惊芯——软核处理器内部设计分析>一书 页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
随机推荐
- Mybatis学习总结(一)——入门基础
一.Mybatis介绍 1.MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...
- Bubble Cup 8 finals C. Party (575C)
题意: 给定n个人,分两天晚上去夜总会开派对,要求每天恰好有n/2个人去,且每人去的夜总会各不相同. 每个人对不同的晚上不同的夜总会有不同的满意度,求一个方案使得所有人的满意度之和最大. 夜总会数量= ...
- WCF学习第二篇:WCF 配置架构。这有助于对wcf配置的理解和记忆
使用 Windows Communication Foundation (WCF) 配置元素,您可以配置 WCF 服务和客户端应用程序. 可以使用配置编辑器工具 (SvcConfigEditor.ex ...
- SQL语句判断数据库、表、字段是否存在
from master..sysdatabases where name='TestDB') print 'TestDB存在'else print 'TestDB不存在' --判断表[Te ...
- Java基础——继承、接口
一个对象变量(例如,变量e)可以引用多种实际类型的现象被称为多态(polymorphism). 在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding). 在Java程序 ...
- 分享10款非常有用的 Ajax 插件
这篇文章与大家分享的是10款非常有用的 Ajax 插件,有用于图片的,用于分页的,还有用于导航的.这些作者的想法特别新颖,希望你能从中找到自己需要的插件. 1. AJAX-ZOOM 非常强大的一款插件 ...
- Android中Service通信(一)——启动Service并传递数据
启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...
- Excel——MATCH函数
使用 MATCH 函数在范围单元格中搜索特定的项,然后返回该项在此区域中的相对位置. 1.参数说明: MATCH(lookup_value, lookup_array, [match_type]) l ...
- C# 深入浅出 异步(八)
C#异步调用学习链接:从C#5.0说起:再次总结C#异步调用方法发展史
- 添加Silverlight应用到HTML
Silverlight是跨浏览器,跨客户平台的浏览器插件,可以应用在Windows,Linux,Mac等平台.作为浏览器插件,Silverlight可以像Flash一样,很方便的嵌套在HTML页面中, ...