内存管理中的叠加原理详细介绍

2021年3月15日09:24:52 发表评论 1,147 次浏览

固定分区的主要问题是进程的大小必须由分区的最大大小来限制, 这意味着一个进程永远不能覆盖另一个进程。为了解决此问题, 早期的人们使用了一些解决方案, 即称为叠加层。

概念

覆盖

就是, 每当一个进程在运行时, 它不会同时使用整个程序, 而是仅使用其中的一部分。然后, overlays概念表示, 无论你需要什么部件, 都需要在部件完成后立即加载它, 然后只需卸载它, 就意味着将其拉回并获得所需的新零件并运行它。

正式地,

"

转移块

将程序代码或其他数据存储到内部存储器中, 替换已存储的内容"。

有时候, 与最大分区的大小相比, 程序的大小会更大, 那么在这种情况下, 你应该使用覆盖。

因此, overlay是一种通过保留在任何给定时间仅需要的指令和数据来运行大于物理内存大小的程序的技术。将程序划分为模块, 使得不需要所有模块同时在内存中。

优势–

  • 减少内存需求
  • 减少时间要求

坏处 -

  • 重叠图必须由程序员指定
  • 程序员必须知道内存要求
  • 重叠的模块必须完全不相交
  • 叠加结构的编程设计很复杂, 并非在所有情况下都可行

示例–

最好的覆盖示例是汇编器。考虑到汇编器有2个遍, 第2个遍意味着在任何时候它只会做一件事情, 无论是第一遍还是第二遍, 这意味着它将首先完成第一遍然后是第二遍。假设可用的主存储器大小为150KB, 总代码大小为200KB

Pass 1.......................70KB
Pass 2.......................80KB
Symbol table.................30KB
Common routine...............20KB

由于总代码大小为200KB, 主内存大小为150KB, 因此不可能同时使用2个遍, 因此, 在这种情况下, 我们应该使用覆盖技术, 根据覆盖概念, 在任何时候都只能进行一次遍使用并且通行始终需要符号表和通用例程。现在的问题是, 如果overlays-driver *为10KB, 那么所需的最小分区大小是多少?对于通行1所需的总内存为=(70KB + 30KB + 20KB + 10KB)= 130KB, 并且通过2次所需的总内存为=(80KB + 30KB + 20KB + 10KB)= 140KB。因此, 如果我们有最小140KB大小的分区, 那么我们可以很容易地运行此代码。

*叠加驱动程序:-负责叠加的是用户的责任, 操作系统将不提供任何内容, 这意味着用户甚至应该写出第一遍所需的部分, 并且一旦第一遍结束, 用户应编写代码以提取通行证1并加载通行证2, 这就是用户的责任, 这就是所谓的Overlays驱动程序。Overlays驱动程序将仅帮助我们移出和移入程序的各个部分。码。

题 -

程序的覆盖树如下所示:

内存管理中的叠加1

加载(和)所需的分区大小(在物理内存中)是多少?

运行)这个程序?

(a)12 KB(b)14 KB(c)10 KB(d)8 KB

说明–

使用覆盖概念, 我们实际上不需要将整个程序都存储在主存储器中。只需要拥有在该时间实例中所需的部分, 就可以使用Root-AD或Root-AE或Root-BF或Root- CG部分。

Root+A+D = 2KB + 4KB + 6KB = 12KB
Root+A+E = 2KB + 4KB + 8KB = 14KB
Root+B+F = 2KB + 6KB + 2KB = 10KB
Root+C+G = 2KB + 8KB + 4KB = 14KB

因此, 如果分区大小为14KB, 则可以运行其中任何一个。

答案-(b)14KB

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: