【计算机组成原理】存储器知识

目录

1、存储器分类

1.1、按存储介质分类

1.2、按存取方式分类

1.3、按信息的可改写性分类

1.4、按信息的可保存性分类

1.5、按功能和存取速度分类

2、存储器技术指标

2.1、存储容量

2.2、存取速度

3、存储系统层次结构

4、主存的基本结构

5、主存中数据的存放

5.1、 存储字长与数据字长的概念

5.2、地址访问模式

5.3、大端和小端方式

5.4、数据的边界对齐


1、存储器分类

由于信息载体和电子元器件的不断发展,存储器的功能和结构都发生了很大变化,先后出现了多种类型的存储器,具体可以从以下不同的角度进行分类。

1.1、按存储介质分类

  1. 磁存储器:磁存储器都以磁性材料作为存储介质,利用磁化单元剩磁的不同磁化方向来存储数据0 和1。它主要包括磁芯、磁盘、磁带存储器等,目前广泛使用的磁盘、磁带中都包含机械装置,所以其体积大、存取速度慢,但磁存储器单位容量成本最低。
  2. 半导体存储器:用半导体器件组成的存储器称为半导体存储器。目前有两大类:一种是双极型存储器,主要包括TTL 型和ECL 型两种;另一种是金属氧化物半导体存储器,简称MOS 存储器,又可分为静态MOS 存储器(SRAM)和动态MOS 存储器(DRAM)。半导体存储器体积小,存储速度快,但单位容量成本相对较高。
  3. 光存储器:光存储器利用介质的光学特性读出数据,如CD-ROM、DVD-ROM 均以刻痕的形式将数据存储在盘面上,用激光束照射盘面,靠盘面的不同反射率来读出信息。而磁光盘则利用激光加热辅助磁化的方式写入数据,根据反射光的偏振方向的不同来读出信息。光盘存储器便于携带,成本低廉,适用于电子出版物的发行。

1.2、按存取方式分类

  1. 随机存储器:随机存储器(Random Access Memory,RAM)可以按照地址随机读写数据存储单元,且存取访问时间与存储单元的位置无关。早期的磁芯存储器和当前大量使用的半导体存储器都是随机存储器。
  2. 顺序存储器:顺序存储器(Sequential Access Memory,SAM)是指存储单元中的内容只能依地址顺序访问,且访问的速度与存储单元的位置有关的存储器,典型的如磁带存储器。
  3. 直接存储器:直接存储器(Direct Access Memory,DAM)是指不必经过顺序搜索就能在存储器中直接存取信息的存储器,这类存储器兼有随机存储器和顺序存储器的访问特性,典型的如磁盘存储器。磁盘由于存在机械寻道和旋转延迟,因此数据访问时间和磁头与目标扇区的距离有关系。

1.3、按信息的可改写性分类

        既能读出又能写入信息的存储器称为读写存储器。而有些存储器中的内容不允许被改变,只能读出其中的内容,这种存储器称为只读存储器(Read Only Memory,ROM),常见的有半导体只读存储器,也有光盘存储器,如CD-ROM、DVD-ROM 等。

1.4、按信息的可保存性分类

        按照信息保存的时间和条件的不同,存储器分为易失性存储器和非易失性存储器。易失性存储器是指断电后,所保存的信息会丢失的存储器,常见的如半导体RAM。非易失性存储器是指断电后,所保存的信息不丢失的存储器,常见的有半导体ROM、闪存、磁盘、光盘存储器等。

