您当前的位置:首页 > 电脑百科 > 硬件技术 > 硬件知识

什么是虚拟地址?虚拟地址的工作原理是什么?

时间:2021-12-08 11:04:24  来源:  作者:linux上的码农

1.为什么要有虚拟内存
在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。
当运行多个程序时,经常会出现以下问题:
1)进程地址空间不隔离,没有权限保护。
由于程序都是直接访问物理内存,所以一个进程可以修改其他进程的内存数据,
甚至修改内核地址空间中的数据。
2)内存使用效率低
当内存空间不足时,要将其他程序暂时拷贝到硬盘,然后将新的程序装入内存运行。
由于大量的数据装入装出,内存使用效率会十分低下。
3)程序运行的地址不确定
因为内存地址是随机分配的,所以程序运行的地址也是不确定的。

2.虚拟地址和物理地址
对于32位系统,寻址指针为4字节,对应的虚拟地址空间为0-2^32,即0-4G。
对于64位系统,寻址指针为8字节,对应的虚拟地址空间为0-2^64,即0-16G。
要注意的是,这个地址空间是虚拟的,并非实际存在的。
linux内核把虚拟地址空间分为两部分:用户进程空间,内核进程空间。
如下如所示:

什么是虚拟地址?虚拟地址的工作原理是什么?

 

更多linux内核视频教程文本资料免费获取后台私信【内核】。

什么是虚拟地址?虚拟地址的工作原理是什么?

 

 

 

在缓存原理中,换入/换出的数据以块为最小单位。在内存管理时,也是地址空间的最小单位。
虚拟地址空间划分为多个固定大小的虚拟页(VP),物理地址空间(DRAM内存)划分为多个固定大小的物理页(PP),
虚拟页和物理页的大小是一样的,通常为4KB。

虚拟页和物理页存在着以下关系:
虚拟页和磁盘文件映射,然后缓存到物理页。
根据是否映射,是否缓存,可以将虚拟页的状态分为以下三种:
1)未映射的页
即虚拟页没有映射到磁盘文件
2)未缓存的页
虚拟页映射到了磁盘文件,但是没有缓存到物理页,也就是内存上。
3)缓存的页
虚拟页映射到了磁盘文件,并且缓存到物理页
如下图所示:

什么是虚拟地址?虚拟地址的工作原理是什么?

 

3.虚拟地址的工作原理
对于进程来说,使用的都是虚拟地址。每个进程维护一个单独的页表。何为页表?
页表是一种数组结构,存放着各虚拟页的状态,是否映射,是否缓存。

1)数组的索引号,表示虚拟页号
2)数组的值
若为null,表示未映射的页
若非null,第一位表示有效位,为1,表明缓存的页;为0,表明未缓存的页面。
其余位表示缓存到的物理页号。

页表结构图如下:

什么是虚拟地址?虚拟地址的工作原理是什么?

 

进程执行时,当需要访问虚拟地址中存放的值时,步骤如下:
1)CPU会先找到虚拟地址所在的虚拟页(VP3),根据页表,找出页表中第3条的值。
判断有效位,为1,DRMA缓存命中,获根据物理页号,找到物理页中的内容,返回。
2)若有效位为0,产生缺页异常,调用内核缺页异常处理程序。
它会选择一个物理页(如PP4),作为牺牲页,将该页的内容刷新到磁盘文件。然后,把VP3映射的磁盘文件,缓存到该物理页。
页表中的第3条,有效位变1,同时,物理页号表号变为PP4。
3)缺页异常处理完毕后,返回中断前的指令,重新执行,此时缓存命中,执行1)
4)将找到的内容映射到高速缓存,CPU从高速缓存中获取该值,结束。

4.使用虚拟地址需要注意的问题
1)磁盘和主存传送页的活动叫做页面调度。页面调度会引起磁盘流量,如果程序的局部性不好,会频繁进行页面调度,叫做“缓存颠簸”。
操作系统会在内存中分配一块交换区作为缓冲区,来加速页面的调度。
2)一级页表占用的空间是比较大的,根据按需调度的原则,一般使用的是多级页表,即一级页表指向二级页表,这样大大压缩了页表的大小。

