【计算机组成原理】存储系统

🎄欢迎来到@边境矢梦°的csdn博文🎄
🎄本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 🎄
🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

目录

存储器的分类

半导体随机读写存储器(RAM)

半导体只读存储器(ROM)

半导体存储器的容量扩展

高速存储器

 Cache存储器

虚拟存储器


🍁存储器的分类

可按照多种类型分类, 所以用文字来进行表示

  • 按存储介质分类
    1. 半导体存储器(主存、cache)
    2. 磁表面存储器(磁盘、磁带)
    3. 光存储器(光盘)

按存取方式分

  1. 按地址寻址
    1. 随机存储器(RAM): 读取任何一个存储单元所花时间相同,与存储单元所在物理位置无关。比如,内存
      1. 动态随机存储器(DRAM):用做主存
      2. 静态随机存储器(SRAM):用做Cache
        特别的,ROM也能随机存储
    2. 顺序存储器(SAM): 读取一个存储单元所需时间取决于其物理位置。比如,磁带, CD-ROM CD-ROM != ROM
    3. 直接存储器(DAM):既有随机存储,又有顺序存储的特性。先直接选取信息所在区,然后顺序存取。比如,磁盘。
  2. 地址或者内容寻址
    • 相联存储器:可以按照地址,也可以按照内容检索到存储位置进行读写,比如,快表相联Cache
  • 按信息的可更改性分
    1. 只读存储器(ROM): 只能读,不能写。引导程序就存放在ROM中
    2. 读写存储器:即可读,又可写。
  • 按信息的可保存性分
    1. 断电后
      1. 易失性存储器:信息丢失。
      2. 非易失性存储器:信息不丢失。 ROM
    2. 读取信息后
      1. 原存储信息被破坏,需要重写。比如DRAM芯片
      2. 原存储信息不被破坏,比如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适用于需要高带宽的应用场景,而多模块存储器适用于需要大容量和高带宽的应用场景。

  • 多模块存储器中的“单体”和“多体”指的是存储模块的连接方式。
  1.  单体多字存储器:在这种方式中,每个存储模块只有一个存储体,每个存储单元存储m个字。地址必须顺序排列并且处于同一个存储单元(一个存储器中),这样在一次存取周期内,从同一地址取出m条指令,然后逐送至CPU。这种方式的一个缺点是,如果程序存在相邻体中,那么采用此编址方式的存储器为交叉存储器,而交叉存储器无法提高存储器的吞吐率。
  2.  多体并行寄存器:这种方式中,每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既可以并行工作,也可以交叉工作。

🏵️ Cache存储器

时间局部性和空间局部性

  • 时间局部性 : 在最近的未来要用到的信息, 很可能是现在正在使用的信息, 因为程序中存在循环   (循环)
  • 空间局部性 : 在最近的未来要用到的信息, 很可能与现在正在使用的信息在存储空间上是邻近的, 因为指令通常是顺序存放的, 顺序执行的, 数据也一般是以向量数组形式簇聚地存储在一起的 (顺序指令)

访问顺序与存放顺序一致  ==>  空间局部性好

主存与缓存的对应(直接映射)

 


🍓虚拟存储器

由于计算机不能执行比主存空间大的程序, 所以需要使用到虚拟存储器, 解决主存空间不足的问题

虚拟二字的含义:传统的存储系统有一次性 和 驻留性两个问题,虚拟存储器就是解决这两个问题,变为多次性 和 对换性,从而从逻辑上扩充了主存容量。

而虚拟存储器一定采用页式、段式、段页式管理方式,因为只有这样才能满足多次性和对换性。因此,其能够很好的满足程序的空间局部性原理

(页式、段式、段页式管理方式又叫请求页式、请求段式、请求段页式,区别是一般页式存放所有的块,故其页表要比虚拟的大且不会发生缺页情况,因为前者一次装入全部程序)

