一、页式
- 虚拟空间分成大小相等的块,每个块作为一个页并编号;
- 独立程序分成一组相等固定大小的页面集合,并编号;
- 物理内存空间分成大小相等存储块并编号;
- 虚拟地址=虚拟页号+页内偏移量
- 物理地址=虚拟页号_value(查页表)+页内偏移量
1、优点
- 提高主存利用率,每个程序只有大约半页的浪费;
- 简化了页表;
- 提高了地址映射和转换的速度;
2、缺点
- 不利于程序的模块化。程序被划分为固定的大小页,通常情况下很难保证一个页面包含整数个程序段,所以某些程序就会被拆分,然后放入相邻的几个页;
- 页面较小且大小固定,所以页表会比较庞大,占用存储空间也大;
二、段式
- 程序根据内容逻辑关系分成若干程序段,每个段大小不同;
- 物理内存空间分成大小不同的段,每个段都从0号编号,并为每个段分配连续的地址空间;
- 各个程序段可以离散分布在内存不同的分区中;
- 虚拟地址=段号+段内地址
- 物理地址=基址寄存器(段表起址)+段内地址+虚拟段号_value(查段表)
1、优点
- 利于程序模块化。优于分段是根据程序的逻辑结构进行划分,故某一个程序段的改变不会影响其他段;
- 利于程序实现信息共享。因为程序和数据共享是以信息的逻辑单位为基础的,而段正是信息的逻辑单位。
- 有利于信息的保护。信息的保护同样是对信息的逻辑单位进行保护;
- 利于程序的动态增长和动态链接。
2、缺点
- 内存利用率较低,每个段的长度不同导致各个段的起止点不能确定;
- 虚拟地址变换耗时,段表比页表复杂;
三、段页式
- 在虚拟地址上,对程序采用段式管理方式进行逻辑单位上的分段;
- 段表的每个表项分别对应一个程序段,表项中指明了该段的页表的起始地址和该段相应的控制保护信息;
- 页表指明了页面在内存中的位置;
- 对每个程序段采用基于页式的管理方式进行分页;
- 在物理内存上,将物理内存空间分成与页面大小相等的物理块。
流程
- 第一次查询段表,将段表寄存器中的段表始址加上虚拟地址的虚拟段号,得到页表始址;
- 查询页表(将页表始址+虚拟地址的虚拟页号)=物理块号;
- 物理块号+虚拟地址的页内偏移量=物理地址。