自娱自乐计组笔记-4.1存储器概述

写在前面

苦逼计算机本人写的纯自娱自乐啊纯为了自己看着方便,虽然跟着教材走的但也有很多为了自己高兴写的东西,总之有尽量写的浅显易懂防止自己猪脑看不懂

并没有真的在教人很容易误人子弟但你愿意的话看看也行甚至可以提出建议orz

存储器分类

按存储介质分类

分为磁存储器半导体存储器光存储器

磁存储器最大的例子就是HDD机械硬盘。外部磁场消失后,物体仍然具有“剩磁”,剩磁的方向定义了数据内容,写入数据时用磁头修改磁性。特点是体积大速度慢但便宜

固态硬盘SSD属于半导体存储器,半导体存储器一般都是纯电路没有机械机构。分为两大类

半导体存储器
│
├─ 双极型存储器
│   ├─ TTL
│   └─ ECL
│
└─ MOS 存储器
    │
    ├─ MOS RAM
    │   ├─ SRAM
    │   └─ DRAM
    │
    └─ MOS ROM
        ├─ ROM
        ├─ EEPROM
        └─ Flash

mos似乎现在用的比ttl多,mos ram下分为sram(静态)和dram(动态),顾名思义,静态的不需要刷新因此速度快容量小、动态的会缓慢漏电所以需要刷新容量更大。cache一般使用sram,内存使用dram。

具体来说的话,固态属于mos rom下的flash。

光存储器就是光盘一类,成本低方便携带

按存储方式分类

分为随机存储器(ram)、顺序存储器(sam)、直接存储器(dam)

ram的访问时间与存储位置无关,sram和dram的ram就是随机存储器的ram;sam就相关;然后dam常见于机械系硬盘,这类存储器兼有随机存储器和顺序存储器的访问特性,磁盘由于存在机械寻道和旋转延迟,因此数据访问时间和磁头与目标扇区的距离有关系

按信息的可改写性分类

只读和读写,只读简称rom(dvd-rom、cd-rom)。不过有的名义上分在rom下的存储器也有读写功能

按信息的可保存性分类

易失性存储器非易失性存储器,易失性常见的如半导体ram(上文中cache的sram和内存的dram),非易失性常见的有半导体rom、闪存(flash)、磁盘、光盘存储等

按功能和存取速度分类

寄存器存储器:由多个寄存器组成的存储器,如cpu内部的寄存器组,字长一般与计算机字长相同(32位/64位,代表一次可以处理的字节数)。主要用来存放地址、数据及运算的中间结果,速度与cpu匹配

主存储器(主存):cpu中除了寄存器以外唯一能直接访问的存储器,用于存放指令和数据。CPU 通过主存地址直接、随机地读写主存储器。一般来说的“内存”就是指主存(ram),用的是dram

[buy]寄存器和主存的区别

  • 寄存器在cpu内部,主存在外部
  • 寄存器主要是放临时数据,cpu可以直接操作,容量比较小
  • 主存放程序操作和数据,需要通过主存地址来访问,容量大(gb级)

[/buy]

高速缓冲存储器(cache):就是缓存啦。是隐藏在主存和寄存器之间的一个高速小容量存储器,用于存放cpu即将或经常要使用的指令和数据,一般用sram,用于缓冲cpu与慢速主存之间的性能差异,提高访问速度。cpu每次就先访问cache,命中(hit)就直接取

[buy]cache有效的原理是程序的时间局部性和空间局部性[/buy]

外存储器(外存):磁盘磁带光盘等等

存储器技术指标

常见技术指标包括存储容量、存取速度(包括存取时间、存储周期、存储带宽)等。

存储容量

两种表示方法

位表示法:存储单元总数与存储字位数的乘积表示。eg. 1K×4 位表示该芯片有 1K 个单元(1K= 1024),每个存储单元的长度为 4 个二进制位。

字节表示法:以存储器中的单元总数表示(一个存储单元由 8 个二进制位组成,称为一个字节,用 B 表示)

存取速度

包含存取时间存取周期(连续启动两次访问操作之间的最短时间间隔)、存储器带宽

存储系统层次结构

由于程序访问存在局部性,因此上层存储器可以为下层存储器做缓冲,将最经常使用数据的副本调度到上层,这样 CPU 只需要访问上层快速的小容量存储器即可获得大部分数据。这种方式有效提高了系统访问速度,大大缓解了 CPU 与主存、主存与辅存的性能差异

主存的基本结构

主存是机器指令直接操作的存储器,采用主存地址进行随机访问

[warning]随机访问不是指地址随机生成,而是访问时间与地址无关[/warning]

主存的硬件内部结构包含:存储体+外围电路(地址译码器+数据寄存器+读写控制电路)

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

[collapse title=举个例子]cpu需要访问主存地址为5的数据,产生3位二进制地址信号101,转化为2^3=8根地址译码信号,通过逻辑门处理后只有编号对应为5的线路有有效信号输出,并且选中与之连接的存储单元[/collapse]

数据寄存器暂存从CPU或者存储体来的数据(存储体由存储单元组成)

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

主存中数据的存放

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

存储字长:主存的一个存储单元一次所存储的二进制位数。也就是主存一个地址对应的数据位数

数据字长(简称字长):计算机(CPU) 一次能够处理的二进制数据位数

存储字长与数据字长不一定相同

地址访问模式

按照访问存储单元的大小,主存地址可以分为字节地址、半字地址、字地址

字节地址逻辑右移一位即可得到半字地址,右移两位可得到字地址。字节地址/半字地址/字地址只是不同的地址表示方式,只是数学逻辑换算方式,

大端和小端方式

正式的定义:当存储器的低字节地址单元中存放的是数据的最低字节时,称这种数据存放方式为小端(Little-Endian)方式;反之,当存储器的低字节地址单元中存放的是数据的最高字节时,称这种数据存放方式为大端(Big-Endian)方式。

例如上面访问2号字地址时小端就是0x78563412,大端就是0x12345678

数据的边界对齐

如果数据存储地址没有对齐规则的话,一个数据可能会横跨两个字,导致冗余 -> 所以需要数据对齐

具体规则如下

(1)双字数据起始字节地址的最末 3 位为 000,地址是 8 (1000)的整数倍。

(2)单字数据起始字节地址的最低两位为 00,地址是 4 (0100)的整数倍。

(3)半字数据起始字节地址的最低一位为 0,地址是 2(0001) 的整数倍。

(4)单字节数据不存在边界对齐问题(主存按字节编址)。(0000满足任何情况可以随便插)

[collapse title=关于表4.1中的x86和IA-64]

x86和ia-64分别对应两种cpu指令集架构的设计思想:CISC、RISC

cisc的核心思想是一条指令完成尽量多的工作,因此对于各种不同的工作组合,需要更多的指令种类数量;代表架构是x86和ia-64,一般amd和intel都是x86

risc则相反,一条指令完成尽量少的工作,更加精简,指令数量对应更少,指令长度也可以固定。代表架构是arm架构,m芯片都是arm架构

[/collapse]

posted @ 2026-03-15 17:51  Mitori  阅读(3)  评论(0)    收藏  举报