机械磁盘
一般由多个盘片组成,其中盘片的表面被划分成了一圈一圈的磁道,每个磁道又被分成了多个扇区,通常情况下,每个扇区可以存储512个字节的数据,其中扇区与扇区之间会有一些间隙,这些间隙是用来存放扇区的标识信息,不能用来存储数据
磁盘通过读/写头来读写存储在盘片表面的数据
单位换算
对扇区的访问时间主要分为三部分,分别是寻道时间、旋转时间以及传送时间
从操作系统的视角来看,整个磁盘被抽象成了一个个的逻辑块序列
磁盘内部有一个小的固件设备,称为磁盘控制器,它维护着逻辑块号与实际磁盘扇区之间的映射关系。可以使用(盘面,磁道,扇区)这样的三元组来唯一标识每一个物理扇区 ,磁盘控制器上的固件程序的任务就是将逻辑块号翻译成对应的三元组信息
固态硬盘
每一颗闪存芯片是由一个或者多个Die组成,每个Die可以分为多个plane,具体如图所示,每个plane包含多个block,Block的内部又分成了多个page
对于不同规格的闪存芯片,其中page大小可能并不相同,在有些闪存芯片中一个page的大小是512字节,还有的是1KB或者2KB,甚至更大。
处理器芯片中使用了大量的基于SRAM的高速缓存(cache),高速缓存之所以可以降低CPU的访存延迟,是因为应用程序具有局部性的特点。
局部性
时间局部性:被引用过的内存位置很可能在不远的将来还会被多次引用
空间局部性:如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置
例子:
int sumvec(int v [N])
int i,sum =0:
for (i=0;i N;i++)
sum +=v[i];
return sum;
循环体中的变量要么有好的空间局部性,要么有好的时间局部性。
存储器层次结构
中心思想:
速度更快、容量更小的存储设备作为速度更慢、容量更大的存储设备的缓存
Cache Hit(缓存命中)与Cache Miss(缓存不命中)
从第k层的数据块中检索是否包含目标数据d的副本,如果目标数据d刚好缓存在第k层中,我们将这种情况称为缓存命中,否则为缓存不命中。当发生不命中时,第k层的缓存要从第k+1层取出包含目标数据的块,如果第k层的缓存已经满了,这时包含目标数据的块就会覆盖现存的一个块。
Cache:
结构
一个cache分为s个set,一个set有E个cache line
valid为有效位,长1bit,为1表示有效,为0无效
tag标记是用来确定目标数据是否存在于当前的cache line中
数据块就是一小部分内存数据的副本,大小用B来表示
通常来说,cache的结构可以用元组(S,E,B,m)来描述
因此cache的容量可以通过SXEXB计算得到