title: 存储管理地址变换过程
tags: 操作系统
date: 2021-12-23 20:39:53
需求分析
在内存管理中,非连续分配管理方式分为基本分页存储管理,基本分段存储管理,基本段页式存储管理。用户输入逻辑地址OS计算出物理地址。
基本分页存储管理
将内存空间分为一个个大小相等的分区,每个分区就是一个“页框”。一个进程对应一张页表,各个页面离散地放到各个内存块中去。
地址变换如下:
1.根据逻辑地址计算 页号,页内偏移量。
2.页号的合法性检查
3.页号合法,再根据页表起始地址,页号找到对应的页表项
4.根据页表项中记录的内存块号,页内偏移量 得到最终夺得物理地址
5.访问物理内存对应的内存单元
基本分段存储管理
将程序按照自身逻辑关系划分成若干的段,每个段都有段名且在内存中占据连续空间。各段可以不相邻。
地址变换如下:
1.由逻辑地址得到段号,段内地址。
2.段号与段表寄存器中段长度比较,检查是否越界
3.由段表始址,段号找到对应段表项。
4.根据段表中记录的段长,检查段内地址是否越界
5.由段表中的“基址 + 段内地址”得到最终的物理地址。
6.访问目标单元。
基本段页式存储管理
将地址空间按照自身逻辑关系划分为若干段,将各段划分为大小相等的页面,将内存空间分为与页面大小相等的一个个内存块,系统以块为单位为进程分配内存。
地址变换如下:
1.由逻辑地址得到段号,页号,页内偏移量。
2.段号与段表寄存器中段长度比较,检查是否越界。
3.由段表始址,段号找到对应段表项
4.根据段表中记录的页表长度,检查页号是否越界。
5.由段表中的页表地址,页号得到检查页表,找到相应页表项
6.由页面存放的内存块号,页内偏移量得到最终的物理地址
7.访问目标单元
基本分页式存储管理
普通分页式存储管理如下图所示,由用户给出逻辑地址经OS计算得出页号,页内地址(页内偏移量),首先根据PTR判断页号是否越界,若页号正常,则根据页号在页表中找到相应页表项,再根据页表项中块号,页内地址,得出物理地址。
在这样的基础上,还可以作进一步的改进,增加快表,在查询到相应页表项时,根据数据局限性原理 ,将数据暂存到快表中,下一次访问时,就可以直接在快表中得到想要查询的数据,时间,空间上都有很大的提高。如下图
当然,还可以用另外一种方式改进------设置多级页表,设置多级页表可以解决问题:1.当页表很大时,由于页表是连续存放方式,需要占用很多多个连续的页框。
2.由局部性原理可知进程在一段时间内只可能访问几个特定的页面,没有必要让整个页表常驻内存。
根据一级页号查询页目录表,找到下一级页表在内存中的位置,再根据二级页号查表,找到最终想访问的内存(下图演示二级页表逻辑地址结构,多级页表以此类推)
基本分段式存储管理
普通分段式存储管理如下图所示,用户给出逻辑地址,包含段号,段内地址(段内偏移量),根据PTR判断段号是否越界,若段号正常,查找段表找到相应的段表项,根据段表项中段长判定段内地址是否越界,若段内地址正常,则根据段表项中基址,段内地址得出物理地址。
分段式存储管理也可以引入快表来增加地址变换速度,过程和页式一样。在快表中命中后就不需要在段表中查询。
基本段页式存储管理
普通基本段页式存储管理如下图所示,基本段页式存储管理方式是以上两种方式的结合,先将进程根据自身逻辑分段,再将每一段进行分页。
用户输入逻辑地址包括段号,段内页号,段内地址。首先根据PTR中段表长度判定段号是否越界,若段号正常;根据段号查询段表中段表项,根据段表项中页表长度判断段内页号是否越界,若页号正常;根据页号查询页表,找到相应的页表项,再根据内存块号,页表始址,段表始址得出最后的物理地址。
段页式存储也有相应的改进措施,如引入快表增加地址变换速度。
优缺点分析
地址结构 | 优点 | 缺点 | |
---|---|---|---|
分页管理 | 一维 | 内存空间利用率高,不会产生外部碎片,只会由少量的页内碎片 | 不方便按照逻辑模块实现信息的共享和保护 |
分段管理 | 二维 | 很方便按照逻辑模块实现信息的共享和保护 | 如果段长过大,为其分配很大的连续空间会很不方便,段式管理会产生外部碎片 |
博主真是太厉害了!!!
叼茂SEO.bfbikes.com
看的我热血沸腾啊https://www.jiwenlaw.com/
想想你的文章写的特别好https://www.jiwenlaw.com/
想想你的文章写的特别好
想想你的文章写的特别好
叼茂SEO.bfbikes.com
怎么收藏这篇文章?
想想你的文章写的特别好https://www.ea55.com/
想想你的文章写的特别好https://www.ea55.com/
不错不错,我喜欢看 www.jiwenlaw.com
看的我热血沸腾啊www.jiwenlaw.com