1.内存管理的需求
内存管理要满足5种需求:重定位、保护、共享、逻辑组织、物理组织。
①为什么需要重定位进程的能力?
答:通常情况下,并不能事先知道在某个程序执行期间会有哪个程序驻留在主存中。此外还希望通过提供一个巨大的就绪进程池,能够把活动进程换入和换出主存,以便使处理器的利用率最大化。在这两种情况下,进程在主存中的确切位置是不可预知的。
②允许两个或多个进程访问进程的某一特定区域的原因是什么?
答:如果许多进程正在执行同一程序,则允许每个进程访问该程序的同一个副本要比让每个进程有自己单独的副本更有优势。同样,合作完成同一任务的进程可能需要共享访问同一个数据结构。
③为什么不可能在编译时实施内存保护?
答:由于程序在主存中的位置是不可预测的,因而在编译时不可能检查绝对地址来确保保护。并且,大多数程序设计语言允许在运行时进行地址的动态计算(例如,通过计算数组下标或数据结构中的指针)。因此,必须在运行时检查进程产生的所有存储器访问,以便确保它们只访问了分配给该进程的存储空间。
2.简单的内存管理方案
1)固定分区
优:实现简单,极少的操作系统开销。
缺:有内部碎片,对内存的使用不充分;且活动进程的最大数目是固定的。
2)动态分区
优:没有内部碎片
缺:要压缩外部碎片,处理器利用率低。
3)简单分页
优:无外部随盘
缺:少量内部碎片
4)简单分段
优:没有内部碎片,相对与动态分区,提高内存利用率,减少了开销。
缺:有外部碎片
①部碎片和外部碎片有什么区别?
答:内部碎片是指由于被装入的数据块小于分区大小而导致的分区内部所浪费的空间。外部碎片是与动态分区相关的一种现象,它是指在所有分区外的存储空间会变成越来越多的碎片的。
3.虚拟内存
因为并不是要将进程的所有程序和数据都装载在内存中,进程才可以运行。使用虚拟内存的话,那么么进程可以比内存的全部空间还大(仅与系统的地址总线位数相关)。并且由于该原因,内存中可保留更多的进程,以此可以提高处理器的利用率。
①简单分页与虚拟分页有什么区别?
简单分页:一个程序中的所有的页都必须在主存储器中程序才能正常运行,除非使用覆盖技术。虚拟内存分页:不是程序的每一页都必须在主存储器的帧中来使程序运行,页在需要的时候进行读取。
②解释什么是抖动。
虚拟内存结构的震动现象,在这个过程中处理器大部分的时间都用于交换块,而不是执行指令。
③为什么在使用虚拟内存时,局部性原理是至关重要的?
可以根据局部性原理设计算法来避免抖动。总的来说,局部性原理允许算法预测哪一个当前页在最近的未来是最少可能被使用的,并由此就决定候选的替换出的页。
下图是典型的内存管理格式图。
④哪些元素是页(段)表项中可以找到的元素?简单定义每个元素。
帧号(页框号):用来表示主存中的页来按顺序排列的号码。存在位(P):表示这一页是否当前在主存中。修改位(M):表示这一页在放进主存后是否被修改过。
3.1分页
分页系统中的地址转换,和微机的寻址是一样的原理。注意页表基址寄存器!
当一级页表不够用的时候,也可以设计二级页表结构。
3.1.1转换检测缓冲区
原则上,每次虚存访问可能引起两次物理内存访问:一次取相应的页表项,一次取需要的数据。因此简单的虚拟内存访问会导致存储器访问的时间加倍。所以为页表项实用一个特殊的高速缓存,通常称做转换检测缓冲区(Translation Lookaside Buffer,TLB)。这个高速缓存包含最近用过的页表项。由此得到的分页硬件组织如下图:
给定一个虚拟地址,处理器首先检查TLB,如果命中就直接取页框号,如果未命中就检索页表,然后检查Present bit,如果不存在产生缺页中断。最后更新TLB(局部性原理)。
3.2分段
分段允许程序员把内存看成由多个地址空间或段组成,段的大小是不相等的,并且是动态的。分页对程序员而言是透明的,而分段对程序员来说是可见的,所以分段对程序员来说有助于实现很多功能和特点。例如:
1) 简化对不断增长的数据结构的处理
段的大小可以动态增长;
2) 允许程序独立地改变或重新编译,适合模块化设计;
3) 有助于进程间共享,
为实现共享,一个段可以在多个进程的段表中被引用。
4) 有助于保护。
每个段包括一个长度和基址,因此程序不会不经意地访问超出该段的内存单元。
分段的内存访问和分页类似,注意段表指针寄存器就可以了。
3.3段页式
结合分段和分页的优势设计段页式内存管理结构。