目录

1. 存储系统的基本概念

2. 主存储器的组成

3.DRAM 和 SRAM

4. 只读存储器ROM

5.主存储器与CPU的连接

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

7. Cache的基本概念和原理

8.Cache和主存的映射方式

9.Cache替换算法

10.Cache写策略

11.页式存储器

12.虚拟存储器


1. 存储系统的基本概念

1)存储器的层次化结构

主存 --- 辅存:实现虚拟存储系统,解决了主存容量不够的问题

Cache --- 主存:解决了主存与CPU速度不匹配的问题

高速缓存和主存储器的数据可直接被CPU读写

辅助存储器的数据需要加载到主存中才能被CPU读写

2)按存储介质分类

存储器的功能:存放二进制信息

半导体存储器(主存,Cache) 磁表面存储器(磁盘,磁带) 光存储器(光盘)

3)按存取方式方式分类

随机存储器(RAM):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关

顺序存储器(SAM):读写一个存储单元所需时间取决于存储单元所在的物理位置

直接存取存储器(DAM):既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取

串行访问存储器:读写某个存储单元所需时间与存储单元的物理位置有关

相联存储器(CAM):即可以按内容访问的存储器,可以按照内容检索到存储位置进行读写,"快表"就是一种相联存储器

4)按信息的可更改性分类

读写存储器:即可读可写(磁盘,内存,Cache)

只读存储器:只能读,不能写(实体音乐专辑CD-ROM)

5)按信息的可保存性

断电后,存储信息消失的存储器 --- 易失性存储器(主存,Cache)

断电后,存储信息依然保持的存储器 --- 非易失性存储器(磁盘,光盘)

信息读出后,原存储信息被破坏 --- 破坏性读出(如DRAM芯片,读出数据后要进行重写)

信息读出后,原存储信息不被破坏 --- 非破坏性读出(如SRAM芯片,磁盘,光盘)

6)存储器的性能指标

存储容量:存储字数*字长

单位成本:每位价格 = 总成本 / 总容量

存储速度:数据传输率 = 数据的宽度 / 存储周期

主存带宽:主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒,

字节/秒(B/s),或位/秒(b/s)

2. 主存储器的组成

1)基本的半导体元件及原理

存储元的组成:

电容放电:读取二进制位

电容充电:写入二进制位

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

存储单元和存储体

2)存储器芯片的基本原理

3)寻址

3.DRAM 和 SRAM

DRAM用于主存,SRAM用于Cache

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

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

核心区别:存储元不一样

DRAM存储元---栅极电容

1)

读出1:MOS管接通,电容放电,数据线上产生电流

读出0:MOS管接通后,数据线上无电流

2)

电容放电信息被破环,是破坏性读出,读出后应有重写操作,也称"再生"

3) 读写速度慢

4)每个存储元制造成本更低,集成度高,功耗低

5) 电容内的电荷只能维持2ms,即便不断电,2ms后信息也会消失,2ms之内必须"刷新"一次(给电容充电)

SRAM存储元---双稳态触发器

  

1) 读出数据,触发器状态保持稳定,是非破坏性读出,无需重写

2)读写速度快

3)每个存储元制造成本更高,集成度低,功耗大

4)只要不断电,触发器的状态就不会改变

SRAM和DRAM对比

DRAM的刷新

1)刷新周期:一般为2ms

2)以行为单位,每次刷新一行存储单元

3)采用行列地址,减少选通线的个数

存储单元一维排列

存储单元二维排列

刷新操作有硬件支持,读出一行的信息后重新写入,占用一个读写周期

刷新方式:

假设DRAM内部结构排列成 128*128 的形式,读写周期0.5us,2ms 共 2ms/0.5us = 4000个周期

思路一:分散式刷新

每次读写完都刷新一行  -> 系统的存取周期变为1us

前0.5us时间用于正常读写,后0.5毫秒用于刷新某行

思路二:集中式刷新

2ms内集中安排时间全部刷新 -> 系统存取周期还是0.5ms

有一段时间专门用于刷新,此时无法访问存储器,称为访存"死区"

思路三:异步刷新

2ms内每行刷新1次即可 -> 2ms内需要产生128次刷新请求