1.5、按功能和存取速度分类

  1. 寄存器存储器:它是由多个寄存器组成的存储器,如CPU 内部的通用寄存器组,一般由几个或几十个寄存器组成,其字长一般与计算机字长相同,主要用来存放地址、数据及运算的中间结果,速度与CPU 匹配,容量很小。
  2. 高速缓冲存储器:它又称高速缓存cache,是隐藏在寄存器和主存之间的一个高速小容量存储器,用于存放CPU 即将或经常要使用的指令和数据。它一般采用静态RAM 构成,用于缓冲CPU 与慢速主存之间的性能差异,提高存储系统的访问速度。
  3. 主存储器:主存储器简称主存,是CPU 中除寄存器外唯一能直接访问的存储器,用于存放指令和数据。CPU 通过主存地址直接、随机地读写主存储器。主存一般由半导体存储器构成,但注意主存并不是单一的内存,还包括BIOS、硬件端口等。
  4. 外存储器:计算机主机外部的存储器称为外存储器,简称外存辅助存储器。外存容量很大,但存取速度相对较低。目前广泛使用的外存储器包括磁盘、磁带、光盘存储器、磁盘阵列和网络存储系统等。外存用来存放当前暂不参与运行的程序和数据,以及一些需要永久性保存的数据信息。

2、存储器技术指标

        存储器的特性由它的技术指标来描述,常见技术指标包括存储容量、存取速度(包括存取时间、存储周期、存储带宽)等。

2.1、存储容量

        存储器可以存储的二进制信息总量称为存储容量。存储容量可以采用比特位或者字节来表示。

  1. 位表示法:以存储器中的存储单元总数与存储字位数的乘积表示,如1K×4 位表示该芯片有1K 个单元(1K = 1024),每个存储单元的长度为4 个二进制位。
  2. 字节表示法:以存储器中的单元总数表示(一个存储单元由8 个二进制位组成,称为一个字节,用B 表示),如128B 表示该芯片有128 个单元。

2.2、存取速度

  1. 存取时间:又称为存储器的访问时间,是指启动一次存储器操作(读或写分别对应取与存)到该操作完成所经历的时间,注意读写时间可能不同,DRAM 读慢写快、闪存读快写慢。
  2. 存取周期:连续启动两次访问操作之间的最短时间间隔;对主存而言,存储周期除包括存取时间外,还包括存储器状态的稳定恢复时间,所以存储周期略大于存取时间。
  3. 存储器带宽:单位时间内存储器所能传输的信息量,常用的单位包括位/ 秒或字节/秒;带宽是衡量数据传输速率的重要指标,与存取时间的长短和一次传输的数据位的多少有关;一般而言存取时间越短、数据位宽越大,存储带宽越高。

3、存储系统层次结构

        当某一种存储器在存储速度、存储容量、价格成本上均被另一种存储器超越时,也就是该存储器被淘汰之时,如传统的软磁盘就被U 盘所替代。人们一直在追求存储速度快、存储容量大、成本低廉的理想存储器,但在现有技术条件下这些性能指标往往是相互矛盾的,还无法使单一存储器同时拥有这些特性,这也是目前同时存在多种不同类型存储器的原因。存储系统层次结构利用程序局部性的原理,从系统级角度将速度、容量、成本各异的存储器有机组合在一起,全方位优化存储系统的各项性能指标。

        典型的存储系统层次结构如图4.1 所示。这是一个典型的金字塔结构,从上到下分别是寄存器、高速缓存、主存、磁盘、磁带等。越往上离CPU 越近,访问速度越快,单位容量成本越高;从上到下存储容量越来越大,图中分别给出了不同层级存储设备的大概访问时间延迟和容量量级单位。

        由于程序访问存在局部性,因此上层存储器可以为下层存储器做缓冲,将最经常使用数据的副本调度到上层,这样CPU 只需要访问上层快速的小容量存储器即可获得大部分数据。这种方式有效提高了系统访问速度,大大缓解了CPU 与主存、主存与辅存的性能差异,另外使用大容量辅存也大大缓解了主存容量不足的问题。基于这种层次结构,就构成了一个满足应用需求的存储速度快、存储容量大、成本价格低的理想存储系统。

