26考研 | 王道 | 计算机组成原理 | 三、存储系统

26考研 | 王道 | 计算机组成原理 | 三、存储系统

文章目录

  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
    • 3.1 存储系统基本概念
    • 3.2 主存储器
      • 1. 主存储器的基本组成
      • 2. SRAM与DRAM
        • 1.DRAM和SRAM对比
        • 2.DRAM的刷新
        • 3.DRAM的地址线复用技术
      • 3. 只读存储器ROM
      • 4.双端口RAM和多模块存储器
    • 3.3 主存储器与CPU的连接
      • 1.位扩展
      • 2.字扩展
      • 3.字位同时扩展
    • 3.4 外部存储器
      • 1. 磁盘存储器
        • 磁盘阵列
      • 2. 固态硬盘SSD
    • 3.5 高速缓冲存储器
      • 1.基本原理
      • 2.Cache和主存间的映射方式
      • 3. Cache的替换算法
      • 4. Cache写策略

3.1 存储系统基本概念

image-20250601163809904

相联存储器的基本原理是指把存储单元所存的内容的某一部分作为检索项去检索该存储器,并把存储器中与该检索项符号的存储单元内容进行读出和写入。所以是按内容或者地址进行寻址的,价格比较昂贵

一般用来制作TLB,相联Cache等

存储器的层次化结构

image-20250601154010601

主存和辅存之间的数据调动是由硬件和操作系统共同完成的,仅对应用级程序员透明

存储器的分类–层次

image-20250601154320686

存储器的分类–存储介质

  • 半导体存储器:主存、Cache
  • 磁表面存储器:磁盘、磁带(以磁性材料存储信息)
  • 光存储器:光盘(以光介质存储信息)

image-20250601154402778

存储器的分类–存取方式

image-20250601154641494

相联存储器既可以按地址又可以按内容寻址。

存储器的分类–信息的可更改性

image-20250601154746479

CD-ROM是只读型光盘存储器,不属于只读存储器ROM

存储器的分类–信息的可保存性

image-20250601154850604

RAM都是易失性存储器;

ROM都是非易失性存储器;

存储器的性能指标

image-20250601163732877

3.2 主存储器

1. 主存储器的基本组成

image-20250601165951634

基本的半导体元件及原理

在这里插入图片描述

注:MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通。

存储器芯片的基本原理

image-20250601164552496

image-20250601164840269

image-20250601165149162

片选线作用:一个内存条可能包含多块存储芯片,比如一共8块,而我们想要的数据存在第5块芯片里面,那么我们拿数据的时候就要让第5块芯片工作而其他的不工作。CS给予低电平,其他芯片为高电平。

译码驱动:其实就是在译码器和存储矩阵中间加了一个驱动,让译码器传过来的电信号更加稳定的

image-20250601165640202

寻址

字节地址左移两位就是对应的字的地址

比如1号字节是 1,左移两位就是100,就是4,而按字寻址的编号2对应的就是字节寻址的编号4

2. SRAM与DRAM

image-20250601170332933

SDRAM依旧是DRAM,所以依旧要刷新的

1.DRAM和SRAM对比

3.2.1 的主存储器的基本组成部分就是那DRAM举例子的,可以回看一下

RAM属于易失性半导体,SRAM和DRAM区别在于是否需要动态刷新

image-20250601170434704

DRAM芯片:使用栅极电容存储信息

SRAM芯片:使用双稳态触发器存储信息

双稳态触发器这个图做个了解就行

image-20250601170908072

image-20250601170940974

image-20250601172524778

SDRAM是同步DRAM芯片,与传统的异步DRAM不同。SDRAM与CPU的数据交换同步与时钟信号,并且以CPU-主存总线的最高速度运行,而不需要等待插入状态

而传统的DRAM中,CPU将地址和控制信号送入存储器后,需要经过一段延迟时间数据才能读出或者写入。在此期间,CPU不断采样DRAM的完成信号,在读写完成前,CPU不能干别的,降低了CPU的执行速度

而SDRAM在系统时钟控制下进行数据的读出和写入,它将CPU发出的地址和控制信号锁存起来,经过指定的时钟周期后再响应,此时CPU可以执行别的操作

2.DRAM的刷新

image-20250601171147143

image-20250601171402480

为什么要用行列地址(二维)?而不是用行地址或者列地址(一维)?

如果是一维的话,加入地址线有20位,那就需要220这么多个选通线才能连接到对应的存储单元

