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

目录

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

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

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

相关文章

LabVIEW远程监控

LabVIEW远程监控 远程监控的应用场景 从办公室远程监控工厂车间的测试设备。 在世界另一端的偏远地区监控客户现场的发电设备。 从公司远程监控外场的产品。 技术更新与方法 自2018年以来,NI对基于Web的应用程序支持大幅增长。一些最初的方法(如Lab…

搭建CIG容器重量级监控平台

CIG简介 CIG监控平台是基于CAdvisor、InfluxDB和Granfana构建的一个容器重量级监控系统,用于监控容器的各项性能指标,通过三者的结合,CIG监控平台可以实现对容器性能的全面监控和可视化展示,为容器的性能和运行状态提供了一个全面…

React如何检查组件性能

可以使用Profiler来查看组件的渲染速度 Profiler的基本使用 需要将<Profiler>标签包裹在需要检查渲染速度的组件外部需要绑定id属性&#xff0c;该属性是唯一标识&#xff0c;用于区分其他Profiler需要onRender函数&#xff0c;该函数一共有六个参数&#xff0c;分别为…

数据结构入门————树(C语言/零基础/小白/新手+模拟实现+例题讲解)

目录 1. 树的概念及其结构 1.1 树的概念&#xff1a; 1.2 树的相关概念&#xff1a; 1.3 树的表示方法&#xff1a; ​编辑 1.4 树的应用&#xff1a; 2. 二叉树的概念及其结构 2.1 概念: 2.2 特点&#xff1a; 2.3 特殊二叉树&#xff1a; 2.4 二叉树的性质&#xf…

【文献阅读笔记】基于自监督的异常检测和定位:SSM

2022 IEEE TRANSACTIONS ON MULTIMEDIA 领域&#xff1a;异常检测 目标&#xff1a;图像输入数据 文章目录 1、模型2、方法2.1、random masking2.2、restoration network2.3、损失函数2.4、推理时的渐进细化 3、实验4、引用5、想法 1、模型 训练&#xff1a; 每个图像实时生成随…

MySQL索引优化实战二

分页查询优化 很多时候我们业务中实现分页功能时可能会用如下SQL来实现&#xff1a; select * from employees LIMIT 10000,10表示从表中中区从10001行开始的10行记录&#xff0c;看似只查了10条记录&#xff0c;但是这条SQL是先读取10010条记录&#xff0c;然后抛弃前10000条…

[MySQL]日期和时间函数

文章目录 1 获取日期、时间 CURDATE() &#xff0c;CURRENT_DATE()CURTIME() &#xff0c; CURRENT_TIME()NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP()UTC_DATE()UTC_TIME()代码示例2 日期与时间戳的转换 UNIX_TIMESTAMP()UNIX_TIMESTAMP(date)…

ArcGIS制作某村土地利用现状图

1. 根据坐落单位名称属性选择并提取作图数据 (1) 将“作图线状地物”、“作图图班”和“村庄”图层加入ARCGIS&#xff08;右键Layers-Add data&#xff09;&#xff0c;选择相应路径下的文件加载即可。 (2) 按属性来提取作图村庄的地类图班、线状地物和村界文件&#xff08;…

Flutter PK jetpack compose区别和选择

Flutter诞生于Chrome团队&#xff0c;是一帮做Web的开发做的跨平台框架&#xff0c;从最开始的设计初衷&#xff0c;就是指向了跨平台这条路&#xff0c;而Compose&#xff0c;则是诞生于Android团队&#xff0c;是为了解决当前View的架构体系不能再继续适应申明式编程的范式而…

【BLE基础知识】--Slave latency设置流程及空中包解析

1、Slave latency基本概念 当BLE从设备对耗电量要求较高时&#xff0c;若需要节省耗电量&#xff0c;则可以通过设置Slave Latency参数来减少BLE从设备的耗电。 Slave Latency&#xff1a;允许Slave&#xff08;从设备&#xff09;在没有数据要发的情况下&#xff0c;跳过一定…

SCAU:分期还款(加强版)

分期还款(加强版) Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC;VC 描述 从银行贷款金额为d&#xff0c;准备每月还款额为p&#xff0c;月利率为r。请编写程序输入这三个数值&#xff0c;计算并输出多少个月能够还清贷款&#xff0c;输出时保留1位小…

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图&#xff1a; 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…

百马百担c语言编程

以下是一个百马百担问题的C语言编程实现&#xff1a; #include <stdio.h>int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); int a[n], b[m], c[k]; for (int i 0; i < n; i) { scanf("%d", &a[i]);…

CSS——复合选择器、CSS特性、背景属性、显示模式

1、复合选择器 复合选择器&#xff1a;由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 作用&#xff1a;更准确、更高效的选择目标元素&#xff08;标签&#xff09; 1.1 后代选择器 后代选择器&#xff1a;选中某元素的后代元素 选择器写法&#xff1a;父选…

使用WPF设计时绑定加快开发速度

知识来源&#xff1a;B站up主 香辣恐龙蛋 第一步 第二步

小心处理 C++ 静态变量中的陷阱

小心处理 C 静态变量中的陷阱 函数中的 static 变量 static 变量的作用 C 中 static 关键字的最后一个用途是在函数内创建局部变量&#xff0c;这些变量在其作用域内退出和进入时保持其值。函数内的 static 变量类似于只能从该函数访问的全局变量。static 变量的一个常见用途…

【合集】从Java基础到JavaWeb网络开发——Java基础文章合集 JavaWeb网络开发文章合集

前言 本篇博客是Java开发的合集文章&#xff0c;内容涵盖了Java基础相关的博客&#xff0c;JavaWeb开发相关的博客&#xff0c;并且给出了小项目的案例。 目录 前言引出Java基础1、基本数据类型2、数组和集合List3、运算符4、逻辑控制5、IO流6、面向对象初步7、数据库入门8、J…

微服务实战系列之EhCache

前言 书接前文&#xff0c;继续深耕。上一篇博主对Redis进行了入门级介绍&#xff0c;大体知道了Redis可以干什么以及怎么使用它。 今日博主继续带着大家学习如何使用EhCache&#xff0c;这是一款基于Java的缓存框架。 微服务实战系列之Redis微服务实战系列之Cache微服务实战…

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏&#xff0c;兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中&#xff0c;设置获取的 StatusBar&#xff0c;CustomBar 高度&#xff08;实现适配…