每隔2ms/128=15.6us 一次,每15.6us内有0.5us的"死时间"

"刷新"由存储器独立完成,不需要CPU控制

 DRAM的地址线复用技术

为了减少地址线,可以先把行地址存到行地址缓冲器中,再把列地址存放到列地址缓冲区中,行列地址分两次送,可使地址线更少,芯片引脚更少(地址线,引脚数减半)

现在的主存通采用SDRAM芯片

4. 只读存储器ROM

RAM芯片 --- 易失性,断电后数据消失

ROM芯片 --- 非易失性,断电后数据不会丢失

ROM 分为: MROM,PROM,EPROM,闪存,SSD

MROM --- 掩模式只读存储器

厂家按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写(只能读出),

可靠性,灵活性,生产周期长,只适合批量

PROM --- 可编程只读存储器

用户可用专门的PROM写入器写入信息,写一次之后就不可更改

EPROM --- 可擦除可编程只读存储器

允许用户写入信息,之后用某种方法擦除数据,可进行多次重写

UVEPROM --- 用紫外线照射8~20分钟,擦除所有信息

EEPROM --- 可用"电擦除"的方式,擦除特定的字

Flash Memory --- 闪速存储器(U盘,SD卡就是闪存)

在EEPROM基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写

每个存储元只需要单个MOS管,位密度比RAM高

注:由于闪存需要先擦除在写入,因此闪存的"写"速度要比"读"速度更慢

SSD --- 固态硬盘

由控制单元+存储单元(Flash芯片)构成,与闪速存储器的核心区别在于控制单元不一样,但存储介质都类似,可进行多次快速擦除重写。SSD速度快,功耗低,价格高。目前个人电脑上常用SSD取代传统的机械硬盘

手机辅存也能使用Flash芯片,但相比SSD使用的芯片集成度高,功耗低,价格贵

计算机内重要的ROM

物理:

逻辑:

很多ROM芯片虽然名字是"Read-Only",但更多ROM也可以"写"

RAM芯片是已失性的,ROM芯片是非易失性的

很多ROM也具有"随机存取"的特性

5.主存储器与CPU的连接

现在的计算机MAR,MDR通常集成在CPU内部。存储芯片内只需要一个普通的寄存器(暂存输入,输出数据)

数据总线宽度 > 存储芯片字长  --- 位扩展

扩展主存字数 --- 字扩展

存储器芯片的输入和输出信号

 增加主存的存储字长 - 位扩展

CPU通过地址线把地址信息同时发送给这两个存储芯片,将会选中两个存储芯片的同一个位置的存储单元,同时读,同时写,存储字长由1位扩展到2位

增加主存存储字数 - 字扩展

 线选法

线选法:

n条线路 -> n个选片信号

电路简单

地址空间不连续

码器片选法

2-4译码器

译码片选法:

n条线 -> 2^n 个选片信号

电路复杂

地址空间可连续

字位同时扩展

译码器

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

存取周期

存取周期:可以连续读/写的最短时间间隔

注:DRAM芯片的恢复时间比较长,有可能是存取时间的几倍(SRAM的恢复时间较短)

双端口RAM

作用:优化多核CPU访问一根内存条的速度

条件:需要有两组完全独立的数据线,地址线,控制线。CPU,RAM中也要有更复杂的控制电路

 两个端口对同一主存支持的操作:

1)两个端口同时对不同的地址单元存取数据

2)两个端口同时对同一地址单元读出数据

不支持的操作:

1)两个端口同时对同一地址单元写入数据

2)两个端口同时对同一地址单元,一个写入数据,另一个读出数据

解决方法:置"忙"信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后在访问

多体并行存储器

高位 :

 低位:

连续访问:

取几个存储体

采用"流水线"的方式并行存取(宏观上并行,微观上串行)

宏观上,一个存储周期内,m体交叉存储器可以提供的数据量为单个模块的m倍

存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数 m >= T/r

存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数 m >= T/r

多模块存储器

多体并行存储器 :

每个模块都有自己的容量和存取速度。各模块都有独立的读写控制电路,地址寄存器和数据寄存器。他们既能并行工作,又能交叉工作

