EdwardJ

Stay Hungry Stay Foolish

0%

计算机原理-计算机的存储器

本系列文章仅作为我个人学习笔记的概要,所有资源来自慕课网,请勿用作商业用途,如需转载请注明出处。

往期文章链接。

计算机原理-计算机发展史简述
计算机原理-计算机的总线与IO设备

计算机组成概览

本文主要概述计算机组成中的计算机的存储器相关内容。

计算机存储器概览

存储器的分类

按存储介质分类
按存取方法分类

存储器的层次结构

存储器的层次结构
缓存主存-主存辅存

名称 原理 实现 目的
缓存-主存 局部性原理 在CPU与主存之间增加一层速度快(容量小)的Cache 解决主存速度不足的问题
主存-辅存 局部性原理 主存之外增加辅助存储器(磁盘、SD卡、U盘等) 解决主存容量不足的问题

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中

计算机的主存储器与辅助存储器

  • 主存储器是指计算机的内存
  • 辅助存储器指计算机的磁盘

主存储器——内存

主存储器

  • RAM(随机存取存储器:Random Access Memory)
  • RAM通过电容来存储数据,必须隔一段时间就刷新一次
  • 如果断电,那么一段时间后将丢失所有数据

主存结构与CPU的交互

系统位数 最大支持内存容量
32位系统 $2^{32} = 4 * 2^{30} = 4GB$
64位系统 $2^{64} = 2^{34} * 2^{30} = 2^{34}GB$

辅助存储器——磁盘

磁盘的物理结构

  • 表面是可磁化的硬磁特性材料。
  • 移动磁头径向运动读取磁道信息。
    磁盘
    磁盘结构
    盘片结构
    在盘片上,我们关心的是磁道扇区磁头位置磁头方向

磁盘的读取算法

我们假设,盘片的结构如下图,由外到内磁道编号为1~5。

假设磁道编号

1. 先来服务算法

  • 按顺序访问进程的磁道读写需求
    举例:磁头在磁道4,磁头方向向外。现读取磁道 1 4 2 3 1 5
    按照先来服务算法,读取顺序为 1 4 2 3 1 5,过程中,磁头依次移动。

2. 最短寻道时间优先

  • 与磁头当前位置有关,优先访问离磁头最近的磁道
    举例:磁头在磁道4,磁头方向向外。现读取磁道 1 4 2 3 1 5
    按照最短寻道时间优先的算法,读取顺序为 4 5 3 2 1 1

3. 扫描算法(电梯算法)

  • 每次只往一个方向移动,到达一个方向需要服务的尽头再反方向移动。
    举例:磁头在磁道4,磁头方向向外。现读取磁道 1 4 2 3 1 5
    按照扫描算法,读取顺序为 4 3 2 1 1 5

4. 循环扫描算法

  • 在扫描算法的基础上,演变出循环扫描算法,只往一个方向扫描。
    举例:磁头在磁道4,每次都向内读取。现读取磁道 1 4 2 3 1 5
    按照循环扫描算法,读取顺序为 4 5 1 1 2 3。该过程中,读完4 5 后达到尽头,磁头回到最外侧,再向内移动读取。

计算机的高速缓存

计算机的高速缓存是为了解决,CPU与主存速度不匹配的问题。

高速缓存的工作原理

高速缓存

首先要了解的两个概念:字块

名称 概念
是指存放在一个存储单元中的二进制代码组合
字块 存储在连续的存储单元中而被看作是一个单元的一组字

图示字与字块

  • 一个有32位
  • 一个字块共B个字
  • 主存共M个字块

字的地址

  • 地址包含两个部分
  • 前m为指定字块的地址
  • 后b位指定字块中的地址

字块大小与字的大小

  • 一个有32位
  • 一个字块共B个
  • 主存共M个字块

举例计算

缓存与主存,存储的逻辑结构类似,缓存的容量较小,缓存的速度更快

缓存工作原理

缓存命中率:CPU从高速缓存取数据的成功率。

  • 命中率是衡量缓存的重要性能指标
  • 理论上CPU每次都能从高速缓存读取数据的时候,命中率为1

命中率公式
访问主存次数:$N_m$
访问Cache次数:$N_c$
命中率为:$h = \frac{N_c}{N_c + N_m}$

访问效率
访问效率也可以作为高速缓存的性能指标

访问效率:e
访问主存时间:$t_m$
访问缓存时间: $t_c$
访问缓存-主存系统平均时间:$t_a = ht_c + (1 - h )t_m$ h就是命中率

$e = \frac{t_c}{t_a} = \frac{t_c}{ht_c+(1-h)t_m}$

高速缓存例子
访问缓存次数$N_c = 2000$
访问主存次数$N_m = 50$
缓存存取时间$t_c = 50ns$
主存存取时间$t_m = 200ns$
求命中率h,访问效率e,平均访问时间$t_a$

$h = \frac{N_c}{N_c+N_m} = \frac{2000}{2000+50} = 0.97$
$t_a = ht_c+(1-h)t_m = 0.97 \times 50+(1-0.97) \times 200 = 54.5ns$
$e = \frac{t_c}{t_a} = \frac{t_c}{ht_c+(1-h)t_m} = \frac{50}{0.97 \times 50+(1-0.97) \times 200} = 0.917$

因此,命中率h=0.97,访问效率e=0.917,平均访问时间$t_a = 54,5ns$

我们的目标就是:提高命中率和缓存访问效率

高速缓存的替换策略

高速缓存的替换时机

缓存替换的四种策略

策略名称 算法
随机算法 每次需要从主存中选取数据替换到缓存中时,随机选取。
先入先出算法(FIFO) 把高速缓存看作是一个先入先出的队列
优先替换最先进入队列的字块
最不经常使用算法(LFU) 优先淘汰掉最不经常使用的字块
需要额外的空间记录字块的使用频率
最近最少使用算法(LRU) 优先淘汰一段时间内没有使用的字块
有多种实现方法,一般使用双向链表
如果内容对你有用,赏我一杯咖啡未尝不可^_^