概念解析

物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。

正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。

早期没有虚拟内存的时候出现的问题:

1.现在有多个程序需要运行,但是内存空间不足了,就需要将其他程序暂时拷贝到硬盘当中,然后将新的程序装入内存运行.由于大量的数据装入装出,内存的使用效率会十分Low。

2.由于程序都是直接访问物理内存的,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据。

3.因为内存地址是随机分配的,所以程序运行的地址也是不正确的。

Linux下虚拟内存的结构图:


以32位机为例,我们上图看到的进程虚拟存储器占用3G虚拟内存空间,内核虚拟存储器占用1G的虚拟内存空间

什么是虚拟内存地址和物理内存地址呢?

假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?

回答这个问题前,先说明计算机的内存分页机制。计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。但是问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了。这就是处理虚拟内存地址到物理内存的步骤。

虚拟内存地址由页号和偏移量组成。页号对应的映射到一个页帧。那么,说说偏移量。偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMU(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

操作系统—物理内存与虚拟内存相关推荐

  1. 操作系统:Linux虚拟内存知识介绍

    今天给大家分享Linux虚拟内存相关的知识,希望的对大家能有所帮助! 1.虚拟内存 毋庸置疑,虚拟内存是操作系统中最重要的概念之一.我想主要是由于内存的重要"战略地位".CPU太快 ...

  2. linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......

    在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...

  3. 操作系统物理内存使用率高的解决方法

    近期有朋友遇到自己的操作系统物理内存使用率高的问题,而最常见的两种问题,一个就是物理内存太低,另一个就是程序占用过多导致.那么,我们该如果来应对物理内存使用率高的情况呢? 应对物理内存使用率高方法一: ...

  4. 【Why】物理内存与虚拟内存区别与联系

    前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事? 其实之前我看过这个问题,据我理解的,当时是这么回答的"进程在运行的时候,操作系统都为其分 ...

  5. 谈谈Linux内核物理内存与虚拟内存之间的映射(超详细~)

    1.用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间:而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间. 2.虚拟存 ...

  6. Linux 内存机制以及CPU、内存、硬盘的关系、物理内存以及虚拟内存的关系

    本文有些篇幅较长,但如果认真读下来,相信你会收获颇丰!! document linux内存机制 CPU 内存 虚拟内存 硬盘 物理内存 内存和虚拟内存 跟 Windows 完全不同的 Linux 内存 ...

  7. 操作系统-第九章虚拟内存

    操作系统-第九章虚拟内存 虚拟内存 内存共享 按需调页 虚拟存储需要解决的几个问题 页表中须指明对应的页是否在内存中 如何具体的区分当发生页错误时 page is invalid or isvalid ...

  8. 操作系统物理内存管理

    这里写目录标题 连续分配管理方式 单一连续存储管理 分区式存储管理 固定分区 动态分区 伙伴系统 内存紧缩(内存碎片化处理) 覆盖技术 交换技术 覆盖与交换的比较 外部碎片和内部碎片的区别 内部碎片 ...

  9. 电脑物理内存与虚拟内存的区别与关系

    我们不能听到或看到内存二字,就认为是可以看到见,摸得到的东西.我们常听说的"虚拟内存"和 "物理内存"是不能混为一谈的.我们主要从以下方面进行探讨. 物理内存是 ...

最新文章

  1. RedHat Directory Server 8.2 Installation Guide
  2. Leetcode 67. 二进制求和 (每日一题 20210826)
  3. Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
  4. 快速启动程序的工具软件都比不了Win+R-转
  5. 【Python】20个小技巧,让数据可视化图表更专业!
  6. 为了在全球“买买买”,阿里工程师自研了一套海外HR系统
  7. JavaOne 2015 –第二十版十大收获
  8. TFS中的工作项(六)
  9. java随机数函数生成指定区间的,意外的惊喜
  10. God of War Ascension / 战神4, 再一次迎来新导演!
  11. pandas —— pd.read_csv 与df.to_csv
  12. Flask的Jinjia2模板
  13. 判断单链表是否中心对称
  14. win10下如何安装win7自带的照片查看器。
  15. 网易服务器维护,网易:方便玩家 各大区服务器维护详细时间表列
  16. IPCam的启动过程和工作流程
  17. 十六进制颜色转换ARGB/RGB
  18. [换根] Accumulation Degree
  19. 深度学习 实验三 logistic回归预测二分类
  20. 获取HEVC视频的ParameterSets

热门文章

  1. P2887 [USACO07NOV]防晒霜
  2. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】
  3. 全景软件:探索数据基因,提升企业数据效能
  4. l7sa008b故障代码_奥克斯空调故障代码大全
  5. 南通python 培训全栈培训班
  6. sqlmap帮助文档(配合实践翻译)
  7. 不会使用以下命令,别说你会Linux
  8. 你是当“鸡头”还是做“凤尾”
  9. Kevin.yuan
  10. 启动不了argis的license manager