但如果是二维的话,即有行和列来确定一个存储单元,那行和列分别只需要210个选通线即可

即可以减少选通线的数量,使得电路变得简单和清晰

image-20250601171739449

image-20250601172123184

分散刷新不存在死区,因为把刷新时间算到存取周期里面去了,所以存取周期会变长。

异步刷新虽然缩短了死时间,但是死时间依然存在

CPU可以在死区时间的时候去做运算(比如译码阶段),然后不是死区的时间来读写

一次完整的刷新过程只需要占用一个存取周期(书上P93页15题)

3.DRAM的地址线复用技术

image-20250601172347484

行/列缓冲器通常使用SRAM实现

同时送行列地址,需要8根地址线。两次送只需要4根地址线。

地址线复用技术:地址线是原来的1/2(行和列相等)且地址线分行、列两次传送。第一次送行地址到行地址缓冲器,第二次送列地址到列地址缓冲器,然后分别送到对应的译码器。

突发传输方式:在寻址阶段给出数据的首地址,在传输阶段可传送多个连续存储单元的数据

3. 只读存储器ROM

RAM和ROM可以统一编址。比如主存就是

image-20250601173735085

易失性说的是断电后数据会消失

EPROM不能作为随机存储器。

UVEPROM要擦除只能选择全部擦除或者不擦除,不能擦一部分剩下的不擦除

闪存存储元件由MOS管组成,是一种半导体存储器,采用随机访问方式,可替代计算机外部存储器

image-20250601173604671

image-20250601173630401

说主存不是光有内存条这个RAM,还有主板上的ROM芯片,也是主存的一部分

4.双端口RAM和多模块存储器

image-20250601202437306

单纯的扩容的意思是说,高位交叉编制没有加快访存的速度,即CPU在恢复时间内不能访问正在恢复的内存条的情况没有被改善,而低位却有效改善了这个问题,加快了访存速度

image-20250601173956007

image-20250601200007328

image-20250601200333877

image-20250601201003341

连续访问者五个地址的数,分别是编号0,1,2,3,4

对于高位编址来说,这五个数据都在M0内存条上,而读或写完一个数据以后就要等待恢复时间,所以花费的时间就长很多

而对于低位编址来说,0在M0,1在M1,2在M2,3在M3,4在M1。那我们花r的时间读完M0上面的0就可以立马去读M1上的1,而不需要等M0恢复,从而节省了很多的时间。

为什么讨论的是连续访问(连续地址)的情况?因为很多情况下就是访问连续的地址比如数组

image-20250601201618658

m=T/r的时候就是完美衔接,这个时候就是最好的情况,没有闲置也不用等待,而且存储体的个数也最少,成本就低

image-20250601202410484

对于灵活性来说,多体比单体好一些,比如读取,2,3,4,5这四个存储单元的数据

多体会直接读取这四个,而单体就会把第一行和第二行全给读下来,那么0,1,6,7这四个就是多读的,其实不太需要这四个

对于速度而言,两者相差不大

对于上面的多体,有m个存储体,而m=T/r的时候最好,在一个存取周期T内也是读出m个字

对于下面的单体,每个存储单元有m个字,在一个存取周期T内一次也是读出m个字

image-20250601203253718

相同主频:主频不一样的话,高的主频会向下兼容,和低的主频保持一致,这样其实就相当于白花了很多钱

相同容量:在两者容量相同的地方,还是双通道,但是在低容量没有了的地方,而高容量内存条还有内存的地方,那其实就相当于单通道了。用游戏来说的话,如果正好放在了低地址的地方,即双通道的地方,那运行速度就快,但是如果不巧被放到了高地址的地方,那就还是单通道,性能会很不稳定

如图:左边只有三个存储单元,右边有8个,就会出现上面的情况

image-20250601203656539

3.3 主存储器与CPU的连接

image-20250601211550983

image-20250601204050951

现在的计算机MAR、MDR都在CPU中,而不再主存中

8K*8位含义

8K是存储单元数量,是213,需要13根地址线

8位是每个存储单元存储的bit位数

image-20250601204206712

image-20250601204446033

1.位扩展

image-20250601204934248

image-20250601205036480

2.字扩展

image-20250601205322533

用这种方法,CPU有n条多余的地址线,只能有n个片选信号

并且把两块芯片看做一个整体的话,那么开头的地址只能为01或者10,不能用00或者11

可以做如下的优化(译码片选法),就是在第二块的片选线上加个非门,这样的话地址空间就是连续的了,从全0到全1都可以用了

image-20250601205954293

