内存管理

内存是一种非常稀缺的资源,经过多年的研究,科学家们提出了一种分层存储器体系(memory hierarchy):
在这里插入图片描述
位于顶层的存储器速度最快,但是相对容量最小,成本非常高。层级结构向下,其访问速度会变慢,但是容量会变大,相对造价也就越便宜。由于最低级别的缓存是由硬件进行管理,所以,本文主要针对主存(RAM)进行探讨,完整思维导图如下:
在这里插入图片描述
无存储器抽象
该时期,计算机的硬件内存直接暴露给程序使用。同一时刻,只能运行单个程序。

有存储器抽象:地址空间
地址空间创建了一种抽象内存供程序使用。每个进程都有它自己的地址空间,独立于其他进程的地址空间,地址空间是进程用来寻址内存的地址集。
当程序运行时,最简单的办法是使用动态重定位(dynamic relocation)技术,将每个进程的地址空间映射到物理内存的不同区域。经典的办法是给每个 CPU 配置两个特殊硬件寄存器,基址寄存器(basic register)和变址寄存器(limit register)。
当一个进程运行时,程序的起始物理地址装载到基址寄存器中,程序的长度则装载到变址寄存器中,程序会装载到内存中的连续位置并且在装载期间无需重定位。

尽管基址寄存器和变址寄存器可以用来创建地址空间的抽象,但是这有一个其他的问题需要解决:管理软件的不断增大(managing bloatware)。虽然内存的大小增长迅速,但是软件的大小增长的要比内存还要快。这一发展的结果是,需要运行的程序往往大到内存无法容纳,而且必然需要系统能够支持多个程序同时运行,即使内存可以满足其中单独一个程序的需求,但是从总体上来看内存仍然满足不了日益增长的软件的需求(感觉和xxx和xxx 的矛盾很相似)。所以针对内存不足的问题,提出了两种处理方案:最简单的一种方式就是交换(swapping)技术,即把一个进程完整的调入内存运行,空闲时再把它放回磁盘。因为空闲进程会存储在磁盘中,所以这些进程在没有运行时不会占用太多内存。另外一种策略叫做虚拟内存(virtual memory),虚拟内存技术能够允许应用程序部分的运行在内存中。

交换技术
交换技术,主要是在原有技术基础上,增加了空闲内存管理,来减少内存中实际运行的进程,但这并不是一个很有效的方案,在一些中小应用程序尚可使用交换,如果应用程序过大,难道还要每次交换几 GB 的内存?这显然是不合适的。

虚拟内存(时下主流方式)
虚拟内存的基本思想是:每个程序都有自己的地址空间,这个地址空间被划分为多个称为页面(page)的块,每一页都是连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,硬件会立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
虚拟内存很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中,当一个程序等待它的一部分读入内存时,可以把 CPU 交给另一个进程使用。
程序设计时,我们编写4G的程序,但程序不会也不能全部调入内存运行,所以,在磁盘上会有一个4G的程序核心映像的完整副本,以保证程序片段在需要时被调入内存。

当程序执行:MOV REG,1000,它会把内存地址为 1000 的内存单元的内容复制到 REG 中,这些程序生成的地址被称为虚拟地址(virtual addresses) 并形成虚拟地址空间(virtual address space),使用虚拟内存的系统会使用 MMU(Memory Management Unit) 内存管理单元把虚拟地址映射为物理内存地址,如下图:
在这里插入图片描述
虚拟地址与物理内存地址之间的映射关系文件叫页表

存在映射的页如何映射
虚拟地址空间由固定大小的单元组成,这种固定大小的单元称为页(pages)。而相对的,物理内存中也有固定大小的物理单元,称为页框(page frames)。页和页框的大小一样。RAM 和磁盘之间的交换总是以整个页为单元进行交换的。

不存在映射的页如何映射
如果MMU内存管理单元注意到执行页面的虚拟地址没有被映射,于是 CPU 会陷入(trap)到操作系统中。这个陷入称为 缺页中断(page fault) 或者是 缺页错误。操作系统会选择一个很少使用的页并把它的内容写入磁盘(如果它不在磁盘上),随后把需要访问的页面读到刚才回收的页框中,修改映射关系,然后重新启动引起陷入的指令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值