1. 虚拟存储器的基本概念
目的:使得系统中尽量多地存储用户程序,间接扩大主存的容量;
虚拟存储器考虑的问题:
- 映射:磁盘的页面存入主存哪一个页框中
- 搜索:如何确定页面已经被装入到主存,以及装入到哪一个页框中
- 替换:当主存满的时候,或者进程A的可装入的页框满啦,该替换哪一个页面
- 写回:如何修改主存的实页时,同时确保磁盘的虚页数据能够一致
---- 实际上,Cache技术也有上面4个技术问题,点都是相通的。
1.1 早期分页方式的概念与实现
note:这里描述的是早期分页,早期分页的页框只有一个,因此实现逻辑简单。
1.2 分页与按需调页
基本概念:页框、页、页表、逻辑地址、物理地址
按需调页:指的是只有在进程A需要使用到某个页面内的指令或数据时时,才会将对应的页面加载到主存的某一个页框中,并在页表中记录逻辑和物理地址的映射关系;不会将进程附近的页面也加载进来。
1.3 Linux在x86上的虚拟地址空间
2. 虚拟存储器的实现方式
2.1 分页虚拟存储器
分页系统
页表结构
页表过多过大的问题
解决页表过大的问题
2.1.1 逻辑地址转为物理地址的过程
虚拟地址组成、物理地址组成、页表基址寄存器、页表项结构、转换机构MMU、
信息访问中可能出现的异常情况
2.1.2 快表
什么是快表?
快表是用来减少到主存中访问页表的访存次数
TLB的页表项 = tag + 主存页表项 【需要注意】为什么TLB的页表项需要在主存页表项上额外增加一个Tag?
答案:每个进程拥有一个快表,里面存放的是进程经常需要查询的页表项,而不是整个进程的页表,对于主存中的页表而言,虚页号就是页表中对应页表项的索引,而在快表由于快表中的页表项失去意义,因此需要将主存页表项对应的虚页号页存储起来,即存储在Tag中,用来做标记;
同样得,类似Cache,主存页表的页表项映射到Cache中的快表中,有全相连映射、直接映射、组映射等等方式哦
2.1.3 TLB、页表、Cache的三种缺失组合
首先需要认识三种缺失
2.1.4 CPU访存过程
2.1.5 分页存储系统的特点
2.2 分段虚拟存储器
2.2.1 分段虚拟存储器的实现要点
2.2.2 分段虚拟存储器的地址变换
2.2.3 分段存储系统的特点
相比于分页虚拟存储器,更加灵活,但是容易导致主存中出现许多空余的零碎空间,段内由于是灵活的段长,所以段内没有零碎地址,主存空间容易有零碎地址
分页虚拟存储器,保证主存空间切割为相同大小的叶匡,因此不存在主存空间的零碎地址,而程序的最后一页会存在页内零碎地址。
2.3 段页式存储器
2.3.1 段页式存储器的基本思想
- 段页式存储器是先分段再分页,主存空间只分页;
- 逻辑地址包含 段地址、页地址、页内偏移量
- 二级查询:一级段表、二级页表 = 每个段都有各自的页表
2.3.2 段页式存储器的地址变换
3. 存储保护
3.1 存储保护的基本概念
什么是存储保护? -> 只有在多道程序中相互干扰下
知道最基本的保护措施 ->