《计算机原理与系统结构》学习系列——存储器(上)

系列文章目录

目录

  • 存储器技术概要
    • 存储器层次
    • cache,内存
    • 辅存
    • 存储器技术
      • SRAM技术
      • DRAM技术
      • 闪存
      • 磁盘存储器
    • 局部性原理
  • 高速缓存cache
    • 访存性能概念
      • 命中与缺失
      • 访存阻塞的周期数
    • cache基础:直接映射
      • 块号
      • 内存地址字段
      • 缺失
      • 缺失处理和写策略
    • 全相联映射
    • 组相连映射
      • 缺失处理
    • cache性能评价
    • cache一致性


存储器技术概要

存储器层次

  • 在存储器层次结构中,顶端:快贵小——底部:慢廉大
  • 三级存储结构:解决CPU和主存之间的速度不匹配问题
    • Cache——主存层次
    • 主存——外存层次

在这里插入图片描述


cache,内存

  • L1~L3:高速缓存cache通常集成在CPU中
    • 采用**静态随机访问存储器(SRAM)**集成电路
    • 双稳态触发器制造
    • 每B由6~8个晶体管组成,硬件规模较大
  • L4:内存,采用**动态随机访问存储器(DRAM)**集成电路
    • 使用电容保存电荷,进而存储数据
    • 每B仅使用1个晶体管,硬件规模远远小于SRAM(密度大于SRAM)
    • 由于电荷只能短暂留存,需要周期性地将一行上的数据读出后重新写入,完成刷新
    • 移动设备中的LPDDR5内存,全称为第五代低功耗双数据速率同步DRAM
      SRAM、DRAM在断电后很快丢失数据,称为易失性存储器(volatile memory)

辅存

  • L5:二级存储器或辅存(内存则称为一级存储器或主存)
    • 过去常使用磁盘,由一个覆盖着磁性材料的金属/玻璃盘片保存数据
    • 读写磁头紧挨着盘片,磁头中的电磁线圈通过感应磁性材料的磁场方向进行读取
    • 通过扭转磁性材料的磁场方向进行写入
    • 每个盘片由数万条磁道组成,每个磁道又被分为几千个扇区
  • 现在个人设备中更多使用闪存(flash)
    • 闪存是一种集成电路制造的电可擦除可编程只读存储器(EEPROM)
    • 与磁盘相比速度更快、更坚固、功耗更低,但写入次数过多会产生损耗
    • 机械硬盘属于磁盘,而U盘、固态硬盘都属于闪存
    • 一些系统还会使用光驱或网络服务器作为更低一级的辅存
      磁盘和闪存断电后不丢失数据,称为非易失性存储器(nonvolatile memory)

存储器技术

SRAM技术

  • SRAM是一种组织成存储阵列结构的简单集成电路,通常具有一个读写端口。虽然读写访间时间可能不同,但SRAM对任何数据访问时间都是固定的
  • SRAM不需要刷新,并且其访问时间与周期时间非常相近。为了防止读操作时信息丢失,SRAM 的 一个基本存储单元通常由6-8个晶体管组成。在空闲模式下,SRAM只需要最小的功率来保持电荷

DRAM技术

  • 而在动态RAM(DRAM)中,存储单元使用电容保存电荷的方式来存储数据。为了对保存的电荷进行读取或写入,使用一个晶体管对该电容进行访问。因为DRAM存储每一位都只使用一个晶体管,所以它比SRAM密度要高得多,且价格也要便宜很多。由于DRAM在电容上保存电荷,因此不能长久地保持数据,从而必须周期性地刷新。与静态存储器 SRAM 相比,这就是将该存储结构称为动态的原因。
  • 为了对单元进行刷新,只需要读出其内容然后写回即可。DRAM单元中的电荷可以保持几微秒。如果 DRAM中的每个比特位需要独立的读出后写回,则必须不停地进行刷新操作,这将导致没有时间可用千正常的访问操作。幸运的是,DRAM 采用了一种两级译码结构,可以通过在一个读周期后紧跟一个写周期的方式一次刷新一整行( 一行单元共用一个字线)

在这里插入图片描述

闪存

  • 闪存是一种电可擦除的可编程只读存储器 (EEPROM )
  • 与磁盘和 DRAM 不同,而与其他 EEPROM 技术类似,对闪存的写操作可以使存储位损耗。为了应对该限制,大多数闪存产品都有一个控制器,用来将写操作从已经写入很多次的块中映射到写入次数较少的块中,从而使写操作尽数分散。这种技术称为损耗均衡(wear leveling)。采用损耗均衡技术,个人移动设备很难超过闪存的写极限。这种均衡技术虽然降低了闪存的潜在性能,但是不需要在高层次的软件中监控块的损耗情况。闪存控制器的这种损耗均衡也将制造过程中出错的存储单元屏蔽掉,从而提高其成品率。

