计算机组成原理与汇编语言(四)
文章目录
承接上文,计算机组成原理与汇编语言(三)
存储器的层次结构
1.存储技术
存储器的概述
-
用途 : 为CPU存放指令
随机访问存储器
-
分类:
- SRAM(静态RAM):
- 一直供电,它就不期限地保持记忆的状态(1或0),称为静态存储器
- 特点:小,快,贵
- 用途:高速缓存
- DRAM(动态RAM):
- 信息的存储(1或0): 电容上电荷的有无
- 刷新: 电容上的电荷会随着时间和温度而减少, 为保持所存信息, 必须定时补充电荷, 即刷新,称为动态存储器.
- 特点:大,慢,便宜
- 用途: 主存 (内存)
- SRAM(静态RAM):
-
存储原理
64*4位:选择线64条,地址线6条, 26 = 64, 4条数据线
拓展:
一吉字节有多大?不幸地,像K (kilo), M (mega), G (giga)和T (tera)这样的前缀的含义依赖于上下文。·对于与DRAM和SRAM容量相关的计量单位,通常K=210 , M=220 , G=230 ,而T = 240 。对于与像磁盘和网络这样的I/0设备容量相关的计量单位,通常K= 103 , M = 106 , G = 109 ,而 T = 1012 。速率和吞吐量常常也使用这些前缀。
存储器扩展
-
位向扩展 ---- 加大字长
-
1M × 4位 -> 1M × 8位 (1M = 220 , 1K = 210 )
-
连接方法:
- 各片地址线、控制线并联
- 数据线单独引出
即:两片芯片按地址看作一片,不需要片选信
-
-
字数扩展 ---- 增多字数
- 1M × 8位 -> 2M × 8位
- 连接方法
- 各片地址线、数据线、读/写控制线并联
- 采用片选信号区分不同芯片,片选由地址经译码器给出
- 1M 的片子需20位地址线,组成2M的存储器共需21位地址线,多出的1位做片选
-
字位同时扩展
- 1K × 1位 -> 8K × 8位 共需8×8=64片
- 方法:
- 先按位扩展得到1K×8位
- 再按字扩展得到8K×8位
与CPU的连接
2. 局部性(重点)
- 局部性原理: 往往程序要使用的数据和指令就是刚刚使用过的或其附近的
时间局部性:
- 最近被访问过的指令和数据很可能再次被访问
空间局部性:
- 这些被访问的指令和数据往往集中在一小片存储区
举个栗子
sum = 0;
for (i = 0; i< n; i++)
sum += a[i];
return sum;
- 对于数据来说
- 连续的访问数组元素 <-- 空间局部性
- 变量sum以及i的访问 <-- 时间局部性
- 对于指令来说
- 循环体中的指令按循序执行. <-- 空间局部性
- 循环体被执行多次. <-- 时间局部性
3.存储器的层次结构
- 属性:
- 硬件方面:
- 存储技术:小,快,贵
- CPU与主存速度差异增大
- 软件方面:
- 好的程序有好的局部性
- 硬件方面:
多级存储系统
-
目的:
- 解决存储的容量,速度和成本三者之间的矛盾
-
依据原理:程序局部性原理
-
实现:三个层次:
- Cache - 主存 - 辅存
- 速度递减,容量递增,成本低
若能使CPU大部分时间访问高速缓存Cache,速度最快;
仅在从Cache中读不到数据时才去读主存,速度略慢但容量更大
当从主存中还读不到时才去成批量读辅存,速度很慢容量极大;
这就很好地同时解决了对速度、容量、成本三个方面的需求。
- Cache - 主存 - 辅存
4. 高速缓存
缓存的概念
- 命中:
- 未命中
未命中的种类
- 冷不命中
- 出现在刚开始cache空的时候
- 冲突不命中
- 多个数据都要使用同一个块
- 容量不命中
- cache太小
- 小容量,快速的,全部功能由硬件完成.
- 保存着主存中频率使用的块
- 在Cache中先寻找数据,找不到才去主存找
Cache命中率
-
Cache的命中率h
- Nc : 访问Cache的总次数
- Nm : 访问主存的总次数
- Nc + Nm : 访问内存的总次数
- h = Nc /(Nc + Nm )
-
Cache / 主存系统的平均访问时间ta :
-
tc : 命中时, Cache的访问时间
-
tm : 未命中时, 主存的访问时间
-
ta = h·tc + (1-h)·tm tc < tm
-
Cache是主存的一个子集,是主存的副本,以块为单位与主存交换信息
- 地址映射:应用某种方法把主存地址定位到Cache中。
cache对于CPU来说是透明的,cpu访问存储器(主存),发出主存地址,cache需要解析该地址,以判断是否cache命中。
高速缓存 – 块和行
- 映射:行与块的映射
- 三种映射:
-
- 直接映射
-
- 全相联映射
-
- 组相联映射
-
1. 直接映射
- 设: i : cache 的行号, j:主存的块号, m : cache 的总行数
- 则映射时需满足 : i = j mod m
优点 : 硬件简单,成本低
缺点 : 相距m倍的块易发生冲突
适合 : 大容量 cache 使用, 行多则冲突少
2. 全相联映射方式
- 块地址与块内容一起存于cache
- 主存中的任一块可映射到cache中的任一行
优点 : 灵活, 主存任一块 -> Cache任一行
缺点:全相联比较, 电路复杂, 成本高
适合 : 小容量cache
3. 组相联映射方式
-
设 : Cache分为u组v行, Cache总行数 : m = u × v, q : cache的组号
-
则映射时需满足 : q = j mod u
-
v路组合相联cache:
- 每组行数v一般取 2、4、8等较小值,
- v路规模比较器较易实现
优点: 硬件较简单, 成本比较低,有一定的灵活性, 不易发生冲突
适合 : 普通使用
高速缓存 – 替换策略
- Cache应当尽量保持最新数据
- 当Cache满时, 再来新数据, 则需要替换原cache中的数据
- 对直接映射的cache来说,只要把此特定位置上的原主存块换出cache即可.
- 对全相联和 组相联 cache来说, 就要从允许存放新主存块的若干特定行中选取一行换出,涉及到替换算法
-
最不经常使用算法(LFU算法)
-
近期最少使用算法(LRU算法)
-
随机替换算法
期末复习完…………(遍历复习完课件和书)
总结: 教材是《深入理解计算机系统》第二版 + 老师课件 进行复习
主要学习章节 :一, 二 , 三 , 四 , 六章, 后面的都没学,打算后续自学,有空的话继续补充,我觉得这本书将计算机的底层知识进行很系统地分析,总结也很完备, 但也有很多看不懂的地方, 怎么说呢, 计算机就是一个神秘而又奥妙的东西。计算机底层的知识还是很有用的, 这些是学技术的时候学不到的基础理论知识,但却能处处体现出来。 个人觉得沉下心去学,还是很有意思的,虽然基础理论偏枯燥,但学好基础,对于后续的技术学习会很有帮助,有时间的话回来复盘一下,发现看多了,前面和后面的知识就会很自然而然的联系起来, 学得时候发现很分散, 几乎没啥关系,学完之后,就发现他们的联系很大,前面为后面铺垫, 后面又能把前面的联系起来,试图在告诉你之前的没有白学,真的很有意思!