操作系统—物理内存与虚拟内存
概念解析
物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在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的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。
操作系统—物理内存与虚拟内存相关推荐
- 操作系统:Linux虚拟内存知识介绍
今天给大家分享Linux虚拟内存相关的知识,希望的对大家能有所帮助! 1.虚拟内存 毋庸置疑,虚拟内存是操作系统中最重要的概念之一.我想主要是由于内存的重要"战略地位".CPU太快 ...
- linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......
在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...
- 操作系统物理内存使用率高的解决方法
近期有朋友遇到自己的操作系统物理内存使用率高的问题,而最常见的两种问题,一个就是物理内存太低,另一个就是程序占用过多导致.那么,我们该如果来应对物理内存使用率高的情况呢? 应对物理内存使用率高方法一: ...
- 【Why】物理内存与虚拟内存区别与联系
前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事? 其实之前我看过这个问题,据我理解的,当时是这么回答的"进程在运行的时候,操作系统都为其分 ...
- 谈谈Linux内核物理内存与虚拟内存之间的映射(超详细~)
1.用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间:而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间. 2.虚拟存 ...
- Linux 内存机制以及CPU、内存、硬盘的关系、物理内存以及虚拟内存的关系
本文有些篇幅较长,但如果认真读下来,相信你会收获颇丰!! document linux内存机制 CPU 内存 虚拟内存 硬盘 物理内存 内存和虚拟内存 跟 Windows 完全不同的 Linux 内存 ...
- 操作系统-第九章虚拟内存
操作系统-第九章虚拟内存 虚拟内存 内存共享 按需调页 虚拟存储需要解决的几个问题 页表中须指明对应的页是否在内存中 如何具体的区分当发生页错误时 page is invalid or isvalid ...
- 操作系统物理内存管理
这里写目录标题 连续分配管理方式 单一连续存储管理 分区式存储管理 固定分区 动态分区 伙伴系统 内存紧缩(内存碎片化处理) 覆盖技术 交换技术 覆盖与交换的比较 外部碎片和内部碎片的区别 内部碎片 ...
- 电脑物理内存与虚拟内存的区别与关系
我们不能听到或看到内存二字,就认为是可以看到见,摸得到的东西.我们常听说的"虚拟内存"和 "物理内存"是不能混为一谈的.我们主要从以下方面进行探讨. 物理内存是 ...
最新文章
- RedHat Directory Server 8.2 Installation Guide
- Leetcode 67. 二进制求和 (每日一题 20210826)
- Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
- 快速启动程序的工具软件都比不了Win+R-转
- 【Python】20个小技巧,让数据可视化图表更专业!
- 为了在全球“买买买”,阿里工程师自研了一套海外HR系统
- JavaOne 2015 –第二十版十大收获
- TFS中的工作项(六)
- java随机数函数生成指定区间的,意外的惊喜
- God of War Ascension / 战神4, 再一次迎来新导演!
- pandas —— pd.read_csv 与df.to_csv
- Flask的Jinjia2模板
- 判断单链表是否中心对称
- win10下如何安装win7自带的照片查看器。
- 网易服务器维护,网易:方便玩家 各大区服务器维护详细时间表列
- IPCam的启动过程和工作流程
- 十六进制颜色转换ARGB/RGB
- [换根] Accumulation Degree
- 深度学习 实验三 logistic回归预测二分类
- 获取HEVC视频的ParameterSets
热门文章
- P2887 [USACO07NOV]防晒霜
- 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】
- 全景软件:探索数据基因,提升企业数据效能
- l7sa008b故障代码_奥克斯空调故障代码大全
- 南通python 培训全栈培训班
- sqlmap帮助文档(配合实践翻译)
- 不会使用以下命令,别说你会Linux
- 你是当“鸡头”还是做“凤尾”
- Kevin.yuan
- 启动不了argis的license manager