文章

计算机的内外存及其层次结构

简单介绍内外存的差异、内存的访问、外存即二级存储的基本结构、存储器的层次结构等

计算机的内外存及其层次结构

一、内外存特性

1.1 内外存区别

  • Internal Memory:可以被处理器直接读取,如主存、Cache、CPU寄存器
  • External Memory:处理器需要通过I/O设备对其进行访问

1.2 物理类型

  • 半导体(Semiconductor):如属于内存的DRAM、SRAM、ROM
  • 磁性材料(Magnetic Surface):如机械硬盘、磁带
  • 光学材料(Optical):如CD、DVD等

1.3 容量的衡量

  • 对于主存,其容量(Capacity)通常用以下单位衡量,例如一个内存的容量是4K×8,那么字的大小就是8,字数就是4K
    • 字的大小(Word Size,类似字长Word Length):组织存储单位的比特数
    • 字数(Number of Words):内存中可访问的字的数量

1.4 数据传输单位

  • 传输单位(Unit of Transfer)指的是单次从内存或外存中读写的比特数
    • 内存:与数据传输总线(不属于内存模块)的条数有关,通常条数等于字长(有时不是)
    • 外存:数据通常以远大于一个字的单位进行传输

1.5 访问方法

  • 顺序访问方法(Sequential Access),磁带使用此方法(必须听完开头的歌才能听到后面的歌)
    • 每次访问都需要从开头开始向后遍历,直到抵达预期的内存地址
    • 其访问所耗费的时间与目标内存的地址位置有关,且相互间的差别很大

顺序访问方法.png

  • 随机访问方法(Random Access),半导体RAM内存使用此方法(其名字就来源于此)
    • 任意一块内存可以被直接被寻址访问
    • 其访问所耗费的时间是常量,与被访问对象的位置无关

随机访问方法.png

  • 直接访问方法(Direct Access),机械磁盘(不包括固态硬盘)使用此方法
    • 可直接访问目标内存地址附近区块,继而通过顺序访问等方法在区块内搜索目标对象
    • 其访问所耗费的时间是可变的

直接访问方法.png

1.6 性能表现

  • 存取时间(Memory Access Time)
    • 指从传递已知地址给内存,到读取到(或成功写入)数据之间间隔的时间
  • 存取周期(Memory Cycle Time)
    • 存取周期的概念独属于RAM,指连续两次内存访问操作之间所间隔的时间
    • 单次内存访问需额外时间来恢复以进行下一次访问操作,故存取周期>存取时间
  • 数据传输速率(Transfer Rate)
    • 指单位时间内由数据通路传输(读写)的数据量

1.7 物理特性

  • 半导体材料既可能是易失性的(RAM)也可能是非易失性的(ROM)
    • 易失性(Volatile)指的是存储的数据在断电后就会丢失,如RAM
    • 非易失性(Nonvolatile)指的是不需要用通电维持,如ROM和磁盘
  • 是否可以擦写存储内容
    • 可擦写(Erasable):存储的内容可被改写
    • 不可擦写(Nonerasable):存储的内容除非被恶意毁灭,否则不可改写

二、内存概述

内存主要由主存与Cache组成(也就是说主存不等于内存),而Cache随着发展被放入了CPU中,所以下面我没有太注意区分主存和内存两个词,心里有个印象就好

2.1 主存的组织结构

  • 主存(Main Memory)内含有数百万个有序排列的存储单元,每个存储单元都能储存一位也即一比特(bit)的数据(0/1)
  • 一个字(Word)由一组固定数量的比特组成,字使得我们可以通过单个指令存储或读取一组固定大小的字节
  • 一个字含有的比特数称为字长(Word Length),字长通常为16~64bits
  • 内存可以表示为一连串的字的集合,如下图所示

内存由字组成/png

2.2 地址与地址空间

  • 地址(Address)是一个标记区分(内存中的)不同字的数字
    • 一个地址可以由$[0,2^k-1]$区间内的一个整数表示;因为一个字中的比特是连续(Successive)且有序排列的,并且由于每个比特有$2$个可取的数(0/1),所以$k$个比特就有$2^k$种不同的排列,也即一个$k$比特的字就有上述这么多种取值
    • 例如一个24-bit的地址,就有$2^{24}$的地址空间(Adress Space),也即有16M种字的取值,注意此处的M表示数量,而不同于MB是存储容量的单位,即M个字节(Byte);32-bit地址的地址空间则为$2^{32}$或4G