注意:

  1. 一次性:作业必须一次性全部装入内存后才能运行
  2. 驻留性:一旦作业被装入内存,则会一直占据内存,直至运行结束。
  3. 多次性和对换性需要解决2个问题:
    1. 进:如何判断缺页
    2. 出:若内存空间不够,OS如何将暂时不用的信息换出到外存。

  • 虚拟页式存储
    • 虚拟页式存储:以分页式管理方式的虚拟存储器。
    • 页式管理方式:一个进程在逻辑上被分为若干个大小相等的页面,页面大小与主存块的大小相同。每个页面可以离散的放入不同的主存块中。
      1. 优点:不会产生外部碎片
      2. 缺点:
        1. 最后一页可能产生内部碎片
        2. 不用拥有逻辑独立性,处理、保护、共享 不及段式
    • 地址转换
      1. 每次将程序加载到主存的位置是不一样的,我们不可能提前预知进程被放在哪里,所以指令的地址码使用的是逻辑地址
      • 注意:

    1. 页表寄存器

    2. 逻辑地址--->物理地址--->cache/主存

    3. 页表缺失,则TLB和cache一定缺失

    • 注意:

    1. 快表是类似于cache的存在,故其也有三种映射方式。但是,映射方式只会影响标记字段位数(即逻辑块号),不会影响页框号字段。

    2. 快表中逻辑块号字段是隐藏表示,但是页表是直接表示。

    • 快表(TLB)

      页式方式只是满足了程序空间局部性原理,创建快表满足程序时间局部性原理。

    • 注意:

    1. 访问快表比慢表(即页表)更快的原因:
      1. 快表是放在一个SRAM存储器中
      2. 快表是一种“相联寄存器”,可以按内容和地址寻址,而根据内容逻辑号查找对应的主存号会更快。
    2. 若快表没命中,会访问页表,并将信息复制到快表中。

虚拟段式存储器

  1. 优点:
    1. 不会产生内部碎片
    2. 拥有逻辑独立性,易于处理、保护、共享
  2. 缺点:会产生外部碎片

注意:

  1. 段表是段基址 + 段长
  2. 段表核心字段:逻辑段号 + 段基址 + 段长

地址转换

注意:段表存放在段表寄存器

  • 虚拟段页式存储器
    • 缺点:地址变换过程中需要两次查表,系统开销较大。
    • 程序先分段,再分块:虚拟地址 = 段号 + 段内页号 + 页内地址

注意:

  1. 段表的字段变为了标识页表,即段表字段充当页表寄存器的作用。若假设程序被分为n段,则该程序总共存在1个页表,n个页表
  2. 段页式先分段后分页,类似于多级页表,故次级页表一个占一个块,段号中用页表存放块号来代替页表基址。

地址转换

替换算法

注意:只有FIFO算法会产生Belady异常。(Belady异常:所分配的物理块数增大,但是缺页故障数不减反而增加的异常。)

虚拟内存VSCache

  1. 相同
    1. 都把数据划分为小的信息块,并作为基本的传递单位(只是对象不同,cache划分对象为主存,而虚存划分对象为磁盘程序,故一般虚存的块更大)
    2. 都有地址映射、替换算法、更新策略等。
    3. 都应用了程序的局部性原理.。虚存的页式,段式,段页式都满足空间局部性,若增加快表,则满足时间局部性
  2. 不同
    1. 虚存主要解决主存容量,cache解决CPU与主存速度不匹配
    2. cache全部由硬件组成,对所有程序员透明
      虚存由os和硬件组成,故其对系统程序员不透明,对应用程序员透明
    3. 对不命中的影响。CPU速度是主存的10倍,主存速度是辅存的100倍,故不命中时,对虚存的影响更大。
    4. CPU可以和主存直接相连,不命中时,CPU可以直接访问主存;但是,CPU不与辅存相连,虚存不命中时,只能从辅存中读数据到主存.

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker可视化工具Portainer(轻量)或者Docker容器监控之 CAdvisor+InfluxDB+Granfana(重量)

Docker轻量级可视化工具Portainer 是什么 Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 安装 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/instal…

【密码学】【安全多方计算】浅析隐私求交PSI

文章目录 隐私求交的定义隐私求交方案介绍1. 基于DH的PSI方案2. 基于OT的PSI方案3.基于OPRF的PSI方案 总结 隐私求交的定义 隐私集合求交使得持有数据参与方通过计算得到集合的交集数据,而不泄露任何交集以外的数据信息。 隐私求交方案介绍 1. 基于DH的PSI方案 …

如何通过内网穿透实现公网远程ssh连接kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

docker安装Sentinel

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类引言 I Sentinel安装 Sentinel 分为两个部分: 核心库(Java 客户端)不依赖任何框架/库,能…

了解静态测试?

静态测试是一种软件测试方法,它主要通过分析软件或代码的静态属性来检查潜在的问题和缺陷,而无需实际执行程序。这种测试方法侧重于检查源代码和其他软件文档,以发现错误并提高软件质量。 为什么要做静态测试? 提前发现和修复错…

ESP32-Web-Server编程-CSS 基础 2

