当前位置首页 > 信息公告

操作系统的显存是怎样被进程使用的?

更新时间:2023-11-09 文章作者:佚名 信息来源:网络整理 阅读次数:

你们好,我是TT。2Dr物理好资源网(原物理ok网)

对于计算机软件的正常运作,显存(Main)所发挥作用的重要性不言而喻。无论是处在“幕后”的操作系统,还是坐落“台前”的用户应用程序,它们在运行时就会将所需数据从c盘等外部储存器转移至显存。实际上,显存和CPU芯片上的L1、L2等高速缓存,一齐构成了计算机中用于支撑程序高效运行的缓存系统。2Dr物理好资源网(原物理ok网)

这篇内容,我会先从整体的视角瞧瞧显存在计算机系统中的作用,之后再一起探究进程是怎样在操作系统的控制下与计算机显存交互的。2Dr物理好资源网(原物理ok网)

计算机内部的缓存系统2Dr物理好资源网(原物理ok网)

一般,文件会被储存在容量较大的c盘中。但c盘作为一种提供数据持久化储存的设备,采用了机械式的数据轮询形式,这就促使它未能匹配CPU在完成相关操作时,所需数据在访问速率上的要求。而显存则以快于c盘几万甚至十几万倍的读写效率,承当起了与CPU直接交互的重担。2Dr物理好资源网(原物理ok网)

但随着摩尔定理的不断应验,CPU与显存三者在数据访问效率的“供需关系”上又出现了问题。因而,现代计算机通过在这三者之间引入更多读写速率更快,容量却更小的高速缓存层,并基于局部性原理,让CPU常常使用到的数据可以被更快地再度访问。通过这些方法,由L1、L2等片上高速缓存,以及显存组成的缓存系统,便成为了计算机中用于承载应用运行时数据的主要部件。2Dr物理好资源网(原物理ok网)

网上有一个非常形象的反例,描述了显存在整个计算机系统中的“地位”:假定你作为负责人,每天都在一间专属办公室里处理各类事务。办公室外有一个硕大的档案柜,上面储存着你有权限接触的所有办公材料。当每一次须要处理某个具体事务时,你就会首先将须要的相关材料一次性地从档案柜中全部拣选下来,并将它们陈列在书房上,之后再继续进行处理。而随着时间的推移,这些常常被翻阅的、相关性较强的材料会被摆放在距离你手边较近的位置,而相关性较弱的材料则会被置于较远的位置。2Dr物理好资源网(原物理ok网)

将这个反例类比到计算机,你会发觉三者之间有着类似的行为模式。每一个程序的机器代码(事务)在可以被CPU(负责人)正常执行前,操作系统都须要先将它们从c盘(档案柜)“搬移”到显存(书房)中。而随着程序的不断运行,这些被常常访问的数据便会被储存到较高级别的缓存(较近位置)中。相反,不常用的数据则会被储存在较低级别的缓存(较远位置),甚至留驻在显存中。2Dr物理好资源网(原物理ok网)

然而,对计算机而言,程序与显存之间的交互细节远比“办公室日常”要复杂得多。现代操作系统会同时执行十几个甚至几十个程序。因而,怎么从有限的显存中合理地为它们分配所需资源,并同时兼具安全性、高效性,便成为须要考虑的首要问题。2Dr物理好资源网(原物理ok网)

现代计算机通过名为“虚拟显存”的机制,做到了这一点。下边,我们来进一步瞧瞧这个机制的具体工作原理。2Dr物理好资源网(原物理ok网)

虚拟显存机制2Dr物理好资源网(原物理ok网)

顾名思义,虚拟显存()对应于数学显存()。其中,后者是由操作系统具象下来的一个概念,它在前者的基础之上进行了一层具象,以帮助运行于其上的应用程序合理地分配显存什么是物理内存虚拟内存,并管理显存使用。2Dr物理好资源网(原物理ok网)

因而,如下边的代码所示什么是物理内存和虚拟内存,我们在应用程序中复印出的各类表针值,它们实际上都对应于虚拟显存中的某个地址,而非实际的化学显存地址(,PA)。这种地址被称为“虚拟地址(,VA)”。所有程序可以使用的虚拟地址则构成了虚拟地址空间(VAS)。2Dr物理好资源网(原物理ok网)

#2Dr物理好资源网(原物理ok网)

