操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

页式

1、页式

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

硬件实现流程

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

需要进行俩次内存访问

地址变化步骤

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

问题

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

2、页式+快表

什么是快表?

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

快表:就是高速缓存cache访问速度快于内存,造价高于内存
所以:cache的容量小于内存,
cache和快表(TLB)的区别:TLB 中只有页表项的副本,而普通 Cache 中可能会有其他各种数据的副本

引入快表后地址变换步骤

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

什么叫快表和慢表同时查找?
操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
就是在访问快表的同时也访问慢表,所以在上面的例子中可以节省一秒时间

引入快表后的硬件实现

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

假如:
第一次访问(0,0),检查越界后查询快表,未命中,查询页表,并将该页表项复制到快表,访问物理地址。(访问两次内存)
第二次访问(0,4),检查越界后查询快表,命中,直接访问物理地址(访问一次内存)
第三次访问(0,8),检查越界后查询快表,命中,直接访问物理地址(访问一次内存)

快表无法装入完整的慢表,达到高命中率的基础原理是什么?-------->局部性原理

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

有无快表的对比:

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

3、两级页表

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

单级页表存在的问题

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
由于段氏内存分配的一个优点就是可以进行非连续的存储,但是当我们采用页式存储的时候,逻辑地址与页表项需要建立一一对应的关系,当逻辑地址太多时,就需要一片很长的连续空间进行页表存储,这样就丧失了非连续存储的优势。因此,提出了二级页表的概念。

二级页表的逻辑地址结构

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

二级页表的硬件实现(解决第一个问题)

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

我们可以类比于一级页表,一级页表可以将一个程序分页存储到不同不连续的内存单元。那二级页表其实就是将一级页表分页存储到不同不连续的内存单元,即将一级页表再分页这样就可以解决第一个问题了

二级页表如何实现地址转换?

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

就是先用一级页表查到二级页表存放的位置,在从二级页表查到物理地址。相对于一级页表的方式,就是多了一步页表查询的过程。

第二个问题的解决?

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

见下篇博客:操作系统之内存管理:5、虚拟存储技术

什么叫各级页表大小不能超过一个页面?

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

其中,二级页表在没有快表时需要进行3次内存的访问才能找到实际的物理地址。n级页表需要访问n+1次。

段氏

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

什么叫分段?

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

1、当我们写一个程序时会有一个main()函数,已经一系列的子函数;那么分段的意思就是:按照完整的自身逻辑结构(比如一个函数)将一个程序划分成多个块,然后将不同的块存储到不同不连续的内存段中。(如上图所示),一个函数名就对应一个断号。
2、用户要对分段存储的程序进行数据的访问时,需要有俩个参数:第一个是段名,第二个是段内偏移量,所以称段氏的地址空间是二维的
3、段是信息的逻辑单位。分页的主要目的是更好地满足用户需求。。分段对用户是可见的,用户编程时需要显式地给出段名。

如何确定进程的每个段在内存中存放的位置?--------->段表

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

我们可以通过逻辑地址与段表,段表与物理地址的映射关系实现从逻辑地址到物理地址的转化

段氏硬件实现流程

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

首先用短号与段表寄存器对比查看是否越界;
未越界则查找段表中对应的段表项
然后段内地址与段长对比,判断是否越界
未越界则查找物理地址
假如现在要查找:(2,1024),未越界则查找到段基址:40K,在加上偏移量:1K,所以最终的物理地址为41K处

内存访问次数

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

分段、分页管理的对比

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

假如现在程序有三个段:0,1,2;第二段可共享;用段氏就很容易实现共享;若采用页式:
操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
可能出现一页中一部分可共享,一部分不可共享的情况。

段页式

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

段氏和页式的缺点

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

如何确定进程的每个段在内存中存放的位置?--------->段表+页表

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

段页式和段氏中的段表存储字段不同。

段页式管理的逻辑地址结构

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

段页氏硬件实现流程

操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

不使用快表时内存访问次数:每次地址转化都需要访问内存3次。