上一期中我们介绍了处理器的地址转换机制和访问控制机制,这一期我们将考察处理器中的缓存机制。

一、处理器的缓存机制

计算机中用于存储的硬件设备主要有寄存器、缓存、主存和磁盘,处理器访问它们的速度依次减小。由于处理器对于不同数据的访问有不同的速度要求,计算机中构建了层次化的存储结构。对访问速度要求最高的数据往往放在寄存器中,访问速度要求稍低但对存储容量要求更高的数据放在主存中,对访问速度要求最低但对存储容量要求最高的数据放在磁盘里。缓存作为寄存器和主存的中间层级,可以由一级或多级不同大小的SRAM构成。处理器访问缓存的速度比访问主存更快,使用缓存存储处理器频繁访问的数据可以减少处理器访问主存的次数,从而减少处理器访存消耗的时间。下表列出了2006年时各存储器层次结构的典型参数[1]:

对于具有缓存的计算机来说,处理器在访问主存前会先在缓存中寻找是否有对应的数据。缓存中包含的是主存中内容的一个子集。如果在缓存中找到了处理器需要的块,那么发生缓存命中,否则发生缓存缺失。读操作和写操作都有命中和缺失的现象。写入操作的缓存缺失被称为写入缺失。

缓存可以由多级组成,处理器访问高一级的缓存并发生缓存缺失时,就会访问低一级的缓存。在本文中,我们将CPU越优先访问的缓存称为越高级的缓存。通常低级的缓存比高级的缓存大,以捕获更多的存储器访问,减少缓存缺失。

缓存背后的原理是程序的局域性。计算机程序通常有两种局域性,即时域局域性和空域局域性。时域局域性指被访问的数据在不久的将来还可能被访问;空域局域性指被访问数据附近的数据有可能被访问。用缓存保存被频繁访问的数据集可以减少处理器访问更低级的缓存和主存的次数,从而减少访存时间。

主存中的数据集往往被分成固定大小的单元并存储于缓存中,这些单元被称为块。按照块的映射方式可以将缓存的组织方式分为直接映射、全相联和组相联。如果每个块只能被存储在缓存中的固定位置,那么该缓存采用的组织方式是直接映射;如果一个块可以被存储在缓存中的任意位置,那么该缓存采用的组织方式是全相联;如果一个块可以被存储在缓存中由有限个位置组成的组中,那么该缓存采用的组织方式是组相联。如果一个组中最多可以放置n个块,那么这种组织方式被称为n路组相联。下图给出了三种组织方式的示意图[1]:

为了检查缓存中是否存在对应的块,我们将处理器地址分为块地址和块偏移,块偏移用于块内的索引。块地址被进一步分解为标志位和索引。在组相联中,使用索引定位块可能在的组,然后对比标志位确定块是否存在于缓存中。直接映射可以看成是1路组相联。全相联组织方式中没有索引。处理器地址的分解方式如下图所示[1]:

当发生缓存缺失时,缓存控制器需要用期望数据替换一个已存在缓存中的块。如果采用直接映射的组织方式,则我们的选择是唯一的。在采用组相联和全相联的方式时,缓存中有多个可供选择的块,这时我们需要一个替换策略。常见的替换策略有:

  • 随机策略:在候选块中随机选择需要替换的块,使得被替换的块呈均匀分布。

  • 最近最少使用策略(LRU):在候选块中替换未使用时间最久的块,实现复杂度较高。

  • 先入先出策略(FIFO):在候选块中替换最早进入的块,用于近似最近最少使用策略。

缓存的写入策略有直写(write through)和写回(write back)两种。直写是指信息被写入缓存和低一级的存储器(可能是主存或低一级的缓存)。写回指信息只被写到缓存中,被修改的块在发生替换时才被写入主存储器中。直写策略的优势在于实现简单且易于维护数据一致性。写回策略的优势在于多次写同一个块时不必每次都访问主存,只在块替换时才一次性写回主存,从而节省存储器带宽。

当发生写入缺失时有写入分派(write allocate)和无写入分派(no-write allocate)两种策略。写入分派是指当发生写入缺失的时候,先将缺失块读入缓存中再写入命中。无写入分派指当发生写入缺失时不影响缓存中的内容,而只影响低一级的存储器(可能是主存或低一级的缓存)中的内容。写入分派通常与写回策略一起使用以捕获之后对同一个块的写入操作。无写入分派通常与直写策略同时使用,因为无论后续是否有对同一个块的写入操作,直写策略都要求写低一级存储器,从而使用写入分派的收益较低。

