物理地址和虚拟地址

本文深入探讨了操作系统中虚拟地址的概念及其与物理地址的关系,解释了MMU(内存管理单元)在虚拟地址到物理地址转换过程中的作用,以及如何通过特定程序验证虚拟地址与物理地址之间的对应关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在操作系统上的实现的,用户空间的全部是虚拟地址。即能打印的全部是虚拟地址,只有裸机变成打印的,接触的才是真正的无力地址。

LDR R1,【R2】,这个r2内写的也是虚拟地址,但是这个虚拟地址和真正的物理地址的值一样,原因是关闭了MMU(内存管理单元)。MMU负责虚拟地址到物理地址的映射,并提供硬件机制的内存条件检查。

ALU和MMU都是在CUP内,当MMU关闭的时候,就访问虚拟地址,当MMU开启的时候,就会访问物理地址,MMU不存储映射关系,只是一个查表者。


关于虚拟地址有几个很重要的地址,0x8048000是代码段起始地址,0x804a900(相差4K)是数据段的起始地是,可以通过程序来验证(包括栈地址:用户空间栈和内核栈),通过程序结果可以结合1总结。


验证程序:

 1 #include<stdio.h>
  2 int global = 20;
  3 int main()
  4 {
  5         int local = 100;
  6         printf(".text = %p\n",main);
  7         printf(".data = %p\n",&global);
  8         printf(".stack = %p\n",&local);
  9 return 0;
 10 }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值