【华为云技术分享】处理器存储模型概述(1)

上一期中我们介绍了ARMv8-A架构中的异常级别,从这一期开始的接下来四期我们将介绍ARMv8-A的存储模型。第一期我们将介绍存储模型中地址转换和访存控制的一般概念,第二期我们将介绍缓存相关的基本概念,最后两期我们将介绍ARMv8-A架构中的地址转换、访存控制和缓存机制。本期中我们介绍处理器中地址转换机制和访问控制的一般概念。

一、处理器的地址转换和访问控制

处理器运行程序时,需要从物理存储器中取得所需的指令和数据。对于处理器中的地址转换,输入数据为应用程序空间中的地址(指令地址或数据地址),输出为数据总线上的地址。前者称为逻辑地址,后者称为物理地址。处理器需要将逻辑地址转换为物理地址。

处理器所能访问的物理存储空间分配的方式主要有连续分配和离散分配两种方式。连续分配指运行在处理器上的进程将其使用的数据和指令保存在内存中的连续区域里面,这种方式不够灵活,可能会产生大量内存碎片,整合内存碎片的开销比较大。离散分配方式将进程使用的存储空间离散地分布在内存里,常用的分配方式有段式、页式和段页式。

段式分配方式通过分段机制将程序划分为不同的程序段,如代码段、数据段等。分段机制通过将段基址与偏移量相加得到对应的物理地址,偏移量不能超过段长,否则会产生越界中断。在分段机制中,访问控制由段描述符实现。段描述符保存了段基址、段长和访问段的最低特权等级等信息,只有当前访问段描述符的进程有足够的特权等级才能访问该段的段描述符。

页式分配方式通过分页机制将逻辑地址空间划分为固定大小的页,将物理地址空间划分为固定大小的页框,页框和页的大小是一样的。分页机制将逻辑地址空间中的页离散地映射为物理地址空间中的页框,从而完成从逻辑地址到物理地址的转换。页和段的区别在于页的大小是固定的,而段的大小是可变的。很多RISC[2]处理器处理器不支持分段机制,只支持分页机制,所以我们着重介绍分页机制。

在分页机制中,逻辑地址到物理地址的转换是通过页表来实现的。页表中保存了页号到页框号的转换关系。逻辑地址被分为页号和页偏移,页号指示逻辑地址空间中的不同的页,页偏移指示页内的逻辑地址。通过页号可以找到对应的页框号,页框号指示了物理存储空间中的页框,页框号和页偏移拼接则可以得到物理地址。页表可以有多级,一个典型的二级页表如下图所示[3]:

在上图中,外部页表(也叫页目录)用于索引页表在物理存储空间中的基地址,而外部页表的基地址则存储在外部页表寄存器中。用基地址和偏移相加的方式可以对外部页表和页表进行索引。通过用外部页号作为偏移索引可以得到页表基址。在页表中通过用外部页内地址作为偏移索引可以得到逻辑页对应的物理页框号。物理页框号(b)和页内地址(d)拼接在一起可以得到物理地址。

由于页表存储于主存中且需要被经常访问,若处理器每次访问主存都要先访问主存中的页表则访存的时间开销很大,因此处理器一般为页表设计了专门的页面高速缓存,其中保存了常用的页表项。当页面高速缓存命中时,可以实现逻辑地址到物理地址的直接转换,节省了访问内存页表的开销;当页面高速缓存不命中时,仍然需要访问内存页表。

分页机制也支持访问控制。外部页表项和页表项中可以包含访问控制位,这些访问控制位可以控制进程对外部页表项和页表项的读写权限。

段页式分配方式结合了段式分配方式和页式分配方式,即在地址转换时,首先将逻辑地址用分段机制转换为线性地址,再对线性地址用分页机制找到对应的物理地址,一个典型的段页式地址转换机制如下图所示[1]:

其中逻辑地址为机器指令使用的地址,用于指定操作数或指令的位置。逻辑地址一般由段选择符和偏移量共同决定。通过段选择符可以找到段描述符[2],段描述符中包含段基址、段长和访问权限信息等段的性质。其中段基址加上偏移量的算术和就形成了线性地址。线性地址再通过分页机制找到对应的物理地址。

二、结语

本期我们介绍了处理器中地址转换和访问控制的一般概念,下一期中我们分析一下处理器的缓存机制。

参考文献

  1. 《深入分析Linux内核源代码》陈莉军编著

  2.  https://baike.baidu.com/item/RISC体系结构/4679327

  3.  https://www.jianshu.com/p/3558942fe14f

原创文章 1164 获赞 5546 访问量 136万+

猜你喜欢

转载自blog.csdn.net/devcloud/article/details/105601696