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初始化阶段: 在 ...
随机推荐
- Java学习过程中的总结的小知识点(长期更新)
Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...
- Shell脚本学习第二课·
Shell文件包含 shell也可以包含外部脚本,语法格式如下: . filename 或 source filename 例如创建两个shell脚本. 脚本1:test1.sh url = &quo ...
- [Linux] Linux常用文本操作命令整理
简单的总结一下常用的一些实用的Linux文本操作命令,包括wc(统计).cut(切分).sort(排序).uniq(去重).grep(查找).sed(替换.插入.删除).awk(文本分析). 1.统计 ...
- jq 个性的隔行变色
效果图大致这样: 我的html格式部分这样:/*不过他们都说我的dom结构不太合理,同意.BUT,我就是不想写表格而写成的这样的,所以后面jq部分也要迁就了*/ <div class=&qu ...
- Django配合使用Jquery post方法
Django使用jQuery的post方法需要解决两个问题: 1.Django中为了防止跨站请求,在post提交时都会带上csrf_token,利用Jquery进行post请求也需要:否则就会出现40 ...
- Ubuntu14.04安装配置web/ftp/tftp/dns服务器
目录: 1.安装ftp服务器vsftpd --基于tcp,需要帐号密码 2.安装tftp服务器tftpd-hpa,tftp-hpa --udp 3.web服务器--使用Apache2+Mysql+PH ...
- 《jQuery知识点总结》(二)
dom css 操作html(n) n为空则取值相当于JS的innerHTML填写n为赋值val(n) n为空则取值相当于JS的value填 ...
- Unity NGUI添加UIRoot
导入NGUI包后,菜单多出一个选项 "NGUI",选择其子选项 "options" -- "Reset Prefab ToolBar" ,在 ...
- ubuntu 配置VPN
1. sudo apt-get install pptpd 2. 修改/etc/pptpd.conf , vi /etc/pptpd.conf 找到#localip 192.168.0.1和#re ...
- Touch ID 实现
Touch ID 1.要求 机型:iPhone 5s以上 系统:iOS8以上 框架:#import <LocalAuthentication/LocalAuthentication.h> ...