1.概念

物理地址:物理地址空间是实在的存在于计算机中的一个实体,在每一台计算机中保持唯一独立性。我们可以称它为物理内存;如在32位的机器上,物理空间的大小理论上可以达到2^32字节(4GB),但如果实际装了512的内存,那么其物理地址真正的有效部分只有512MB = 512 * 1024 KB = 512 * 1024 * 1024 B(0x00000000~0x1fffffff)。其他部分是无效的。

虚拟地址:虚拟地址并不真实存在于计算机中。每个进程都分配有自己的虚拟空间,而且只能访问自己被分配使用的空间。理论上,虚拟空间受物理内存大小的限制,如给有4GB内存,那么虚拟地址空间的地址范围就应该是0x00000000~0xFFFFFFFF。每个进程都有自己独立的虚拟地址空间。这样每个进程都能访问自己的地址空间,这样做到了有效的隔离。

在上面我们提到了合理的内存管理机制。我们这里虚拟地址和物理地址之间的映射是通过MMU(内存管理单元)来完成的。

MMU:将虚拟的地址转化为物理地址。
段错误:内存访问非法,内核空间受保护
堆空间存储后一定要释放

优点:

1.既然每个进程的内存空间都是一致而且固定的,所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际的内存地址,这是有独立内存空间的好处。

2.当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚拟内存映射过去就可以了,节省内存。

3.在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片。

另外,事实上,在每个进程创建加载时,内核只是为进程“创建”了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射就好(叫做存储器映射),等到运行到对应的程序时,才会通过缺页异常,来拷贝数据。还有进程运行过程中,要动态分配内存,比如malloc时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。


在进程里平时所说的指针变量,保存的就是虚拟地址。当应用程序使用虚拟地址访问内存时,处理器(CPU)会将其转化成物理地址(MMU)。

这样做的好处在于:
进程隔离,更好的保护系统安全运行
屏蔽物理差异带来的麻烦,方便操作系统和编译器安排进程地址

推荐一篇好文
https://www.cnblogs.com/clover-toeic/p/3754433.html

https://blog.csdn.net/qq_38526635/article/details/81981971?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164552919516780269823158%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164552919516780269823158&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduend~default-1-81981971.nonecase&utm_term=RAM+ROM+cpu&spm=1018.2226.3001.4450

https://www.jianshu.com/p/b6356e0ec63c

虚拟地址空间和物理地址空间相关推荐

  1. 虚拟内存、虚拟地址空间和物理地址空间(内存管理)

    文章目录 前言 一.虚拟地址和物理地址 二.虚拟内存 三.为什么引入虚拟内存 前言 虚拟内存.虚拟地址空间和物理地址空间. 一.虚拟地址和物理地址 地址空间是一个非负整数地址的有序集合. 在一个带虚拟 ...

  2. 设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1KB,操作系统采用固定分配局部置换策略为此进程分配4个页框

    设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址.若某进程最多需要6页(Page)数据存储空间,页的大小为1KB [2],操作系统采用固定分配局部置换策略为此进程分配4个页框(Page ...

  3. 31逻辑地址空间和物理地址空间

    1. 逻辑地址空间和物理地址空间:

  4. 逻辑地址空间和物理地址空间

    地址空间是一个进程可用于寻址内存的一套地址集合. 1.程序经过编译后,每个目标模块都是从0号单元开始编址,称为该目标模块的相对地址(或逻辑地址). 2.当链接程序将各个模块链接成一个完整的可执行目标程 ...

  5. 某计算机系统按照字节编址,(8分)设某计算机的逻辑地址空间和物理地址空间均为64KB.按字节编址。若某进程最多需要6页(Page)数 - 开卷宝...

    您可能感兴趣的试题 在某页式管理系统中,假定主存为64K,分成16块,块号为0,1,2,-,15.设某进程有4页,其页号为0,1,2,3,被分别装入主存的第9,0,1,14块. 试问: (1)该进程的 ...

  6. 【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

    文章目录 一.物理地址空间 二.外围设备寄存器 三.外围设备寄存器物理地址 映射到 虚拟地址空间 一.物理地址空间 " 物理地址空间 " 是 CPU 处理器 在 " 总线 ...

  7. 计算机地址空间是什么,物理地址空间是什么

    地址空间(address space)表示任何一个计算机实体所占用的内存大小.比如外设.文件.服务器或者一个网络计算机.地址空间包括物理空间以及虚拟空间.今天学习啦小编给大家介绍一下物理地址空间的相关 ...

  8. 【操作系统】虚拟页和物理页

    一.前置概念 实模式:直接操作物理内存.每次只能运行一个程序,不安全:最大使用内存1M,限制太大. 保护模式:虚拟地址被转换为物理地址,要有页表. 装载器:把指令和数据加载到内存运行.要满足两个条件: ...

  9. mpu 配置内存空间_PCIE的内存地址空间、I/O地址空间和配置地址空间

    pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间 首先区分一下IO空间和内存空间 cpu会访问的设备一般有内存和外设寄存器,如下图所示.x86架构采用独立编址将内存 ...

  10. 虚拟网卡与物理网卡TCP协议数据传输对比

    先说下配置环境 测试软件:Netperf (Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输.Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bu ...

最新文章

  1. java成员变量和局部变量的初始化和内存中的运行机制
  2. 关于Android中的onCreate()多次被调用导致bindService被多次调用的问题...
  3. mac系统装mysql还是mariadb_Mac上安装mariadb
  4. Centos7搭建Java环境,并设置项目自启动脚本、定时数据库备份/日志清理脚本
  5. EOS Platform 7.2 安装
  6. 火山引擎智能容器云 veCompass v3.0 重磅发布!
  7. Android内核开发 Linux C编程调用内核模块设备驱动
  8. Appium基础四:Desired Capabilities详讲
  9. 有关Ajax实现的两种方法
  10. Listen 0.0.0.0:80 Listen [::0]:80
  11. 关于拿到一个别人给你已经上架的App源代码时,首先需要干的几个事情
  12. 为什么周报如此重要?如何才能写好周报
  13. 仇保兴:城市的交通应该尊重什么样的发展战略?
  14. VMware之虚拟交换机
  15. 基于MATLAB中的GUI设计的钢琴界面设计并能发声
  16. Python自动化运维 - day9 - 进程与线程
  17. PHP - preg_split详解
  18. 任务栏出现两个重复图标的解决办法
  19. Linux运维人员成长之路必学书籍资料推荐
  20. 前端面试相关题(简易)

热门文章

  1. 【C语言例程】输出101~200之间的素数(质数)
  2. 推导飞机飞行动力学方程组
  3. 用计算机怎么管理小米路由器,小米路由器电脑怎么设置_小米路由器怎么用电脑设置?-192路由网...
  4. docker之部署一个不中毒的浏览器
  5. vs2015 2017 2019社区版免登录延长许可证
  6. 可编辑ppt地图分布图怎么做?
  7. WOW装备大全(07.11.30)
  8. 程序设计python_Python程序设计—车万翔
  9. HTTPS中的证书、SSL证书、X509证书 初探 讲解
  10. 泛函分析 04.01 有界线性算子 - 有界线性算子与有界线性泛函