这是在系统中运行的程序的一个例子。比如我们可以同时运行多个QQ程序,用Office打开多个文档等等。系统给我们展示的多进程界面,其实就是多个进程交替共享CPU和主存资源。但是,共享会带来直接的问题,比如:如果很多进程同时运行,所需的存储容量可能会超过我们的物理存储,导致一些运行错误;或者进程修改了其他进程的内存,也会导致直接运行错误。因此,为了更好地管理内存,现代系统引入了虚拟内存作为实际主存的上层抽象,使得所有进程占用的存储空间具有一致的形式。这方面有两个主题:1 .了解虚拟内存的工作原理;2.应用程序如何使用和管理虚拟内存。今天,让让我们首先了解虚拟内存是如何工作的。
*******
和虚拟寻址。
物理3354计算机系统的主存储器被组织成一个M个连续字节的数组,可以记录为0,1,2,3。M-1,每个都有一个明确的物理地址(PA)。早期的CPU直接将物理地址发送到主存来获取数据和指令。
虚拟寻址——现代系统CPU集成了地址翻译硬件(MMU),可以将CPU识别的虚拟地址(VA)翻译成与主存对应的PA。
#引入虚拟存储的一个优点是,我们可以建立{va}-{pa}的映射,这样虚拟存储地址空间可以大于实际地址空间#
******
虚拟内存主要使用——缓存工具。
就像我们在CPU和主存之间增加缓存一样,系统也在主存和硬盘之间增加虚拟内存,减少数据传输的时间。Windows下的虚拟内存是虚拟内存的一种。
虚拟内存(VM)和物理内存(PM)之间的数据交换单位。虚拟页面存储在磁盘上,物理页面缓存在DRAM(主内存)中。
页表——在物理存储器中存储页表(数据结构)。这个页表记录了虚拟页和物理页之间的映射。每条记录称为一个页表项,其基本格式为:有效位(1bit)物理页号或磁盘地址。
当系统运行时,CPU发送一个虚拟地址请求,在虚拟内存的虚拟页表中查找PTE。此时:
如果匹配并且有效位是1 ,表示数据已经缓存在主存中,直接读取后面的物理页号就可以得到数据;
如果匹配但有效的位是0 & gt;这意味着数据在VM上,而不在PM上。此时,需要替换PM上的页面以获得所需的页面。
实际上,所有现代系统都采用按需调度页面的方法,即只有在请求时才替换页面。
******
虚拟内存主应用程序3354存储管理
直接结果是,由于VM空间通常大于PM空间,所以PM空间地址将被共享。比如进程需要使用相同的内核代码,调用相同的系统函数,C标准库中的函数。此时,多个进程可以共享部分地址空间。节省了多个进程的存储空间需求。
******
虚拟内存3354内存保护的主要应用
系统中有太多的数据是不允许用户随便访问和更改的,比如进程的只读文本段,比如内核中的代码和数据,还有其他进程的私有内存。因此,现代系统总是为操作系统提供控制存储系统访问的手段。实际上,可以将更多有效位添加到页表中,以控制特殊页的读写操作,例如:
SUP:只有超级用户被授权读写吗?
读取:您有读取权限吗?
写:你有写权限吗?
******
地址转换
虚拟地址由CPU发送到内存,让CPU直接面对抽象一致的内存对象。但这需要MMU做地址翻译。MMU会使用页表基址寄存器来确定虚拟页表中虚拟地址的PTE,然后进行PA转换。主要步骤如下:
1.CPU生成一个虚拟地址并发送给MMU。
2.MMU生成PTE地址,并从缓存/主存储器请求中获取该地址
3.缓存/主存储器将PTE(记录)返回给MMU
4.判断:
如果PTE的有效位为真,MMU读取PTE中的物理地址,并将其发送到缓存/主存储器。
5.高速缓存/主存储器将所请求的数据返回给CPU
如果判断PTE有效位为假或无效,
6.MMU触发一个异常,控制转移到CPU异常控制处理器。
7.缺失页处理程序确定PM中的牺牲页,如果该页已被修改,它将被写回磁盘。
8.将丢失的页面处理程序调入新页面,并更新内存中的PTE
9.缺页处理程序返回-4
标签:系统内存地址