image-20250601210246620

考试可能不选A13和A14这两个连着的,可能选A13和A15作为译码器的输入,那么A14是多少就无关紧要了

那么就会发现多出来了一倍的地址,全都映射到这四块芯片中了,而四块芯片肯定装不下,所以实际中不可能用这种设计

image-20250601210311001

image-20250601210553156

3.字位同时扩展

image-20250601210911202

一共四组芯片,一组2个芯片。

1.原来是一块芯片,16K*4位

2.位扩展得到每组的芯片个数,就是目标位数除以单个芯片的位数,8/4=2,所以每组是2个新盘

经过位扩展后,变成一组芯片,16K*8位

3.字扩展得到一共要几组,就是目标存储单元数量除以一组的单元数量,64K/16K=4,那么一共需要4组

经过字扩展后,把16K*8位变成64K*8位的

image-20250601211856723

image-20250601212032748

有3个使能信号,那么必须同时满足才可以工作,有一个不满足就不可以工作
也就是只有100才会正常工作,而其他的001,101之类的都是非法信号,会让所有的结果都为0,再取反那就都是1然后输出出去了

这样可以让CPU使用使能端控制片选信号的生效时间

image-20250601212414832

MREQ,低电平有效,主存请求信号, 当CPU想要访问主存的时候就会让它有效

它有效才会让译码器使能,也就是让译码器有效

CPU访存是这样的:

1.先发送出去地址信号,由于地址信号都是电信号,所以要先等一下让它稳定

2.等到地址信号稳定以后让MREQ有效,然后片选线才会有效

这样保证了主存收到的地址信号一定是稳定的

对于左下角的图,中间有上上下下的,那说明传过去的电信号有1有0,就是有高电平也有低电平

上面提到,发送出去地址信号以后会等一段时间。所以图中地址有效的时候CS并不是立马开始有效,而是中间间隔了一段时间才开始有效,这中间这段时间就是等待的时间。然后在地址有效时间Tco内把数据输出出去。

注:灰色的部分是无效的地方,白色的地方才是有效的地方

3.4 外部存储器

1. 磁盘存储器

image-20250602173738027

image-20250602170248404

image-20250602170448167

1、磁盘设备的组成

image-20250602170927901

2、磁盘的性能指标

image-20250602172157476

rN是一个理论最大值

image-20250602171459462

格式化容量会有一部分容量用于别的用途,而非格式化容量是该磁盘的二进制bit存储上限,所以格式化容量比非格式化容量要小

每个磁道记录信息的信息量是相同的,并不是圆的半径越大信息量越多

image-20250602172039873

磁盘控制器延迟:(有的题有,有的题没有)电子部件接收主机信号,然后向磁盘发出读写信号的时间

image-20250602172537266

如果数据是并行传给磁盘的,那在这之前还要经过一个串并行转换电路才行,因为磁盘只能串行的工作

磁盘阵列

image-20250602173626699

越后面的磁盘阵列信息冗余越少,安全性和可靠性越高,成本也越低

image-20250602173237775

RAID0:就是RAID0是一个逻辑盘,是通过磁盘1和磁盘2映射而来,比如RAID0的第一个存储单元的数据存放在磁盘1的第一个单元和磁盘2第一个单元,那我们读取逻辑盘的时候就相当于有两个磁盘同时为我们工作,可以实现并行访问,提高速度

但如果物理磁盘有比特跳变之类的错误的话,RAID0也发现不了

RAID1:存了两份一样的数据,那就是有冗余了,两份可以对比着看,有错误可以发现,所以是有校验的。也实现了并行访问,但是存储空间有些浪费

image-20250602173433649

0-3只存储比特数据,4-6存储校验数据

这样的话浪费的空间没有RAID1那么多

2. 固态硬盘SSD

image-20250602175002356

image-20250602174707438

image-20250602174135625

闪存芯片可以分为很多块,每个块可以分为很多页

每个块相当于磁盘中的磁道,每个页相当于磁盘中的块/扇区

也就是说SSD的读写的基本单位是页也不是块

image-20250602174945174

3.5 高速缓冲存储器

1.Cache里面存储的是主存的副本。所以如果Cache有40KB,主存有200MB

那存储系统的容量还是200MB,而不是200MB+40KB,因为Cache存的仅仅是副本而已

2.Cache访问失效的时候,通常不仅要像CPU传递消息,还要将信息写入Cache,传递消息的数据宽度是字,写入信息的数据宽度是块。