intmain(void){2Dr物理好资源网(原物理ok网)

intx=10;2Dr物理好资源网(原物理ok网)

("%p",&x);//.2Dr物理好资源网(原物理ok网)

();2Dr物理好资源网(原物理ok网)

0;2Dr物理好资源网(原物理ok网)

内存虚拟物理是指什么_虚拟内存和物理内存的合理比例_什么是物理内存和虚拟内存2Dr物理好资源网(原物理ok网)

CPU在访问显存中的数据时,会利用其芯片上名为“内存管理单元(MMU)”的硬件,首先将虚拟地址动态翻译为对应的数学地址,之后再进行实际的数据获取。你可以通过右图来直观地理解这个过程。2Dr物理好资源网(原物理ok网)

虚拟显存机制的一个最重要特点,就是为每一个应用程序进程都具象出了独立于化学显存的虚拟地址空间。这意味着,从进程的角度来看,它可以独享整个计算机上的所有显存。现代操作系统一般采用32或64位地址空间,二者分别拥有2与2个地址。通过这些方法,编译器在建立应用时,便不须要考虑各二补码数据段应当被实际加载到显存中的何处,所有应用均可使用统一的静态文件结构。2Dr物理好资源网(原物理ok网)

例如,在64位Linux系统中,与应用代码相关的会从VAS的固定地址处开始加载。而其他内容将在满足一定对齐要求的情况下,按次序被连续加载到高地址方向的虚拟显存中。这样,无论是程序在二补码文件内的静态视图,还是被加载到VAS后的运行时视图,它们都可以在虚拟显存的隔离下,在表现层有着稳定一致的布局。2Dr物理好资源网(原物理ok网)

而通过下边这行命令,我们便可以查看某个运行进程的VAS布局情况。注意,其中的“”需要被替换为进程对应的ID。2Dr物理好资源网(原物理ok网)

cat/proc/2Dr物理好资源网(原物理ok网)

/maps2Dr物理好资源网(原物理ok网)

这儿,我们尝试将本小节开头处的那种C程序的ID替换到上述命令中。在运行该命令后,可以得到如右图所示的输出结果。2Dr物理好资源网(原物理ok网)

这儿,命令根据地址由低到高的次序复印出了进程VAS内,每一块早已被占用的连续虚拟显存地址,对应的映射信息。如最右边一列所示,这种显存中的内容或是来自于某个具体文件(/www//main),或被用作其他用途([heap])。2Dr物理好资源网(原物理ok网)

VAS中的数据布局2Dr物理好资源网(原物理ok网)

将上图中的信息进行归类,我们可以得到如右图所示的Linux进程在VAS内的统一数据布局结构。这儿我依据类别,将不同的数据用不同的颜色进行了标明。而且,为了便捷你找到这两个图之间的显存段对应关系,我将上图中的一些关键性地址信息也选择性地标明在了右图中。2Dr物理好资源网(原物理ok网)

总的来看,Linux进程VAS中的数据,根据地址由低到高的次序,可以被分为下边这几个主要部份。2Dr物理好资源网(原物理ok网)

可以看见,得益于虚拟显存机制的具象,进程可以使用完全统一、独立的显存数据布局,而不用考虑那些数据在真实化学显存中的具体储存细节。这么,虚拟显存机制到底是怎么对化学显存进行管理的呢?接出来我们具体瞧瞧。2Dr物理好资源网(原物理ok网)

使用页表维护虚拟页状态2Dr物理好资源网(原物理ok网)

为了保证效率,操作系统一般会以“页”为单位,来在c盘与显存之间传递数据。而实际上,它也正是通过为每一个进程提供独立的“页表”结构,来维护VAS中的虚拟页在对应化学显存中的映射状态的。2Dr物理好资源网(原物理ok网)

页表本身被维护在化学显存中,其内部由诸多的“页表项(PageTableEntry,PTE)”组成。进程VAS中的每位虚拟页都对应于页表中的某个PTE,而PTE中则包含有用于描述该虚拟页状态的诸多数组。每一次MMU须要将一个虚拟地址翻译为化学地址时,它就会首先读取页表,以查询相关的PTE信息。之后,再依照虚拟地址内蕴涵的偏斜信息,找到对应页中的目标位置。2Dr物理好资源网(原物理ok网)

在简化的实现中,PTE可能由一个“有效位”字段与一个“地址”字段组成。其中,有效位用于表明该虚拟页是否已被缓存在化学显存中。若该位置位,则地址数组中储存有该页在化学显存中的起始位置。而在该位复位的情况下,若地址数组为空,则表明该虚拟页还未被分配。否则,地址数组中便保存有虚拟页内容在c盘上的起始位置。2Dr物理好资源网(原物理ok网)

什么是物理内存和虚拟内存_内存虚拟物理是指什么_虚拟内存和物理内存的合理比例2Dr物理好资源网(原物理ok网)

当CPU须要访问某个虚拟地址上的数据时,一般会发生以下两种情况:2Dr物理好资源网(原物理ok网)

在第二种情况中,缺页异常将会调用内核中特定的异常处理程序,该程序会在化学显存中选择一个页,以拿来承载当前虚拟地址所对应的数学数据。其中,对于空闲页,内核会直接将虚拟页对应的内容从c盘拷贝到该化学页中;而对于非空闲页,若该页早已被更改,则内核会首先将它的内容换出,即更新到c盘。之后,再将c盘上的内容拷贝至这块化学页中。2Dr物理好资源网(原物理ok网)

这儿你可以先暂缓步伐,通过右图来直观地理解CPU、MMU、页表、物理显存,以及c盘五者之间的协作关系。2Dr物理好资源网(原物理ok网)

页表隔离了进程的VAS与化学显存,致使三者之间的映射关系显得愈发自由。而在这些方法下,当不同进程使用不同页表维护其各自VAS中虚拟页的映射时,多个进程之间便可做到真正的数据共享。而我将在29讲中介绍的“动态链接”技术便借此为基础。除了这么,独立的VAS与页表也促使进程之间的私有显存不会被互相访问。2Dr物理好资源网(原物理ok网)

另外,通过在PTE中降低用于访问控制的相关数组(如可读、可写、可执行),CPU可以在程序尝试非法访问某块显存数据时作出异常响应。2Dr物理好资源网(原物理ok网)

使用多级页表压缩页表容积2Dr物理好资源网(原物理ok网)

然而,里面介绍的一级页表有时却可能难以满足需求。试想,以目前常用的64位地址空间为例,假定页大小为已知最大的2MiB,为保证完整映射,每位PTE大小为8字节。而为了才能在单一页表内维护进程整个64位VAS中所有虚拟页的信息,这么便须要为其匹配一个大小为65535GiB的页表,而这其实是不现实的。因而,现代计算机一般会采用“多级页表”的形式,来优化页表的大小。2Dr物理好资源网(原物理ok网)

多级页表的思路很简单。以二级页表为例,假定在一个32位地址空间中,页大小为4KiB,每位PTE大小为4字节。此时,MMU在进行化学地址查询时,首先会依据虚拟地址中蕴涵的虚拟页号信息来查找一级页表内的目标PTE,而一级页表中的每位PTE,此时实际上负责映射VAS中的一个4MiB的片。2Dr物理好资源网(原物理ok网)

根据树的方式展开,每位一级页表也都对应着一个独立的二级页表,二级页表中的每一个PTE则负责映射当前一级页表的4MiB的片中的某个4KiB的块。当一级页表查询完毕后,MMU便可得到指向目标二级页表的地址。通过该地址,再联合虚拟地址中的另一部份虚拟页号信息,它便可找到目标数据所在化学显存的具体页。最后,结合虚拟地址中的页偏斜信息,目标数据的最终数学地址便可被成功地“转换”出来。你可以通过右图来进一步理解上述流程:2Dr物理好资源网(原物理ok网)

多级页表可以节约显存空间的两个最重要诱因是:2Dr物理好资源网(原物理ok网)

实际上,上述二级页表的使用方式可以被推广到任意的N级。但总体来看,页表的级数并非越多越好,由于更多的页表级数也就意味着更长的化学地址查询时间。目前常见的多级页表为4级,而在IceLake等处理器中,也出现过5级页表。2Dr物理好资源网(原物理ok网)

使用TLB加速PTE查询2Dr物理好资源网(原物理ok网)

多级页表似乎可以压缩页表占用的显存量,但用MMU进行页表的逐级查询,这个过程也并不是毫无成本的。现实情况中,计算机一般会结合使用名为“翻译后备缓冲器(,TLB)”的硬件设备来加速这一流程。2Dr物理好资源网(原物理ok网)

TLB属于MMU的一部份,它可以推动MMU按照虚拟地址查询PTE的过程。你可以将TLB理解为一个简单的具有N行M列的矩阵,MMU会从对应虚拟地址中提取出用于查询表项的TLB索引与TLB标记。这两个值可以联合上去使用,并定位到TLB中的一个具体单元格。而此时,若该单元格内有值,则MMU可以直接使用该值,来与虚拟地址中的其他信息一起组成最终的化学地址。否则,MMU一直须要通过逐级查询页表的形式来获取目标页的化学地址。2Dr物理好资源网(原物理ok网)

再谈共享对象与私有对象2Dr物理好资源网(原物理ok网)

里面,我曾在“使用页表维护虚拟页状态”一节的最后提及,利用虚拟显存机制,不同进程之间可以共享化学显存上的同一段数据。2Dr物理好资源网(原物理ok网)

这种数据在化学显存中实际储存时,可能并不是连续的。而利用于页表实现的“虚拟页与化学页映射关系分离”,我们可以确保CPU才能根据连续的形式来使用这种数据。2Dr物理好资源网(原物理ok网)

而当某个共享进程企图对这种共享数据进行更改时,操作系统便会通过“写时复制(Copy-on-write)”的形式,来将被变更数据所在的化学页进行复制,并通过更改页表,来让更改进程可以私有化这部份数据。2Dr物理好资源网(原物理ok网)

发表评论

统计代码放这里