知乐空间

win10 4g内存最佳虚拟内存(怎样设置虚拟内存)

如何设置虚拟内存(win10 4g内存最好的虚拟内存)

传统存储管理中存在的问题

为什么会出现虚拟内存?他出现的背景是什么?

前面两部分内存管理的物理内存管理提到:随着用户程序函数的增加,进程需要的内存空越来越大,很容易让进程空突破物理内存的实际大小,导致进程无法运行。

因此,为了解决内存不足的问题,缓解大程序和小内存的矛盾,扩充内存容量势在必行。

我们可以从物理和逻辑两个方面考虑扩展内存容量。物理扩张没有技术含量。我们自然需要研究的是如何在逻辑上扩大记忆容量。

所谓逻辑扩展,就是实际上物理内存的容量并没有变化,只是可以装更多的东西,让用户看起来内存比实际内存大很多。

内存的逻辑扩展技术主要有三种:覆盖技术、交换技术和虚拟内存,也称为虚拟内存。其实这些逻辑扩展技术的核心思想都是一样的,都是研究将哪个进程(或进程的一部分)临时从内存移到外存(磁盘)上,为其他进程(或进程的一部分)释放内存空。

早期操作系统中存在的两种逻辑扩展技术覆盖和交换现在已经成为历史。下面简单介绍一下:

如前所述,早期的操作系统只是将内存空分为两部分:系统区(用于存储与操作系统相关的数据)和用户区(用于存储与用户进程相关的数据)。内存中只能有一个用户程序,用户程序占用整个用户区空。很明显,内存空中容纳不下一个用户程序的现象经常发生。

覆盖技术的基本思想是,在一个程序运行的任何时候,程序和数据(尤其是小程序)的所有部分都不应该被访问,因此可以将用户空室(内存)划分为一个固定区域和一个或多个覆盖区域。

程序中频繁活动的部分放在固定区域,其余部分按照调用关系进行分段:先把要使用的段放在覆盖区域,其他段放在外存(磁盘)。在调用之前,用户安排一个特定的系统调用,将外部存储器中的这些段调用到覆盖区域中,替换覆盖区域中的原始段。

叠加技术的缺点很明显,可以说是不可接受的,那就是叠加技术给用户带来了解决内存空不足的问题。操作系统只为用户提供系统调用,将被覆盖的段调入内存,但用户必须解释要覆盖哪个段,调用哪个段。

当我使用计算机的时候,我必须想出如何防止我的程序崩溃。

好了,可以看出叠加技术实际上是用在同一个作业/流程的不同段之间,那么不同的作业/流程呢?

这是交换技术的适用场景。

交换的基本思想是:空空闲的进程/作业主要存放在外存(磁盘)。当这些进程/作业中有一个需要运行时,就完全从磁盘转移到内存中,让进程运行一段时间,然后再返回磁盘。因此,当进程/作业不运行时,它们不会占用内存。

事实上,覆盖和交换技术分别解决了传统存储管理(物理内存管理)中的一个问题:

技术覆盖打破了作业/进程在开始运行(一次)之前必须一次全部加载到内存中的限制。

Exchange技术打破了作业一旦加载到内存中,就会一直留在内存中直到作业运行(驻留)的限制。

当然,反正这两种逻辑扩展技术已经成为历史,虚拟内存技术是目前的主流。它结合了这两种古老技术的特点,自己解决了传统存储管理中的这两个问题。

什么是虚拟内存?

有了以上交换技术的铺垫,理解虚拟内存就没那么奇怪了。

当然,在此之前,我必须强调,虚拟内存不应该被视为一个实际的东西,它是一种技术!和交换技术叠加技术一样,是一种用来逻辑扩展内存的技术空!

虚拟内存技术基于一个非常重要的原则,即局部性原则:

1)时间局部性:如果执行了程序中的某条指令,很可能很快这条指令会再次被执行;如果已经访问了一些数据,很可能很快会再次被访问。(因为程序中有很多循环)

2)空局部性:程序一旦访问了某个存储单元,很有可能在不久的将来访问其附近的存储单元(因为大量的数据是连续存储在内存中的,程序的指令也是顺序存储在内存中的)

