计算机组成原理总目录
虚拟存储器
虚拟存储器主要解决的是用于解决存储数据的容量问题
例如在电脑的辅存磁盘中存放了几百GB甚至几TB的数据,包括几十个上百个程序
但我们在实际运行时,并不需要使用到所有的数据,而只需要用到其中一个或者两个程序
这是我们就可以将要用到数据读取到更快的主存中进行运行,提高程序的运行速度同时,如果一个程序的大小超过了主存的大小,主存内的数据就会发生替换,使得主存的空间看起来很大,这也就是其虚拟的特性原理
1. 分页
当我们需要将大小为4KB的程序A加载到主存时,会发现有可能找不到【可用且连续】的4KB空间,而这时就需要对数据进行分页处理 (该过程是由操作系统完成)
- 分页:如下图中我们将程序划分为1KB为一【页】,这样我们就无需去找连续的4KB空间,而是分散地将每一页加载到主存中
2. 页表
在进行分页后,我们能充分的利用主存中的零碎空间将程序A装入主存,但我们接下来该如何读取程序A呢?
逻辑地址(虚地址):程序员所看到的虚拟地址,也称为绝对地址
物理地址(实地址):数据在主存中的实际地址,也称为相对地址
因为程序员写程序时所使用的都是逻辑地址,与实际的物理地址不一致
故我们需要一个表来记录逻辑页号与物理页号之间的联系,不仅如此页表还包括其他的信息
- 脏位:用于写入时是否需要写回辅存
- 有效位:表示页面是否已被调入主存中
- 访问位:用于页面的替换算法(与Cache相关替换算法类似)
- 辅存块号:数据在辅存中的位置
- 主存块号:逻辑页号所放在主存中的位置
- 逻辑页号:程序员所访问的逻辑位置
3. 页式存储的地址变换
在建立好页表后,我们就可以根据逻辑地址来读取程序A的数据在主存中的实际位置,流程如下
- 第一步,获取逻辑地址中的页号
- 第二步,获取页表的地址寄存器存放的页表地址
- 第三步,在页表中根据页号查找物理页号
- 第四步,将得到的物理页号拼接页内地址,从而得到最终的物理地址
4. 快表
因为页表实际上也是存储在主存上的,所以为了能更快的提高查表速度,故引入了快表机制
其原理和Cache相同,利用局部性原理,将频繁查找到的页表记录存储在查询速度更快的快表中,减少访问主存的次数
需要注意Cache和快表的不同之处
- Cache:当我们直接访问主存的物理地址时,我们会通过访问Cache来减少访存次数
- 快表:当我们访问的是程序的逻辑地址(而非物理地址),则我们需要将【逻辑地址转为物理地址】这一过程,而快表的作用就是用来减少这个转化过程的访存次数
- 逻辑地址在转化为了物理地址后,就该轮到Cache发挥作用的时候了
其次,Cache与主存之间的工作是由硬件自动完成的
而主存与辅存之间的地址转换是由硬件和操作系统共同完成的