物理地址以及虚拟地址

1、物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。

物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的许多设备)。在PC机中,一般是把低端物理地址给RAM用,高端物理地址给总线用。

2)总线地址:总线的地址线或在地址周期上产生的信号。外设使用的是总线地址,CPU使用的是物理地址。

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

3)虚拟地址现代操作系统普遍采用虚拟内存管理机制,这需要MMU的支持。MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址,而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址。

Linux中,进程的4GB(虚拟)内存分为用户空间、内核空间。用户空间分布为0~3GB(即PAGE_OFFSET,在0X86中它等于0xC0000000) 
,剩下的1G为内核空间。程序员只能使用虚拟地址。系统中每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的

CPU发出取指令请求时的地址是当前上下文的虚拟地址,MMU再从页表中找到这个虚拟地址的物理地址,完成取指。同样读取数据的也是虚拟地址,比如mov ax, var. 编译时var就是一个虚拟地址,也是通过MMU从也表中来找到物理地址,再产生总线时序,完成取数据的。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言中的物理地址虚拟地址是两个不同的概念。 物理地址是指计算机中实际的内存地址,通常是由硬件提供的,它是一个唯一的标识符,用于访问计算机中的实际内存单元。物理地址是由硬件提供的,因此程序无法直接访问或修改物理地址虚拟地址是指程序中使用的地址,它是由操作系统提供的,在程序执行时被翻译成物理地址虚拟地址空间是指操作系统为每个进程分配的地址空间,每个进程都有自己独立的虚拟地址空间。在程序执行时,所有的内存访问都是针对虚拟地址空间进行的,操作系统负责将虚拟地址翻译成物理地址。 在C语言中,程序员通常只需要使用指针来访问内存,而无需关心物理地址虚拟地址的具体实现。指针可以指向任意类型的数据,包括整数、字符、数组等等。当程序使用指针来访问内存时,实际上是在使用虚拟地址,而操作系统会将其翻译成物理地址,然后将数据从内存读取到CPU中进行处理。 ### 回答2: 在计算机系统中,物理地址虚拟地址是两个重要的概念。 物理地址指的是计算机内存中的实际物理位置,也就是内存条上的存储单元。每个存储单元都有一个唯一的物理地址,用来标识它在内存中的位置。物理地址是由硬件产生和管理的,程序无法直接访问和控制物理地址。操作系统负责将程序的虚拟地址转换为对应的物理地址,然后再进行实际的内存访问。 虚拟地址是指程序中使用的地址,它是相对于程序自身的地址空间而言的,并不直接对应于实际的物理存储位置。虚拟地址是在程序执行过程中产生的,由操作系统中的内存管理单元进行转换成物理地址。使用虚拟地址可以使程序独立于具体的硬件环境,提高了系统的可移植性。 操作系统通过使用页表来进行虚拟地址物理地址的转换。页表记录了虚拟页和物理页之间的映射关系。当程序访问一个虚拟地址时,操作系统会查找页表,找到对应的物理页的地址,并进行实际的内存读写操作。 使用虚拟地址可以实现多个程序在同一台计算机上同时运行,并且彼此之间互不干扰。虚拟地址还可以提供内存保护的功能,防止程序之间的错误读写操作破坏系统的稳定性。 总结来说,物理地址是计算机内存中实际的物理位置,由硬件生成和管理;虚拟地址是程序使用的地址,相对于程序自身的地址空间;操作系统通过页表实现虚拟地址物理地址的转换。虚拟地址的使用提高了系统的可移植性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值