内存 虚拟地址映射与转换

一、页式

内存 虚拟地址映射与转换_第1张图片

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

1、优点

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

2、缺点

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

二、段式

内存 虚拟地址映射与转换_第2张图片

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

1、优点

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

2、缺点

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

三、段页式

内存 虚拟地址映射与转换_第3张图片

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

流程

  1. 第一次查询段表,将段表寄存器中的段表始址加上虚拟地址的虚拟段号,得到页表始址;
  2. 查询页表(将页表始址+虚拟地址的虚拟页号)=物理块号;
  3. 物理块号+虚拟地址的页内偏移量=物理地址。

你可能感兴趣的:(运维,服务器)