2.3 大端与小端序

参考此博客

2.3.1 高位字节、低位字节

  • 感觉和之前浮点数的MSB和LSB的排序类似,不知其中是否有无联系
  • 十六进制(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)的每一个数都需要用一个四位二进制数表示(0000, 0001, …, 1110, 1111),所以一个C语言的int类型整数占用32-bits,也就是4字节,如下所示

高低位字节.png

2.3.2 高位地址、低位地址

高低位地址.png

2.3.3 大端与小端

  • 每次分配地址时,逐比特分配是不切实际的,所以每次为地址分配内存时,会分配由一组连续的字节(Byte)组成的内存(Byte-Addressable Memory)
  • 大端序(Big-endian):高字节放在低地址,低字节放在高地址(从左往右,符合人的思维)
  • 小端序(Little-endian):低字节存放在低地址,高字节存放在高地址(大端序的逆序)

BigLittleEndianAssignment.png

  • 将同一串数据放入内存中,两种编址的内存会以不同的顺序存储这串数据

大小端.png

2.4 处理器如何访问内存

  • 处理器通过地址访问(读写)内存中的数据

内存与处理器的链接.png

更详细的内存与处理器的链接.png

  • 关于读(Read / Load)操作:
    • 处理器将需要读取的内存地址传递给MAR寄存器,然后通过传输管线将地址传递给内存(RW Line设置为1)
    • 内存通过该地址读取数据并将其放入传输管线,数据会与MFC信号一同传递回给处理器
    • 处理器接收了MFC信号后就会从传输管线中读取数据到MDR寄存器中
  • 关于写(Write / Store)操作:
    • 处理器将地址传给MAR,将要写入的数据传给MDR,通过这俩寄存器传给内存(RW Line设置为0)
    • 地址对应的内存地址的原有数据被新传入的数据覆盖,返回一个MFC信号

三、外存概述

二级存储(Secondary Memory)是计算机除内存外所有可存数据的存储器的统称,如硬盘、光盘

3.1 磁盘的机械结构

3.1.1 存储介质与原理

  • 存储原理(Storage Theory)
    • 通过向磁头线圈(Magnetizing Coil)施加合适的极性电流脉冲(Current Pulse),可以在磁膜(Magnetic Film)上存储数字信息
  • 结构与存储介质(Storage Media)
    • 磁盘是由金属或涂有可磁化材料的塑料制成的圆形盘片(Platter)
    • 一个或多个(单面或双面的)磁盘(Disk)被安装在一个共同的主轴(Spindle)即旋转驱动器(Rotary Drive)上面,以均匀的速度旋转

3.1.2 磁盘上的读写头

  • 读写头(Read-Write Head)可在磁盘旋转时沿磁道移动以读写数据,其分为可动头(Movable Head)和固定头(Fixed Head)两种,其中可动头如下所示
    • 可动头
      • 每个磁盘盘面(Surface)拥有单个读写头(磁盘如果是双面的,那么单个磁盘就应当拥有两个可动读写头)
      • 读写头安装在可动臂上,其可以移动到不同的磁道上
    • 固定头
      • 每个磁盘磁道(Track)有单个读写头
      • 读写头被安装在固定臂(Fixed Ridged Arm)上

R-WHeadPerSurface.png

  • 每个读写头与磁盘表面之间的距离非常小,以确保磁信号的有效读取和写入

R-WHead.png

  • 温彻斯特硬盘(Winchester Hard Disk)是由IBM在1968年开发的一种磁盘技术
    • 温盘被密封在一个空气过滤环境中,读写头可以保持与磁盘上的磁道更近的距离
    • 其信息存储密度更大,能比非密封的存储单元在有限的物理空间内存储更多的信息

3.1.3 数据组织结构

  • 磁道(Track)是磁盘表面上的储存数据的同心圆环
    • 每个磁盘上具有500~2000个磁道
  • 扇区(Sector)是磁道上的物理区域
    • 每个磁道上的具有10~100个扇区,每个磁道的扇区数量相同
    • 每个扇区通常包含512字节的数据
  • 磁盘地址(Disk Address)的编码通常由如下三个部分组成,通过这三个参数可以唯一定位磁盘上的任意扇区
