OS 中的帧分配

2025年8月1日 | 阅读 7 分钟

操作系统的主内存被划分为各种帧。进程存储在这些帧中,一旦进程被存储为帧,CPU就可以运行它。因此,操作系统必须为每个进程预留足够的帧。因此,操作系统使用各种算法来分配帧。

按需分页是实现虚拟内存的一种重要操作系统功能。它需要开发页面置换机制和帧分配系统。如果有多个进程,帧分配技术用于定义为每个进程分配多少帧。有许多因素限制帧分配策略。

  1. 您不能分配比可用总帧数更多的帧。
  2. 每个进程都应分配一定数量的帧。此限制由两个因素决定。首先,当分配的帧数减少时,页面错误率会增加,从而降低进程的执行性能。其次,应该有足够的帧来容纳任何指令可能引用的所有多个页面。

操作系统中帧分配的重要性

操作系统的帧分配至关重要。帧分配对虚拟内存系统的性能和稳定性有显著影响。它影响系统有效管理多个任务的能力,并决定物理内存如何在进程之间分配。

  1. 减少页面错误:操作系统通过确保进程拥有足够的帧并使常用页面保留在内存中来最小化页面错误。页面错误减少可以加速执行。
  2. 提高系统功能:有效的帧分配可以使进程顺畅运行,而无需持续访问磁盘存储。因此,系统运行速度更快,I/O 开销也随之减少。
  3. 保证公平的内存分配:在有多种编程语言的环境中,帧分配确保每个进程都有相等的内存份额。通过这样做,可以保护较小或优先级较低的进程免受内存饥饿。
  4. 终止抖动现象:如果分配不当,进程可能会滞后,花费更多时间在页面之间导航而不是执行命令。拥有有效的帧分配策略来跟踪和修改帧使用情况将有助于防止这种情况。
  5. 实现负载的动态管理:当进程进入或退出时,操作系统必须重新分配帧。适当的分配算法可确保内存管理具有响应性和灵活性,足以适应不断变化的工作负载。

帧分配算法

操作系统中主要有五种帧分配算法。它们如下:

  1. 平均帧分配
  2. 比例帧分配
  3. 优先级帧分配
  4. 全局置换分配
  5. 局部置换分配

平均帧分配

在平均帧分配中,进程在操作系统中的进程之间平均分配。例如,如果系统有 30 个帧和 7 个进程,则每个进程将获得 4 个帧。未分配给任何系统进程的 2 个帧可用作系统中的空闲帧缓冲区池。

缺点

在一个进程大小不同的系统中,为每个进程分配相等的帧意义不大。如果为小型任务分配了许多帧,则许多已分配的空闲帧将被浪费。

比例帧分配

比例帧分配技术根据执行所需的尺寸和内存中的总帧数来分配帧。

进程 **pi** 的已分配帧,其大小为 **si**,为 **ai = (si/S)*m**,其中 **S** 代表所有进程大小的总和,**m** 代表系统中的帧数。

缺点

此算法唯一的缺点是它不基于优先级分配帧。优先级帧分配解决了这个问题。

优先级帧分配

优先级帧分配根据帧分配数量和进程来分配帧。假设一个进程具有高优先级并需要更多帧,那么它将分配许多帧。之后,分配优先级较低的进程。

全局置换分配

当一个进程需要一个当前不在内存中的页面时,它可以将其放入,并从所有帧集中选择一个帧,即使另一个进程已经在使用该帧。换句话说,一个进程可以从另一个进程那里获取一个帧。

优点

进程性能不受影响,从而提高了系统吞吐量。

缺点

进程本身可能无法单独控制进程的页面错误率。其他进程的分页行为也会影响进程在内存中的页面数量。

局部置换分配

当进程需要一个尚未在内存中的页面时,它可以将其调入并从其已分配帧集中为其分配一个帧。

优点

特定进程的分页行为会影响内存中的页面和页面错误率。

缺点

低优先级进程可能会通过拒绝共享其帧来阻碍高优先级进程。

全局与局部置换分配

使用局部置换策略时,分配给进程的帧数不会改变。另一方面,使用全局置换,进程只能选择分配给其他进程的帧,并增加分配的帧数。

页面置换和帧管理

当进程需要加载一个新页面但内存不足且只有一定数量的可用帧时,操作系统必须采用页面置换策略来确定要删除哪个现有页面。我们将此过程称为页面置换。最优置换 LRU 和 FIFO(先进先出)是常见算法的示例。这些算法选择最不可能很快再次使用的页面以减少页面错误。特别是在具有多个正在运行的进程和有限物理内存的系统中,页面置换是内存管理的重要组成部分。

操作系统为不同进程分配和回收内存帧的过程称为帧管理。它平衡了系统的整体内存使用情况,同时确保每个进程都获得足够的帧才能正常运行。页面置换和帧管理密切相关,如果进程使用的页面多于分配的页面,则必须进行置换。有效的帧管理在可用帧和活动内存需求之间保持健康的平衡,防止抖动等问题,并确保进程顺利执行。

帧分配对抖动的影响

当一个进程获得的内存帧太少时,它可能会发生抖动,导致频繁的页面错误和其他严重的性能问题。当进程需要不在内存中的页面时,操作系统将页面与磁盘之间进行页面交换的速度比访问 RAM 的速度慢得多。CPU 花费更多时间等待内存操作完成而不是执行实际指令,这会显着降低系统性能。要避免抖动,需要仔细的帧分配。

当每个进程获得足够的帧来存储其工作集或它正在积极使用的页面时,页面错误就会减少,并且进程运行顺畅。为了实时跟踪和修改帧分布,操作系统可以采用动态分配技术或模型,例如工作集模型。通过确保分配充足且均衡,尤其是在工作负载很高的情况下,可以保持系统响应能力和稳定性。

常见问题

这对虚拟内存管理至关重要,为什么它很重要?

操作系统采用一种称为帧分配的技术,为不同进程的页面分配帧或固定大小的物理内存块。适当的分配可以使所有进程顺利运行,而不会频繁发生页面错误。除了保证公平的内存使用和防止抖动等性能问题外,适应进程开始或结束时内存变化的适当帧分配还支持动态工作负载。

帧分配对页面错误率和系统性能有什么影响?

答案是分配给进程的帧数直接影响页面错误的速率。如果进程没有足够的帧来容纳其工作集(频繁使用的页面),它将频繁发生页面错误,这将减慢执行速度。由于磁盘 I/O 增加,性能可能会受到影响。当分配得当,进程运行更顺畅,并且不必要的切换更少,尤其是在多任务处理时。

局部帧分配与全局帧分配有什么区别?

当启用全局帧分配时,进程可以使用来自共享内存池的帧,可能会从其他进程窃取它们。虽然它提供了更大的灵活性和更好的整体利用率,但如果不小心进行,可能会导致不稳定。然而,局部分配会为每个进程分配一定数量的帧,并阻止进程之间相互干扰。尽管效率低下的可能性更大,但如果某些进程空闲而其他进程需要更多内存,仍然会发生这种情况。

帧分配如何帮助防止抖动?

进程花费过多的时间在内存中的页面之间进行交换而不是执行命令会导致进程失败。操作系统为每个进程分配足够的帧来容纳其工作集,从而使进程能够运行而不会频繁遇到页面错误。跟踪页面使用情况并动态更改分配以防止抖动是一种更复杂的技术,称为工作集模型。