重要知识点
三种常见的存储技术
RAM,ROM,磁盘。
随机访问存储器(RAM)
- 分类:静态RAM(SRAM)和动态RAM(DRAM)。
- 两类RAM区别:静态RAM比动态RAM更快,但也贵得多且功耗更大。
- SRAM的特点:SRAM每个位都存储在一个双稳态的存储器单元里,因此其存储单元具有双稳态特性,只要有电,它就会永远保持它的值。即使有干扰,例如:电子噪音,来扰乱电路,当干扰消除时,电路就会恢复到稳定值。
- DRAM的特点:DRAM将每一个位存储为对每个电容的充电。所以其存储器单元对干扰非常敏感。当电容的电压被扰乱之后,它就永远不会恢复了。暴露在光线下会导致电容电压改变。
非易失性存储器(ROM)
RAM断电会丢失它们的信息,所以它们是易失的,而ROM即使断电后也仍然保存着它们的信息。由于历史原因,虽然ROM中有的类型即可以读也可以写,但是它们整体上都称为只读存储器。ROM是以它们能够被重编程(写)的次数和它们进行重编程所用的机制进行区分。
- PROM(Programmable ROM)只能被编程一次。PROM的每个存储单元都有一种熔丝,它只能用高电流熔断一次。
- EPROM(Erasable Programmanble ROM 可擦写可编程ROM)能够擦除和重新编程的数量级能够达到1000次。
- EEPROM(Electrically Erasable PROM 电子可擦除ROM)能够被编程的次数的数量级可以达到次。
- FLASH(flash memory 闪存)是一类非易失性存储器,基于EEPROM,它已经成为了一种重要的存储技术。
访问主存
数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回。每次CPU和主存之间的数据传送都是通过一系列的步骤来完成的,这些步骤称为总线事物。
- 读事物:从主存传送数据到CPU。
- 写事物:从CPU传送事物到主存。
- 总线:一组并行的导线,能携带地址、数据和控制信号。
|--可分为数据总线、控制总线、地址总线、系统总线、存储总线、I/O总线等。如下图所示:
磁盘存储
磁盘是广为应用的保存大量数据的存储设备,存储数据的数量级可以达到几百到几千千兆字节。
磁盘由盘片构成的。每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟。磁盘通常包含一个或多个这样的盘片,并封装在一个密封的容器内。
磁盘的每个表面是由一组称为磁道的同心圆组成的。每个磁道被划分为一组扇区。每个扇区包含相等数量的数据位(通常是512字节),这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙分隔开,这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位。磁盘制造商通常用术语柱面来描述多个盘片驱动器的构造,这里,柱面是所有盘片表面上到主轴中心的距离相等的磁道距离的集合。
磁盘容量
一个磁盘上可以记录的最大位数称为它的最大容量,或者简称为容量。磁盘容量是由以下因素决定的:
- 记录密度(位/英寸):磁盘一英寸的段中可以放入的位数。
- 磁道密度(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁盘数。
- 面密度(位/平方英寸):记录密度与磁道密度的乘积。
计算公式如下:
磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂的一端。
寻道:通过沿着传动臂,驱动器将读/写头定位在盘面上的任何磁道上。
磁盘以扇区大小的块来访问数据。对扇区的访问时间有三个主要的部分:
- 寻道时间:为了读取某个目标扇区的内容,传动臂首先将读/写头定位到包含目标扇区的磁道上。移动传动臂在盘面上所需时间称为寻道时间。
- 旋转时间:一旦读/写头定位到了期望的磁道,驱动器等待扇区的第一个位旋转到读/写头下。这个步骤的性能依赖于当读/写头到达目标磁道时盘面的位置和磁盘的旋转速度。在最坏的情况下,读写头刚刚错过了目标扇区,必须等待磁盘转一整圈。因此最大旋转延迟如下:
- 传送时间:当目标扇区的第一个位位于读/写头下时,驱动器就可以开始读或者写该扇区的内容了。一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。因此,我们可以粗略第估计一个扇区以秒为单位的平均传送时间如下:
逻辑磁盘块
为了对操作系统隐藏磁盘构造的复杂性,现代磁盘将它们的构造呈现为一个简单的视图,一个B个扇大小的逻辑块序列,编号为0,1,…,B-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。
操作系统的I/O操作的具体过程
例:当读一个磁盘扇区的数据到主存,操作系统会发送一个命令道磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一地标识了对应的物理扇区,控制器上的硬件解释这个三元组,将读/写头移动到适当的柱面,等待扇区移动到读/写头下,将读/写头感知到的位放到控制器上的一个小缓冲区中,然后将它们拷贝到主存中。
局部性原理
一个编写良好的计算机程序常常具有良好的局部性。也就是说,它们倾向于引用临近与其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性被称为局部性原理。
局部性通常有两种不同的形式:
- 时间局部性:在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来多次引用。
- 空间局部性:在一个具有良好的空格局部性的程序中,如果一个存储器位置被引用一次,那程序可能在不远的将来引用附近一个位置的存储器。
数据引用局部性:对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在存储器以大步长跳来跳去的程序空间局部性会很差。
取指令局部性:对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
存储器的层次结构
存储器结构的中心思想:对于每一个k,位于k层的更小更快的存储设备作为位于k+1层的更大更慢的存储设备的缓存。
高速缓存结构
若一个计算机系统,其中每个存储器地址有m位,形成M=个不同的地址。如下图所示,这样的一个机器的高速缓存被组织成一个S=个高速缓存组的数组。每个数组包含E个高速缓存行。每一行是由一个B=字节的数据块组成的,一个有效位指明这个行是否包含有意义的信息,还有t=m-(b+s)个标记位(是当前块的存储器地址的位的一个子集),它们唯一地标识存储在这个高速缓存行中的块。
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:1)组选择,2)行匹配,3)字抽取。
分类:
1.直接映射高速缓存:每组只有一行(E=1)的高速缓存。
2.组相连高速缓存:每个组都保存多于一行的高速缓存行(1<E<C/B)。
3.全相连高速缓存:由一个包含所有高速缓存行的组(即E=C/B)组成。
遇到的问题及解决方法
问题:
磁盘为什么需要转两圈才能读完一个扇区?
解决方法:
在博客园提问。因为磁盘有两面。
家庭作业
6.29
由练习题6.13图得
组7中命中的十六进制存储器地址为:
(1101111011100)=0x1BDC
(1101111011101)=0x1BDD
(1101111011110)=0x1BDE
(1101111011111)=0x1BDF
组5中命中的十六进制存储器地址为:
(0111000110100)=0x0E34
(0111000110101)=0x0E35
(0111000110110)=0x0E36
(0111000110111)=0x0E37
组4中命中的十六进制存储器地址为:
(1100011110000)=0x18F0
(1100011110001)=0x18F1
(1100011110010)=0x18F2
(1100011110011)=0x18F3
(0000010110000)=0x00B0
(0000010110001)=0x00B1
(0000010110010)=0x00B2
(0000010110011)=0x00B3
组2中没有命中的存储器地址。
6.30
A.
CT |
CT |
CT |
CT |
CT |
CT |
CT |
CT |
CI |
CI |
CO |
CO |
B.
操作 |
地址 |
命中? |
读出的值(或未知) |
读 |
0x409 |
否 |
- |
写 |
0x40A |
是 |
- |
读 |
0x833 |
是 |
0xD0 |
参考资料
《深入理解计算机系统》第6章存储器层次结构。