4、主存的基本结构

        主存是机器指令直接操作的存储器,采用主存地址进行随机访问,整个主存从空间逻辑上可以看作一个一维数组mem[],每个数组元素存储一个m 位的数据单元,主存地址addr 就是数组的下标索引,数组元素的值mem[addr] 就是主存地址对应的存储内容,在C 语言中学习过的指针本质上就是主存地址。

        主存的硬件内部结构如图4.2 所示。它由存储体加上一些外围电路构成。外围电路包括地址译码器、数据寄存器和读写控制电路。

 

        地址译码器接收来自CPU 的n 位地址信号,经译码、驱动后形成2n 根地址译码信号,每一根地址译码信号连接一个存储单元。每给出一个地址,2n 个地址译码信号中只有与地址值对应的那个信号才有效,与之连接的存储单元被选中,输出m 位数据。

        数据寄存器暂存CPU 送来的m 位数据,或暂存从存储体中读出的m 位数据。

        读写控制电路接收CPU 的读写控制信号后产生存储器内部的控制信号,将指定地址的信息从存储体中读出并送到数据寄存器中供CPU 使用,或将来自CPU 并已存入数据寄存器的信息写入存储体中的指定单元。

        CPU 执行某条机器指令时,若需要访问主存,则应首先生成该数据在主存中的地址。该地址经地址译码器后选中存储体中与该地址对应的存储单元,然后由读写控制电路控制读出或写入。读出时,将选中的存储单元所存的数据送入数据寄存器,存储单元中的内容不变。CPU 从数据寄存器中取走该数据,进行指令所要求的处理。写入时,将CPU 送来并已存放于数据寄存器中的数据写入选中的存储单元,存储单元中的原数据被改写。

5、主存中数据的存放

5.1、 存储字长与数据字长的概念

  1. 存储字长:主存的一个存储单元所存储的二进制位数。
  2. 数据字长(简称字长):计算机一次能处理的二进制数的位数。存储字长与数据字长不一定相同,如字长为32 位的计算机所采用的存储字长可以是16 位、32 位或64 位。

5.2、地址访问模式

        存储字长都是字节的整倍数,主存通常按字节进行编址。以32 位计算机为例,主存既可以按字节访问,也可以按16 位半字访问,还可以按照32 位的字进行访问。按照访问存储单元的大小,主存地址可以分为字节地址、半字地址、字地址。图4.3 所示为不同主存地址访问模式的示意图,图中的主存空间可以按照不同地址进行访问,不同地址访问存储单元的大小不一样。

       字节地址逻辑右移一位即可得到半字地址,右移两位可得到字地址。图中8 号字节地址对应的半字地址为4,字地址为2,注意这3 个地址在逻辑空间的起始位置都是8 号字节单元,区别只是存储单元的大小不同。以下程序为Intel x86 汇编程序访问不同存储单元的例子,假设数据段寄存器DS 值为0。

5.3、大端和小端方式

  1. 采用多字节方式访问主存时,主存中的字节顺序非常重要,不同的顺序访问得到的数据完全不一样。当存储器的低字节地址单元中存放的是数据的最低字节时,称这种数据存放方式为小端(Little-Endian)方式;反之,当存储器的低字节地址单元中存放的是数据的最高字节时,称这种数据存放方式为大端(Big-Endian)方式。
  2. 图4.3 中访问2 号字存储单元时,如果按小端方式访问得到的数据是0x78563412,而如果按照大端方式访问得到的数据则是0x12345678,采用大、小端方式对数据进行存放的主要区别在于字节的存放顺序。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放有利于计算机处理。
  3. 主流处理器一般都采用小端方式进行数据存放,如Intel x86、IA64 处理器、RISC-V 处理器。有的处理器系统采用了大端方式进行数据存放,如PowerPC 处理器;还有的处理器同时支持大端和小端方式,如ARM、MIPS 处理器。除处理器外,外部设备设计、TCIP/IP 数据传输、音频和视频文件中都存在数据存放方式的选择问题。当计算机中的数据存放方式与其不一致时,就需要进行数据字节顺序的转换。
  4. 大端与小端方式的差别不仅体现在处理器的寄存器、存储器中,在指令集、系统总线等各个层次中也可能存在大端与小端方式的差别。读者必须深入理解大端和小端方式的上述差别。