单体多字存储器:

每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字

缺点:每次只能同时读取m个字,不能单独读取其中某个字

指令和数据在主存中必须是连续存放的

7. Cache的基本概念和原理

存储系统存在的问题

双端口RAM,多模块存储器提高了存储器的工作速度,但优化后速度与CPU差距依然很大,

可以采用更高速的存储单元,但这意味着存取器的成本提高,容量下降

基于程序访问的局部性原理:增加"Cache - 主存"层次

Cache的工作原理

:实际上,Cache被集成在CPU内部,Cache用SRAM实现,速度快,成本高

局部性原理

空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的

时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息

基于局部性原理,把CPU目前访问的地址"周围"的部分数据放到Cache中

"列优先"访问二维数组,空间局部性更差,速度可能要比"行优先"慢

性能分析

设tc为访问一次Cache所需时间,tm为访问一次主存所需时间

命中率H:CPU欲访问的信息已在Cache中的比率

缺失率:M = 1 - H

先访问Cache,若Cache未命中再访问主存

Cache---主存  系统的平均访问时间t为  t  =  Htc + ( 1 - H )( tc + tm )

同时访问Cache和主存,若Cache命中则立即停止访问主存

t  =  Htc + (1 - H)tm

Cache分块

界定CPU目前访问地址的"周围"部分数据

将主存的存储空间"分块",主存与Cache之间以"块"为单位进行数据交换

 注:Cache块与主存块的大小相等,每次被访问的主存块,一定会被立即调入Cache

8.Cache和主存的映射方式

区分Cache中存放的主存块,给每个Cache块增加一个"标记",记录对应的主存块号

全相联映射(随意放)

主存块可以放在Cache的任意位置

假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache块,块的大小为64B

Cache块的大小 == 主存块的大小

主存块数: 2^28 / 2^6  = 22

主存块内地址:6位

 CPU访问主存地址

1)主存地址的前22位对比Cache中所有块的标记

2)若标记匹配且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元

3)若未命中或有效位 = 0,则正常访问主存

优点:Cache存储空间利用充分,命中率高

缺点:查找标记慢,有可能需要对比所有行的标记

直接映射(只能放固定位置)

每个主存块只能放到一个特定的位置:

Cache块号  =  主存块号 % Cache总块数

如果Cache总数为2^n 则主存块号末尾n位直接反映它在Cache中的位置

1)主存块号%2^3,相当于留下最后3位二进制数

2)若Cache总块数 = 2^n,则主存块号末尾n位直接反映了它在Cache中的位置

3)将主存块号的其余位作为标记

 CPU访问主存地址

1)根据主存块号的后3位确定Cache块

2)若主存块号的前19位与Cache标记匹配且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元

3)若未命中或有效位 = 0,则正常访问主存

优点:对于任意一个地址,只需要对比一个"标记",速度最快

缺点:Cache存储空间利用不充分,命中率低

组相联映射(可放到特定分组)

Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置:

组号  =  主存块号 % 分组数

如果组数为2^n,则主存块号末尾n位直接反映了在Cache中的哪一组

主存块号%2^2,相当于留下最后两位

CPU访问主存地址:

1)根据主存块号的后2位确定所属分组号

2)若主存块号的前20位与分组内的某个标记匹配,且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元

3)若未命中或有效位 = 0,则正常访问主存

优点:上两种方式的折中,综合效果较好

9.Cache替换算法

替换算法解决的问题

1)全相联映射

Cache完全满了才需要替换,需要在全局选择替换哪一块

2)直接映射(不需要替换算法)

如果对应位置非空,则毫无选择地直接替换,无需考虑替换算法

3)组相联映射

分组内满了才需要替换,需要在分组内选择替换哪一块

随机算法:若Cache已满,则随机选择一块替换

总结:实现简单,但完全没有考虑局部性原理,命中率低,实际效果很不稳定

先进先出算法:若Cache已满,则替换最先被调入Cache的块

抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)

总结:实现简单,最开始按 #0#1#2#3 放入Cache,之后轮流替换 #0#1#2#3

FIFO已然没有考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的

