一. 基本分页存储管理
1.基本原理
- 内存被划分成大小固定相等的块(Frame 帧、页框、主存块),且块相对比较小。
- 每个进程装入时被分成同样大小的页(Page)一页装入一帧
- 整个进程被离散装入到多个不连续的帧
下面来看一个分页存储管理的例子
2.页面长度
页面的尺寸(页面长度)由计算机系统的硬件决定。
对于某台具体的机器来说,只能规定一种尺寸。
目前流行的页面尺寸是1 KB到4KB之间,但也有一些 机器不在此范围内。
比如,小型机IBM AS/400的页面尺寸为512个字节。
3.记录内存使用情况的数据结构
位示图: 整个系统一张,记录内存使用情况
位示图的使用:
分配时,查位示图,找空闲帧: k=i*L+j
回收时,i= [k/L] //整除
j= k MODL //取余
由帧号可知位示图中字号和位号
设字号i、位号j、帧号k取值均从0开始,字长记为L,一个0/1位对应一个帧的空闲/占用。
4.记录每个进程分页及占用内存情况的数据结构
- 为了保证程序的正确运行,分页管理机制应为每个进程建立一个数据结构——页表PT(Page Table)。
- 页表中登记进程各页面对应的帧号,供地址映射使用。
页表:每个进程一张PT, 记录本进程分页及占用帧的情况
5.页面分配算法
- 计算请求者需要的总帧数N。
- 查位图,若找不到足够的空闲帧,编制分配失败报告返回。
- 索取一个空闲页表PT。
- 从位图中找出N个为0位,计算出对应的帧号,填入PT。
- 位示图中将这些位改为1。
- 将PT起始地址填入进程的PCB中。
- 结束。
6.地址划分
- 进程装入之前,逻辑地址是一维的
- 进程装入之后,逻辑地址分为两维
高端地址部分 作为页号
低端地址部分 作为页内的偏移量(即页内地址)
若机器的地址码是16位,页面长度是1KB,则地址划分结果:低10位是页内地址,高6位是页号。
这样的地址结构,允许一个进程的页面总数达64页。
7.地址重定位
8.分页式存储管理中的地址形式
9.地址保护
10.页面共享
总结
- 离散存储,利于大进程装入
- 只有很少的页内碎片,提高内存利用率
- 位示图、页表;动态地址重定位
- 页面共享不易实现
二. 基本分段存储管理
1.分段管理技术
“段”是一个逻辑单位,是进程的一个组成部分。如主程序段,子程序段,数据段等。
在结构程序设计中,进程自然分段。用户源程序使用的符号地址是二维的:<段名,变量名>。
编译之后的逻辑地址是二维的:<段号,段内位移>
2.进程按逻辑分段
在分段机制中,一个进程的地址空间可以包含以下不同的段:
- 代码段(Code Segment)
- 数据段(Data Segment)
- 堆栈段(Stack Segment)
- 内存共享段(Share Memory Segment)等
3.一个包含3个段的进程
例如,一个进程P包括3个程序段: Main (主段),Sub1 (子段1) 和Sub2 (子段2) .图给出各个段之间的调用关系。
4.基本分段存储管理原理
- 进程的程序和其相关的数据按逻辑分段。
- 段有一个最大长度限制,但不要求所有程序的所有段的长度都相等。
- 一段占用一块连续存储区
- 各段占用不连续分区
5.记录内存使用情况的数据结构
- MAT
- 空闲分区表/链
这里的MAT表与动态多分区中MAT表的有何异同?
相同点:
MAT的一个表项,对应内存一个分区
不同点:
- =动态多分区中,一个分区存放一整个进程
- 分段存储中,一个分区存放进程的一个段。一个进程离散成多个段装入多个不连续的分区
6.记录各个进程分段情况的数据结构
段表ST (Segment Table)为每个进程设置一张段表,用来记录各个段地址映射的关系。进程分了几段,段表就有几个表项。一个表项记录一个分段在内存空间中的存储地址和长度。
段表示例
7.地址重定位
8.程序运行中的地址变换过程如下
- 提取逻辑地址中的“段号”
- 比较段号与段表控制寄存器中的段长度。如果超出段表长度,则返回“内存定位错误”,终止进程的运行
- 从段表控制寄存器中给出的段表首址开始,以段号为索引查找该进程对应的段表,得到欲访问段的首地址。
- 取出欲访问段的首地址,加上逻辑地址中的偏移量得到物理地址。
9.分段保护
第一级保护是防止进程发生超出存储空间的访问
第二级保护是阻止进程超出访问权限的读写
分段保护的三个步骤:
10.分段共享
如果多个用户进程需要共享内存中的某些代码段或数据段时,可将内存中共享段的起始地址及长度,填入这些进程的段表当中,就可共享一个逻辑上完整的段信息了。
例如系统一个文本编辑程序vi段,多个用户调用
共享段表SST
为了实现段的共享,系统设一个“共享段表”(SST,Sharing Segment Table) 记载各个共享段的使用情况。任何一个进程调用共享段时,系统都将访问该表。
总结
- 离散存储,一段连续装,各段不连续
- 内存仍然按分区管理,会产生外碎片
- DS: MAT、段表;动态地址重定位
- 分段共享非常方便.
三.基本段页式存储管理
1.存储管理方法总结
- 连续存储管理
- 单分区方式——内存用户区的全部空间只存放一个进程
- 多分区方式——内存被分为多个分区,每个分区存放一个进程。每个瞬间可有多个进程留在内存中
- 离散存储管理
- 分页方式——- 内存被划分为多个等长的存储块,每个进程占用其中的若干块,整个内存允许有多个进程同时驻留。
- 分段方式——-对于分段结构的应用程序,一段的分配一块连续空间,各段离散存入不同分区。这种方式同样允许每瞬间有多个讲程驻留在内存。
2.分页与分段
分页:分页存储利于大进程装入,内存利用率高;但是,页是物理页,页面共享不易实现。
分段:段是逻辑段,方便实现分段共享;但是,外碎片的存在降低内存使用效率;且整理消除外碎片加大系统开销
3.基本段页式存储管理
把分页和分段两者结合起来就是段页式存储管理
- 内存划分成大小相等的页框
- 用户的地址空间被程序员划分成许多段,每个段一次划分成许多固定大小的页,页的长度等于内存中的页框大小
数据结构:
- 系统设一张位示图,记录内存个帧占用与否
- 系统为一个含有多段的进程建立段表,记录各个分段对应段内页表的地址和长度
- 一个分段有一个段内页表,记录该段划分为多少页,每页分配的帧号是多少。
段表和段内页表:
地址形式:
系统的硬件支持是,在处理机内部没有段表控制寄存器及地址生成逻辑
- 程序中的逻辑地址仍然是二维地址:<段号,偏移量>
- 每段装入时分页,地址部分被当作三维地址来处理:<段号,页号,页内偏移>
段页式地址重定位:
段页式地址保护:
段页式地址字结构的计算:
比如一个32位地址字,已知系统设定页面长度为4KB,段的长度为64KB,则地址划分如下:
31-16 15-12 11-0
段号 页号 页内地址
于是,页内需12位,每段分16页,段内页号需4位,剩余16位为段号。