存储器的层次结构
-
多层结构的存储器系统
在存储层次中越往上,存储介质的访问速度越快,价格也越高,相对存储容量也越小。
主存储器:简称内存或主存,用于保存进程运行时的程序和数据,也称可执行存储器
寄存器:具有与处理机相同的速度,访问速度最快
高速缓存:介于寄存器和存储器之间的存储器,用于备份主存种较常用的数据,以减少处理机对主存储器的访问次数,大幅度提高程序执行速度
-
三级存储系统
- Cache-主存存储体系
目的:弥补主存速度的不足 - 主存-辅存存储体系
目的:弥补主存容量的不足
- Cache-主存存储体系
程序的装入和链接
在多道程序环境下,要使程序运行,必须先将它装入内存,然后再将其变为一个可以执行的程 序,通常都要经过以下几个步骤:编译、链接和装入。
- 程序的装入
程序的装入指的是由装入程序将装入模块装入内存,有以下三种方式- 绝对装入方式
- 知道内存将驻留在内存的什么位置,程序中的相对地址与实际内存地址完全相同
- 可重定位装入方式
- 起始地址通常都是从0开始的,根据内存的具体情况将装入模块装入到内存的适当位置
- 动态运行时的装入方式
动态运行装入需要一个重定位寄存器的支持
- 绝对装入方式
- 程序的链接
将目标模块与需要的库函数装配成一个完整的装入模块- 静态链接方式
- 程序运行之前,先将目标模块和库函数链接成一个装配模块
- 装入时动态链接
- 便于修改和更新
- 便于实现对目标模块的共享
- 运行时动态链接
- 对某些模块的链接推迟到程序执行时才进行
- 加快程序的装入过程,节省大量的内存空间
- 静态链接方式
连续分配存储管理方式
-
单一连续分配
-
固定分区分配
- 划分分区的方法
- 分区大小相等
- 分区大小不等
- 内部碎片
程序小于固定分区大小时,也会占用一个完整的分区空间,此时分区内部就存在空间浪费称为内部碎片
- 划分分区的方法
-
动态分区分配
- 动态分区分配又称为可变分区分配,它是根据进程的实际需要,动态地为之分配内存空间
- 数据结构
- 空闲分区表:分区号、分区大小、分区始址
- 空闲分区链
- 回收内存时可能的情况:
- 回收区与插入点的前一个空闲分区F1相邻接,此时应将回收区与插入点的前一分区合并,不必为回收分区分配新表项,而只需修改其前一分区F1的大小
- 回收分区与插入点的后一空闲分区F2相邻接,此时也可将两分区合并,形成新的空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和
- 回收区同时与插入点的前、后两个分区邻接,此时将三个分区合井,使用F1的表项和F1的首址,取消F2的表项,大小为三者之和
- 回收区既不与F1邻接,又不与F2邻接。这时应为回收区单独建立一个新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置
-
基于顺序搜索的动态分区分配算法
- 顺序搜索的定义
顺序搜索是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区 - 基于顺序搜索的动态分区算法的分类
- 首次适应(frst fit,FF)算法
- 从链首开始按顺序查找,直到找到一个大小能满足要求的空闲分区
- 低址部分被不断划分,会留下许多难以利用很小的空闲分区
- 每次查找从低址部分开始,增加查找可用空闲分区的开销
- 循环首次适应(next fit,NF)算法
- 为避免地址部分留下许多很小的空闲分区,以及减少查找可用空闲分区的开销
- 从上次找到的空闲分区的下一个空闲分区开始查找
- 设置一起始查寻指针,用于指示下一次起始查寻的空闲分区,循环查找
- 能使内存中的空闲分区分布更均匀,从而减少了查找空闲分区的开销,但会缺乏大的空闲分区
- 最佳适应(best ft,BF)算法
- 把能满足要求,最小的空闲分区分配给作业
- 将所有的空闲分区从小到大形成空闲分区链
- 切割下来剩余部分总是最小的
- 会在存储器中留下许多难以利用的碎片
- 最坏适应(worst fit,WF)算法
- 总是挑选一个最大的空闲分区,分割一部分存储空间
- 以至于存储器中缺乏大的空闲分区
- 使剩下的空闲分区不至于太小,产生碎片的可能性最小
- 对中小作业有利,查找效率很高
首次适应算法是最简单、最好最快的算法
- 首次适应(frst fit,FF)算法
- 顺序搜索的定义
-
基于索引搜索的动态分区分配算法
- 快速适应算法
- 伙伴系统
- 哈希算法
-
逻辑地址空间与物理地址空间
- 编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(逻辑地址)
- 链接程序依次按照各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间
- 物理地址空间是指内存中物理单元的集合
- 通过地址转换将逻辑地址转换为物理地址的过程称为地址重定位
对换(交换)和覆盖
- 覆盖的基本思想
将用户空间分成一个固定区和若干覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将即将访问的段调入覆盖区,其他段存于外存。在需要时,系统将其调入覆盖区,覆盖原有段。 - 对换
- 换入
把准备好竞争CPU 运行的程序从辅存移到内存的过程称为换入 - 换出
把处于阻塞状态的程序从内存移到辅存的过程称为换出
- 换入
- 对换与覆盖的区别
- 覆盖用于同一个作业或进程中
- 交换用于不同的作业或进程中
分页存储管理方式
-
分页存储管理的基本方法
-
页面和物理块
- 页面
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页 - 物理块
把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框
- 页面
-
地址结构
分页地址中的地址结构如下:
前一部分为页号P,后一部分为位(偏)移W,即页内地址。图中的地址长度为32位,其中0-11位为页内地址,即每页的大小为4KB;12~31位为页号,地址空间最多允许有1M页
-
页表
系统为每个进程建立了一张页表。页表的作用是实现从页号到物理块号的地址映射
-
-
地址变换机构
-
地址变换机构的基本任务
借助页表,将逻辑地址中的页号转换为内存中的物理块号 -
基本的地址变换机构
页表的功能可以由一组专门的寄存器来实现。分页系统的地址变换机构:
-
具有快表的地址变换机构
- 快表(TLB)是一个具有并行査寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”
- 增加快表原因
页表是存放在内存中的,则CPU每存取一个数据时,都要两次访问内存。为了提高地址变换速度,增设快表
两次访存指:第一次访问内存得到物理地址;第二次根据物理地址访问对应的内存单元 - TLB 中用于存放当前访问的若干页表项。具有快表的地址变换机构:
-
-
访问内存的有效时间
- 定义
从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所花费的总时间,称为内存的有效访问时间(EAT) - 基本分页管理的有效时间
假设访问一次内存的时间为t,在基本分页存储管理方式中,存取一条指令或一个数据至少需要两次访存。则EAT=t+t=2t - 引入快表管理的有效时间
- 命中率是指使用快表并在其中成功查找到所需页面的表项的比率
- 在引入快表的分页存储管理方式中,有效访问时间的计算公式即为:
E A T = α ⋅ λ + ( t + λ ) ( 1 − α ) + t = 2 t + λ − t ⋅ α EAT = \alpha \cdot \lambda + (t + \lambda)(1-\alpha)+t=2t+\lambda-t\cdot \alpha EAT=α⋅λ+(t+λ)(1−α)+t=2t+λ−t⋅α
上式中, λ \lambda λ表示查找快表所需要的时间, α \alpha α表示命中率, t t t表示访问一次内存所需要的时间
快表的有效性基于局部性原理
- 定义
-
两级和多级页表
-
两级页表
-
多级页表
- 建立多级页表的目的是建立索引,不用浪费主存空间去存储无用的页表项
- 顶级页表最多只能有1个页面
页式地址空间是一维的
-
分段存储管理方式
- 分段存储管理方式的引入
分段管理方式满足了方便编程、信息共享、信息保护、动态增长、动态链接的需要 - 分段系统的基本原理
-
分段
在分段存储管理方式中,作业的地址空间被划分为若干个段。逻辑地址由段号和段内地址所组成
-
段表
- 每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度
- 段表可以存放在一组寄存器中,这样有利于提高地址转换速度,但更常见的是将段表放在内存中
- 段表用于实现从逻辑段到物理内存区的映射
-
地址变换机构
-
在进行地址变换时,系统将逻辑地址中的段号S与段表长度TL进行比较
- 若S>TL,表示段号太大,是访问越界,于是产生越界中断信号
- 若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址
-
检查段内地址d是否超过该段的段长SL
- 若超过,即d>SL,同样发出越界中断信号
- 若未越界,将该段的基址d与段内地址相加,即可得到要访问的内存物理地址
段式地址空间是二维的
-
-
- 段页式存储管理方式
- 分页、分段式存储管理方式的优点
- 分页式存储管理方式以页面作为内存分配的基本单位,能有效地提高内存利用率
- 分段式存储管理以段作为内存分配的基本单位,能够更好地满足用户多方面的需要
- 段页式存储管理方式的基本原理
-
段页式系统的基本原理是分段和分页原理的结合
即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名
-
段页式系统利用段表和页表实现地址映射
利用段表和页表进行从用户地址空间到物理(内存)空间的映射
段页式存储爸理下,在一个进程中,段表只有一个,页表可能有多个
-
- 地址变换过程
-
地址变换机构
- 进行地址变换时,首先利用段号S,将它与段长TL进行比较
- 若S<TL,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址
- 并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。
-
内存访问过程
在段页式系统中,为了获得一条指令或数据,需三次访问内存- 访问内存中的段表,从中取得页表始址
- 访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址
- 从第二次访问所得的地址中取出指令或数据
-
在段页式系统中也可增设高速缓冲寄存器(Cache),以提高平均访问速度
-
- 分页、分段式存储管理方式的优点