计算机组成原理层次存储结构

Posted 辣椒油li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机组成原理层次存储结构相关的知识,希望对你有一定的参考价值。

文章目录


前言

最近在阅读《计算机组成与设计 硬件/软件接口(原书第5版)》这本书,它的讲解由浅入深,对计算机底层的硬软件进行了详细介绍,内容清晰且层次分明,是可以反复阅读的计算机书籍。

这一版的《计算机组成与设计》是基于目前最火的开源指令集RISC-V编写的,也是与时俱进了。

本文的内容是阅读该书第5章——大而快:层次化存储 后,自己的简单记录,希望大家在阅读后能对计算机存储层次有初步的理解。


一、虚拟存储

操作系统在运行程序时都是多进程并行,我们希望为每个进程创建一个独立且大的存储空间,但这对于有限的内存资源而言是不可能的。
因此提出虚拟存储的概念,借助磁盘(辅助存储)来实现为每个进程都提供一个大内存的假象。

每个程序(进程)有操作系统分配给它的地址空间,程序在运行中只能使用这些空间。分配给程序的地址空间被称为虚拟地址,内存中实际的地址空间称为物理地址,辅助存储就是磁盘地址,三者之间的关系如下图:

二、页表

我们把每一个地址块称为一个页,并使用“页表”来记录虚拟地址和物理地址的映射关系。其中页表的表项数就是虚拟地址的页号数,表项的序号即对应虚拟地址的页号,表项内容是表项序号代表的虚拟地址页号所对应的物理页号。页表结构如下图,page offset决定了页的大小:

虚拟地址的高位即是虚拟页号,物理地址的高位是物理页号。地址的低位是页内偏移,偏移的位数决定了页的大小,虚拟地址和物理地址的页号位数不一定相等,但页内偏移位数一定相等(通常为12位页内偏移,即页大小是4KiB)。

在需要获取数据时,会先通过页表找到虚拟页号对应的物理页号,获得数据在内存中的物理地址,再从cache中获得物理地址对应的数据块,返回程序。(注意这个流程)

如果虚拟页号对应的是磁盘页号,那么说明该页不在内存中,称为缺页失效,此时需要将磁盘中的页换置到内存中。

磁盘的读写需要耗费百万级的时钟周期数,因此降低缺页失效率是非常重要的设计要求。通常会增大页大小,允许存储中的页以全相联方式放置(即虚拟地址和物理地址之间的映射是全相联的,虚拟页可以放在内存的任何位置),用软件处理缺页失效,采用写回策略。

多级页表

每个进程都有一个页表,页表只能由OS控制和改写,存放在内存中,并有一个页表寄存器来存放页表在内存中的首地址。

由于一个页表占据的空间很大,内存中难以存放多个进程的页表,因此提出多级页表的概念,可以大大减少页表的空间

四级页表的结构如下,在最后一级中才会记录虚拟页对应的物理页号,前面几级页表用于记录对应的下一级页表的位置:

三、TLB快表

由于页表的项数很多,每次在页表中查找物理页号会耗费大量时间,因此采用内存cache的概念,我们对页表也建立一个缓存,称为快表TLB。TLB中的内容就是页表的一个子集,程序在查找物理页号时直接在TLB中查找,若找到则是TLB命中,若没有找到称为TLB失效。

TLB失效时,如果页在内存中,就直接在TLB中创建对应的表项即可;若页不在内存中,会发生缺页失效,这时控制权会给OS来处理缺页失效,OS会根据**LRU(最近最少使用,Least Recently Used)**和引用位等技术来选择要替换的页。

LRU是常用的替换策略,不论是cache的块替换还是虚拟缓存的页替换。

四、MMU内存管理单元

MMU(Memory Management Unit)主要用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权、多任务多进程操作系统。

CPU将要请求的虚拟地址传给MMU,然后MMU先在高速缓存TLB中查找转换关系,如果找到了相应的物理地址则直接访问;如果找不到则在页表里查找计算。

MMU一般封装在CPU芯片内部。


总结

本文主要介绍了层次存储结构中虚拟内存的的基本概念,相关文章的链接如下:
【计算机组成原理】流水线式指令执行
【计算机组成原理】层次存储结构(一)

以上是关于计算机组成原理层次存储结构的主要内容,如果未能解决你的问题,请参考以下文章

冯诺依曼结构原理及层次分析

计算机组成原理层次存储结构

计算机组成原理层次存储结构

计算机组成原理层次存储结构

计算机组成原理——部分速成总结存档

Linux 内存管理 (虚拟内存,进程地址空间)