ESP32-Web-Server编程-CSS 基础 2 概述 如上节所述,可以使用外部 CSS 文件来修饰指定的 HTML 文件。 外部引用 - 使用外部 CSS 文件。 当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,就可以通过更改一个文件…

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

Vue 实现低代码开发平台,没想到这么好用!

前言 在众多开发技术中,Vue 组件化开发技术以其卓越的灵活性和高效性备受瞩目。 低代码平台相信不少人知道它的存在,而且现在大部分公司都在开发自己的低代码平台,首先我们来看看低代码平台可视化界面: 官网:https:/…

MySQL中自增id用完怎么办?

MySQL中自增id用完怎么办? MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如&#…

第二十章,多线程

创建线程 有两种方式,分别为继承Java.lang.Thread类与实现Java.lang.Runnable接口 继承Thread类 Thread常用的两个构造方法语法 public Thread(); public Thread(String threadName); 继承…

新生儿腺体肥大:原因、科普和注意事项

引言: 新生儿的健康问题常常让父母感到焦虑,其中之一就是腺体肥大。了解腺体肥大的原因、科普相关知识,并采取一些建议的注意事项,对于保障新生儿的健康非常重要。本文将深入解析新生儿腺体肥大的原因、提供相关科普知识&#xf…

可移动框 弹窗 可拖拽的组件

电脑端: <template><divv-if"show"ref"infoBox"mousedown.stop"mouseDownHandler"class"info-box":style"styleObject"><slot></slot></div> </template> <script> export defa…

自媒体爆文采集工具,几个免费的网站让你每日爆文增加

随着自媒体的蓬勃发展&#xff0c;许多人憧憬着在这个领域获得成功和流行。然而&#xff0c;随着寒冷的冬天的降临&#xff0c;媒体从业者的日常生活并没有变得更加美好。在竞争激烈的环境中&#xff0c;为了生存&#xff0c;他们必须发布引人注目的内容&#xff0c;然而&#…

4个Python实战项目,让你瞬间读懂Python!

前言 Python 是一种极具可读性和通用性的编程语言。Python 这个名字的灵感来自于英国喜剧团体 Monty Python&#xff0c;它的开发团队有一个重要的基础目标&#xff0c;就是使语言使用起来很有趣。Python 易于设置&#xff0c;并且是用相对直接的风格来编写&#xff0c;对错误…

从裸机启动开始运行一个C++程序(十五)

前序文章请看&#xff1a; 从裸机启动开始运行一个C程序&#xff08;十四&#xff09; 从裸机启动开始运行一个C程序&#xff08;十三&#xff09; 从裸机启动开始运行一个C程序&#xff08;十二&#xff09; 从裸机启动开始运行一个C程序&#xff08;十一&#xff09; 从裸机启…

lightdb-ignore_row_on_dupkey_index

LightDB 支持 ignore_row_on_dupkey_index hint LightDB 从23.4 开始支持oracle的 ignore_row_on_dupkey_index hint&#xff0c; 这个hint是用来忽略唯一键冲突的。类似与mysql的 insert ignore。 语法如下&#xff1a; 在LightDB中ignore_row_on_dupkey_index的效果等同于o…

大坝安全监测的内容及作用

大坝安全监测是指对大坝水雨情沉降、倾斜、渗压以及大坝形状特征有效地进行监测&#xff0c;及时发现潜在的安全隐患和异常情况&#xff0c;以便大坝管理人员能够做出科学决策&#xff0c;以确保大坝安全稳定运行。 大坝安全监测的主要内容 1.表面位移监测&#xff1a;监测大坝…

Vue基础入门(三):Vue3的使用

Vue3的使用 一、首页案例修改 修改首页的信息&#xff1a;是在之前介绍的HelloWorld.vue文件中进行内容的修改。 页面展示效果&#xff1a; 此时就看到了我们新添加的文字了&#xff01; 同样的我们开发代码的时候只需要修改了项目中的内容然后保存就会自动刷新的浏览器&…

接口测试:Jmeter和Postman测试方法对比

前阶段做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xff0c;所以今天我们就来谈谈一大部分人…

OpenSearch向量检索和大模型方案深度解读

大家好&#xff0c;我叫邢少敏&#xff0c;目前负责阿里云开放搜索OpenSearch的研发&#xff0c;很高兴在此跟大家分享OpenSearch在向量检索和大模型方面做的一些工作。 基于向量检索的分布式智能搜索引擎 通常&#xff0c;数据大致可以分为结构化数据和非结构化数据两种类型…
最新文章