(计算机组成原理)第三章存储系统-第七节1:页式存储器页表及快表

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第三章存储系统-第七节1:页式存储器页表及快表相关的知识,希望对你有一定的参考价值。

一:页式存储器

前面说过主存和Cache之间是以块作为数据的传输单位的

我们知道,应用程序运行时需要加载进主存。比如说微信,假如它有1GB大小,那么想要在主存中找到连续的1GB空间是很困难的,并且就算加载进去了,也会极大的破坏主存的利用率,产生很多碎片

因此为了提高主存利用率,可以将程序(所谓程序就是数据、指令的集合体)分为一个个大小相同的“页”,每个页面的大小和“物理块”的大小是相同的。给每个页面编号后,就可以分散在主存中

所以页式存储系统是这样的:一个程序(操作系统中称为进程)在逻辑上被分为若干大小相同的“页面”,“页面”大小与“块”大小相同,每个页面可以离散地放入不同的主存块

  • 页面的划分属于逻辑角度,主存和Cache块的划分属于物理角度

二:逻辑地址和物理地址

  • 逻辑地址:程序员视角中看到的地址
  • 物理地址:数据在主存中真实的地址、

我们编写程序时,所操作的数据其显示的地址均为虚拟地址,真实的地址需要操作系统进行映射。那么为什么需要虚拟地址呢?

早期的计算机启动进程时,会将进程或程序所包含的东西全部加载进内存,而且访问的就是真实的物理内存

但是这种粗暴的操作有很大弊端,比如说经典的野指针问题在这种情况下就很容易产生,而且进程在运行中会产生大量数据,这些数据一旦不能连续存放,就会另外开辟空间,这无疑增加了异常访问的情况

所以计算机设计者意识到了这种模式缺陷,想到了一种方法:增加一个中间层,利用中间层映射物理内存。程序访问内存时不直接访问物理内存,先访问中间层,如果中间层访问没有问题,那么操作系统就会将中间层映射到物理层,完成正常执行

一个进程创建之后,操作系统会为这个进程分配一个专属于它的大小为4GB的虚拟进程地址空间(4GB是因为32位系统中,指针是4个字节),与它相对的是一片真实的物理地址空间,操作系统在映射虚拟内存时只会映射到那一片物理空间,而且需要特别注意这个虚拟空间并不是真的有4GB,它只是虚拟的 。由于每一个进程都有自己的虚拟的进程地址空间,所以它只能访问自己的进程的数据,这样做实现了隔离,也就是进程之间的相互独立。并且把虚拟地址空间划分为这样,那样的区,这样的话也能解决数据的连续存放


操作系统负责分页操作,该过程对程序员是不可见的

站在程序员的视角上,对于一个打包好的4KB程序,我们肯定是知道它的大小的,由于4KB= 2 12 B 2^{12}B 212B,因此可以编址,其范围为:000000000000~111111111111
假设该程序中有一个变量 x x x的逻辑地址为:001000000011,另外一个变量y的逻辑地址为:110000001010

在学习第一章时,我们知道取变量 x x x A C C ACC ACC寄存器的操作对应的机器指令是:000001 001000000011,分别对应操作码和地址码(逻辑地址),我们指明的仅仅是一个相对的地址,并不是说 x x x的地址真的就在那里。

每个页的大小是1KB。也就是2 10 ^{10} 10B,因此可以将变量 x x x的逻辑地址分为两个部分:一个表示页号,一个表示页内地址,其中页内地址的大小取决于每个页面的大小,如果是1KB,那么就需要10个比特位

因此 x x x的逻辑地址:001000000011就表示它在第0页,而 x x x的真实的物理地址可以用该页所在的主存的块号(12位)+页内地址表示

  • 此例中,第0页放在了主存的第2块,因此 x x x的真实地址为:0000000000101000000011

三:页表和地址变换过程

(1)页表

所以我们见到的地址均为虚拟的地址,给出逻辑地址后,操作系统必须将其转化为真实的物理地址再进行访存,其中最基本的一个操作就是把页号映射为块号,所以为了记录这样的映射关系,操作系统会建立一张页表

值得注意的是,页表中存放的数据是保存在主存中的,因此进行地址转换时还要要进行访存操作

地址的变化过程大致如下

  • 拆分逻辑地址为页号和页内地址
  • CPU中的页表基址寄存器指明了页表在主存中的存放位置(以地址为1058为例,就表示当前运行的程序其所对应的页表是从1058后的存储单元开始存储的,由于每个页表项的大小相同,所以只需顺次读取即可)
  • 查询页表找到逻辑页面对应的主存块
  • 块号+页内地址=物理地址
  • 进行访存操作(Cache未命中时进入主存)

(2)快表

依据程序执行的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项放在一个高速缓冲器中,称之为页表(TLB)中,则明显可以提高效率,相应地把放在主存中的页表称为慢表(Page)

相应地在进行地址转换时,首先查快表人,若命中,则无需访问主存中的页表;否则查询主存中完整的页表,查询之后为了以后便于访问将其加入到快表中

结合之前的Cache,整个访存操作可以是如下流程

以上是关于(计算机组成原理)第三章存储系统-第七节1:页式存储器页表及快表的主要内容,如果未能解决你的问题,请参考以下文章

传输层-第七节:TCP可靠传输

应用层-第七节:万维网WWW

网络层-第七节:IPv4数据报首部格式

(计算机组成原理)第七章输入和输出系统-第三节:I/O接口

(计算机组成原理)第七章输入和输出系统-第二节2:外部设备之外存储器(磁盘的基本结构,磁盘阵列)

计算机组成原理3.7虚拟存储器