Chinaunix首页 | 论坛 | 博客
  • 博客访问: 665869
  • 博文数量: 237
  • 博客积分: 4285
  • 博客等级: 上校
  • 技术积分: 2701
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-15 14:05
文章分类

全部博文(237)

文章存档

2014年(2)

2013年(3)

2012年(47)

2011年(15)

2010年(68)

2009年(102)

我的朋友

分类: 嵌入式

2009-11-15 15:34:01

虚拟地址和物理地址的概念
    CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。

    图 1. 物理地址示意图
    如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。


    图 2. 虚拟地址示意图
    MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。
    思考与练习
    1 以下程序中用到的BASEADDR是虚拟地址还是物理地址?
#define BASEADDR 0x00008000;
int i;
unsigned int *p;
p = (unsigned int *)BASEADDR;
for(i=0;i    2 下图中内存芯片的地址范围是多少?这个地址范围是指虚拟地址还是物理地址的范围?


    图 3. 练习题



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84450/showart_1816104.html
阅读(595) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~