当前位置:首页 > 生活 >

虚拟内存是什么地方的内存(虚拟内存和内存有区别吗)

来源:原点资讯(www.yd166.com)时间:2024-12-02 09:51:22作者:YD166手机阅读>>

进程虚拟地址空间

如上图所示,进程的虚拟地址空间被统一划分成了多个固定区域,例如代码区,数据区,堆区,共享区,栈区,内核区。

代码区和数据区域:来自于可执行文件,代码区和数据区挨着,代码区总是在0x0040000地址以上,0x0040000地址以下另有它用。

运行时堆区域:它初始化大小为0,随着动态分配内存(malloc),运行时堆不断往高地址方向扩展,有个指针brk指向了堆的最高地址。

共享库的内存映射区域:这个区域是一些标准的系统库,这个共享库在物理内存中只存储一份,每个进程将这个区域的虚拟地址映射到同一份共享库物理内存上。

用户栈区域:这个区域紧挨着内核区域,处于高地址处,随着用户栈的出栈,入栈,动态扩展,入栈向低地址方向扩展,出栈则向高地址方向收缩,栈顶指针存储在栈寄存器(ESP)中。

内核区域:这个区域是操作系统自己代码,数据,栈空间,内核在物理内存中只存储一份,每个进程将这个区域的虚拟地址映射到同一份内核物理内存上。

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(9)

内核和共享库的映射

3.什么是虚拟页,物理页?

现代操作操作和CPU将物理内存按照固定的页大小分成很多份,每一份叫做物理页(PP),每一份有一个编号叫做物理页号(PPN),这个物理页大小通常是4KB,例如一个物理内存大小为20KB,这个物理内存可以分成5个物理页,那么物理页号(PPN)就是0,1,2,3,4。

虚拟内存也一样,它的页大小与物理内存的页大小相同,虚拟内存也被分成了很多份,每一份叫做虚拟页(VP),每一份的编号叫做虚拟页号(VPN),例如假设虚拟页大小为4KB,一个虚拟内存大小为10KB,这个虚拟内存可以分成2个虚拟页(VP),虚拟页号(VPN)就是0,1

每个物理页存储在物理内存上,每个虚拟页存储在磁盘上,如下图所示

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(10)

虚拟内存和物理内存

上图的虚拟内存有8个虚拟页,物理内存有6个物理内存页,虚拟页存储在磁盘上,物理页则存储在DRARM上。

每个虚拟页可以有三种状态,未分配,已缓冲,未缓冲

未分配:虚拟页还没有分配磁盘空间

已缓冲:虚拟页缓冲或者映射在了物理页上。

未缓冲:虚拟页分配了磁盘空间,但没有在物理页上缓冲。

通常操作系统加载可执行文件后,创建了一个进程,这个进程就有了虚拟地址空间,这并不意味着可执行文件已经从磁盘加载到内存中了,操作系统只是为了进程虚拟地址空间的每个区域分配了虚拟页。

代码和数据区域的虚拟页被分配到了可执行文件的适当位置,此时虚拟页状态为未缓冲,虚拟页指向了磁盘地址。

操作系统和共享库的虚拟页被映射到了物理内存,因为操作系统和共享库已经在物理内存了,这些虚拟页的状态为已缓冲。

用户栈,运行时堆的虚拟页没有任何分配,不占用任何空间,这些虚拟页的状态为未分配。

那么进程虚拟地址空间的代码和数据,用户栈,运行时堆的物理内存什么时候分配呢,答案就是处理器用虚拟地址执行代码,读取数据时,这个下一章阐述。

虚拟地址访问物理内存

先普及几个概念:

VPO即虚拟页偏移量:

虚拟地址由虚拟页号 虚拟页偏移量组成,虚拟页偏移量是相对某个虚拟页的偏移量。

PPO即物理页偏移量:

物理地址由物理页号 物理页偏移量组成,物理页偏移量是相对某个物理页的偏移量,

VPO等于PPO

页表(Page Table)PT:

页表是建立虚拟页号和物理页号映射关系的表结构,每个页表项(PTE)包括了有效位,物理页号,磁盘地址等信息,如下图:

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(11)

页表与物理内存,虚拟内存的关系

由上图可以得知,操作系统可以根据页表项的有效位和地址信息判断出虚拟页目前所处的状态即未分配,已缓冲,未缓冲

如上图所示,页表有8个页表项,每个页表项里包含一个有效位和地址信息。

