4-存储器

【README】

1.本文总结自B站 《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】概述

【1.1】存储器分类

1)按存储介质分类

  • 1,    半导体存储器,分为 TTL, MOS 两种; (易失)
  • 2,    磁表面存储器,非易失;
  • 3,    磁芯存储器,非易失;
  • 4,    光盘存储器,非易失;

2)按存取方式分类

3)按在计算机的作用分类 

  • Flash memory :闪存,闪速存储器(断电时不丢失数据);
  • 高速缓冲存储器-cache: 使用静态ram做的,速度比主存快; 放在cpu 与 主存之间的;

【1.2】 存储器层次结构

【1.2.1】存储器的3个主要特性关系

特性包括: 速度,容量,价格/位;  

寄存器:不仅仅是CPU中有寄存器,IO端口中也有寄存器;
用户需求: 高速度,大容量,低价格;


【1.2.2】缓存-主存层次 与 主存-辅存层次

采用软硬件,相结合的方法,把主存与辅存构成一个整体;

  • 缓存主要解决主存低速度的问题;
  • 辅存主要解决主存的容量小的问题

【2】 主存储器

【2.1】 主存储器概述

【2.1.1】主存的基本组成

读写控制电路:

  • 如果是写入,则把MDR的数据写入到存储体中MAR指定地址上;
  • 如果是读出,则把存储体上MAR地址的数据读出到MDR寄存器;

【2.1.2】主存和cpu的联系

控制信号,由控制器发出; 是读还是写?
CPU与主存之间的通信, 主要有3种信号

  • 信号1,数据信号;
  • 信号2,地址信号;
  • 信号3,控制信号;

【2.1.3】主存中存储单元地址的分配

24根地址线,字节寻址是 2^24=16M字节;

  • 字长为16位,即1字=2字节;则按照机器字寻址 8M字(Word)
  • 字长为32位,即1字=4字节;则按照机器字寻址 4M字(Word)

【2.1.4】主存技术指标

存取时间 = 存入或取出数据所需时间;


【2.2】 半导体存储芯片简介

【2.2.1】半导体存储芯片的基本结构 

存储矩阵: 存储了0 1 信号(信息); 有多个存储单元;
步骤如下:

  • 第1步:地址线传送地址信号给存储器;
  • 第2步:译码驱动程序 翻译地址并选择存储单元;完成读写操作;
  • 第3步:把数据传给读写电路,读写电路传给数据线;

其他设备:

  • 片选线: 表示给定地址在哪几个存储器中可以寻址
  • 读写控制线:给出读信号,还是写信号;

地址线 10条 数据线4条, 芯片容量 1K*4 ;

  • 地址线10条表示可以寻址1k 个存储单元;
  • 数据线4条表示每个存储单元存储4个bit;

1.2)片选信号线

 片选线信号: CS(chip select) 或  CE (chip enable)

片选信号线的作用:

一片 16K * 1bit 的存储芯片的含义: 该芯片有16K个存储单元,每个单元1个bit;把8个芯片组合(纵向扩展)为1个大芯片,那大芯片的每个单元存储空间为8个bit,即1个字节;

存储芯片扩展方式:

  • 纵向扩展:8片 16K*1位的存储芯片可以扩展到 16K*8bit 的 存储芯片2 ;
  • 横向扩展:32片 16K*1位的存储芯片,可以组成 4片 16K*8bit的存储芯片3;

片选信号线作用:

  • 由上文知,存储器(主存或内存)不是由一个芯片构成的,它是由多个小芯片组合(扩展)而成的;
  • 正因为存储器是把多个小芯片组合起来构成的;在存取时,我们需要用片选信号选择参与芯片扩展的一组或一簇小芯片,如选中某组8个,则读取这8个小芯片的bit位才能构成一个字节,多选或漏选一个小芯片,读取的数据都是不正确的;

 【2.2.2】半导体存储芯片的译码驱动方式

1)线选法:

地址线4条,可以寻址16个存储单元;
数据线8条,每个存储单元存储8个bit;
存储容量是 16*8 bit ;
那如果有20根地址线,则容量是1M*8bit,要寻址1M个单元,用单个译码器,则存储器中地址译码器的线就有1M=100w条;(可以理解为单个地址译码器是一维空间寻址)

线选法缺点:成本非常高,不适用

2)重合法

地址译码器有2个,分为行地址译码器X,列地址译码器Y;

那如果有20根地址线,则容量是1M*8,那么存储器中有2个译码器,分为行译码器1k条线,列译码器1k条线;共计2k条线;(相比于线选法,重合法更加高效,因为使用线选法的地址译码器需要1M根线);

可以理解为重合法是二维空间寻址

如 存储存储的设计结构是 32 * 32 个;

则x,y轴地址译码器分别用 32根和32根线就可以定位二维空间中的某个存储单元了;

而如果是一维线选法的话,地址译码器需要 32*32 根线;


【2.3】 随机存取存储器-RAM-random access memory

【2.3.1】 静态RAM-SRAM

2)静态ram举例:

10个地址线,可以寻址1k个存储单元;
4个数据线,每个存储单元可以存储4个bit;

补充:如何实现选一次四列

行地址0,则选中第0行;
列地址0,则选中4组中每组的第0列上的bit输出;即(黄色部分);


 【2.3.2】动态RAM-DRAM

0)保存0和1的原理:

  • 电容当中有电荷,则为1,否则为0;
  • 采用电容进行表示;

1)动态ram基本电路

动态ram 4116芯片读原理:

 

竖方向是行, 横方向是列;
在读放大器的左侧那一行, 电容有电表示0,没有电表示1;
读放大器的右侧正好相反;
读放大器是一个跷跷板电路,左边与右边的电平相反;


4)动态刷新ram

为啥要刷新?

电容非常小,很容易漏电
在一段时间内,如果不对电容充电,则长时间,电容就会漏电,信息丢失;

动态ram刷新有3种方式:(集中刷新,分散刷新,异步刷新)
 

4.1) 集中刷新; 2ms内,对128行地址线进行刷新;
2ms内有4000个存取周期, 前面 3872个周期可以共cpu操作,后面128个周期需要用于刷新电容;也就是说  0.5us*128=64us; 64个微秒内,动态ram是不能使用的

 

 4.2)分散刷新

一半时间用于存取或读写数据,另一半时间用来刷新 动态ram

4.3)异步刷新(集中刷新与分散刷新相结合)


【2.3.3】动态ram与静态ram的比较(重要*)

 单元电路:

  • 动态ram 每个单元电路,包括1个晶体管,1个电容; 简单;
  • 静态ram每个单元电路,包括6个晶体管; 复杂;

作用:

  • 动态ram 主要用于主存(速度稍慢,慢于静态ram);
  • 静态ram 主要用于缓存(速度快);


 【2.4】只读存储器rom(了解)


【2.5】 存储器与cpu的连接(本章重点内容*)

【2.5.1】存储器容量扩展 

  • bit位扩展;(存储单元的存储容量扩展)
  • 存储字扩展;(存储单元的数量扩展)
  • bit位,存储字同时扩展;

问题: 存储器10根地址线,共计1k个存储单元;每个单元存储4个bit位(4位数据);如何构成 1k*8位 的存储器
解决方法: 用2个 1k*4bit 的芯片;

1)bit位扩展(增加单个存储单元的存储容量)

解决方法:把2个小芯片组合为1个大芯片来用; 同时做读写操作;2个小芯片同时工作

2)字扩展(增加存储字或存储单元的数量)

 2个芯片不能同时工作
11条地址线;如果第11根A10等于0 选择第1个芯片;如果A10等于1选择第2个芯片;(高位bit A10 作为片选信号

3)字,位同时扩展

存储空间分配到4个存储器当中,每个存储器两个芯片(2个芯片为一组),共计8个芯片;

  • 000000000000~001111111111  = 1k个地址; 给第1组芯片;
  • 010000000000~011111111111 =  1k个地址;给第2组芯片;
  • 100000000000~101111111111 =  1k个地址;给第3组芯片;
  • 110000000000~111111111111 =  1k个地址;给第4组芯片;

