固定分区的主要问题是一个进程的大小必须受到分区最大大小的限制,这意味着一个进程永远不能跨越另一个进程。为了解决这个问题,早期人们使用了一种称为叠加的解决方案。
概念 覆盖层 当一个进程运行时,它不会同时使用整个程序,它只会使用其中的一部分。然后overlays的概念是,无论你需要什么零件,你都要加载它,一旦零件完成,你就可以卸载它,意思是把它拉回来,得到你需要的新零件,然后运行它。 正式地 “过程 转移街区 “替换已存储在内存中的数据或其他程序代码”。 有时,与最大分区的大小相比,程序的大小会更大,那么,在这种情况下,您应该使用覆盖。
因此,叠加是一种运行程序的技术,该程序的大小大于物理内存的大小,只保留在任何给定时间所需的指令和数据。将程序划分为模块,并不是所有模块都需要同时存储在内存中。
优势——
- 减少内存需求
- 减少时间要求
劣势——
- 重叠贴图必须由程序员指定
- 程序员必须知道内存需求
- 重叠模块必须完全不相交
- 叠加结构的编程设计很复杂,不可能在所有情况下都实现
例如—— 叠加的最好例子是汇编程序。考虑汇编器有2次传球,2次传球意味着在任何时候它只会做一件事,第一次传球或第二次传球。这意味着它将先完成第一关,然后完成第二关。假设可用主存大小为150KB,总代码大小为200KB
Pass 1.......................70KBPass 2.......................80KBSymbol table.................30KBCommon routine...............20KB
由于总代码大小为200KB,主内存大小为150KB,因此不可能同时使用两个过程。所以,在这种情况下,我们应该使用叠加技术。根据叠加的概念,任何时候只使用一个过程,两个过程总是需要符号表和通用例程。现在的问题是,如果overlays driver*是10KB,那么所需的最小分区大小是多少?对于第1阶段,需要的总内存为=(70KB+30KB+20KB+10KB)=130KB,对于第2阶段,需要的总内存为=(80KB+30KB+20KB+10KB)=140KB。因此,如果我们有最小140KB大小的分区,那么我们可以非常轻松地运行这段代码。
*覆盖驱动程序:-用户负责覆盖,操作系统不会提供任何内容。这意味着用户甚至应该编写第1遍中需要的部件,并且一旦第1遍结束,用户应该编写代码以拉出第1遍并加载第2遍。这就是用户的责任,即覆盖驱动程序。Overlays驱动程序将帮助我们移出和移入代码的各个部分。
问题—— 程序的覆盖树如下所示:
加载(和)所需的分区(物理内存中)大小是多少 运行)这个程序? (a) 12kb(b)14kb(c)10kb(d)8kb
解释—— 使用覆盖概念,我们实际上不需要将整个程序放在主内存中。只有我们需要在那个时候需要的部分,或者我们需要Root-A-D或者Root-A-E或者Root-B-F或者Root-C-G部分。
Root+A+D = 2KB + 4KB + 6KB = 12KBRoot+A+E = 2KB + 4KB + 8KB = 14KBRoot+B+F = 2KB + 6KB + 2KB = 10KBRoot+C+G = 2KB + 8KB + 4KB = 14KB
因此,如果我们有14KB大小的分区,那么我们可以运行其中任何一个。 答复-(b)14KB
本文由 萨米特·曼达尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。