\[(SurfaceNumber,TrackNumber,SectorNumber)\]

TrackAndSector.png

  • 磁道和扇区的组织结构包括以下几个部分
    • 扇区间隔(Inter-Sector Gap):用于区分两个连续的扇区,确保读写头能够准确地定位每个扇区的起始位置
    • 扇区头(Sector Header, Preamble):包含扇区标识信息,用于在选定磁道上找到目标扇区
    • 纠错码(ECC, Error-correcting Code):用于检测和纠正读写过程中可能发生的错误,以确保数据的完整性

OrganazationOfTackAndSector.png

  • 磁盘中的柱面(Cylinder)是一个逻辑概念,指的是所有磁盘片上相同位置的(即相同半径位置上的)磁道的集合,柱面上的数据可以无需移动可动读写头来进行读取

DataOrganization-Cylinder.png

3.1.4 磁盘格式化

  • 磁盘格式化(Disk Format)是将磁盘划分为磁道和扇区的过程
  • 格式化过程中可能会发现一些有缺陷的扇区或磁道,这些区域会被标记为不可用
  • 格式化信息通常占磁盘总存储容量的15%左右

3.2 磁盘的访问效率

  • 磁盘的访问效率主要由磁盘访问时间(Access Time)和数据传输速率(Transfer Rate)决定
    • 磁盘访问时间=寻道时间+旋转延迟
      • 寻道时间(Seek Time):读写头移动到目标磁道所需的时间,通常平均为5~8ms
      • 旋转延迟(Rotational Latency):读写头定位到目标磁道后,等待目标扇区旋转到读写头下方的时间,平均为磁盘旋转半圈所需的时间
    • 数据传输速率=单位时间内磁盘传输的数据量=数据量/传输时间
      • 传输时间(Transfer Time):读写头定位到目标扇区后,数据传输所需的时间
  • 读写数据的总时间=寻道时间+旋转延迟+传输时间

TransferRate.png

3.3 硬盘的相关例题

二级存储例题1-4.png

二级存储例题5-6.png

  • 下面是一道大题

Chap8T7.png

Chap8AnsT7.png

四、存储器层次结构

4.1 层次结构

  • 理想的存储器应当具备以下三种性质
    • 价格低
    • 延迟小(SRAM访问速度快,但贵而容量小)
    • 容量大(DRAM便宜而容量大,但访问速度慢)

存储器的价格与速度对比.png

  • 我们难以同时满足既快又大又便宜,所以存储分为如下多个等级结构(Memory Hierarchy),大容量的在底层(存储器层次结构不是存储器的分配方式,而是一种层级结构)

存储器层次结构.png

  • 存储器层次结构利用了SRAM的速度和磁盘的容量,给用户造成存储器速度快、容量大的假象
  • 存储器层次结构不会限制程序大小,且会使得程序执行得更快

4.2 缓冲区

  • 我们用层次结构上层的存储器(快小)来存储相邻(Adjacent)下层存储器(慢大)存储的数据的子集,以确保大部分处理器需要的数据能够被快速访问到,两者之间会相互进行数据的同步,此时上次存储器就是下层的缓冲区(Buffer)
  • 类比我们对csv文件进行Parsing的时候,先把数据分成行,再将行分成单个字,再对字内的分隔符进行解析,最终得到最小的分析单元进行解析得到需要的数据,每个大的层次结构都被小的Buffer进行了Parsing

层次结构缓冲区示意.png

  • 当我们访问某个数据b
    • Hit:若其本来就在Buffer内,则直接访问(如下图14就可以直接取用)
    • Miss:若不存在,则需要从下层存储器中进行Fetch同步(如下图的12的取用)

层次结构缓冲区的使用.png

4.3 局部性原理

  • 局部性原理(Principle of Locality)指的就是如果一个数据第一次被访问,那么就会将其相邻的数据从相邻下层拷贝到上层,以便下次更快地访问
  • 时间局部性原理(Temporal Locality)指的是将最新近读取过的数据存放在上层Buffer内,使其与处理器的距离更近

时间局部性原理.png

  • 空间局部性原理(Spatial Locality)指的是将存储的相邻信息的整个Block取出放到上层Buffer内

空间局部性原理.png

本文由作者按照 CC BY-NC-SA 4.0 进行授权