二、结语

本期我们考察了处理器的缓存机制,下一期中我们分析一下ARMv8-A架构中的地址转换机制和访问控制机制。

参考文献

《计算机体系结构量化研究方法(第五版)》

【华为云技术分享】处理器存储模型概述(2)相关推荐

  1. 【华为云技术分享】成熟度模型:企业规模化推广敏捷和DevOps利器

    摘要: 本文介绍了成熟度模型在软件开发行业的应用,重点阐述了成熟度模型对于敏捷和DevOps在企业中进行规模化推广的价值,探讨了成熟度模型的设计原则,并对于如何明智使用成熟度模型给出了建议. 导言 在 ...

  2. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  3. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  4. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  5. 【华为云技术分享】ARMv8-A存储模型概述(1)

    上两期中我们介绍了处理器存储模型的一般概念,这一期我们将介绍ARMv8-A架构中的地址转换系统. 一.VMSAv8-64地址转换系统 虚拟内存系统架构(Virtual MemorySystem Arc ...

  6. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  7. 【华为云技术分享】云小课 | 迁移第三方云厂商数据至OBS,两种方式任你选

    如何将我在第三方云厂商对象存储上的数据迁移至华为云OBS?华为云主要提供对象存储迁移服务(Object Storage Migration Service,OMS)和云数据迁移(Cloud Data ...

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

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

  9. 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)

    很多朋友有这样的顾虑:将资源存储在OBS之后,我的数据足够安全吗?能够灵活配置权限吗? 比如,甲只想把存储在OBS中的资源留给自己访问:乙想把资源分享给自己的某个朋友:丙想把资源共享的权限控制在固定时 ...

  10. 【华为云技术分享】云图说 | 初识华为云存储容灾服务:为您的云上数据保驾护航

    摘要:存储容灾服务是一种为ECS.DCC.EVS和DSS等提供跨AZ容灾的服务. 存储容灾服务(Storage Disaster Recovery Service,简称SDRS)是一种为ECS.DCC ...

最新文章

  1. Lesson 59-60 Househusband
  2. LINUX动态链接库的创建与使用
  3. LeetCode 71. 简化路径(栈)
  4. Android实习结束后的阶段性总结
  5. windows10怎么卸载计算机,win10易升,详细教您如何彻底卸载删除win10易升
  6. intelssd在linux固件升级,Intel固件升级教程修复320系列SSD 8M丢数据问题
  7. 人生没有退路,你所有遇到过的人,做过的事都不是偶然,一念天堂一念地狱
  8. nodeJS中express+busboy实现文件上传
  9. 回忆我的过去一年2020年考研以及研究生规划
  10. 云计算服务包括哪三种服务?怎么定义?
  11. 学计算机如何防辐射,如何防辐射?学这五招_39健康网
  12. Sue Shallow
  13. OneZero第三周第三次站立会议(2016.4.6)
  14. odoo服务器设置说明
  15. C、C++、java的区别
  16. 看了数据分析师的摆摊神操作,网友:这才叫专业
  17. C语言程序设计笔记(浙大翁恺版) 第十周:字符串
  18. 【黄敏聪|自由设计师系列1-基础篇】教程之二 |自由设计师走向成功最佳策略是什么?
  19. qq轻聊版打开后显示服务器返回数据错误,QQ轻聊版已从官方消失 腾讯难道反悔了?...
  20. 扑克牌猜数字游戏规则_【趣味游戏】扑克牌的10种益智玩法!

热门文章

  1. 十五.激光和惯导LIO-SLAM框架学习之惯导与雷达外参标定(1)
  2. Python笔记(2) Python基础
  3. 家用简单电线路图_电师傅电工总结的家用电器,漏电开关,电线配置知识,简单实用...
  4. Java之Integer源码
  5. 开源APM系统skywalking介绍与使用
  6. C# if---else---练习题整理
  7. model类中enum类型与数据库字段的映射
  8. .NET : 如何理解字符串和它的字节表现形式
  9. 登录后 可编辑页面 php,如何查找和编辑登录的php页面以及更改详细信息 - WordPress - srcmini...
  10. PAT乙级(1009 说反话)