5.地址翻译
地址翻译指的是DRAM缓存命中时,由虚拟地址找到物理地址的过程。
该过程是完全由硬件来完成的。
1)CPU有一个专门的页表基地址寄存器(PTBR)指向当前页表的基地址,快速定位到该进程的页表。
2)根据虚拟页号,找到虚拟地址在页表的值。
3)根据值中的物理页号,找到物理地址。

6.Linux中的虚拟内存机制

Linux把虚拟内存划分成区域area的集合,一个area包括连续的多个页。
area的数据结构如下所示:
1)内核为每个进程维护了一个单独的任务结果task_struct
2)task_struct的mm指针,指向了mm_struct,该结构描述虚拟内存的运行状态。
3)mm_struct的pgd指针指向进程的一级页表的基地址。
mmap指针,指向vm_area_struct链表。
4)vm_area_struct描述area的结构,vm_start表示area的开始位置,vm_end表示area的结束位置,vm_prot表示area内的页的读写权限,vm_flags表示area内的页面是进程私有还是共享,vm_next指向下一个area节点。

什么是虚拟地址?虚拟地址的工作原理是什么?

 

在Linux中,当发生缺页异常时,步骤如下:
1)缺页异常程序,检查虚拟地址在哪个area内。
2)访问的虚拟页若没有读写权限,则触发一个保护异常,终止进程。
3)选择牺牲页,刷新到磁盘,从磁盘加载缺失的内容到物理页,更新页表。

7.Linux虚拟内存需要注意的问题
内存映射机制:初始化虚拟内存区域时,会把虚拟内存和磁盘文件对象对应起来。

由于内存映射机制,一个磁盘文件对象可被多个进程共享访问,也可被多个进程私有访问。
当共享访问时,一个进程对该对象的修改会显示到其他进程。
当私有访问时,修改时会产生保护故障,内核会拷贝这个私有对象,修改的是这个新对象,其他进程指向的是原来的对象。

fork函数是说明内存映射机制很好的例子:
fork函数会创建带有独立虚拟地址空间的新进程,内核会把当前进程的虚拟内存中数据结构复制一份给新进程。虚拟内存area包括共享区域和私有区域,新建的进程对私有区域做修改时,会触发写时拷贝,为新进程维护私有的虚拟地址空间。

8.虚拟地址作用总结
1)虚拟内存管理可以控制物理内存的访问权限
访问的虚拟页若没有读写权限,则触发一个保护异常,终止进程。
2)虚拟内存让每个进程有独立的地址空间
对于私有区域来说,当不同进程对该区域做修改时,会触发写时拷贝,为新进程维护私有的虚拟地址空间。
3)VA到PA的映射会给分配和释放内存带来方便。
物理内存不连续的地址,可映射到连续的虚拟内存地址。
4)内存效率高
使用了页面调度,不会造成大量的数据装入装出。



