教材学习内容总结
第六章 存储器层次结构
一个简单的计算机系统模型:CPU执行指令,存储器系统为CPU存放指令和数据。存储器系统是一个线性的字节数组,CPU能够在一个常数时间内访问每个存储器的位置。
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。
CPU寄存器保存着最常用的数据。
高速缓存存储器作为一部分存储在相对慢速的主存储器中的数据和指令的缓冲区域。
主存暂时存放存储在容量较大、慢速磁盘上的数据
以上的访问周期依次增长。
计算机的一个基本属性:局部性。具有良好局部性的程序比局部性差的程序更多的倾向于从存储器层次结构较高层次中访问数据项。
6.1存储技术
随机访问存储器(RAM):
静态SRAM:用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
将每个位存储在一个双稳态的存储器单元里。
每个单元用一个六晶体管电路来实现。
亚稳态:极易改变难以恢复。
动态DRAM:用来作为主存和图形系统的帧缓存区。
将每个位存储位对一个电容的充电。
每个单元由一个电容和一个访问晶体管组成。
对比图:
传统的DRAM:DRAM芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d*w的DRAM总共存储了dw位信息。超单元被组织成一个r行c列的长方形阵列,这里rc=d。每个超单元有形如(i,j)的地址,i表示行,j表示列。
连接存储控制器,w位,先发i,再发j。响应RAS,CAS。
非易失性存储器
如果断电,DRAM和SRAM会丢失他们的信息——易失
ROM只读存储器:以他们能够被重编程(写)的次数和他们进行重编程所用的机制来区分的。
PROM/可擦写可编程ROM/闪存/。
存储在ROM设备中的程序通常称为固件。
访问主存
总线是一组并行的导线,能携带地址、数据和控制信号。
典型的连接CPU和主存的总线结构
磁盘存储
磁盘构造
磁盘是由盘片构成的。每个盘片有两面或称为表面,表面覆盖磁性记录材料。
旋转主轴,以固定旋转速率旋转,5400~15000转每分钟。
每个表面由一组称为磁道的同心圆组成的,每个磁道被划分为一组扇区,每个扇区包含相等数量的数据位,这些数据编码在扇区上的慈祥材料中。扇区之间由一些间隙分隔开,这些间隙中不存储数据位。扇区存储用来标识扇区的格式化位。
磁盘容量
一个磁盘上可以记录的最大位数称为它的最大容量。决定因素:
记录密度
磁道密度
面密度
容量公式:
磁盘操作
寻道——磁盘用读/写头来读写存储在磁性表面的位,读写头连接到一个传动臂一端。通过沿着半径半径轴前后移动这个传动臂,驱动器可以将读写头定位在盘面的任何磁道上。
磁盘以扇区大小的块来读写数据。对扇区的访问时间有三个主要的部分:寻道时间,旋转时间和传送时间。
逻辑磁盘块
编为逻辑快序列。将一个逻辑块翻译成一个(盘面、磁道、扇区)的三元组。,这个三元组唯一的标识了物理扇区。
连接到I/O设备
通过I/O总线
三种不同类型的设备连接到总线:
+通用串行总线
+图形卡
+主机总线适配器
访问磁盘
CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。
具体操作:
+CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关的存储器映射地址,发起一个磁盘读
+磁盘控制器读扇区,并执行到主存的DMA传送
+当DMA传送完成时,磁盘控制器用中断的方式通知CPU
注:DMA直接存储器访问。
6.2局部性
局部性原理:一个编写良好的计算机程序更倾向于引用邻近于其他最近的引用过的数据项的数据项,或者引用用的数据项本身。
两种不同的形式:时间局部性、空间局部性。
对程序数据引用的局部性和取指令的局部性。
在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。
在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存。
6.3存储器层次结构
存储器结构中的缓存
概念解释
高速缓存:小而快速的存储设备,它作为存储在更大、更慢的设备中的数据对象的缓冲区域。
缓存:使用高速缓存的过程
中心思想:层次结构中的每一层都缓存来自较低一层的数据对象。
数据总是以块大小为传送单元在第k层和第k+1层之间来回拷贝。
- 缓存命中
当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。如果d刚好缓存在第k层中,即为缓存命中。
- 缓存不命中
第k层没有缓存对象d。即为缓存不命中。
- 覆盖
缓存不命中的种类
强制性不命中:冷缓存
冲突不命中:限制性的放置策略
容量不命中:缓存太小
- 缓存管理
管理缓存的逻辑可以是硬件、软件或相结合。
举例——管理寄存器文件
6.4高速缓存存储器
典型总线结构
通用的高速缓存存储器结构
S=2^s个高速存储数组
每个数组包含E个高速缓存行
每个行由一个B=2^b字节的数据块组成
一个有效位指明这个行是否包含有意义的信息。
t=m-(b-s)个标记位,唯一的标识存储在这个高速缓存行中的块。
一般而言,高速缓存的结构可以用元组(S.E.B,m)来描述。高速缓存的大小指的是所有块的大小的和。C=SEB
直接映射高速缓存
基本结构:
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程分为以下三部:
+组选择
+行匹配
+字选择
若不命中,行替换
组相联高速缓存
基本结构:
每个组都保存有多于一个的缓存行。
一个1<E<C/B的高速缓存通常称为E路组相联高速缓存。
同样具有三个步骤,但是更为复杂。
全相联高速缓存
基本结构:
一个全相联高速缓存是由一个包含所有高速缓存行的组(E=C/B)组成的。
关于写的问题
命中:直写和写回
不命中:写分配和非写分配
高速缓存参数的性能影响
性能指标:
-
不命中率:=不命中数量/引用数量
-
命中率
-
命中时间
-
不命中处罚
遇到的问题
高速缓存命中然后取出被请求字的三个过程:组选择 行匹配 字抽取部分看了好几遍也不是特别明白,希望老师能在课上细讲
git
网址:https://git.oschina.net/jokebright/linux
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 50/50 | 1/3 | 12/25 | |
第三周 | 150/200 | 1/4 | 12/37 | |
第五周 | 50/250 | 2/6 | 18/55 | |
第六周 | 30/280 | 2/8 | 20/75 | |
第七周 | 30/310 | 1/9 | 20/95 |