内存管理:内存管理就是对内存构架进行管理,使程序在内存构架的任何一个层次上的存放对于用户来说是一样的。
内存管理目标:
1. 地址保护,一个程序不能访问另一个程序地址空间。
2. 地址独立:程序发出的地址应该与物理主存地址之间无关。
进程的地址空间:
逻辑地址(相对地址,虚拟地址):
用户经过编译汇编后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0,其余地址都相对于首地址而编址。
物理地址(绝对地址):
内存中存储单元的地址,可直接寻址。
将逻辑地址转换为运行时可由机器直接寻址的物理地址,这一过程称为地址重定位,分为两类:静态重定位,当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换,一般由软件构成,适用于单道编程的内存管理;动态重定位,在进程执行过程中进行地址转换,需要硬件部件(MMU)支持,适用于多道编程的内存管理。
动态翻译缺点:增加了系统消耗,不如静态翻译效率高。
优点:灵活,程序可以加载到任何地方;可以实时地址保护,每次访问前都会进行检查;可以使得虚拟内存概念得以实现。
管理方案1. 固定分区
特点,把空间分割成若干区域,称为分区,每个分区大小可以相同,也可以 不同,分区大小固定不变,每个分区只能装一个进程;优点是简单,缺点是会造成内碎片。
2. 可变分区
根据进程需要,把内存空闲空间分割出一个分区,分配给该进程,剩余部分称为新的空间,缺点是会造成外部碎片,解决方案是内存紧缩技术。
3 页式存储管理方案
设计思想:用户进程地址空间被划分为大小相等的部分,称为页,从0开始编号;内存空间按照同样大小划分为相等的区域,称为页框,也从0开始编号;以页为单位进行内存分配,并按照进程需要的页数来进行分配,逻辑上相邻的页,物理上不一定相邻。
使用页式管理系统需要用到一个特殊的数据结构,页表,用来记录页号和页框号的对应关系。
4 段式存储管理方案
设计思想:按照程序自身的逻辑关系划分为若干个程序段,每个程序段都有一个段名;内存空间被动态划分为若干长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定;内存分配原则,每段在内存中占据连续空间,但各段之间可以不相邻。
使用段式存储方案,需要使用段表,用段号查段表,得到该段在内存的起始地址,与段内偏移地址计算出物理地址。
5 段页式存储管理方案
设计思想:用户进程先按照段划分,每一段按照页面划分;内存划分和页式存储管理方案相同;内存分配以页为单位进行分配。
内存扩充技术:
1. 内存紧缩技术。
2. 覆盖技术,解决程序大小超过物理内存综合,程序执行过程中,程序的不同部分在内存中互相替代,主要用于早期的操作系统。
3. 交换技术,内存空间紧张时,系统将内存中某些进程暂时移动到外存,吧外存中某些进程换到内存,占据前者所占用的区域。
4. 虚拟存储技术,将物理内存扩大到磁盘上,即将磁盘看作是主存空间的一部分。
现代计算机中一般采用虚拟 页式存储管理系统
基本思想:进程开始运行之前,不是装入全部页面,而是装入一个或零个页面;根据进程运行的需要,动态装入其它页面;当内存已满,置换内存中某个页面,装入新的页面。
页表项设计:缓存禁止,访问位,修改位,保护标志区,在内存否,物理页面号。通常页表项都是硬件设计的。
分页系统优点:不会产生外部碎片。
缺点:页表很大,比如对于32位系统,共有2^20个页面,页表项大小为4字节,因此需要的空间为4M,对于64位系统来说,需要的页表项更大。、
解决方案:采用多级页表,将页表分为一个个页面,不需要的页面放在磁盘上,内存里只存放需要的页面即可。
多级页表结构里,页表存放的内容为:顶级页表,一级页表,二级页表,三级页表等。因为大部分页表会放在磁盘上,放在内存里的页表少,因此占用内存少。
多级页表缺点,降低了系统的访问速度,因为每次内存访问变成多次内存访问,对于二级页表,需要三次内存访问。
解决方案:快表(TLB)
因为程序的运行呈现时空局限性,即在一段时间内,程序索要访问的地址空间具有既定的空间局域性。如果一个页面被访问,那么该页面的其他地址空间也将被随后访问,这样,我们将该页面的翻译结果放在缓存里,而无需访问该页面的每个地址在翻译一次,可以提高效率。这种存放翻译结果的缓存称为翻译快表。在TLB中查找时,采用硬件电路并行查找,一次就可以找出该虚拟页面对应的物理内存页号,因此TLB的价格很高。
内存抖动:最坏的情况下,每次访问都是对一个不在内存页面进行访问,而由于磁盘的访问速度比较慢,整个系统的效率急剧下降。