传统存储管理中的问题
2)空局部性:程序一旦访问某个内存位置,很有可能在不久的将来就会访问附近的内存位置(因为内存中连续存储了大量的数据,程序的指令也是按顺序存储在内存中的)。
基于这种局部性原则,当一个程序加载到内存中时,只有这个程序中即将使用的部分才能加载到内存中,没有使用的部分暂时保留在外部内存(磁盘)中,程序才能正常执行。
在程序执行过程中,当CPU所需的信息不在内存中时,操作系统负责将所需信息从外部内存(磁盘)转移到内存中,然后继续执行程序;
如果在转移到内存时没有足够的内存空,操作系统负责将内存中暂时未使用的信息换出到外部内存。
以上就是虚拟内存技术。
如何实现虚拟内存技术
可以看到,虚拟内存允许一个作业/进程多次转入内存,如果连续分配就不方便实现,所以虚拟内存技术的实现是基于不连续分配管理的。
传统的基本分页管理、基本段管理、基本段页管理和虚拟内存技术分别称为请求分页管理(页虚拟内存系统)、请求段管理(段虚拟内存系统)和请求段页管理(段虚拟内存系统)。
这些概念很容易混淆,其实很容易区分。记住这句话就OK了,摘自百度百科:
如果你没有请求页面调整和页面替换的功能,那就叫基础分页管理(或者纯分页管理)。不具备支持虚拟内存实现的功能。它要求每个作业(进程)在运行之前都被加载到内存中。
请求分段存储管理类似。它基于分段存储管理,但增加了请求分段调整和分段替换的功能。
请求页面调整和页面替换的概念类似于请求段落调整和段落替换的概念。这里以请求页面调整和页面替换为例进行说明。
在程序执行过程中,当访问的信息不在内存中时,操作系统负责将所需信息从外部内存(磁盘)转移到内存中,然后继续执行程序(操作系统应提供请求页面转移的功能,将内存中缺失的页面从磁盘转移到内存中);
如果内存不足空,操作系统负责将内存中暂时不用的信息换出到磁盘(操作系统应提供页面替换功能,将暂时不用的页面换出到磁盘)。
具体来说,在基于页面的虚拟内存系统中,每当CPU要访问的页面不在内存中时,就会产生缺页中断,然后由操作系统的缺页中断处理程序处理该中断。此时,这个缺页的进程/作业将被阻塞,放入阻塞队列,在分页完成后将其唤醒,并放回就绪队列。
如果内存中有/
如果存储器中没有空空闲块,则页面替换算法选择要消除的页面。如果页面在内存期间被修改,应该写回外部内存,未修改的页面不需要写回外部内存。
可见这不是一个简单的过程,基础分页管理中的简单页表已经不能胜任这样的工作。
我们先来回顾一下基本分页管理的页表。它只有两个字段:页码和块号:
请求分页管理的页表自然要复杂得多:
1)为了实现“请求页面转移”的功能,操作系统需要知道每个页面是否已经转移到内存中,如果没有,还需要知道页面在磁盘中的位置。
2)内存不足空时,为了实现“换页”功能,操作系统需要一些指标来决定换出哪一页。如果有些页面没有被修改,就没有必要浪费时间写回磁盘;如果某些页面已被修改,则有必要覆盖磁盘中的旧数据。因此,操作系统也需要记录每一页是否被修改过。
为此,该名称被添加到请求分页管理的页表中。4个字段:
状态:页面是否已经转移到内存中。
访问字段:可以记录页面最近被访问的次数,也可以记录页面最后一次被访问的时间,作为页面替换算法换出页面的参考。
修改为:页面转移到内存后是否被修改?
内存:该页在内存中的存储地址。
页面替换算法也是一个很重要的内容,这篇文章应该是一起写的。但想到“页面替换”的问题不仅存在于虚拟内存中,也发生在计算机设计的其他领域(例如,大多数计算机会将最近使用的32字节或64字节内存块存储在一个或多个缓存中,当这些缓存已满时,必须选择并丢弃一些块来存储最近使用的内存块)。
标签: win11怎样设置虚拟内存