🎄欢迎来到@边境矢梦°的csdn博文🎄
🎄本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 🎄
🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆
目录
🍁存储器的分类
可按照多种类型分类, 所以用文字来进行表示
- 按存储介质分类
- 半导体存储器(主存、cache)
- 磁表面存储器(磁盘、磁带)
- 光存储器(光盘)
按存取方式分
- 按地址寻址
- 随机存储器(RAM) : 读取任何一个存储单元所花时间相同,与存储单元所在物理位置无关。比如,内存
- 动态随机存储器(DRAM):用做主存
- 静态随机存储器(SRAM):用做Cache
特别的,ROM也能随机存储
- 顺序存储器(SAM) : 读取一个存储单元所需时间取决于其物理位置。比如,磁带, CD-ROM
CD-ROM != ROM
- 直接存储器(DAM):既有随机存储,又有顺序存储的特性。先直接选取信息所在区,然后顺序存取。比如,磁盘。
- 按
地址
或者内容
寻址
- 相联存储器:可以按照地址,也可以按照内容检索到存储位置进行读写,比如,
快表
、相联Cache
- 按信息的可更改性分
- 只读存储器(ROM) : 只能读,不能写。
引导程序
就存放在ROM中- 读写存储器:即可读,又可写。
- 按信息的可保存性分
- 断电后
- 易失性存储器:信息丢失。
- 非易失性存储器:信息不丢失。 ROM
- 读取信息后
- 原存储信息被破坏,需要重写。比如DRAM芯片
- 原存储信息不被破坏,比如SRAM芯片、磁盘、光盘
🌳半导体随机读写存储器(RAM)
以下是知识点的整理, 写这个博客给大家推荐这个博主以及复习计算机组成原理的知识点, (想搞懂底层🥹)只是为了自己或大家更快复习, 原创是最好的, 原创视频来自 : 内存和固态硬盘哪个快?Flash和ROM RAM是一个东西吗?RAM和ROM的区别是什么?_哔哩哔哩_bilibili
深入理解闪存!固态硬盘如何存储一位数据?NAND FLASH是怎么擦除和写入的?FLASH的工作原理!_哔哩哔哩_bilibili
RAM也分为两种
- DRAM (Dynamic Random Access Memory) 动态随机存取存储器, 电脑的内存条就是DRAM
- SRAM (Static Random Access Memory) 静态随机存取存储器, CPU的缓存就是SRAM
原理图, 它可以存储一位信息, 只需要一个晶体管和一个电容, 当我们进行写操作时, 给晶体管的G极高电平, 它就导通了, 如果我们要写入1, 需要给D极高电平, 这样电容就会被充电, 就相当于 1 被存储到了电容里面, 同理如果我们想要存储 0 , 就给 D 极低电平, 这样就存储的是 0, 如果我们要进行读操作, 也需要让G 极为高电平, 使它导通, 同时加一个放大器, 当晶体管导通之后, 放大器会检测到电容上的电压信息, 这样就能判断它存储的是0 还是 1,因为电容的漏电流不可能为0, 所以过一段时间电容里的点就没了, 所以需要不停的刷新以此供电, 还有就是电容里的点不可能一瞬间充满, 要充满需要一段时间, 还要不断刷新, 所以速度上要慢得多
而静态RAM正好弥补了DRAM在速度上的不足, 它也是只能存储一位信息, 相比于动态RAM, 它的原理图要比动态RAM相对复杂
当保持位为1的时候, 才对后面的触发器有用, 对R, S输入如果是同样的电平也是没有意义, 所以加一个非门, 取反.
因为SRAM没有电容, 所以它的读写数据都是一瞬间完成, 所以速度快几倍(所以SRAM比占比大, 好处多啊), 同时也没有电容的漏电流这些, 所以不需要一直刷新, 所以叫静态RAM
- 从电路结构上也可以看出, SRAM由于结构相对复杂, 晶体管也多, 所以内存条就是DRAM, 容量可达几十个GB,
- 而SRAM由于结构相对复杂, 只有在电脑非常重要的场合才能用到, 比如电脑的CPU的L1, L2缓存
不管是DRAM还是SRAM, 只要关闭电源它们的数据都会丢失, 所以如果要长期存储的话, 就要用到ROM
🌻半导体只读存储器(ROM)
ROM : 固态硬盘, U盘, 买手机的时候的32G, 64G, 128G 和 256G的存储空间 (断电之后还在)
- ROM (Read-only memory,只读存储器) 例如 . 光盘
- PROM (Programmable read-only memory,可编程只读存储器)
- EAROM (Electrically alterable read only memory,电可改写只读存储器)
- EPROM (Erasable programmable read only memory,可擦可编程只读存储器)
- EEPROM(Electricallyerasable programmable read only memory,电子式可擦可编程只读存储器)
- 闪存(Flash memory)
基本输入输出系统BISO : BIOS对计算机的硬件起着重要的作用,它负责计算机的硬件设置和控制,是计算机启动过程中第一个运行的软件。如果BIOS被破坏,可能会导致计算机无法启动,因此需要注意保护BIOS的安全性。
PROM (Programmable read-only memory,可编程只读存储器), 对PROM写入程序后, 数据便无法更改, 它利用的是熔丝技术, 它存储的每一位数据都是由熔丝状态决定的, 熔断代表0, 没有则代表1
EPROM, 即可抹除可编程只读存储器, 它可以利用高压写入数据, 擦除数据的时候需要将芯片曝光与紫外线下一段时间, 所以这种ROM上方都有一块玻璃开窗
OTPROM跟EPROM的写入原理相同, 但是不设置开窗, 所以这种ROM只能编程一次
- EEPROM, 它的擦除方式是高压电场, 所以在EEPROM芯片内部都设置有电荷泵电路来产生高压, 对于一些比较简单的电子产品, 它的为控制器里面就内置了EEPROM
- 我们保存的用户设置信息就存储在微控制器的EEPROM里面
- 为什么EPROM和EEPROM都要在后面加个"ROM"
简单来说,它们有个共同点就是不能只对小部分数据进行修改而维持其他数据不变,如果确实需要修改,EPROM需要紫外线擦除,EEPROM需要高压电擦除,一旦擦除,就会对所有数据进行重置,所以在Windows里面一般都会有"pagefile"(内存分页)集中合并数据修改(不止针对DRAM),既然做不到单次写入只修改部分数据而维持其他数据不变,它们就不能跟ROM"断绝亲子关系"从而跑到RAM的队列中。
1980年Flash memory闪存发明出来了, 并在此之后有同一个人发明了 Nor Flash 和 NAND FLASH, SSD固态硬盘它就属于NAND FLASH, 还有U盘, 存储卡这些都属于
结构示意图 :
当给栅极高电平时电子进入浮栅层 :
断电之后它会呆在浮栅层, 不会回去, 所以数据可以长久的保存
如果我们想要释放电子, 可以给G极负电压 :
Flash就是以以上方式存储一位数据的
- EEPROM : 硬盘, U盘, 手机上的闪存(这些都是NAND FLASH)
- 它们本质上都是通过电来擦除和写入的, 即使是断电之后, 它们还可以长久的保持数据
在速度上RAM要远远大于ROM
🌸半导体存储器的容量扩展
由于一个存储器芯片的容量是有限的, 它在字数或字长方面与实际存储器的要求都有很大差距, 所以需要对字向和位向进行扩充才能满足需要, 常用的扩充方法有位扩展法, 字扩展法和字位扩展法.
解释上句话 :
CPU对主存储器进行读/写操作时, 是先通过地址总线给出访存地址, 然后通过控制总线发出读/写操作控制信号, 最后对该地址的内容进行读/写操作, 并通过数据总线传送信息.
一个存储器的地址是有限的, 并且是分开的, 但是使用的时候是连续的地址, 所以要对存储器进行扩展以达到实际需要的存储器的地址范围
位扩展
- 引出原因 : 如果数据总线的位数大于单块存储芯片的位数,则需要进行位扩展,从而充分利用总线位数,提高系统效率。(A是地址总线, D是数据总线)
注意:位扩展的各芯片,
地址线并联相同
(A, CS, WE),只有数据线不同
。
字扩展
线选法
- 注意:线选法是一个地址线中多出的A,每个A对应一个字扩展芯片的CS,用做片选。其余相同
- 线选法是通过CPU上的地址线对存储芯片进行连接扩展。这种方法直接通过地址线对芯片进行选择,线路简单且容易实现。然而,由于地址线在同一时间只能有效选通一条,因此会导致地址不连续(只能用选中的一个, 其他的用不了)。
- 不能同时为 0 或者 1 就是不能都用或都不用
片选法
- 在进行片选时,需要将地址线的低位部分直接与存储器芯片的地址线相连,而高位部分则通过译码器进行译码,以选择相应的芯片。在选择完芯片后,还需要进行字选,即选择存储器中的具体字单元。这样,通过片选和字选,CPU就可以准确地访问存储器中的任意一个存储单元。
区别是一个可以提供连续的地址一个是不连续的地址
译码器 : 二进制变十进制
字位扩展(一组有多片)
🪴高速存储器
双端口RAM和多模块存储器
- 双端口RAM、多模块存储器都是
提高CPU访存的速度
。- 双端口RAM
- 双端口RAM是指同一个存储器有左右两个独立的端口,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元 。这种存储器可以同时被两个控制器访问 ,增加了存储器的带宽 ,提高了单体存储器的工作速度。
- 双端口RAM的两个端口可以同时对同一地址单元进行读操作,但不会发生冲突。 当两个端口的地址不相同时,在两个端口上进行读写操作一定不会发生冲突。当两个端口同时对同一地址单元进行读写操作时,会出现读写错误。为了避免这种情况,可以采用逻辑判断决定暂时关闭一个端口,未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。
- 多模块存储器
- 多模块存储器是一种将多个存储模块组合在一起使用的存储器系统。每个存储模块都是一个独立的存储器,具有自己的地址线、数据线、读写控制线等。多个模块可以组合在一起形成一个大的存储空间,以便满足不同应用的需求。
- 多模块存储器的每个模块都是一个独立的存储器,因此它们可以独立地进行读写操作。同时,多个模块可以组合在一起,使得整个存储系统的容量和带宽都得到了扩展。多模块存储器适用于需要大容量和高带宽的应用场景,例如大型服务器、数据中心等。
双端口RAM适用于需要高带宽的应用场景,而多模块存储器适用于需要大容量和高带宽的应用场景。
- 多模块存储器中的"单体"和"多体"指的是存储模块的连接方式。
- 单体多字存储器:在这种方式中,每个存储模块只有一个存储体,每个存储单元存储m个字。地址必须顺序排列并且处于同一个存储单元(一个存储器中),这样在一次存取周期内,从同一地址取出m条指令,然后逐送至CPU。这种方式的一个缺点是,如果程序存在相邻体中,那么采用此编址方式的存储器为交叉存储器,而交叉存储器无法提高存储器的吞吐率。
- 多体并行寄存器:这种方式中,每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既可以并行工作,也可以交叉工作。
🏵️ Cache存储器
时间局部性和空间局部性
- 时间局部性 : 在最近的未来要用到的信息, 很可能是现在正在使用的信息, 因为程序中存在循环 (循环)
- 空间局部性 : 在最近的未来要用到的信息, 很可能与现在正在使用的信息在存储空间上是邻近的, 因为指令通常是顺序存放的, 顺序执行的, 数据也一般是以向量数组形式簇聚地存储在一起的 (顺序指令)
访问顺序与存放顺序一致 ==> 空间局部性好
主存与缓存的对应(直接映射)
🍓虚拟存储器
由于计算机不能执行比主存空间大的程序, 所以需要使用到虚拟存储器, 解决主存空间不足的问题
虚拟二字的含义:传统的存储系统有一次性 和 驻留性
两个问题,虚拟存储器就是解决这两个问题,变为多次性 和 对换性
,从而从逻辑上扩充了主存容量。
而虚拟存储器一定采用页式、段式、段页式管理方式,因为只有这样才能满足多次性和对换性。因此,其能够很好的满足程序的空间局部性原理
(页式、段式、段页式管理方式又叫请求页式、请求段式、请求段页式,区别是一般页式存放所有的块,故其页表要比虚拟的大且不会发生缺页情况,因为前者一次装入全部程序)
注意:
- 一次性:作业必须一次性全部装入内存后才能运行
- 驻留性:一旦作业被装入内存,则会一直占据内存,直至运行结束。
- 多次性和对换性需要解决2个问题:
- 进:如何判断缺页
- 出:若内存空间不够,OS如何将暂时不用的信息换出到外存。
虚拟页式存储
虚拟页式存储:以分页式管理方式的虚拟存储器。
页式管理方式:一个进程在逻辑上被分为若干个大小相等的
页面
,页面大小与主存块
的大小相同。每个页面可以离散
的放入不同的主存块中。
- 优点:不会产生外部碎片
- 缺点:
- 最后一页可能产生内部碎片
- 不用拥有逻辑独立性,处理、保护、共享 不及段式
地址转换
- 每次将程序加载到主存的位置是不一样的,我们不可能提前预知进程被放在哪里,所以
指令的地址码使用的是逻辑地址
。
- 注意:
页表寄存器
逻辑地址--->物理地址--->cache/主存
页表缺失,则TLB和cache一定缺失
- 注意:
快表是类似于cache的存在,故其也有三种映射方式。但是,映射方式只会影响
标记字段位数(即逻辑块号)
,不会影响页框号字段。快表中逻辑块号字段是隐藏表示,但是页表是直接表示。
快表(TLB)
页式方式只是满足了
程序空间局部性
原理,创建快表满足程序时间局部性
原理。注意:
- 访问快表比慢表(即页表)更快的原因:
- 快表是放在一个
SRAM
存储器中- 快表是一种
"相联寄存器"
,可以按内容和地址寻址,而根据内容逻辑号查找对应的主存号会更快。- 若快表没命中,会访问页表,并将信息复制到快表中。
虚拟段式存储器
- 优点:
- 不会产生内部碎片
- 拥有逻辑独立性,易于处理、保护、共享
- 缺点:会产生外部碎片
注意:
- 段表是
段基址 + 段长
- 段表核心字段:
逻辑段号 + 段基址 + 段长
地址转换
注意:段表存放在
段表寄存器
- 虚拟段页式存储器
- 缺点:地址变换过程中需要两次查表,系统开销较大。
- 程序先分段,再分块:
虚拟地址 = 段号 + 段内页号 + 页内地址
注意:
- 段表的字段变为了标识页表,即
段表字段
充当页表寄存器
的作用。若假设程序被分为n段,则该程序总共存在1个页表,n个页表- 段页式先分段后分页,类似于多级页表,故次级页表一个占一个块,段号中用
页表存放块号
来代替页表基址。地址转换
替换算法
注意:只有
FIFO
算法会产生Belady
异常。(Belady异常:所分配的物理块数增大,但是缺页故障数不减反而增加的异常。)
虚拟内存VSCache
- 相同
- 都把数据划分为小的信息块,并作为基本的传递单位(只是对象不同,cache划分对象为主存,而虚存划分对象为磁盘程序,故一般虚存的块更大)
- 都有地址映射、替换算法、更新策略等。
- 都应用了程序的局部性原理.。虚存的页式,段式,段页式都满足
空间局部性
,若增加快表,则满足时间局部性
。- 不同
- 虚存主要解决主存容量,cache解决CPU与主存速度不匹配
- cache全部由硬件组成,对
所有程序员透明
。
虚存由os和硬件组成,故其对系统程序员不透明,对应用程序员透明
- 对不命中的影响。CPU速度是主存的10倍,主存速度是辅存的100倍,故不命中时,对虚存的影响更大。
- CPU可以和主存直接相连,不命中时,CPU可以直接访问主存;但是,CPU不与辅存相连,虚存不命中时,只能从辅存中读数据到主存.