操作系统 - 虚拟内存

计算机可以寻址比系统上实际安装的数量更多的内存。 这种额外的内存实际上称为虚拟内存,它是硬盘的一部分,用于模拟计算机的 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)算法

  • 这个算法是基于这样一个论点,即计数最少的页面可能刚刚被引入并且尚未被使用。