近期最少使用算法(LRU):为每一个Cache块设置一个"计数器",用于记录每个Cache块已经有多久没被访问了。当Cache满后替换"计数器"最大的

总结:命中时,所命中的行的计数器清零,比其低的计数器+1,其余不变;

未命中且还有空闲时,新装入的行计数器置0,其余非空闲行全+1;

未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余+1

Cache块的总数 = 2^n,则计数器只需n位。且Cache装满后所有计数器的值一定不重复

LRU算法:基于"局部性原理",近期被访问过的主存块,在不久的将来很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高

若被频繁访问的主存块数量 > Cache行的数量,则有可能发生"抖动"

最经常使用算法(LFU):为每一个Cache块设置一个"计数器",用于记录每个Cache块被访问过几次。当Cache满后替换"计数器"最小的

新调入的块计数器 = 0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行

若有多个计数器最小的行,可按行号递增,或FIFO策略进行选择

LFU算法:曾经被经常访问的主存块在未来不一定会用到,并没有很好地遵循局部性原理,因此实际运行效果不如LRU

10.Cache写策略

1)写命中

写回法:当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存

减少了访存次数,但存在数据不一致的隐患

全写法:当CPU对Cache写命中时,必须把数据同时写入Cache和主存

访存次数增加,速度减慢,但更能保证数据一致性

为了解决速度减慢的问题,一般使用写缓冲

使用写缓冲,CPU写的速度很快,若写的操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞

2)写不命中

写分配法:当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用

非写分配法:当CPU对Cache写不命中时,只写入主存,不调入Cache,搭配全写法使用

只有"读"未命中时,才调入Cache

3)多级Cache

现代计算机常采用多级Cache

离CPU越近的速度越快,容量越小

离CPU越远的速度越慢,容量越大

11.页式存储器

页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的"页面","页面"大小与"块"大小相同。每个页面可以离散地放入不同的主存块中

虚地址和实地址

逻辑地址(虚地址):程序员视角看到的地址

物理地址(实地址):实际在主存中的地址

CPU执行的机器指令中,使用的是"逻辑地址",因此需要通过查页表,将逻辑地址转化为物理地址。页表的作用:记录每个逻辑页面存放在哪块主存中

地址变换过程

CPU查询页表实际上就是在进行访存操作,为了提高效率

将近期访问的页表项放入更高速的存储器,可以加快地址变换的速度

增加快表

区别:快表中存储的是页表项的副本;Cache中存储的是主存块的副本

快表是一种"相联存储器",可以按内容寻访

总结:

逻辑地址 = 逻辑页号 + 页内地址

物理地址 = 主存块号 + 页内地址

12.虚拟存储器

页式虚拟存储器 --- 拆分成大小相等的页面

基于程序的局部性原理,先把当前用到的页面调入主存,其余的放在外存中,等用到时在根据页表记录的外存块号将其调入主存中

存储器的层次化结构

主存 --- 辅存: 实现虚拟存储系统,解决了主存容量不够的问题(操作系统决定,那些页面调入主存)

Cache --- 主存:解决了主存与CPU速度不匹配的问题(硬件决定,哪些主存块调入Cache)

段式虚拟存储器 --- 按照功能模块拆分

如:#0 段是自己写的代码    #1段是库函数代码    #2段是变量

段页式虚拟存储器 --- 按照功能模块分段,再将各个段分页

把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入,调出仍以页为基本传送单位

每个程序对应一个段表,每段对应一个页表

虚拟地址:段号 + 段内页号 + 页内地址

