dana leong:物理地址与虚拟地址的区别
来源:百度文库 编辑:中财网 时间:2024/05/09 11:04:23
从最根本的角度来看,地址只分为两类:物理地址、虚拟地址。
S3C2410、S3C2440上电之后,是使用物理地址来访问的。数据手册中介绍各种寄存器时,所附带的地址就是物理地址。
虚拟地址是启动内存管理单元(MMU)后CPU使用的地址,它是到物理地址的映射。为什么这样说呢? 虚拟地址、物理地址的概念只有CPU才用到,要访问具体的设备,比如内存、Flash、寄存器等时,虚拟地址最终会转换为物理地址。
上面说得很抽象,举例说明吧。比如GPACON寄存器的物理地址是0x56000000。没有启动MMU之前,可以使用以下指令进行访问:
volatile unsigned int * p = 0x56000000;
int val;
*p = xxxxx; // 写操作
val = *p; // 读操作
启动MMU之行,假设虚拟地址0xC0000000被映射到物理地址0x56000000,可以使用以下指令进行访问:
volatile unsigned int * p = 0xC0000000;
int val;
*p = xxxxx; // 写操作
val = *p; // 读操作
虚拟地址映射到哪个物理地址,这是可以设置的。
既然虚拟地址最终要转换为物理地址,那么为何还需要虚拟地址呢?这有以下几个原因:
1. 虚拟地址还提供了权限检查功能:在虚拟地址被转换为物理地址访问设备之前,要先进行权限检查。比如我们设置虚拟地址和物理地址之间的映射关系时,可以设置某块地址是只读的、只写的、只有CPU处于管理模式时才能访问等。这些功能可以让系统的内核、用户程序的运行空间相互独立:用户程序即使出错,也无法破坏内核;用户程序A崩溃了,也无法影响到用户程序B。
2. 设想这种情况:系统同时运行用户程序A、B时,它们都保存在内存中,切换到哪个程序就从哪块内存中取指执行。如果没有虚拟地址,就像uc/os一样,A、B程序的运行地址是不一样的,这使得编译程序时需要程序员自己分配运行地址。但是有虚拟地址后,A、B程序的运行空间都是一样的,至于它们对应哪块实际的地址,这通过设置不同的地址映射关系来确定。这使得我们编程时,无需理会这类繁锁的问题:A程序放在这里、B程序放在那里。
虚拟地址的引入,不仅使得用户程序可以运行在同样的虚拟地址上,还使得用户程序“看起来”能够使用的内存很大:一个程序在运行之前,没有必要全部装入内存,而仅需要将那些当前要运行的部分先装入内存,其余部分在用到时再从磁盘调入,而当内存耗光时再将暂时不用的部分调出到磁盘。这使得一个大程序可以在较小的内存空间中运行,也使得内存中可以同时装入更多的程序并发执行,从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多。
S3C2410、S3C2440上电之后,是使用物理地址来访问的。数据手册中介绍各种寄存器时,所附带的地址就是物理地址。
虚拟地址是启动内存管理单元(MMU)后CPU使用的地址,它是到物理地址的映射。为什么这样说呢? 虚拟地址、物理地址的概念只有CPU才用到,要访问具体的设备,比如内存、Flash、寄存器等时,虚拟地址最终会转换为物理地址。
上面说得很抽象,举例说明吧。比如GPACON寄存器的物理地址是0x56000000。没有启动MMU之前,可以使用以下指令进行访问:
volatile unsigned int * p = 0x56000000;
int val;
*p = xxxxx; // 写操作
val = *p; // 读操作
启动MMU之行,假设虚拟地址0xC0000000被映射到物理地址0x56000000,可以使用以下指令进行访问:
volatile unsigned int * p = 0xC0000000;
int val;
*p = xxxxx; // 写操作
val = *p; // 读操作
虚拟地址映射到哪个物理地址,这是可以设置的。
既然虚拟地址最终要转换为物理地址,那么为何还需要虚拟地址呢?这有以下几个原因:
1. 虚拟地址还提供了权限检查功能:在虚拟地址被转换为物理地址访问设备之前,要先进行权限检查。比如我们设置虚拟地址和物理地址之间的映射关系时,可以设置某块地址是只读的、只写的、只有CPU处于管理模式时才能访问等。这些功能可以让系统的内核、用户程序的运行空间相互独立:用户程序即使出错,也无法破坏内核;用户程序A崩溃了,也无法影响到用户程序B。
2. 设想这种情况:系统同时运行用户程序A、B时,它们都保存在内存中,切换到哪个程序就从哪块内存中取指执行。如果没有虚拟地址,就像uc/os一样,A、B程序的运行地址是不一样的,这使得编译程序时需要程序员自己分配运行地址。但是有虚拟地址后,A、B程序的运行空间都是一样的,至于它们对应哪块实际的地址,这通过设置不同的地址映射关系来确定。这使得我们编程时,无需理会这类繁锁的问题:A程序放在这里、B程序放在那里。
虚拟地址的引入,不仅使得用户程序可以运行在同样的虚拟地址上,还使得用户程序“看起来”能够使用的内存很大:一个程序在运行之前,没有必要全部装入内存,而仅需要将那些当前要运行的部分先装入内存,其余部分在用到时再从磁盘调入,而当内存耗光时再将暂时不用的部分调出到磁盘。这使得一个大程序可以在较小的内存空间中运行,也使得内存中可以同时装入更多的程序并发执行,从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多。
ip地址与物理地址的区别
简述ip地址与物理地址的区别
ip地址与物理地址的区别
逻辑地址,网络地址,物理地址的区别
数据通信与网络问题 物理地址与逻辑地址之间的区别是什么
IP地址和物理地址的区别和联系
什么是线性地址?和物理地址的区别是什么呢?
虚拟存储器的逻辑地址位数比物理地址A.多B.相等C.少
有什么工具能获得自己与对方的ip地址与物理地址?
主存储器容量为4MB,虚拟存储器容量为1GB(1*10的九次方B),则虚拟地址和物理地址各为多少位?
VNN指定的IP地址与局域网物理地址在同一个网段是否会引起冲突??
计算机的物理地址主要指的是什么地址?
MAC地址,是不是就是网卡的物理地址?
我家的电脑显示IP与一个不是硬件地址冲突,这个地址不是我家电脑物理地址
IP地址与物理地址这间怎么转换?
请问怎样才能将IP地址与计算机物理地址进行捆绑?
服务器与虚拟服务器的区别在哪里?
虚拟局域网与交换式局域网的区别是什么?
网易一卡通,虚拟卡与实卡的区别是什么
主机域名地址、IP地址、物理地址之间的关系是什么?
服务地址,逻辑地址,物理地址之间的差别?
ip地址与物力地址的区别
公网地址与公司内部地址的区别?
什么是物理地址 逻辑地址