第四章 存储器管理 4.4 基本分页存储管理方式
一、分页存储管理基本思想
1.离散的基础:将程序地址空间分页,将内存空间分块
2.离散分配:内存一块可以装入程序一页,连续的多个页不一定装入连续的多个块中
3.离散分配的优点:没有外零头,仅有小于一个页面的内零头
二、分页存储管理基本方法
1.页面与物理块
页面或页:把每个进程的逻辑地址空间分成一些大小相等的片
物理块或页框:内存空间也分成与页相同大小的若干存储块。在为进程分配存储空间时,总是以页框为单位
2.实现分页存储管理的数据结构
①页表:每个进程对应1个页表,描述该进程的各页面在内存中对应的物理块号。
②作业表:整个系统1张,记录作业的页表情况
③空闲块表:整个系统1张,记录主存当前空闲块
3.地址结构
①地址空间为程序限定的空间;物理空间为内存限定空间;在页式管理系统中将地址空间分成大小相同页面;将内存空间分成与页面相同大小的存储块。
②在分页存储管理方式中,任何一个逻辑地址都可转变为:页号+页内位移量。
③地址转换:逻辑地址A,页面大小为L,则在分页存储管理方式中,它的页号为P=INT[A/L] ,页内位移量为W=A MOD L
4.地址变换机构:将用户的逻辑地址转变为内存中的物理地址
①页内位移量即为物理块内位移量
②页号到物理块号的转换,由页表完成
③设置一个页表寄存器(PTR),记录当前运行的进程的页表在内存中的始址和页表长度。(平时存于PCB中,要运行时才装入PTR中)
④地址变换过程:
根据逻辑地址,计算出页号和页内偏移量;
将页号与页表长度相比较,若页号大于等于页表长度,则产生一个越界中断。否则从PTR中得到页表首址,然后检索页表,查找指定页面对应的页框号;
用页框号乘以页面大小获得其对应的起始地址,将其送入物理地址的高端 ;
将页内偏移量送入物理地址低端,形成完整的物理地址。
5.具有快表的地址变换机构
①快表的工作原理:
分页系统中处理机每次存取指令或数据至少需要访问两次物理内存: 第一次访问页表,以得到物理地址 第二次访问物理地址,以得到数据。
提高地址变换速度,为进程页表设置一个专用的高速缓冲存储器,称为快表TLB 或联想存储器,专门保存当前进程最近访问过的一组页表项。
②地址转换过程:
根据逻辑地址中的页号,查找快表中是否存在对应的页表项。
若快表中存在该表项,称为命中,取出其中的页框号,加上页内偏移量,计算出物理地址。
若快表中不存在该页表项,称为命中失败,则再查找页表,找到逻辑地址中指定页号对应的页框号。同时,更新快表,将该表项插入快表中。并计算物理地址。
三、访问内存的有效时间EAT
1.定义:从进程发出指定逻辑地址的访问请求,经过地址变换,再到内存中找到对应的物理单元并取出数据,所花费的总时间
四、两级页表和多级页表——处理大页表的存储与检索
1.两级页表——利用离散分配方法实现的两级页表解决大页表无需大片连续存储空间问题
将页表进行分页,并离散地将各个页面分别存放在不同的物理块中。
为离散分配的页表再建立一张页表,称为外层页表,记录了页表分页的物理块号。
说明:每个进程有一个外层页表,它的每个页表项映射一个页表,存放某页表分页的首址。
说明:
外层页表的每个表项存放的是某页表分页在内存的首址;页表的每个表项存放的是某页在内存中的物理块号。
地址变换机构:
2.多级页表
64位的机器,采用的是多级(4级以上)页表结构。因为对于64位机,二级页表过大,无法装入一个物理块中。
或者把可直接寻址的存储器空间减少为45位长度左右,采用三级页表。
五、反置页表
六、对换
1. 对换:把内存中暂不能运行的进程或暂时不用和程序和数据,换到外存上,以腾出足够的内存空间,把已具备运行条件的进程,或进程所需要的程序和数据,换入内存。
2.分类:
“整体对换”(进程对换):对换以整个进程为单位,用于分时系统,以解决内存紧张的问题;
“页面对换/分段对换”: 对换以“页”或“段”为单位进行“部分对换”,该方法是实现请求分页及请求分段存储器的基础,支持虚存系统。
3.为实现对换,系统需要的功能
①对换空间的管理:外存被分为两部分,文件区和对换区
文件区存放文件,对它的管理应重在如何提高存储空间的利用率。对它采取离散分配方式,用指针相连。
对换区存放从内存换出的进程,它们在外存的存放时间较短,换入、换出频繁。对对换区的管理应重在提高进程的换入换出速度。采用连续分配方式。 在系统中应配置相应的数据结构,以记录外存的使用情况 (空闲分区表或空闲分区链)
②进程的换出与换入(由对换进程完成):
换出选择:
阻塞或睡眠状态的进程;
若有多个,按优先级由低到高进行选择;
若没有此状态进程,则选择就绪状态的,仍然按优先级由低到高进行选择。
为避免某进程被频繁的换入换出,还应考虑进程在内存中的驻留时间,优先选择驻留时间长的进程。
换入过程:
从 PCB集合中查找“就绪且换出”的进程,有多个,则选择换出时间最长的;
根据进程大小申请内存,成功则读入,否则要先执行换出,再换入;
若还有可换入进程,则转向首部。直至无“就绪且换出”进程或无法获得足够内存空间为止。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下