磁盘存储器

  • 每个磁盘的表面划分为同心圆盘,称为磁道(track)。每个面通常有几万条磁道。每条磁道同样被划分为用于存储信息的扇区(sector);每条磁道有几于个扇区。每个扇区的容量通常是512-4096 字节。信息在磁介质上保存的顺序为扇区号、一个间隙、包含该扇区纠错码的信息 、一个间隙、下一扇区的扇区号
  • 访问每个盘面的磁头连在一起相互协调运动,因此每个盘面的磁头位千相同的扇区。术语柱面用来表示磁头在给定点时访问到所有盘面上的所有扇区的集合。为了访问数据,操作系统必须对磁盘进行三步操作:第一步是将磁头移动到适当的磁道之上,这称为寻道 ( seek),将磁头移动到目标磁道所需的时间称为寻道时间
  • 一旦磁头到达了正确的磁道,就必须等待要访问的扇区转动到读写头下面。该等待时间称为旋转延时 (rotational latency) 。平均延时通常是磁盘转动一周时间的一半
  • 磁盘访间的最后一部分是传捡时间,即传输一块数据需要的时间。传输时间是扇区大小、旋转速度和磁道信息密度的一个函数
    在这里插入图片描述

局部性原理

程序正在执行某条指令

  • 如果这条指令位于循环体中,那么这条指令可能不久之后再次被访问——时间局部性
  • 如果在循环体或顺序指令流中,那么将要执行的指令往往地址相近——空间局部性
  • 时间局部性和空间局部性统称为局部性原理

程序在某一时间真正需要的指令/数据往往只占整个程序内存空间的一小部分,并且程序在使用一个指令/数据字的时候,即将使用的指令/数据通常在内存中相近的位置,因此,可以将内存中的一小块放入更小、更快的上级存储器——cache中,让CPU快速取用数据


高速缓存cache

访存性能概念

命中与缺失

访存即访问内存,分为读取内存和写入内存,访存指令=MEM-reg数据传送指令=L-S指令,即Iw和sw指令CPU访问内存时,都会优先询问cache是否保存着所需数据

  • 如果访问数据在cache中,就称为一次cache命中(hit)
  • 但是这种预测不会永远满足,例如程序跳转到很远的距离之外,cache并不包含所需数据,CPU则需要访问慢得多的内存,此时产生一次cache缺失(miss)

命中/缺失占访存次数的·比例叫做命中率(hit rate)/ 缺失率(miss rate)
CPU访问内存数据,要么在cache中访问命中,要么缺失,因此 缺失率 = 1 - 命中率
MR = 1 - HR

访存阻塞的周期数

  • CPU访问cache的时间称为命中时间(hit time),通常只有1T
  • CPU访问内存比访问cache多出来的时间称为缺失代价(miss penalty),长达数百T

定义一个程序的L-S指令数目为访存次数MAC(memory access count)
定义程序中的L-S指令占总指令数的比重为访存率MAR(memory access rate)
为了评价存储器性能,我们将程序执行的周期数cycles分为CPU执行周期数+访存阻塞周期数两部分
访存阻塞周期数 = 访存次数 x 缺失率 x 缺失代价 cycles = MAC x MR x MP


cache基础:直接映射

块号

内存和cache被划分为一些大小相同的块,内存中的块数远大于cache中的块数
假设cache拥有8个块(编号0-7),内存拥有256个块(编号0~255)
cache块号 = 内存块号 % cache 块数
在这里插入图片描述

内存地址字段

我们可以将内存地址分为3段
①cache块号之前 ②cache块号 ③cache块号之后

  • cache块号之后的部分用于指定访问块中具体哪一字节,称为③块内(字节)偏移
  • cache块号用于决定放入哪个cache块中,相当于一个标签,称为②索引位(index)
  • 但是cache为了确定一块具体是哪个内存块,处理索引位,还需要所以索引位之前的高位地址,这个高位地址结合索引号,可以唯一标记以恶搞内存块,称为①标记位

我们还需要一种方法来判断 cache 块中确实没有包含有效信息。例如,当一个处理器启动时,cache中没有数据,标记域中的值没有意义。甚至在执行了一些指令后,cache中的一些块依然为空。因此,在cache中,这些块的标记应该被忽略。最常用的方法就是增加一个有效位(valid bit)来标识一个块是否含有一个有效地址。如果该位没有被设置, 则不能使用该块中的内容
在这里插入图片描述

缺失

根据产生原因,缺失分为以下三类:
首次访问cache中没有的块必然产生缺失,称为冷启动强制缺失
②由于cache容量不能容纳程序执行需要的所有块,部分块被替换后调入cache称为容量缺失
多个内存块竞争映射到同一个cache块中导致仍需使用的块的替换,称为冲突碰撞缺失
三个原因导致的缺失称为3C模型

  • 适当增加块大小(同时也会减少块数)可以更好利用空间局部性,显著减少强制缺失
  • 加大容量可以改善容量缺失,但是随着块数不断减少,则会因为竞争替换过于频繁,增加冲突碰撞缺失并且,更大的块意味着传输一块数据的时间更长,缺失代价上升

缺失处理和写策略

cache访问缺失数据处理步骤为:

  1. 将PC+4-4并写回PC,阻塞处理器
  2. 访问内存,将内存块写入cache
  3. 再次访问cache

当CPU把新数据写入内存块时,又要把数据写到cache,保持内存和cache内容一致

  • 方式一:CPU写cache时同时开始写内存,称为写直达(write through),这种方式的处理器开销也接近访存时间,意义不大,因此,可改进为写缓冲,CPU较快写入缓冲后执行别的任务,由缓冲慢慢将数据写到内存(如果写入的数据特别多也会出现问题)
  • 方式二:CPU只写入cache,仅当这个cache块被索引位相同的其他块替换出去时才将修改后的cache块写入内存,称为写回(write back)
  • 写缓冲只是对写直达的必要改进,不是写直达和写回之外的方式三

全相联映射

直接映射中,一个内存块只能映射到唯一的cache块,实现比较简单
另一种极端的情况是,内存块可能映射到任何一个cache块,称为全相联映射

  • 第一个内存块可进入任何一个cache块,只要cache没满,其他块就可以见缝插针
  • 如果cache已满,则替换掉最长时间没有使用过的内存块,这种替换算法称为最近最少使用(least recently used,LRU)
  • 和直接映射相比,要使用的块更不容易被替换出去,缺失率更低,但是查找时需要比较每一块的标记位,开销过大,只适用于块数较少的cache
  • 全相联有没有索引位,全相联中的碰撞缺失实际转化为容量缺失

在这里插入图片描述

组相连映射

对于全相联映射,比较标记位的开销太大,有一种折中的办法,对cache进行分组,一个内存块直接映射到一个组。但是分配到哪一块较为自由,也就是在一组之内全相联这样的映射策略称为组相联映射

一组包含n块则称为n路组相联,其相联度为n

组相联中的内存映射计算: cache组号 = 内存块号 % cache组数

对于 2 n 2^n 2n组的cache,cache组号 = 内存二进制块号的后n位

缺失处理

全相联和组相联的缺失处理和直接映射相同,也都可以采用写直达和写回
替换是,选择最近最少使用(LRU),我们可以用1位编号记录2路组相联一组中最久没用的块,用2位来编号记录4路组相联,以此类推,这个编号称为LRU


cache性能评价

平均访存时间有时用周期数表示,不必化成秒
平均访存时间 = 命中时间 + 缺失率x缺失代价


cache一致性

假设一个双核CPU,每个核心拥有自己的cache,采用写直达策略。当A核向某一内存单元写入自己cache A的一个内存块时,B核对相应内存块进行读取。为了确保B核能读到A核写入这一块的内容,需要某种机制确保A核完成写入内存后,B核才能读取,从而确保两个处理器核心看到数据的一致性(coherence)

  • 最常用的cache一致性协议是监听(snooping)协议
    • A核开始写入内存时,释放信息告诉其他核心:正在写入,请勿读取
    • B核监听到这种信息,从而暂停读取内存块以及cache B中的对应块,这称为写时无效协议(write Incalidate protocol)
  • 如果A核和B和需要同时写入一个内存块,则必须有某种机制,使得两个处理器的写操作一前一后,这种机制叫做写串行化(write serialization)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github高分项目 WGCLOUD - 运维实时管理工具

GitHub - tianshiyeben/wgcloud: Linux运维监控工具,支持系统硬件信息,内存,CPU,温度,磁盘空间及IO,硬盘smart,GPU,防火墙,网络流量速率等监控,服务接口监测&…

A021基于Spring Boot的自习室管理和预约系统设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【EasyExcel】EasyExcel导出表格包含合计行、自定义样式、自适应列宽

目录 0 EasyExcel简介1 Excel导出工具类设置自定义表头样式设置自适应列宽添加合计行 2 调用导出工具类导出Excel表3 测试结果 0 EasyExcel简介 在数据处理和报表生成的过程中,Excel是一个非常常用的工具。特别是在Java开发中,EasyExcel库因其简单高效而…

2024年11月09号Drawing Memory Models Review 2

So lets start with a piece of code that well be thinking about and take a few seconds to read it carefully and try to explain, in your own words, what this piece of code does.

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二) 一、前言 目前鸿蒙应用的实现逻辑,基本都是参考和移植Android端来实现。针对BLE低功耗蓝牙来说,在鸿蒙化的实现过程中。我们发现了,鸿蒙独有的优秀点&#xff0c…

2024年【流动式起重机司机】模拟考试及流动式起重机司机证考试

题库来源:安全生产模拟考试一点通公众号小程序 流动式起重机司机模拟考试考前必练!安全生产模拟考试一点通每个月更新流动式起重机司机证考试题目及答案!多做几遍,其实通过流动式起重机司机模拟考试题很简单。 1、【多选题】( )和…

混合搜索与多重嵌入:一次有趣又毛茸茸的猫咪搜索之旅!(二)

这是继上一篇文章 “混合搜索与多重嵌入:一次有趣又毛茸茸的猫咪搜索之旅!(一)” 的续篇。这这篇文章中,我们讲使用本地 Elasticsearch 部署来完成整个演示。这是一个简单的 Python Web 应用程序,展示了可…

算法【Java】—— 动态规划之路径问题

前言 本文章终点解析第一道题目【不同路径】和最后一道题目【地下城游戏】的动态规划思路,中间几道题目会很快过完,大家如果不熟悉动态规划的思路可以重点看一下这两道题目的解析。 不同路径 https://leetcode.cn/problems/unique-paths 解析&#xf…

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

本文目录索引 一个指令和三种方式通过约束脚本添加Golden位流工程MultiBoot位流工程验证example1总结代码缩略词索引: K7:Kintex 7V7:Vertex 7A7:Artix 7MB:MicroBlaze上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我…

jmeter基础02_下载安装jmeter

(安装包windows、mac、Linux通用) Step1. 官网下载 官网地址:https://jmeter.apache.org/download_jmeter.cgi 官网可见最新版本的jmeter和要求的jdk版本,先说结论:建议下载Binaries-zip格式包即可。 安装包有2大类&am…

理解鸿蒙app 开发中的 context

是什么 Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区…

Linux:git的了解和基础使用(保姆级教程)

文章目录 引言一、git是什么1.1 版本控制器git1.2 git的历史 二、git的使用2.1 安装git2.2 创建gitee账号2.3 git三板斧2.3.1 add2.3.2 commit2.3.3 push 三. git的补充总结 引言 git是一款软件,它用于帮助我们来管理代码以及文件,掌握并使用git可以很有…

探索LINQ在C#中的应用:从基本查询到数据联接

LINQ(语言集成查询)是微软为.NET框架开发的一种强大功能,于2007年作为C# 3.0和Visual Basic .NET 9.0的一部分引入。LINQ的诞生旨在提供一种一致且直观的方式来查询和操作数据,无论数据来源是内存中的集合、数据库还是XML文档。 …

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问:您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么,还是需要通过其他方式来实现。 针对这位粉丝朋友的提问,我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…

搭建轻量级文件服务器Dufs

前言 Dufs是什么? 答:是一款轻量级文件管理服务器,类似于FTP服务器但又比FTP更好用易于管理。 Dufs有什么特性? 答: ‌静态文件服务…

【软考】系统分析师第二版 新增章节 第20章微服务系统分析与设计

微服务系统是一类基于微服务架构风格的分布式系统,它将应用程序拆分成多个独立的小型服务,每个服务都运行在独立的进程中,并采用轻量级通信协议进行通信。这些服务可以由不同的团队开发、不同的编程语言编写,并且可以按需部署。微…

基于SSM的校园美食交流系统【附源码】

基于SSM的校园美食交流系统 效果如下: 管理员主页面 用户主页面 美食信息页面 美食资讯页面 修改密码页面 论坛中心页面 研究背景 随着高校信息化建设的不断推进,校园生活日益丰富多样,学生对于美食的需求与探索也愈发旺盛。然而&#xff…

PICO+Unity MR空间网格

官方链接:空间网格 | PICO 开发者平台 注意:该功能只能打包成APK在PICO 4 Ultra上真机运行,无法通过串流或PICO developer center在PC上运行。使用之前要开启视频透视。 在 Inspector 窗口中的 PXR_Manager (Script) 面板上,勾选…

斗破QT编程入门系列之前言:认识Qt:获取与安装(四星斗师)

本系列是在学习完C之后,然后通过Qt构建界面来,赋予枯燥的代码新的样貌,这样我们才能开发出更人性化的程序,同时会进一步提高初学者对编程的兴趣,大家加油,斗破Qt来了。 斗破Qt目录: 斗破Qt编程…

PyTorch核心概念:从梯度、计算图到连续性的全面解析(三)

文章目录 Contiguous vs Non-Contiguous TensorTensor and ViewStrides非连续数据结构:Transpose( )在 PyTorch 中检查Contiguous and Non-Contiguous将不连续张量(或视图)转换为连续张量view() 和 reshape() 之间的区别总结 参考文献 Contig…