5.4、数据的边界对齐

        现代计算机中主存空间按照字节编址,而高级语言中不同数据类型的变量对应不同的字节长度,C 语言中不同数据类型变量的字节长度如表4.1 所示。

        从表可知,不同数据类型的变量都会包含一个或多个字节单元,这些变量在进行主存地址空间分配时,从理论上讲可以从任何字节地址开始,但当一个多字节变量分布在不同的字存储单元中时,访问该变量就需要多个存储周期。为了提高数据访问效率,通常要考虑数据变量、数据结构在主存空间中的边界对齐问题。

所谓边界对齐就是按照数据类型的大小进行边界对齐,具体规则如下。

  1. 双字数据起始字节地址的最末3 位为000,地址是8 的整数倍。
  2. 单字数据起始字节地址的最低两位为00,地址是4 的整数倍。
  3. 半字数据起始字节地址的最低一位为0,地址是2 的整数倍。
  4. 单字节数据不存在边界对齐问题(主存按字节编址)。

图4.4 所示为32 位主存中变量未对齐的空间分配模式,这种方式对存储空间的利用率最高,但双精度浮点数x 的8 个字节分布在3 个存储字中,访问该变量需要3 个存储周期;另外最后一个short 变量k 的数据也跨越了两个存储字,会带来访问性能的问题。

       图4.5 所示的模式则遵循了边界对齐的规则,变量x、k 都只占用了最少的机器字,访问x只需两个存储周期,访问k 只需要一个存储周期,有效提升了存储速度。但注意这种方式会造成空间的浪费,需要折中考虑。目前主流编译器不仅会对数据变量进行边界对齐,还会对复杂的数据结构进行边界对齐。

推荐: 

【计算机网络】(网络层)定长掩码和变长掩码-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134606175?spm=1001.2014.3001.5502【计算机网络】VLAN原理和配置-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134407790?spm=1001.2014.3001.5502【计算机网络】VRRP协议理论和配置-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134387329?spm=1001.2014.3001.5502

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prometheus|云原生|轻型日志收集系统loki+promtail的部署说明

一, 日志聚合的概念说明 日志------ 每一个程序,服务都应该有保留日志,日志的作用第一是记录程序运行的情况,在出错的时候能够记录错误情况,简单来说就是审计工作,例如nginx服务的日志,kuber…

C++-模板

目录 一.泛型编程 二.模板的分类 三.函数模板 1.函数模板的概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 a.隐式实例化 b.显式实例化 5.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 五.class和typename的区别 六.非类型模板…

docker配置redis插件

docker配置redis插件 运行容器redis_6390 docker run -it \ --name redis_6390 \ --privileged \ -p 6390:6379 \ --network wn_docker_net \ --ip 172.18.12.19 \ --sysctl net.core.somaxconn1024 \ -e TIME_ZONE"Asia/Shanghai" -e TZ"Asia/Shanghai"…

Nacos源码解读04——服务发现

Nacos服务发现的方式 1.客户端获取 1.1:先是故障转移机制判断是否去本地文件中读取信息,读到则返回 1.2:再去本地服务列表读取信息(本地缓存),没读到则创建一个空的服务,然后立刻去nacos中读取更新 1.3:读到了就返回,同时开启定时…

Linux下activemq的安装与安装成功确认

一、下载 apache-activemq-5.14.0-bin.tar.gz 二、安装 将压缩包拷入linux内,进行解压tar -zxvf apache-activemq-5.14.0-bin.tar.gz,与redis、nginx不同的是,active解压不需要安装就可以直接启动! 启动命令:./bin…

1949-2021年全国31省公路里程数据

1949-2021年全国31省公路里程数据 1、指标:公路里程 2、范围:包括31省 1978-2021年期间无缺失 3、来源:各省NJ、产业NJ、各省统计GB 4、指标解释:公路里程指报告期末公路的实际长度。 统计范围:包括城间、城乡间、乡…

Rocketmq架构

