持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
接上文,这篇文章主要要讲的是存储器管理的功能相关的内容,包括以下四个方面:
- 主存分配
- 地址映射
- 存储保护
- 主存扩充(虚拟内存)
主存的分配与回收
要完成内存的分配和回收工作,要求设计者选择和确定几种策略和结构,就是下面几个:
- 调入策略
- 放置策略
- 置换策略
- 分配结构
调入策略
- 用户程序在何时调入内存的策略
- 目前有请调和预调两种
放置策略
用户程序调入内存时,确定将其放置在何处的策略
置换策略
- 当需要将某个用户程序调入内存而内存空间又不够时,就要确定哪个或哪些程序可以从内存中移走
分配结构
- 用来登记内存使用情况的数据结构,比如位示图、空闲分区表/队列等等。
引起内存分配和回收的原因
- 进程的创建和撤销
- 进程运行过程中所占用的内存也可能会发生变化,如栈的变化
- 进程映像在内存和外存之间传递
由于内存有限,系统中不可能容纳所有程序,有些进程的映像可以存放在外存,当要运行这些进程时必须把他们调入内存
- 为了充分利用内存空间,系统有时可能对内存空间进行调整
地址映射(地址重定位)
- 内存对每个存储单元都有一个编号,这种编号称为内存地址(或者物理地址,绝对地址)
- 内存地址的集合称为内存空间(或物理地址空间)
- 要求用户用内存地址编程是非常困难的,尤其是在多道程序设计的环境中
- 用户编程所用的地址称为逻辑地址(或叫程序地址/虚地址),由逻辑地址组成的空间称为逻辑地址空间(或程序地址空间)
- 概念:把用户程序装入内存时对有关指令的地址部分的修改定义为从程序地址到内存地址的地址映射,或称为地址重定位
存储保护
保护在内存中的多道程序只能在给定的存储区域内活动并互不产生干扰
- 防止地址越界
- 防止越权(对共享区域有访问权)
存储保护的硬件支持
- 界地址寄存器(界限寄存器)
- 存储键
界地址存储器(界限存储器)
- 界地址寄存器被广泛使用的一种存储保护技术
- 机制比较简单,易于实现,比如CDC6600
主存扩充
- 为了使程序员在编程时不受内存的结构和容量的限制,系统为用户构造一种存储器,其结构可能与内存结构有所不同,容量可能远远超过内存的实际容量
- 这种面向编程的存储器称为虚拟存储器。由虚存构成的存储空间称为虚存空间,或者虚地址空间
实现虚拟内存的基本原理
- 由于程序在执行时,在一段时间内一般仅使用它的程序的一部分,所以程序仅有部分装入内存完全能够正确执行。
- 将程序正在使用的部分内容放在内存,而暂时不用的部分放在外存,在需要时由系统调入内存,并将不需要(或暂不需要)的部分调出内存。
- 由OS结合相关硬件来完成上述工作。