计算机组成原理---存储系统相关推荐

  1. 计算机组成原理-存储系统

    计算机组成原理-存储系统 2021/8/15 18:35 存储器的层次结构 存储器的分类 1.层次 2.介质 3.存取方式 4.信息的可更改性 5.信息的可保存性 存储器的性能指标 主存储器的基本组成 ...

  2. 华科计算机组成原理 存储系统实验 汉字字库Logsim实验

    华科计算机组成原理 存储系统实验 汉字字库 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自 ...

  3. 计算机组成原理 — 存储系统

    目录 文章目录 目录 前文列表 存储系统 存储器分类 按存储介质分类 按存取方式分类 按信息的可保存性分类 三层存储结构 高速缓存 主存储器 辅助存储器 双通道内存 DDR 前文列表 <计算机组 ...

  4. 计算机组成原理存储系统一章中的那些英语缩写

    计算机组成原理是大学计算机学习中必不可少的一门专业课,无论是考研还是找工作都占据着非常重要的地位.存储系统是计组中非常重要但又很难学的一章,很多同学都抱怨说里面的英语缩写太多了,时间长了就不知道这些英 ...

  5. 计算机组成原理——存储系统(超详细,必看!!)

    本篇文章是对王道考研的2021计算机组成原理学习笔记,希望对大家有所帮助. 文章目录 三.存储系统 3.1 基本概念 1.存储器的层次结构 2.存储器的分类 3.存储器的性能指标 3.2主存储器 3. ...

  6. 计算机组成原理——存储系统の选择题整理

    存储器概述 1.存储器存取周期是指() A.存储器的读出时间 B.存储器的写入时间 C.存储器进行连续读或写操作所允许的最短时间间隔 D.存储器进行一次读或写操作所需的平均时间 解析:选C 存取周期是 ...

  7. 计算机组成原理 | 存储系统

    文章目录 存储系统基本概念 现代计算机的结构 存储器的层次化结构 存储器的分类-层次 存储器的分类-存储介质 存储器的分类-存取方式 随机存取存储器 RAM 顺序存取存储器 SAM 直接存取存储器 D ...

  8. 计算机组成原理--存储系统

    一.概述 1.存储器分类 1.1按照存储介质分类 1.2按照存取方式分类 2.存储器的层次结构 2.1.存储器的三个主要特性的关系 2.2缓存-主存层次和主存-辅存层次 二.主存储器 2.1主存储器概 ...

  9. 计算机组成原理——存储系统

    存储系统概述 3.1.1存储系统结构层次 1.程序的局部性原理 在某一段时间内频繁访问某一局部的存储器地址空间,而对此范围以外的地址空间则很少访问的现象称为程序的局部性原理. 程序的局部性可以从两个角 ...

最新文章

  1. 对Promise的一些深入了解
  2. Windows XP权限
  3. cors漏洞 复现_Jsonp跨域漏洞浅析
  4. SpringBoot学习(二)探究Springboot启动机制
  5. linux 查看下挂磁盘,linux下磁盘挂载与查看
  6. linux 命令 which whereis whatis locate find
  7. android studio 制作表格_红爆网络的旅游排行榜视频制作其实很简单,赶快动手尝试...
  8. Spring Boot————ApplicationListener实现逃课事件监听
  9. linux基础篇-24,swap交换分区临时救急及划分方法
  10. php遍历文件制作删除,使用PHP遍历文件目录与清除目录中文件的实现详解
  11. Tunnels 状压DP+BFS
  12. 目标检测——COCO数据集上SOTA模型的学习笔记
  13. 模式设计趣解——追MM篇
  14. 基于Android系统的IPv6网络接入分析
  15. leecode - 入门 -- 双指针总结
  16. Oracle卸载(无universal installer)
  17. “谷歌浏览器无法从该网站添加应用、拓展程序和用户脚本”问题解决
  18. 人人网主页登录_“人人网”回来了!网友炸锅:有人想找前女友,有人想删“黑历史”……...
  19. 【笔记本触摸屏】实用技巧整理
  20. 洪恩教育披露2020年报:学习服务收入大增,营销费、负债规模攀升

热门文章

  1. STP计算失效导致环路的解决过程
  2. Spring mvc 原理浅析
  3. KBQA_多轮对话——模型源码解析(一)Pickle模块功能详解
  4. python里制表符是什么_Python制表符是什么
  5. python 人像素描_python实现图片彩色转化为素描
  6. Write-a-speaker: Text-based Emotional and Rhythmic Talking-head Generation(译文)
  7. Word文档输入文字后面字消失怎么办?
  8. event.target.tagName是啥?
  9. 奥鹏教育大学计算机基础,奥鹏南开大学《大学计算机基础》20秋学期在线作业参考试题答案...
  10. ENIAKA是哪个计算机英文缩写,知到计算机应用基础网课答案