Hello World

Your description here.

存储管理地址变换过程

默认分类 0 评

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判断页号是否越界,若页号正常,则根据页号在页表中找到相应页表项,再根据页表项中块号,页内地址,得出物理地址。

os1

​ 在这样的基础上,还可以作进一步的改进,增加快表,在查询到相应页表项时,根据数据局限性原理 ,将数据暂存到快表中,下一次访问时,就可以直接在快表中得到想要查询的数据,时间,空间上都有很大的提高。如下图

os5

​ 当然,还可以用另外一种方式改进------设置多级页表,设置多级页表可以解决问题:1.当页表很大时,由于页表是连续存放方式,需要占用很多多个连续的页框。

2.由局部性原理可知进程在一段时间内只可能访问几个特定的页面,没有必要让整个页表常驻内存。

根据一级页号查询页目录表,找到下一级页表在内存中的位置,再根据二级页号查表,找到最终想访问的内存(下图演示二级页表逻辑地址结构,多级页表以此类推)

os3

基本分段式存储管理

​ 普通分段式存储管理如下图所示,用户给出逻辑地址,包含段号,段内地址(段内偏移量),根据PTR判断段号是否越界,若段号正常,查找段表找到相应的段表项,根据段表项中段长判定段内地址是否越界,若段内地址正常,则根据段表项中基址,段内地址得出物理地址。

​ 分段式存储管理也可以引入快表来增加地址变换速度,过程和页式一样。在快表中命中后就不需要在段表中查询。

os2

基本段页式存储管理

​ 普通基本段页式存储管理如下图所示,基本段页式存储管理方式是以上两种方式的结合,先将进程根据自身逻辑分段,再将每一段进行分页。

​ 用户输入逻辑地址包括段号,段内页号,段内地址。首先根据PTR中段表长度判定段号是否越界,若段号正常;根据段号查询段表中段表项,根据段表项中页表长度判断段内页号是否越界,若页号正常;根据页号查询页表,找到相应的页表项,再根据内存块号,页表始址,段表始址得出最后的物理地址。

​ 段页式存储也有相应的改进措施,如引入快表增加地址变换速度。

os4

优缺点分析

地址结构优点缺点
分页管理一维内存空间利用率高,不会产生外部碎片,只会由少量的页内碎片不方便按照逻辑模块实现信息的共享和保护
分段管理二维很方便按照逻辑模块实现信息的共享和保护如果段长过大,为其分配很大的连续空间会很不方便,段式管理会产生外部碎片
词法分析
快来做第一个评论的人吧~