基本分页存储管理
基本概念
基本分页存储管理的思想:把进程分页,各个页面可离散地放到各个的内存块中
重要概念
页框,页帧,内存块,物理块 VS 页,页面
页框号,页帧号,内存块号,物理块号 VS 页号,页面号
如何实现地址转换
1.计算出逻辑地址对应的页号
2.找到对应页面在内存中的存放位置
3.算出逻辑地址对应的页内偏移量
4.物理地址=页面地址+页内偏移量
页号,页内偏移量的计算
页号=逻辑地址/页面大小; 页内偏移量=逻辑地址%页面大小
或根据逻辑地址结构计算,逻辑地址=【页号P,页内偏移量W】
页表
页表记录进程页面和实际存放的内存块之间的对应关系
一个进程对应一张页表,进程的每一页对应一个页表项,每个页表项由页号和块号组成
每个页表项的长度是相同的,页号是隐含的
基本地址变化机构
地址变换过程
1.根据逻辑地址算出页号,页内偏移量
2.页号的合法性检查(与页表长度对比)
3.若页号合法,再根据页表起始地址,页号找到对应页表项
4.根据页表项中记录的内存块号,页内偏移量得到最终的物理地址
5.访问物理内存对应的内存单元
其他小细节
页内偏移量位数与页面大小之间的关系(能用其中一个条件推出另一个条件)
页式管理中地址是一维的(只需知道逻辑地址)
实际应用中,通常使一个页框恰好能放入整数个页表项
为了方便查找到页表项,页表一般是放在连续的内存块中的
具有快表的地址变换机构
什么是快表TLB
联想寄存器
访问速度比内存快很多的高速缓存存储器
加速地址变换
引入快表后,地址的变换过程
+两级页表
单级页表存在的问题
所有页表项必须连续存放,页表过大时需要很大的连续空间
在一段时间内并非所有页面都用得到,因此没必要让整个页表常驻内存
两级页表
将长长的页表再分页
逻辑地址结构:(一级页号,二级页号,页内偏移量)
注意几个术语:页目录表/外层页表/顶级页表
如何实现地址转换
1.按照地址结构将逻辑地址拆分成三部分
2.从PCB中读出页目录表起始位置,根据一级页号查页目录表,找到下一级页表在内存中的存放位置
3.根据二级页号查表,找到最终想访问的内存块号
4.结合页内偏移量得到物理地址
几个细节
多级页表中,各级页表的大小不能超过一个页面。若两级页表不够,可以分更多级
多级页表的访问次数(假如没有快表机构)——N级页表访问一个逻辑地址需要N+1次访存
基本分段存储管理
分段
将地址空间按照程序自身的逻辑关系划分为若干段,每段从0开始编址
每个段在内存中占据连续空间,但各段之间可以不相邻
逻辑地址结构:(段号,段内地址)
段表
记录逻辑段到实际存储地址的映射关系
每个段对应一个段表项,各段表项长度相同,由段号(隐含),段长,基址组成
地址变换
1.由逻辑地址得到段号,段内地址
2.段号与段表寄存器中的段长度比较,检查是否越界
3.由段表始址,段号找到对应段表项
4.根据段表中记录的段长,检查段内地址是否越界
5.由段表中的“基址+段内地址”得到最终的物理地址
6.访问目标单元
分段 VS 分页
分页对用户不可见,分段对用户可见
分页的地址空间是一维的,分段的地址空间是二维的
分段更容易实现信息的共享与保护
分页(单级页表),分段访问一个逻辑地址都需要两次访存,分段存储中也可以引入快表机构
段页式存储管理
分页,分段管理方式中最大的优缺点
分页管理
优点:内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片
缺点:不方便按照逻辑模块实现信息的共享和保护
分段管理
优点:很方便按照逻辑模块实现信息的共享和保护
缺点:如果段长过大,为其分配很大的连续空间碎片会很不方便,另外,段式管理会产生外部碎片
分段+分页
1.将地址空间按照程序自身的逻辑关系划分为若干个段,在将各段分为大小相等的页面
2.将内存空间分为与页面大小相等的一个个内存块,系统以块为单位为进程分配内存
3.逻辑地址结构:(段号,页号,页内偏移量)
段表,页表
每个段对应一个段表项,各段表项长度相同,由段号(隐含),页表长度,页表存放地址组成
每个页对应一个页表项,各页表项长度相同,由页号(隐含),页面存放的内存块号组成
地址变换
1.由逻辑地址得到段号,页号,页内偏移量
2.段号与段表寄存器中的段长度比较,检查是否越界
3.由段表始址,段号找到对应段表项
4.根据段表中记录的页表长度,检查页号是否越界
5.由段表中的页表地址,页号得到查询页表,找到相应页表项
6.由页面存放的内存块号,页内偏移量得到最终的物理地址
7.访问目标单元
访问一个逻辑地址所需访存次数
第一次——查段表,第二次——查页表,第三次——访问目标单元
可引入快表机构,以段号和页号为关键字查询快表,即可直接找到最终的目标页面存放位置,引入快表后仅需一次访存