实存储管理
1 单用户连续分区存储管理:一次一个作业进入存储区,单道程序设计
2 固定分区存储管理(固定指分区数目固定,每个分区尺寸固定)
2.1 作业的组织:将存储区中的用户部分分为均匀固定的几个区,作业进入后放入区中执行。
2.1.1 改进1:存储区分为不均匀的区,有闲置区时按大小去相应队列取作业(每个区一个队列)
2.1.2 改进2:多个分区的等待队列只有1个,有分区空闲时都到这个队列中挑作业
2.2 分区的分配与释放:设置分区分配表,表项为”区号,大小,起址,状态(空闲还是作业)“
2.3 地址重定位:静态地址重定位,cpu中设置”低界限寄存器“与”高界限寄存器“,用于记录cpu中正在执行的作业在内存中的低界限地址与高界限地址(为了进行地址保护)
2.4 缺点:不允许2个作业同时放于一个分区中剩下的空闲部分(即”内部碎片“)
3 可变分区存储管理(可变指分区数目随作业可变,每个分区尺寸同样随作业可变)
3.1 作业的组织:设置两张表格,一张为”已分配表“,一张为”空闲区表“。表项为”序号,起始地址,尺寸,状态“。作业进入,查询”空闲区表“中为状态为”空闲“的表目,若尺寸满足,则将尺寸切割为恰好的部分与剩余部分,恰好部分分配给作业并写入”已分配表“,剩余部分仍在”空闲区表“中。作业离开同理。注意,当作业离开时可能有空闲区的合并工作
3.2 空闲分区的分配算法
3.2.1 最先适应算法:第一个找到的满足需求的区
3.2.2 最佳适应算法:满足需求的最小空闲区(尽可能不分割大区,但较麻烦)
3.2.3 最坏适应算法:找能满足存储需求,最大的空闲分区作为分配对象(这个是找不痛快啊?)
3.3 空闲区合并:分配时消灭了”内部碎片“,但是可能出现当前空闲区都不满足需求,但是总空闲区超过需求(即”外部碎片“)。解决:空闲区合并(即”存储紧凑“)
3.3.1 时机:调度到某个作业时;有作业运行完归还存储区时即进行
3.3.2 注意:合并产生时间开销;正在I/O的进程不能移动;尽量减少信息移动
3.4 地址重定位:动态地址重定位(作业可能要移动,即考虑到合并)
3.5 地址保护:界地址保护与存储键保护
4 分页存储管理
4.1 基本思想:
4.1.1 内存分”块“:将内存分为固定大小的区,一区为1”块“(非常小,大小为2的整数倍,出于地址重定位考虑)
4.1.2 作业分”页“:将作业也分为同样大小的页。
4.1.3 逻辑地址保存:逻辑地址保存为”第几页,该页偏移量是多少“(即页号与页内位移)。
4.1.4 页表:放于内存中,将内存中的”块“与作业的”页“对应(表项”页号,物理块号“)
4.1.5 硬件支持:页表始址寄存器(Pb):保存当前进程页表首地址;页表长度寄存器(PI):正在运行进程页表长度(几页)。
4.2 存储空间的分配与回收
4.2.1 分配
4.2.1.1 存储分块表:建立表格,表项”块号,状态“
4.2.1.2 位示图:将二进制位与内存状态联系起来,一位表示一块。该位为”1“,则对应块已分配,为”0“则未分配。最后一个字节表示未分配内存块总数
4.3 地址转换(考虑到页的大小都是2的整数倍,因此可以在2进制上很明显的看出页号(前几位)与位移(后几位))
4.3.1 过程:
1)将PCB中页表始址及页表长度放入Pb与PI寄存器(页表始址寄存器,页表长度寄存器)
2)硬件自动区分页号p与页内地址d
3)若p>PI,则地址越界中断,否则地址映射
4)根据Pb与PI,找到页表,根据p在页表中对应为物理块号p‘
5)p’与d构成物理地址
4.3.2 快表:设置一组快速硬件寄存器(称为快表),将页表中常用的几项放入其中。在上面的4)时同时并行访问快表,若找到则直接返回p‘,以节约时间(快表访问速度远高于访问内存);若快表中无该项则更新快表(淘汰算法,主要有先进先出,淘汰访问次数最少那一页)
4.4 缺点:不利于共享(页的划分不考虑程序的逻辑结构)