目录
4.1.1 存储器的层次结构
寄存器、高速缓存、主存储器和磁盘缓存 均属于操作系统存储管理的管辖范畴,掉电后它们存储的信息不再存在。而低层的 固定磁盘和可移动存储介质 属于设备管理的管辖范畴,它们存储的信息将被长期保存。
1. 主存储器(内存,主存,可执行存储器)
用于存放进程运行时的程序和数据。CPU 的控制部件只能从主存中取得指令和数据到 CPU 寄存器;同样,CPU 寄存器中的数据可存入主存。CPU 与外设交换数据必须依托于主存。
2. 寄存器
用于存放处理机运行时的数据。寄存器访问速度最快,能够与 CPU 协调工作。
3. 高速缓存
用于备份主存中较常用的数据。CPU 对高速缓存的访问速度介于访问主存和访问寄存器之间。根据程序执行的局部性原理,将主存中一些经常访问的数据存放在高速缓存中,减少访问主存的次数,提高程序的执行速度。
程序执行的局部性原理:在一较短的时间内,程序的执行仅局限于某个部分。
有些计算机系统设置了两级高速缓存,即一级高速缓存与二级高速缓存。
4. 磁盘缓存
用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。为了缓和主存储器和磁盘在速度上的不匹配。
磁盘缓存不是一种实际存在的存储器,而是利用主存中的部分存储空间暂时存放从磁盘中读出或写入的信息。即主存中一块存储区,对应于某固定磁盘,临时存储磁盘数据(如数据预取)
存储器层次结构的特点
① 三级存储器,从高速缓存到内存到外存,存储器的容量越来越大,而访问数据的速度则越来越慢,价格也越来越便宜。如:高速缓存的最大传输速度为几十分之一至几百分之一纳秒,而主存的传输速度为几纳秒级。
由操作系统协调这些存储器的运作。
② 用户的程序在运行时应存放在主存中,以便处理机访问。
其中直接存取要求内存的速度尽量快到与 CPU 取指速度相匹配,且内存的容量需要大到能装下当前运行的程序与数据,否则 CPU 执行速度就会受到内存速度和容量的影响而得不到充分发挥。
③ 由于主存的容量和速度有限,因此把那些不需立即使用的程序和数据放在外存中,需要时再把它们读入主存。
4.1.2 存储器管理的目的和功能
1. 主存储器的分配和管理
- 按用户要求把适当的存储空间分配给相应的作业
- 在用户不再使用它时应立即回收,以供其他用户使用
为此,这个存储分配机制应具有如下三个功能:
- 记录每个存储空间的状态
- 实施存储空间的分配
- 接受系统或用户释放的存储空间
2. 提高主存储器的利用率
使多道程序能动态地共享主存,能共享主存中的信息。
3. 扩充主存储器的容量
借助于虚拟存储器或其它自动覆盖技术,为用户提供比主存的存储空间还大的地址空间。
4. 存储空间的保护
确保各道用户作业都在所分配的存储空间内操作,互不干扰。
4.1.3 存储分配的三种方式
存储分配,解决多道作业之间共享主存的问题。确定什么时候,以什么方式,把一个作业的全部信息或作业运行时首先需要的信息分配到主存中,并使这些问题对用户来说尽可能是 “透明” 的。
1. 直接指定方式
程序员在编写程序时或编译程序在对源程序进行编译时,使用实际的存储空间地址。
- 在多道程序环境下,应保证各作业所用的地址互不重叠。
采用直接指定方式的前提是:存储器的可用空间是已经给定的或者是可以指定的,这对单用户计算机系统是没有问题的。
在多道程序发展的初期,通常把存储空间划分成若干个固定的不同大小分区,并对不同的作业指定相应的分区。因此,对编程人员或对编译程序而言,存储器的可用空间是可知的。
直接指定方式的实质是:程序员在编写程序时或编译程序在对源程序进行编译时,需要指定一个作业的所有信息在主存储器中的位置。因此,这种直接指定方式的存储分配方案,不仅让用户感到不便,而且让存储空间的利用也不那么有效。(缺点)
2. 静态分配方式
静态分配方式是指在程序运行期间分配固定的存储空间的方式。
程序员在编写程序时或编译程序在对源程序进行编译时,均可从其地址空间的零地址开始;当装配程序对其进行连接装入时才确定它们在主存中的相应位置,从而生成可执行程序。也就是说,存储分配是在装入时实现的。
静态分配方式的特点:
- 在一个作业装入时必须分配其要求的全部存储量;
- 如果没有足够的存储空间,就不能装入该作业;
- 一旦一个作业进入内存后,在其退出系统之前,它一直占用着分配给它的全部存储空间;
- 作业在整个运行过程中不能在内存中移动,也不能再申请存储量。
静态分配方式的存储管理很简单,但在多道程序系统中不能有效地共享存储器资源。
- 必须估算好一个作业需要的存储量
- 由于程序执行的局部性,可能浪费内存空间
3. 动态分配方式
动态分配方式的特点:
- 作业在存储空间中的位置,也是在其装入时确定的;
- 在其执行过程中可根据需要申请附加的存储空间;
- 一个作业已占用的部分存储区域不再需要时,可以要求归还给系统;
即这种存储分配机制能接受不可预测的分配和释放存储区域的请求,实现个别存储区域的分配和回收。
- 存储区域的大小是可变的;
- 允许作业在内存中移动。
在空闲存储空间零零散散时,移动内存中的作业,拼凑出一个完整的存储空间,以存放一个新的大作业。
目前,绝大多数计算机系统都采用静态或动态存储分配方式,所以,在本章只讨论这两种存储分配的实现技术,重点放在各种动态存储分配技术的实现上。
4.1.4 基本概念
1. 逻辑地址(相对地址,虚地址)
用户的程序经过汇编或编译后形成目标代码,目标代码通常采用逻辑地址的形式,其首地址为 0,其余指令中的地址都相对于首地址而编址。
注意:不能使用逻辑地址在内存中读取信息。
2. 物理地址(绝对地址,实地址)
内存中存储单元的地址,可直接寻址。
3. 三个空间
① 名空间:存放源程序的空间称为名空间。
namespace 名空间名 {
...
}
② 地址空间:程序访问信息时所用地址的集合,是逻辑地址的集合,由编译程序生成。
③ 存储空间:实际内存单元地址的集合,是物理地址的集合。
存储空间的大小由内存的实际容量决定。
- 地址空间是一个虚概念,存储空间是一个实物体。
- 当目标程序需要在计算机上运行时才被装入存储空间。
- 一个作业在编译和装入的前后存在于不同的空间中。