A11A10 作为片选信号; 取值为 00, 01, 10, 11 ;

片选信号作用(经过片选译码器译码):选择一组或一簇小芯片进行寻址;


【2.5.2】存储器与cpu的连接

1)地址线的连接:把低位bit作为地址信号;高位bit作为片选信号;
4)片选线的连接:对存储器的访问信号要在片选线进行体现; 每个存储器芯片,都有一个地址范围;(是访问存储器还是IO设备,根据地址范围来判断)
5)合理选择存储芯片

  • 是选择 rom 还是ram? Rom存储系统程序;ram存储用户程序
  • 是选择2个1k*4还是1个1k*8;
  • 芯片数量竟可能少,片选逻辑尽可能简单

【例】cpu与存储器的连接图

MREQ(低电平有效)信号线一定要用(不要忘记,非常重要);
只有当 MREQ是低电平时,访问的地址才在存储器范围中;否则访问的是IO设备;
ROM的数据线是单向的; RAM的数据线是双向的;(上图是重点)


【2.6】主存储器校验(跳过)


【2.7】提高访存速度的措施

Cpu访问速度从1985到2002年,每年提升 52%;
但内存每10年访问速度提高50%;
Cpu再快,cpu执行的指令来自于内存;数据来自于内存;结果需要保存到内存中;
如果cpu再快,但内存慢,计算机整体运行速度也提不上来

提高访存速度的方法有:

  • 单体多字系统;
  • 多体并行系统;

【2.7.1】单体多字系统 (方法1)

增加存储器的带宽,即每次存取多个存储单元(增加了单次存取的bit数);
CPU一次能够处理的bit(机器字长)为16bit;但存储器字长可以设置为64位;
Cpu 可以一次性取出64位放入数据寄存器以便cpu处理;
问题是: 如果需要的数据不是连续存储在64位数据; 则以上方案不很好


 【2.7.2】多体并行系统(方法2)

多体并行系统:包括4个存储体; 前2位(高位)作为存储器选择信号;后4位是存储体内部地址编码;

有两种方式

  • 高位交叉:体号在前,体内地址在后(在每个存储器内部编址);
  • 低位交叉: 编码方式不一样; 体内地址在前,体号在后(使用所有存储器进行编址);

1) 高位交叉 :各个体并行工作

高位交叉的问题: 程序指令是连续存储的;如果那样的话,就只能对某一个存储器进行访问,无法对其他3个存储器进行访问(因为高位交叉编址不连续,是跳跃的); 造成某一个存储体非常繁忙,其他闲;
适合存储器容量扩展,但不适合提高存储器带宽

2)低位交叉: 各个体轮流编址

 2.1)低位交叉特点:(在不改变存取周期的情况下,增加存储器带宽)

存取周期为T; 总线周期为t(涛);把存取周期与总线周期区别开;

高位交叉用于存储器容量扩展;
低位交叉用于存储器带宽扩展



【2.7.3】高性能存储芯片


【3】高速缓冲存储器(高速缓存) 单独一篇文章;

 为啥引入缓存?
因为cpu的速度再快,但存储器速度跟不上,那cpu整体速度也起不来,因为cpu需要和存储器或内存交互;所以需要在 cpu 和 主存之间添加一种速度比主存快,与寄存器接近的存储介质,即高速缓冲存储器;

计算机中高速缓存的访问时间如下图:

计算机中高速缓存的物理位置如下图:


【3.1】概述

【3.1.1】问题提出

引入高速缓存可以提高cpu执行速度的理论依据是局部性原理:

  • 时间局部性,当前正在使用的指令和数据,还将来还会被使用到;
  • 空间局部性: 当前正在使用的指令和数据,其相邻地址的指令和数据也可能会被使用到;

【3.1.2】cache工作原理

主存有M块; 缓存有C块; M远远大于C;
缓存中:标记存储的是主存块号;

命中率与cache容量和块长有关:
块太小,则cpu从某缓存块中没有取几条指令,则又会去访问内存;
块长:在一个存取周期中从主存调出的信息长度; 如1个块=4个存储字,存储字=存储单元;

