本系列文章仅作为我个人学习笔记的概要,所有资源来自慕课网,请勿用作商业用途,如需转载请注明出处。
往期文章链接。
计算机原理-计算机发展史简述
计算机原理-计算机的总线与IO设备
本文主要概述计算机组成中的计算机的存储器相关内容。
计算机存储器概览
存储器的分类
存储器的层次结构
名称 | 原理 | 实现 | 目的 |
---|---|---|---|
缓存-主存 | 局部性原理 | 在CPU与主存之间增加一层速度快(容量小)的Cache | 解决主存速度不足的问题 |
主存-辅存 | 局部性原理 | 主存之外增加辅助存储器(磁盘、SD卡、U盘等) | 解决主存容量不足的问题 |
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
计算机的主存储器与辅助存储器
- 主存储器是指计算机的内存
- 辅助存储器指计算机的磁盘
主存储器——内存
- RAM(随机存取存储器:Random Access Memory)
- RAM通过电容来存储数据,必须隔一段时间就刷新一次
- 如果断电,那么一段时间后将丢失所有数据
系统位数 | 最大支持内存容量 |
---|---|
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) | 优先淘汰一段时间内没有使用的字块 有多种实现方法,一般使用双向链表 |