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