CPU与cache或者主存信息信息交互的单位是字,而Cache与主存间信息交互的单位是块

3.Cache的功能全部由硬件实现

4.多级cache中,算缺失率的时候,只需要看到最低一级的cache的时候还有多少没有命中

5.Cache中地址映射表的大小就是(有效位+标记位)*块数

6.逻辑地址的页和物理地址的块对应,映射的话就是逻辑的页映射到物理的块上面去

7.对于有高速缓存,主存,硬盘构成的三级存储体系,CPU直接根据主存物理地址进行访问

8.image-20250605201050911

标记位前面可能还有有效位、脏位、替换控制位,通过这四个位来算Cache除了数据部分还有得有多少的容量

不管什么方法都会有有效位,写回法一定会有脏a位。替换控制位很少见

9.组相联映射中,是几路组相联就有几个比较器。这个比较器是来看给出的主存地址具体在组内的哪个块

所以 比较器里面存的就是标记位(不包含组号),因为一组有 的块数和路数相同,所以比较器的个数就是和路数相同的,一共要比较的次数也和路数一样

1.基本原理

image-20250602211304010

image-20250602205157410

image-20250602210202690

按照行优先存储的,如果循环体按照列优先进行访问的话,那么会比按照行优先进行访问的慢很多,因为按照行优先会有很多地址可以映射到cache中

image-20250602210641791

image-20250602210823148

image-20250602211058779

image-20250602211220115

2.Cache和主存间的映射方式

image-20250602213029735

image-20250602212126065

image-20250602212416219

image-20250602212711225

其实就是主存容量是Cache的多少倍,如果主存容量是cache的4096=212倍,那么标记位数就是 12

也就是得标记4096个位置才行

比如图中的标记位数就是 256MB/(8*64B)=219

有效位和标记位组成地址映射表,其大小就是(有效位数+标记位数)* cache块数

image-20250602212802971

image-20250602212923576

image-20250602213002984

3. Cache的替换算法

image-20250602214715709

image-20250602213420788

image-20250602213550902

image-20250602214014188

image-20250602214051651

image-20250602214125073

image-20250602214237061

image-20250602214305898

image-20250602214551003

4. Cache写策略

image-20250602224028486

image-20250602223356639

image-20250602223601159

image-20250602223515516

阻塞的意思是cpu必须阻塞等待

image-20250602223734924

image-20250602223805693

image-20250602223854440

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

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

相关文章

IDEA 开发PHP配置调试插件XDebug

1、安装PHP环境 为了方便,使用的PhpStudy。 安装路径:D:\resources\phpstudy_pro\Extensions\php\php7.3.4nts 2、下载Xdebug Xdebug: Downloads 选择对应的版本下载,本次使用的是7.3。 3、配置Xdebug 在php.ini中添加Xdebug配置。 D…

Go 语言的 GC 垃圾回收

序言 垃圾回收(Garbage Collection,简称 GC)机制 是一种自动内存管理技术,主要用于在程序运行时自动识别并释放不再使用的内存空间,防止内存泄漏和不必要的资源浪费。这篇文章让我们来看一下 Go 语言的垃圾回收机制是如…

60天python训练计划----day45

DAY 45 Tensorboard使用介绍 知识点回顾: tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战:MLP和CNN模型 之前的内容中,我们在神经网络训练中,为了帮助自己理解,借用了很多的组件&#x…

RocketMQ基础概念的理解