基于局部性原理,当一个程序加载到内存中时,只有这个程序中马上要用到的部分才能加载到内存中,暂时不用的部分会保留在外存(磁盘)中,程序才能正常执行;

在程序执行过程中,当CPU所需的信息不在内存中时,操作系统负责将所需信息从外存(磁盘)中转移到内存中,然后继续执行程序;

如果在调用内存时没有足够的内存空,操作系统负责将内存中暂时不用的信息换出到外部内存中。

以上是虚拟内存技术。

如何实现虚拟内存技术

如你所见,虚拟内存允许一个作业/进程被多次调入内存,如果采用连续分配的方式不方便实现,所以虚拟内存技术的实现是基于不连续的分配管理。

传统的基本分页管理、基本分段管理、基本分段页面管理和虚拟内存技术的结合,分别称为请求分页管理(分页虚拟内存系统)、请求分段管理(分段虚拟内存系统)和请求分段页面管理(分段虚拟内存系统)。

这些概念很容易混淆,其实很容易区分。只要记住这句话就OK了。摘自百度百科:

如果不具备请求分页和换页的功能,则称为基本分页管理(或纯分页管理)。它不具备支持虚拟内存的功能,要求每个作业(进程)都要加载到内存中才能运行。

请求段存储管理是类似的。它以段存储管理为基础,但增加了请求段调整和段替换的功能。

请求分页和页面替换的概念类似于请求分页和段落替换的概念。这里以请求分页和页面替换为例进行说明。

在程序执行过程中,当被访问的信息不在内存中时,操作系统负责将所需信息从外存(磁盘)转移到内存中,然后继续执行程序(操作系统应提供请求分页的功能,将磁盘中缺失的页面转移到内存中);

如果内存空不够,操作系统负责将内存中暂时不用的信息换出到磁盘(操作系统要提供页面替换的功能,将暂时不用的页面换出磁盘)。

具体来说,在分页虚拟内存系统中,每当CPU要访问的页面不在内存中时,就会产生缺页中断,然后操作系统的缺页中断处理程序就会处理这个中断。此时,这个缺页的进程/作业将被阻塞,放入阻塞队列,在页面调整完成后将其唤醒,放回就绪队列。

如果内存中有空备用块,则为进程分配一个空备用块,将缺失的页加载到这个块中,并修改页表中相应的页表项。

如果存储器中没有空空闲块,页面替换算法将选择一个页面来消除。如果页面已经在内存中被修改,它将被写回外部内存,而未修改的页面将不会被写回外部内存。

可见这并不是一个简单的过程,基础分页管理中简单的页表已经不能胜任这类工作。

我们先来回顾一下基本分页管理的页表,它只有两个字段:页号和块号:

请求分页管理的页表自然会复杂得多:

1)为了实现“页面分页请求”的功能,操作系统需要知道每个页面是否已经被调入内存,如果没有,还需要知道页面存储在磁盘的什么位置。

2)内存不够空时,为了实现“换页”功能,操作系统需要通过一些指标来决定换出哪一页。有些页面没有修改,不需要浪费时间写回磁盘;一些页面已经被修改,所以需要覆盖磁盘中的旧数据。因此,操作系统还需要记录每个页面是否被修改过。

因此,该名称被添加到请求分页管理的页表中。4个字段:

状态:页面是否已被转移到内存中。

访问字段:可以记录这个页面最近被访问了多少次,或者最后一次被访问的时间,可以作为页面替换算法换出页面时的参考。

修改为:该页面在转入内存后是否被修改过?

Memory:这个页面的内存地址。

页面替换算法也是一个很重要的内容,在本文中应该是一起写的。但想到“页面替换”的问题不仅存在于虚拟内存中,还存在于计算机设计的其他领域(例如,大多数计算机会将最近使用的32字节或64字节的内存块存储在一个或多个缓存中,当这些缓存已满时,必须选择并丢弃一些块来存储最近使用的内存块)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。

留言与评论(共有 0 条评论)
验证码: