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

news2024/11/24 20:25:55

系列文章目录

目录

  • 存储器技术概要
    • 存储器层次
    • 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.coloradmin.cn/o/2236881.html

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

相关文章

python爬虫自动库DrissionPage保存网页快照mhtml/pdf/全局截图/打印机另存pdf

目录 零一、保存网页快照的三种方法二、利用打印机保存pdf的方法 零 最近星球有人问如何使用页面打印功能,另存为pdf 一、保存网页快照的三种方法 解决方案已经放在星球内:https://articles.zsxq.com/id_55mr53xahr9a.html当然也可以看如下代码&…

【Linux】进程概念与PCB,父子进程与foke函数

目录 一、进程概念: 描述: 组织: 二、Linux中的进程管理: 指令:ps ajx 三、父子进程: PID和PPID的调用查看: 四、创建子进程------fork: 一、进程概念: 首先&…

处理PhotoShopCS5和CS6界面字体太小

处理PhotoShop CS6界面字体太小 背景:安装PhotoShop CS6后发现无法调大字体大小,特别是我的笔记本14寸的,显示的字体小到离谱。 百度好多什么降低该电脑分辨率,更改电脑的显示图标大小,或者PS里的首选项中的界面设置。…

【Linux第八课-进程间通信】管道、共享内存、消息队列、信号量、信号、可重入函数、volatile

目录 进程间通信为什么?是什么?怎么办?一般规律具体做法 匿名管道原理代码 命名管道原理代码 system V共享内存消息队列信号量信号量的接口 信号概念为什么?怎么办?准备信号的产生信号的保存概念三张表匹配的操作和系统…

文件互传助手 v1.0

电脑和手机互传文件,经常需要找数据线,连着数据线还要下载安装手机助手,还要安装驱动识别手机,还要点手机那个连接模式,实在太麻烦了。 明明是一件简单的事情,往往需要很多层手续。有时会用到微信网页端作文…

Spring Boot 与 Vue 共筑航空机票预定卓越平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

面试总结!

OSI七层模型: 什么是OSI七层模型? 我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织&…

MATLAB实现智能水滴算法(Intelligent Water Drops Algorithm, IWDA)

1.智能水滴算法介绍 智能水滴算法(Intelligent Water Drops Algorithm,IWDA)是一种基于水滴特性的智能优化算法,它借鉴了水滴在自然界中的运动和形态变化规律,通过模拟水滴的形成、发展和消亡过程,实现问题…

RabbitMQ延迟队列(重要)

RabbitMQ延迟队列 1、延迟队列1.1、延迟队列使用场景1.2、延迟队列实现原理 2、使用rabbitmq-delayed-message-exchange 延迟插件2.1、下载2.2、安装2.2.1、解压2.2.2、启用插件2.2.3、查询安装情况 2.4、示例2.4.1、RabbitConfig配置类(关键代码)2.4.2、…

Tencent Hunyuan3D

一、前言 腾讯于2024年11月5日正式开源了最新的MoE模型“混元Large”以及混元3D生成大模型“Hunyuan3D-1.0”,支持企业及开发者在精调、部署等不同场景下的使用需求。 GitHub - Tencent/Hunyuan3D-1 二、技术与原理 Hunyuan3D-1.0 是一款支持文本生成3D(…

新品发布:广州大彩科技DB系列5.0寸带CAN/RS485外壳串口屏发布!

新品发布:广州大彩科技DB系列5.0寸带CAN/RS485外壳串口屏发布! 一、产品介绍 该产品是一款5寸的医疗级外壳系列组态串口屏,液晶屏采用800*480分辨率,拥有电阻触摸。硬件上针对工控行业,汽车行业串口使用RS485电平,并且另外加入了…

Js — 定时器

有两种:setInterval 和 setTimeout 间隔时间单位为毫秒 setInterval 每隔指定的毫秒数重复执行一个函数或代码 开启定时器:setInterval(函数,间隔时间) 作用:每隔一段时间调用这个函数 注意:它不是立即执行&#x…

WPF+MVVM案例实战与特效(二十六)- 3D粒子方块波浪墙效果实现

文章目录 1、案例效果2、案例实现1、文件创建2. 功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、 后端功能代码1、案例效果 2、案例实现 1、文件创建 打开 Wpf_Examples 项目、Models 文件夹下创建 3D粒子模型类 ParticleCubeWaveModel.cs 文件。在Tools 文件夹…

Linux命令 - linux索引节点、硬链接、软链接的介绍与使用

文章目录 1 索引节点inode2 硬链接Hard Link3 软链接Soft Link 1 索引节点inode 在Linux系统中,保存在磁盘分区中的文件,不管是什么类型,系统都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index&#xff0…

基于Python通过DOI下载文献(至简仅需2行代码)

文章目录 一、安装库二、导入库三、准备doi3.1 excel法3.1.1 检索数据3.1.2 导出excel 3.2 txt法3.3 列表or字符串法3.3.1 字符串3.3.2 列表 四、下载4.1 脚本4.2 下载成功4.3 已存在4.4 至于失败的 五、结果5.1 目标文件夹5.2 失败记录 一、安装库 pip install OAFuncs 二、导…

SpringBoot技术在企业资产管理中的应用

4系统概要设计 4.1概述 系统设计原则 以技术先进、系统实用、结构合理、产品主流、低成本、低维护量作为基本建设原则,规划系统的整体构架. 先进性: 在产品设计上,整个系统软硬件设备的设计符合高新技术的潮流,媒体数字化、压缩、…

OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示

当打开蓝牙后没有反应时,需要排查蓝牙节点是否对应、固件是否加载成功,本文介绍开源鸿蒙OpenHarmony4.1系统下适配蓝牙的方法,触觉智能SBC3568主板演示 修改对应节点 开发板蓝牙硬件连接为UART1,修改对应的节点,路径为…

招标采购系统(源码+文档+部署+讲解)

本文将深入解析“招标采购系统(供应商管理系统)”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 包含基础数据管理、供应商和专家库管理,还涉及招标代理机构、政策法规和文件模板的管理。…

javascript里面的blob和worker

目录 Blob 1. Blob的基本概念 2. 创建Blob 3. Blob的属性和方法 示例: 3.1. Blob 的方法 4. 使用Blob 4.1 创建对象URL 4.2 使用FileReader读取Blob 4.3 上传Blob 5. Blob与其他对象的关系 6. 释放Blob对象 7. Blob的应用场景 8. 总结 Web Worker 1.…

Android JNI 技术入门指南

引言 在Android开发中,Java是一种主要的编程语言,然而,对于一些性能要求较高的场景(如音视频处理、图像处理、计算密集型任务等),我们可能需要使用到C或C等语言来编写底层的高效代码。为了实现Java代码与C…