操作系统之存储管理
源程序经过汇编或编译后,形成目标程序,每个目标程序都是以 0 为基址顺序进行编址 的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定 的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指 令中要访问的操作数地址统称为逻辑地址。
一个编译好的程序存在于它自己的逻辑地址空间中,运行时,要把它装入内存空间,图 3.2 显示了一个作业在编译前、编译后及装入内存后不同的地址空间。
1000b 1100b
Mov R1,[1200]
1000b 1100b
Mov R1,[200]
1200b
6817
1200b
6817
1299b
1299b
重定位寄存器
逻辑地址 200b
1000b
1200b 内存地址
(a) 采用静态重定位后的内存空间 (b) 采用动态重定位时内存空间及地址重定位示意图
图 3.3 静态地址重定位和动态地址重定位示意图
静态地址重定位的优点是通过重定位装入程序,实现逻辑地址到物理地址的转化,不需 要硬件的支持,可在任何机器上实现。早期的操作系统中大多数采用这种方法。缺点是程序 必须占用连续的内存空间,且一旦装入内存后,因为逻辑地址已被改变,就不便再移动,不 利于内存空间的利用。所以静态地址重定位只适用于静态的内存分配方式。
⑵ 动态地址重定位 动态地址重定位是在程序执行期间进行的。一般说来,这种转换由专门的硬件机构来完 成,通常采用一个重定位寄存器,在每次进行存储访问时,对取出的逻辑地址加上重定位寄 存器的内容,形成正确的物理地址,重定位寄存器的内容是程序装入内存的起始地址,如图 3.3(b)所示。 动态地址重定位的优点是不要求程序装入固定的内存空间,在内存中允许程序再次移动 位置,而且可以部分地装入程序运行,也便于多个作业共享同一程序的副本,因此,现代计 算机系统广泛采用动态地址重定位技术。动态地址重定位技术缺点是需要硬件支持,而且实
106
第 3 章 存储管理
现存储管理的软件算法也较为复杂。 一般说来,动态地址重定位允许采用静态和动态两种存储分配方式。
3.1.4 存储保护
在多道程序设计环境中,要保证各道程序只能在自己的存储区中活动,不能对别的程序 产生干扰和破坏,尤其是不能破坏操作系统的内存区。因此,必须对存储信息采取各种保护 措施,这也是存储管理的一个重要功能。
下界寄存器 0k
20k
20k
上界寄存器 25k
作业
25k
256k-1 (a) 上、下界保护
基址寄存器 0k
20k
20k
25k 限长寄存器
5k
作业
256k-1 (b) 基址—限长保护
图 3.4 界限寄存器的两种存储保护方式
② 基址—限长存储保护:上、下界保护的一个变种是采用基址—限长存储保护。系统 可为每个作业设一个基址寄存器和一个限长寄存器,基址寄存器存放该作业在内存的首址, 限长寄存器存放该作业的长度。如图 3.4(b)所示,基址寄存器的值为 20kb,限长寄存器的 值为 5kb。在作业运行时,每当要访问内存单元时,就检查指令中的逻辑地址是否超过限长 寄存器的值,若不超过,则访问是合法,可以进行;否则,视为非法访问。基址—限长存储 保护通常可结合动态地址重定位实现,基址寄存器相当于重定位寄存器。
存储信息的保护体现在不能越界访问,破坏操作系统或其他用户的程序。实现这种存储 保护,可以采用硬件的方法,也可采用软、硬件结合的方法。通常使用较为普遍的是采用硬 件的界限寄存器保护法。下面我们讨论一下界限寄存器保护的两种具体实施技术,上、下界 保护和基址—限长保护方法。
① 上、下界存储保护:上、下界保护是一种简单的存储保护技术。系统可为每道作业 设置一对上、下界寄存器,分别用来存放当前运行作业在内存空间的上、下边界地址,用它 们来限制用户程序的活动范围。如图 3.4(a)所示,某作业在内存的起始位置是 20kb,结束 位置是 25kb,上、下界寄存器的值分别为 25kb 和 20kb。在作业运行过程中,每当要访问内 存某单元时,就检查经过重定位后产生的内存地址是否在上、下界寄存器所规定的范围之内, 若在,则访问是合法的,可以进行;否则,产生越界中断,通知系统进行越界处理。
第 3 章 存储管理
第 3 章 存储管理
教学要点
本章主要介绍存储管理相关的基本概念、存储管理的目的和四大基本功能以及实
存管理: 三种分区存储管理方案、空闲区分配算法、地址重定位与存储保护和虚存管
理:请求页式存储管理、请求段式存储管理、页面置换算法以及 Linux 存储管理。
存读储者器重是点计掌算握机可中变最分重区要存的储资管源理之、一页,式是存用储来管存理放和程虚序拟和存数储据管的理部技件术。;现掌代握计地算址机系统 一般采用多级存储器体系,包括高速缓冲存储器(简称高速缓存),内存储器(也称物理存 储重器定,位简概称念内,存页、面实置存换或算内法存;)了和解辅L助in存ux储存器储(管简理称实辅现存策或略外。存)。高速缓存的存取速度与 中央处理器速度相当,速度快,但成本较高,容量较小(现在一般为几 KB~几百 KB),主要 用来存放使用频率较高的少量信息;内存储器一般用来存放用户正在执行的程序及其用到的 数据,中央处理器可随机存取其中的数据,其存取速度要比高速缓存慢一点,容量较高速缓 存大得多(现在一般为几十 MB~几百 MB),程序需装入内存方能运行;辅助存储器不能被 中央处理器直接访问,一般用来存放大量的、暂时不用的数据信息。辅助存储器存取速度较 低,成本也较低,但容量较大(现在一般为几 GB~几十 GB)。三种存储器由高速缓存到辅助 存储器,容量是递增的,存取速度是递减的。多级存储器体系中,信息的流动方向和容量、 速度的关系,如图 3.1 所示。
内存地址的集合称为内存地址空间(或物理地址空间),简称内存空间(或物理空间)。 它是一维线性空间,其编址顺序为 0,1,2,3,…… n-1,n 的大小由实际组成存储器的存 储单元个数决定。比如,某个系统,有 64K 内存,则其内存空间编号为 0,1,2,3,…… 65535。
2. 逻辑空间
我们用汇编语言或高级语言编写程序时,常常用符号名来访问某一单元。我们把程序中 由符号名组成的程序空间称为符号名空间,简称名空间。
假如把作业装入到内存第 1000~1299 号单元处。由图 3.2 可以看出,若只是简单地装入 第 1000~1299 号单元,执行 Mov R1,[200]指令时,会把内存中 200 号单元的内容送入 R1,
105
第 3 章 存储管理
显然这样会出错。只有把 1200 号单元的内容送入 R1 才是正确的。所以作业装入内存时,需 对指令和指令中相应的逻辑地址部分进行修改,才能使指令按照原有的逻辑顺序正确运行。
本章首先介绍存储管理的研究对象和目的,明确存储管理的基本功能和相关的基本概 念;然后从实存和虚存两个角度,分别介绍常用的几种存储管理方案;最后对各种存储管理
103
第 3 章 存储管理
方案存在的问题,主要是碎片和抖动问题进行总结。
3.1 概述
3.1.1 存储管理的功能
在多道程序环境中,存储管理的主要目的有两个:一是提高资源的利用率,尽量满足多 个用户对内存的要求;二是能方便用户使用内存,使用户不必考虑作业具体放在内存哪块区 域,是如何实现正确运行等复杂问题。为此,存储管理一般应能实现如下所述的基本功能:
3. 地址重定位
我们把用户程序装入内存时,对有关指令的逻辑地址部分的修改称为地址重定位,即地 址重定位是建立用户程序的逻辑地址与物理地址之间的对应关系。按实现地址重定位的时机 不同,地址重定位又分为两种:静态地址重定位和动态地址重定位。
⑴ 静态地址重定位 静态地址重定位是在程序执行之前由操作系统的重定位装入程序完成的。它根据要装入 的内存起始地址,如图 3.2 中为 1000 号单元,直接修改所有涉及到的逻辑地址,将内存起始 地址加上逻辑地址得到正确的内存地址,如 100 号单元的 Mov R1,[200]装入内存后,被装 入到 1100 号单元,且指令中逻辑地址被改为 Mov R1,[1200],这样指令就可正确读取数据 了。静态重定位后的内存空间如图 3.3(a)所示。
高速缓冲存储器
存 储 容 量 递 增
存
内存储器
取 速
度
递
辅助存储器
增
图 3.1 多级存储器体系示意图
操作系统中所谓的存储管理,主要是指对内存储器的管理。随着现代技术的发展,内存 容量越来越大,但它仍然是一个关键性的、紧缺的资源,尤其是在多道程序环境之中,多个 作业需共享内存资源,内存紧张的问题依然突出。所以,存储管理是操作系统的重要组成部 分,能否合理有效地利用内存在很大程度上影响着整个计算机的性能。
对于存储保护除了防止越界外,还可对某一区域指定专门的保护方式。常见的对某一区 域的保护方式有四种:①禁止做任何操作;②只能执行;③只能读;④能读/写。如对许多用 户可共享的程序,一般设定为只能执行,而对许多用户可共享的数据,则设定为只能读;一 般的用户数据则是可读/写的。
3.1.5 虚拟存储器
随着计算机技术应用得日益广泛,需要计算机解决的问题越来越复杂。有许多作业的大
① 按作业要求进行内存分配并进行适时回收。 ② 实现程序中的逻辑地址到物理地址的转换。 ③ 对操作系统及用户信息提供存储保护。 ④ 实现内存的逻辑扩充,提供给用户更大的存储空间。 下面分别予以详述。
3.1.2 内存的分配与回收
在多道程序设计的环境中,当有作业进入计算机系统时,存储管理模块应能根据当时的 内存分配状况,按作业要求分配给它适当的内存。作业完成时,应回收其占用的内存空间, 以便供其它作业使用。
名空间
Mov R1,[data]
data:
6817
逻辑地址空间
0
100 Mov
R1,[200]
200 6817