效率e的最大值为100%,全部访问缓存;
效率e的最小值为 tc/tm ;



【3.1.3】cache基本结构

【3.1.4】cache读写操作(非常重要,涉及数据一致性问题)

1.有些操作只在cache写,没有在主存写; 所以写操作一定要注意cache与主存的数据一致性问题(进一步的,我们可以扩展到 jvm的内存可见性问题)
2.Cache写操作:

  • 2.1写直达法: 写操作的数据,既要写入cache也要写入主存;
  • 2.2 写回法: 写操作的数据,只写入cache,不写入主存; 当cache数据被替换时才写回主存;(cache与主存的数据一致性问题)

如果多个cpu,对同一个内存块都有自己的cache副本,那多个cache副本就存在数据一致性问题; 这是并行计算机体系结构中一个主要问题



【3.1.5】cache改进

离cpu比较近的cache,直接就把cache做在cpu中,作为集成cache(片内cache);
Cpu有多个核,每个核都有cache,多个核有共享cache;

统一缓存和分立缓存:

  • 统一缓存: 指令和数据放在同一个cache;
  • 分立缓存: 指令和数据放在不同的cache;

【3.2】cache与主存地址映射

Cache与主存的地址映射指的是: 主存当中的任意一块,如果要加载到cache的话, 可以加载到cache当中的那些块;根据映射方法不同,有3种映射,如下:

  • 直接映射;
  • 全相联映射;
  • 组相联映射;

【3.2.1】直接映射

 

主存储器的第0块(或第2^c块),只能放到cache的第0块;
主存储器的第1块,只能放到cache的第1块; … …  这种方法就称为直接映射;
问题: cache的利用率不高


【3.2.2】全相联映射

任何一个块要从主存储器调入cache,只要cache还有空闲块,就可以调入;
则主存块被调用 cache,那它可以被调入cache的任意一个块中;

优点:

  • cache利用率高了;

缺点:

  • 这会造成判断是否cache命中的电路或逻辑非常复杂,因为需要一个一个去比较;

【3.2.3】组相联映射(推荐*)

先把cache分为块; 多个块被分为一个组;如2个块一个组;
把主存储器分为块;多个块被分为一个组;如2个块一个区;
cache组的个数,与主存储器区的个数,是相同的;

cache存放规则: 主存中0区的任意一块,可以放入cache0组的任意一块;
主存1区,对应cache1组;
……
某一主存块J按模Q(cache组的个数)映射到缓存的第i组的任意一块;

【小结1】cache与主存映射的优缺点

  • 直接相联:不灵活,cache利用率低,但速度快;
  • 全相联: 成本高,速度慢,但cache利用率比较高;
  • 组相联: 速度较快,利用率较高;

【小结2】cache与主存映射的3种方式应用场景

  • 靠近cpu的cache采用直接相联;
  • 中间层次的cache采用组相联;
  • 距离cpu最远的cache采用全相联方式;

【3.2.3】替换算法

【问题】

  • 当cache不够用了, 选择哪一个cache块从cache退出;

 


【4】辅助存储器 (了解)

【4.1】概述

 

1.    记录密度

  • 道密度 Dt:硬盘单位长度有多少个磁道;
  • 位密度:Db,单位长度的磁盘保存了多少二进制信息;

2.存储容量 = n*k*s ;盘面 * 每个盘面磁道数 * 每个磁道的二进制信息; 磁盘每个磁道是一个同心圆,越往外,位密度越低;
3.平均寻址时间=寻道时间+等待时间;

  • 寻道时间:读写头在硬盘表面进行移动找到指定磁道的时间;
  • 等待时间: 找到磁道以后,读写头停止,磁盘旋转,等待给定扇区旋转到磁头下面的时间;

【4.2】 磁记录原理与记录方式


【4.3】 硬磁盘存储器

 【4.3.1】磁盘驱动器

【4.3.2】磁盘控制器


【4.4】 软盘

 


【4.5】 光盘存储器

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值