当页表项 PTE n的页表项有效位为0时,表示虚拟页 n没有缓冲在物理内存,可能在磁盘或者未分配,例如PTE 0页表项里存储的是null,表明虚拟页0即VP0是未分配状态,PTE 3里存储的是磁盘地址,表明虚拟页 3即VP3在磁盘里,但没有缓冲,VP3状态为未缓冲。

当页表项PTE n的页表项的有效位为1时,表示虚拟页n缓冲在物理内存,PTE n存储了物理页号,虚拟页 n的状态为已缓冲,例如PTE 1的页表项,有效位为1,则虚拟页VP1缓冲在了物理页中。

页表基址寄存器(PTBR):

每个进程都有自己的页表,CPU执行某个进程时,会先把该进程的一级页表起始地址存储到页表基址寄存器,这样CPU查找一级页表起始地址可以直接从寄存器查找,加快了查找效率。

好了,概念介绍到这里,先来看看虚拟地址翻译物理地址的过程,按照一级页表来演示,如下图所示:

虚拟内存是什么地方的内存,虚拟内存和内存有区别吗(12)

栏目热文

虚拟内存从哪来的(虚拟内存什么时候出现的)

虚拟内存从哪来的(虚拟内存什么时候出现的)

前言:存为了更加高效并且少出错,现代操作系统提供了一种对主存的抽象概念,叫做虚拟内存。虚拟内存是硬件异常,硬件地址翻译,...

2024-12-02 09:48:56查看全文 >>

虚拟内存怎么设置游戏运行流畅(虚拟内存能提高游戏流畅度吗)

虚拟内存怎么设置游戏运行流畅(虚拟内存能提高游戏流畅度吗)

生活中我们经常听到电脑有虚拟内存一说,很多人对电脑虚拟内存有种神秘的感觉,因为他们根本没有弄明白虚拟内存到底是什么意思,...

2024-12-02 10:02:43查看全文 >>

什么情况下会用虚拟内存(有必要打开虚拟内存吗)

什么情况下会用虚拟内存(有必要打开虚拟内存吗)

虚拟内存这个词,估计新生代里听说过的人不多。但如果你是电脑老鸟,或者经常玩大型游戏的话,虚拟内存应该或多或少还有些印象。...

2024-12-02 10:14:52查看全文 >>

同轴度与位置度(同轴度和位置度区别示意图)

同轴度与位置度(同轴度和位置度区别示意图)

位置度是GD&T中最有用且最复杂的几何公差符号,没有之一。位置度太重要且调用方法多样,为了不像裹脚布,下面仅讨论RFS(...

2024-12-02 09:45:45查看全文 >>

同心度的最简单测法(圆同心度测量的正确方法)

同心度的最简单测法(圆同心度测量的正确方法)

内外两个圆分别使用圆形拟合,找出圆心,再使用点间距测两个圆心的距离,看一遍就会,就是时这么简单。马克拉伯Moo...

2024-12-02 09:48:07查看全文 >>

虚拟内存通俗解释(虚拟内存一定要是物理的1.5倍吗)

虚拟内存通俗解释(虚拟内存一定要是物理的1.5倍吗)

一、前言在Windows XP时代以前,老鸟装机或者重装系统之后有一项必做的性能优化工作,那就是手动调整系统默认的虚拟内...

2024-12-02 10:23:44查看全文 >>

虚拟内存的作用(虚拟内存设置在d盘有什么好处)

虚拟内存的作用(虚拟内存设置在d盘有什么好处)

随着内存拓展技术的普及,目前从百元入门到万元旗舰基本都搭载了这项技术,旨在通过扩展手机的可用运行内存来提升多任务处理能力...

2024-12-02 09:57:57查看全文 >>

虚拟内存d盘有什么用(虚拟内存有什么用利与弊)

虚拟内存d盘有什么用(虚拟内存有什么用利与弊)

一、什么是虚拟内存?虚拟内存有什么用处?操作系统中所运行所有的程序全部都是经过内存提交给CPU然后才执行的,不过若是执行...

2024-12-02 09:57:27查看全文 >>

建盏的作用和功效(长期喝建盏水的危害)

建盏的作用和功效(长期喝建盏水的危害)

随着生活水平的不断提高,越来越多的朋友,都会选择用建盏喝茶。很多人也有些疑惑,一只小小的黑碗怎么能让这么多人喜欢? 有人...

2024-12-02 10:21:08查看全文 >>

建盏图片(上等茶盏主人杯)

建盏图片(上等茶盏主人杯)

油滴建盏是建盏中很常见的,也是很多建盏爱好者都非常喜欢的。  看似只是黑黑的建盏的上加上了一些密集的斑纹,实际上却拥有不...

2024-12-02 10:28:02查看全文 >>

文档排行