📜  操作系统-虚拟内存

📅  最后修改于: 2020-12-13 15:43:02             🧑  作者: Mango


一台计算机可以分配的内存量大于系统上实际安装的内存量。这种额外的内存实际上称为虚拟内存,它是硬盘的一部分,用于模拟计算机的RAM。

该方案的主要可见优点是程序可以大于物理内存。虚拟内存有两个目的。首先,它允许我们通过使用磁盘来扩展物理内存的使用。其次,它使我们能够进行内存保护,因为每个虚拟地址都转换为物理地址。

以下是不需要将整个程序完全加载到主存储器中的情况。

  • 用户编写的错误处理例程仅在数据或计算中发生错误时使用。

  • 程序的某些选项和功能可能很少使用。

  • 即使实际上只使用少量表,也为许多表分配了固定数量的地址空间。

  • 执行仅部分在内存中的程序的能力将抵消许多好处。

  • 将每个用户程序加载或交换到内存中所需的I / O数量将减少。

  • 程序将不再受可用物理内存量的限制。

  • 每个用户程序可能占用更少的物理内存,更多的程序可以同时运行,从而相应地增加了CPU利用率和吞吐量。

硬件中内置了旨在用于通用用途的现代微处理器,内存管理单元或MMU。 MMU的工作是将虚拟地址转换为物理地址。下面给出一个基本示例-

虚拟内存

虚拟内存通常通过按需分页实现。它也可以在细分系统中实现。需求分割也可以用于提供虚拟内存。

需求分页

需求分页系统与具有交换功能的分页系统非常相似,其中进程驻留在辅助内存中,而页面仅按需加载,而不是提前加载。发生上下文切换时,操作系统不会将任何旧程序的页面复制到磁盘上,也不会将任何新程序的页面复制到主内存中,而是仅在加载第一页后开始执行新程序并获取该新程序。程序的页面引用。

需求分页

在执行程序时,如果该程序引用了由于前不久已换出而在主内存中不可用的页面,则处理器会将无效的内存引用视为页面错误,并将控制权从程序转移到操作系统,以要求将页面返回到内存中。

好处

以下是需求分页的优点-

  • 大虚拟内存。
  • 更有效地利用内存。
  • 多重编程的程度没有限制。

缺点

  • 与简单页面管理技术相比,用于处理页面中断的表数和处理器开销要大。

页面替换算法

页面替换算法是一种技术,操作系统需要使用这些技术来决定交换哪些内存页面,并在需要分配内存页面时写入磁盘。每当发生页面错误并且空闲页面不能用于分配目的帐户时,就会发生页面调度,原因是页面不可用或空闲页面的数量少于所需页面。

当再次选择了要替换的页面并调出页面时,它必须从磁盘中读入,这需要I / O完成。这个过程决定了页面替换算法的质量:等待页面插入的时间越少,算法就越好。

页面替换算法查看有关访问由硬件提供的页面的有限信息,并尝试选择应替换的页面以最大程度地减少页面丢失的总次数,同时将其与算法的主存储成本和处理器时间相平衡本身。有许多不同的页面替换算法。我们通过在特定的内存引用字符串上运行算法并计算页面错误数来评估算法,

参考字串

内存引用的字符串称为引用字符串。引用字符串是人为生成的,也可以通过跟踪给定的系统并记录每个内存引用的地址来生成。后一种选择会产生大量数据,在此需要注意两点。

  • 对于给定的页面大小,我们只需要考虑页码,而不要考虑整个地址。

  • 如果我们引用了页面p ,那么紧随其后的对页面p的引用将永远不会导致页面错误。第一个引用后,页面p将在内存中;紧随其后的参考文献不会出错。

  • 例如,考虑以下地址序列-123,215,600,1234,76,96

  • 如果页面大小为100,则参考字符串为1,2,6,12,0,0

先进先出(FIFO)算法

  • 主存储器中最古老的页面是将被选择进行替换的页面。

  • 易于实现,保留列表,从尾部替换页面并在头部添加新页面。

先进先出

最佳页面算法

  • 最佳页面替换算法具有所有算法中最低的页面错误率。存在一种最佳的页面替换算法,该算法称为OPT或MIN。

  • 更换最长时间不使用的页面。使用要使用页面的时间。

最佳页面替换

最近最少使用(LRU)算法

  • 主存储器中未使用最长时间的页面是将被选择替换的页面。

  • 易于实现,保留列表,通过回顾时间来替换页面。

最近最少使用

页面缓冲算法

  • 为了使过程快速开始,请保留一组空闲的帧。
  • 如果出现页面错误,请选择要替换的页面。
  • 将新页面写在空闲池的框架中,标记页面表并重新启动该过程。
  • 现在,将脏页写出磁盘,然后将容纳替换页的框架放在空闲池中。

最不常用(LFU)算法

  • 计数最小的页面是将被替换的页面。

  • 该算法的缺点是页面在过程的初始阶段被大量使用,但随后再也不会使用。

最常用(MFU)算法

  • 该算法基于以下论点,即具有最小计数的页面可能刚刚被引入并且尚未使用。