物理地址和虚拟地址的区别

本文介绍了物理地址和虚拟地址的区别,重点探讨了它们在内存管理和驱动开发中的作用。物理地址由CPU地址总线提供,部分分配给内存,部分分配给总线。虚拟地址在现代操作系统中由MMU转换为物理地址,每个进程拥有独立的虚拟地址空间。此外,文章还讨论了外设编址方式,包括统一编址和独立编址,以及在不同架构如x86中的实现细节。
摘要由CSDN通过智能技术生成


(一)地址的概念


1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中
很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、
BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,
这个物理地址被放到CPU的地址线上。
物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,
因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般
不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的 许多设备)。在PC机中,
一般是把低端物理地址给RAM用,高端物理地址给总线用。


2)总线地址:总线的地址线或在地址周期上产生的信号。外设使用的是总线地址,
CPU使用的是物理地址。
物理地址与总线地址之间的关系由系统的设计决定的。在x86平台上,物理地址就是总线地址,
这是因为它们共享相同的地址空间——这句话有点难理解,详见下 面的“独立编址”。在其他平台上,
可能需要转换/映射。比如:CPU需要访问物理地址是0xfa000的单元,那么在x86平台上,
会产生一个PCI总线 上对0xfa000地址的访问。因为物理地址和总线地址相同,所以凭眼睛
看是不能确定这个地址是用在哪儿的,它或者在内存中,或者是某个卡上的存储单元, 
甚至可能这个地址上没有对应的存储器。


3)虚拟地址:现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,
这需要MMU(Memory Management Unit)的支持。MMU通常是CPU的一部分,如果处理器没有MMU,
或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被 内存芯片
(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,
CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address),
而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射
成物理地址。
Linux中,进程的4GB(虚拟)内存分为用户空间、内核空间。用户空间分布为0~3GB(
即PAGE_OFFSET,在0X86中它等于 0xC0000000)
,剩下的1G为内核空间。程序员只能使用虚拟地址。系统中每个进程有各自的私有用
户空间(0~3G),这个空间对系统中的其他进程是不可见的。
CPU发出取指令请求时的地址是当前上下文的虚拟地址,MMU再从页表中找到这个虚拟地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值