NameServer:作为注册中心,提供路由注册、路由踢出、路由发现功能,舍弃强一致,保证高可用,集群中各个节点不会实时通讯,其中一个节点下线之后,会提供另外一个节点保证路由功能。 Rocket mq name…

java学习part32StringBuffer和StringBuilder

Java中的值传递和引用传递(详解) - 知乎 (zhihu.com) 146-常用类与基础API-StringBuffer与StringBuilder的源码分析、常用方法_哔哩哔哩_bilibili 1. 2.扩容机制 不够用:长度为 原长度*22;如果还不够,那么就扩容到目…

多文件夹图片预处理:清除空值、重置大小、分割训练集

→ 清理空值 防止出现cannot identify image file 参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客 #%pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python #可能需要重启jupyter import os import shutil imp…

【Unity动画】状态机添加参数控制动画切换(Animator Controller)

Unity - 手册:动画参数 在Unity中,动画状态的切换是通过Animator Controller中的过渡(Transition)来实现的。过渡是状态之间的连接,控制过渡一般都是靠调用代码参数 我们来实现一个案例: 创建动画状态机&a…

leetcode 142.环形链表2

我来更新 leetcode 题目了,接着上一次,这一次是上一道题目的提升(有点数学题的感觉) 142.环形链表2 题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表…

识KDJ指标,看懂超买超卖信号

一、认识KDJ 1、KDJ的含义 KDJ分析股票中短期趋势的一个常用指标,中文名称“随机指标”。它是一个综合考虑股票最高价、最低价和收盘价的技术指标,能够帮助我们根据历史价格预测出股票未来的价格走势。在实际应用的过程中,它的短期预测功能要…

JAVA毕业设计113—基于Java+Springboot+Vue的体育馆预约系统(源代码+数据库+12000字论文)

基于JavaSpringbootVue的体育馆预约系统(源代码数据库12000字论文)113 一、系统介绍 本项目前后端分离,本系统分为管理员、用户两种角色 用户角色包含以下功能: 注册、登录、场地(查看/预订/收藏/退订)、在线论坛、公告查看、我的预订管理、我的收藏…

TimeGPT:时间序列预测模型实例

时间序列预测领域正在经历一个非常激动人心的时期。在过去的三年里,我们见证了许多重要的贡献,如N-BEATS、N-HiTS、PatchTST和TimesNet等。同时,大型语言模型(LLM)近来在流行度方面取得了很大的成功,例如Ch…

PMP-01

考纲 需要看的书籍 学习计划

04-数据库操作对象Statement对象和PreparedStatement对象的区别,SQL注入的优缺点

Statement对象和查询结果集 Statement对象相关的方法 Connection接口中获取数据库操作对象Statement对象的方法 方法名功能Statement createStatement()创建Statement对象 Statement对象执行增删改查的SQL语句(不含占位符"?")的方法,JDBC中的SQL语句不需要提供分…

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例:时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的:…

minigpt4安装的一系列问题

问题一 合并权重: python -m fastchat.model.apply_delta --base /data/qq/llama2-7b-chat-hf --target /data/qq/MiniGPT-4/vicuna_weights/ --delta /data/qq/vicuna-7b-delta-v0fastchat版本与模型版本 不兼容 解决方法: 第一种:用低版…

【算法】滑动窗口题单——5.多指针滑动窗口醒醒⭐

文章目录 930. 和相同的二元子数组解法1——前缀和 哈希表解法2——滑动窗口 ⭐ 1248. 统计「优美子数组」1712. 将数组分成三个子数组的方案数⭐⭐⭐2444. 统计定界子数组的数目解法——多指针滑动窗口代码2——简洁写法:一次遍历O(1) 空间🐂⭐ 992. K…

《Junit单元测试》

目录 SpringBoot2.2.0版本之前的单元测试模式 SpringBoot2.2.0版本之后的单元测试模式 SpringBoot2.4以上版本移除了默认对Vintage的依赖 SpringBoot2.2.0版本之前的单元测试模式 SpringBooot 2.2.0 版本开始引入Junit5作为单元测试默认库,之前的版本是使用Junit…