内存 虚拟地址映射与转换

一、页式

在这里插入图片描述

  1. 虚拟空间分成大小相等的块,每个块作为一个页并编号;
  2. 独立程序分成一组相等固定大小的页面集合,并编号;
  3. 物理内存空间分成大小相等存储块并编号;
  4. 虚拟地址=虚拟页号+页内偏移量
  5. 物理地址=虚拟页号_value(查页表)+页内偏移量

1、优点

  1. 提高主存利用率,每个程序只有大约半页的浪费;
  2. 简化了页表;
  3. 提高了地址映射和转换的速度;

2、缺点

  1. 不利于程序的模块化。程序被划分为固定的大小页,通常情况下很难保证一个页面包含整数个程序段,所以某些程序就会被拆分,然后放入相邻的几个页;
  2. 页面较小且大小固定,所以页表会比较庞大,占用存储空间也大;

二、段式

在这里插入图片描述

  1. 程序根据内容逻辑关系分成若干程序段,每个段大小不同;
  2. 物理内存空间分成大小不同的段,每个段都从0号编号,并为每个段分配连续的地址空间;
  3. 各个程序段可以离散分布在内存不同的分区中;
  4. 虚拟地址=段号+段内地址
  5. 物理地址=基址寄存器(段表起址)+段内地址+虚拟段号_value(查段表)

1、优点

  1. 利于程序模块化。优于分段是根据程序的逻辑结构进行划分,故某一个程序段的改变不会影响其他段;
  2. 利于程序实现信息共享。因为程序和数据共享是以信息的逻辑单位为基础的,而段正是信息的逻辑单位。
  3. 有利于信息的保护。信息的保护同样是对信息的逻辑单位进行保护;
  4. 利于程序的动态增长和动态链接。

2、缺点

  1. 内存利用率较低,每个段的长度不同导致各个段的起止点不能确定;
  2. 虚拟地址变换耗时,段表比页表复杂;

三、段页式

在这里插入图片描述

  1. 在虚拟地址上,对程序采用段式管理方式进行逻辑单位上的分段;
  2. 段表的每个表项分别对应一个程序段,表项中指明了该段的页表的起始地址和该段相应的控制保护信息;
  3. 页表指明了页面在内存中的位置;
  4. 对每个程序段采用基于页式的管理方式进行分页;
  5. 在物理内存上,将物理内存空间分成与页面大小相等的物理块。

流程

  1. 第一次查询段表,将段表寄存器中的段表始址加上虚拟地址的虚拟段号,得到页表始址;
  2. 查询页表(将页表始址+虚拟地址的虚拟页号)=物理块号;
  3. 物理块号+虚拟地址的页内偏移量=物理地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IForFree

整理不易,望多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值