Tags:虚拟地址   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.为什么要有虚拟内存 在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。 当运行多个程序时,经常会出现以下问题: 1)进程地址空间...【详细内容】
2021-12-08  Tags: 虚拟地址  点击:(21)  评论:(0)  加入收藏
内核空间 和用户空间申请的内存最终和buddy怎么交互?以及在页表映射上的区别?虚拟地址到物理地址,什么时候开始映射?Buddy的问题分配的力度太大 buddy算法把空闲页面分成1,2,4页,bu...【详细内容】
2021-12-07  Tags: 虚拟地址  点击:(25)  评论:(0)  加入收藏
在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核...【详细内容】
2021-11-30  Tags: 虚拟地址  点击:(19)  评论:(0)  加入收藏
现代的操作系统将可执行文件加载后,创建了进程,进程中每一条指令和数据都被分配了一个虚拟地址,CPU获取到这个虚拟地址后,需要翻译成内存的物理地址后,才能访问指令和数据,本片文...【详细内容】
2021-04-27  Tags: 虚拟地址  点击:(168)  评论:(0)  加入收藏
程序经过编译后,变成了可执行的文件,可执行文件主要包括代码和数据两部分,代码是只读的,数据则是可读可写的。可执行文件由操作系统加载到内存中,交由CPU去执行,现在问题来了,CPU怎...【详细内容】
2021-04-25  Tags: 虚拟地址  点击:(294)  评论:(0)  加入收藏
▌简易百科推荐
首先我们要弄懂什么是“雷电”接口。其实“雷电”本质上和咱们常见的HDMI,DP等一样是一种传输协议的简称,全程英文名叫做Thunderbolt。请注意与其说他是一个接口倒不如说他是...【详细内容】
2021-12-27  小伊评科技    Tags:雷电接口   点击:(2)  评论:(0)  加入收藏
畅谈关于装修的那些事,分享装修的各种经验和知识。大家好,我是畅谈装修,关注我即可了解更多关于装修的那些事!路由器现在已经是居家生活中“不可缺少的伙伴”,没有了它,相信连饭吃...【详细内容】
2021-12-27  畅谈装修    Tags:路由器   点击:(1)  评论:(0)  加入收藏
此前有关厂商销售的显示器上,HDMI 2.1的标示问题闹得沸沸扬扬。按照官方的说法,HDMI 2.0标准已经不存在了,以后只有HDMI 2.1标准,后者的功能是可选的,显示器制造商只要具体说明该...【详细内容】
2021-12-24  超能网    Tags:HDMI   点击:(8)  评论:(0)  加入收藏
声卡本身会包含一个DAC。DAC字面上直接翻译,就是“数字到模拟转换器”。有时候,人们认为声卡的DAC不够好,所以从声卡的数字输出接口,外接独立的DAC,来改善声音。DAC首选的接口是...【详细内容】
2021-12-10  亲爱的客户    Tags:解码器   点击:(15)  评论:(0)  加入收藏
1.为什么要有虚拟内存 在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。 当运行多个程序时,经常会出现以下问题: 1)进程地址空间...【详细内容】
2021-12-08  linux上的码农    Tags:虚拟地址   点击:(21)  评论:(0)  加入收藏
CPU、GPU、FPGA三者能力相加就是芯片的未来!很多粉丝问我,嵌入式方向中的FPGA怎么样?收入如何?前言讲述FPGA前,我们先讲讲当年中兴被制裁的问题。美国前总统特朗普曾经发布过一条...【详细内容】
2021-12-01  一口Linux    Tags:FPGA   点击:(48)  评论:(0)  加入收藏
现在市面上常用的视频线有HDMI线、VGA线、DP线、DVI线,其中HDMI线是用的比较多的,平时直播也有很多朋友会问HDMI相关的问题,今天小泽总结了一些高频的HDMI使用问题,赶紧收藏! 所...【详细内容】
2021-11-25  SAMZHE山泽    Tags:HDMI线   点击:(32)  评论:(0)  加入收藏
本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:殇小辛 apple tv 4K使用近2年了,分享下深度使用体验 整个盒子比想象中小很多,放在电视柜里不占空间,还很好看 遥控器顶部区...【详细内容】
2021-11-09  什么值得买    Tags:Apple TV   点击:(31)  评论:(0)  加入收藏
近年来摩尔定律“失速”,使得中央处理器(CPU)的性能增长边际成本急剧上升。有研究数据表明,现在CPU的性能年化增长率(面积归一化之后)仅有3%左右。然而,人们对计算的需求依然爆发性增长。...【详细内容】
2021-11-05  赵广立  中国科学报  Tags:DPU   点击:(44)  评论:(0)  加入收藏
分享屏幕的分辨率与像素点,让大家更加直观了解显示屏清晰度。 分辩率: 分辩率是液晶显示屏像素点排列的密度,密度排列越高,显示的画面就会越清晰。 举例:2K55寸显示屏,显示尺寸为:1...【详细内容】
2021-11-04  深圳盛诚专显科技    Tags:分辨率   点击:(46)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条