1、生产者 生产者和主题之间存在多对多关系。一个生产者可以向多个主题发送消息,一个主题可以接收来自多个生产者的消息。这种多对多关系有助于提高性能扩展和灾难恢复能力。 2、消费者以及消费者组 一个队列可以被多个消费者(其中这多个消费者必须分…

Flash烧录速度和加载配置速度(纯FPGA ZYNQ)

在工程综合完成或者implement完成后,打开综合设计或者实现设计。 toots--->Edit Device Properties--->打开比特流设置 将bitstream进行压缩 上图中,时钟频率选择的档位有限,最大为66MHZ io的bus width可以设置为x1,x2,x4 vivado在设计…

优化09-表连接

一、表连接介绍 表连接类型 表连接是关系型数据库关键特性,在关系型数据库中,表连接分为三类:循环嵌套连接(Nested Loops Join)、哈希连接(Hash Join)、合并排序连接(Merge Sort J…

Dify工作流实践—根据word需求文档编写测试用例到Excel中

前言 这篇文章依赖到的操作可查阅我之前的文章: dify里的大模型是怎么添加进来的:在Windows本地部署Dify详细操作 flask 框架app.route()函数的开发和调用:PythonWeb开发框架—Flask工程创建和app.route使用详解 结构化提示词的编写&…

AWTK 嵌入式Linux平台实现多点触控缩放旋转以及触点丢点问题解决

前言 最近涉及海图的功能交互,多点触摸又开始找麻烦。 在PC/Web平台awtk是通过底层的sdl2库来实现多点触摸,但是在嵌入式Linux平台,可能是考虑到性能原因,awtk并没有采用sdl库来做事件处理,而是自己实现一个awtk-lin…

Diffusion Planner:扩散模型重塑自动驾驶路径规划(ICLR‘25)

1. 概述 2025年2月14日,清华大学AIR智能产业研究院联合毫末智行、中科院自动化所和香港中文大学团队,在ICLR 2025会议上发布了Diffusion Planner——一种创新性的基于Diffusion Transformer的自动驾驶规划模型架构。该系统联合建模周车运动预测与自车行…

ESP32对接巴法云实现配网

目录 序言准备工作巴法云注册与使用Arduino准备 开发开始配网 序言 本文部分内容摘抄原创作者巴法云-做优秀的物联网平台 代码有部分修改并测试运行正常 巴法云支持免费用户通过开发对接实现各智能音箱设备语音控制智能家居设备,并有自己的App进行配网和控制&…

深度学习习题3

1.训练神经网络过程中,损失函数在一些时期(Epoch)不再减小, 原因可能是: 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务,我们不是将神经网络中的随机权重…

【EasyExcel】导出时添加页眉页脚

一、需求 使用 EasyExcel 导出时添加页眉页脚 二、添加页眉页脚的方法 通过配置WriteSheet或WriteTable对象来添加页眉和页脚。以下是具体实现步骤: 1. 创建自定义页眉页脚实现类 public class CustomFooterHandler implements SheetWriteHandler {private final…

c++ 类型转换函数

测试代码&#xff1a; void testTypeTransfer() { // 测试类型转换函数class Distance {private:int meters;public:// 类型转换函数&#xff0c;int表示转化为int类型operator int() {std::cout << "调用了类型转换函数" << endl;return meters; }Dist…

Conda 基本使用命令大全

Conda 基本使用命令大全 Conda 是一个开源的包管理和环境管理系统&#xff0c;广泛用于 Python 开发、数据科学和机器学习。以下是 最常用的 Conda 命令&#xff0c;涵盖环境管理、包安装、配置等核心操作。 1. 环境管理 创建环境 conda create --name myenv # 创…

基于SpringBoot和PostGIS的OSM时空路网数据入库实践

目录 前言 一、空间表的设计 1、属性信息 2、空间表结构设计 二、路网数据入库 1、实体类设计 2、路网数据写入 3、pgAdmin数据查询 三、总结 前言 在当今数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;地理空间数据的应用范围越来越广泛&#xff0c;尤其是…

代付入账是什么意思?怎么操作?

代付入账就是指商户委托银行通过企业银行账户向指定持卡人账户划付款项&#xff0c;款项划入指定账户即为入账。 具体操作流程如下&#xff1a; 1. 向第三方支付公司指定账户充值加款。 2. 通过操作后台提交代付银行卡信息。 3. 第三方支付公司受理业务申请。 4. 第三方审…

数学复习笔记 27

前言 太难受了。因为一些事情。和朋友倾诉了一下&#xff0c;也没啥用&#xff0c;几年之后不知道自己再想到的时候&#xff0c;会怎么考虑呢。另外&#xff0c;笔记还是有框架一点比较好&#xff0c;这样比较有逻辑感受。不然太乱了。这篇笔记是关于线代第五章&#xff0c;特…

第四十五天打卡

知识点回顾&#xff1a; tensorboard的发展历史和原理 tensorboard的常见操作 tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&#xff0c;用tensor…

使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类

高斯朴素贝叶斯算法通常用于特征变量是连续变量&#xff0c;符合高素分布的情况。 使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类 """ 使用高斯贝叶斯堆鸢尾花进行分类 """ #导入需要的库 from sklearn.datasets import load_iris from skle…

【docker】Windows安装docker

环境及工具&#xff08;点击下载&#xff09; Docker Desktop Installer.exe &#xff08;windows 环境下运行docker的一款产品&#xff09; wsl_update_x64 &#xff08;Linux 内核包&#xff09; 前期准备 系统要求2&#xff1a; Windows 11&#xff1a;64 位系统&am…