操作系统————存储管理(上)
1.地址变换(重定位)
逻辑地址:用户编程的地址
物理地址:被加载到主存的地址
重定位:从逻辑地址到物理地址
(1)静态:装入时一次性实现地址变换。以后不再变换。
优点:
不需要硬件
缺点:
a.不支持虚拟存储:不能重新分配雷村
b.不能共享:每个程序占用连续的内存
(2)动态:运行中要访问地址和数据时在变换
优点:
非连续分配,不同的程序设置不同的BR
虚拟存储,可以共享
内存扩充
1.虚拟存储
虚存:把内存和外村结合起来,从而得到一个大”内存“
实现:一部分在内存,一部分外村,要用的时候自动调用
特征:虚拟,离散,多次,交换
2.覆盖技术
一个程序有几个代码或者数据段,按照时间先后顺序占用公共的内存
(1)用树状结构表示,同一级别选最多的。
(2)不相邻的划在一个分区中,选最多的。(最小独立集?)
3.交换技术
暂时不用的换出去,用的时候再换回来
优点:增加并发运行的程序数目,并且给用户提供适当的响应时间;编写程序时不影响程序结构,对用户透明
缺点:增加处理机卡销;没有考虑执行过程地址访问的统计特性。
内存共享和保护
内存共享:有效的使用空间
内存保护:只能访问自己的区域,避免相互干扰
地址越界:进程访问的地址再地址空间之外
操作越权:共享的内存空间,有对应的访问权限
2.分区储存
分区:把内存分成大小不同或者相同的分区
特点:适用于多道程序系统和分时系统
内碎片:占用分区之内未被利用的空间
外碎片:占用分区之间难以利用的空闲分区
分区分配算法
寻找某个空闲分区,大小 大于或等于程序需求。
如果大于,分区分割为两个,一个占用,一个空闲。
分区的 先后顺序从内存的低端到高端
下面是四种找分区的策略:
首次适应法:按分区的先后次序,从头开始枚举
特性:时间性能好,大分区在高端,但是会随着低端的不断划分,时间会增多
下次适应法/循环首次适应法:按分区的先后次序,从上次分配的分区开始查找
特性:时间性能好,空闲分区更均匀,但是较大的分区不易保留
最佳适应法:找到大小相差最小的
特点:碎片小,但是碎片多。大空闲分区可能被保留
最坏适应发:找到最大的
特点:不会留小的,大的也不被保留(?这里没懂)
分区回收
分区释放算法:把相邻的空闲分区合并成一个空闲分区
四种情况:
(1)上下相邻都是空闲区(取消下,修改上)
(2)上相邻区是空闲区(修改上的大小)
(3)下相邻是空闲区(修改下的基址和大小)
(4)不与其他空闲区相邻,作为一个新空闲区插入可用表获*链。
分区的保护:
(1)设置界限寄存器
上、下界寄存器,基址、限长寄存器
(2)保护键
为每一个分区分配一个保护键,同时为每一个进程分配一个相应的保护键,访问内存时如果不匹配则发出保护性中断。
3.页式管理
将程序划分成大小相等的部分称为页,从0开始
逻辑上相邻的页,物理上不一定相同。
系统给每一个进程建立页表。
页表给出逻辑页号和具体内存页号
静态页式管理
逻辑地址空间和物理内存划分为固定大小的页或者页面。
加载时,分配所需的的所有页,这些页不必连续
数据结构
页表:每个进程有一个页表,描述物理页面及逻辑排列顺序
逻辑页号->物理页面号
存储页面表:整个系统有一个存储页面表,描述内存的分配使用情况
静态页式管理的地址变换
每个页面长度为1K,指令LOAD AX,2500的虚地址为100
1.有一个页表地址寄存器和页表长度寄存器,把进程页表始址和长度从请求表中取出放入寄存器。
2.找到页表,有虚地址100可知,指令在第0页的第100地址单元,对应的内存地址为:10242+100 = 2148
3.当CPU执行到第2148单元,需要从虚地址2500中取出数据,得到位移:2;452(除1024的商和余数)
4.查表可知,对应内存8号内存地址为
10248+452 = 8644
优点:1.不必连续存放
2.没有外碎片,每个内碎片不超过页大小
3.便于改变程序占用空间的大小,随着程序运行动态增长地址空间
缺点:1.程序全部装入内存,受到内存可用页面数的限制
动态(请求)页式管理
先装一部分,看需求再装一部分。
当空间已满,根据算法淘汰页面
PS:
如何发现那些不在内存的虚页->扩充页表
如何处理请求与淘汰过程->缺页中断&页面置换
扩充页表
静态页式存储管理的页表
页号、内存块号
驻留位(中断位):在内存还是在外存
访问位:来确定淘汰那页(有算法决定)
修改位:此页在内存中是否被修改过
缺页中断处理
缺页中断:在页表中访问的页不在内存
根据页表中给的外存地址该页调入内存
(1)内存有空闲页,将新调入页装入内存,并修改
(2)内存没有空闲页面,淘汰某页,如果该页面被修改过,写回外存
页式存储总结
页式存储管理解决了分区管理的外部碎片和要求连续空间分配的问题
静态页式要求全部装入,不支持虚拟内存;提出动态页式,允许部分装入
动态页式能有效利用有限的内存页面,但是需要解决缺页率的问题
两种都是从物理页面的角度考虑和解决问题