01. 存储管理
存储器的层次化结构
计算机存储设备可被粗略分为内存储器(Main Memory)与外存储器(External Memory)两大类,内存存取速度快,但容量小,价格昂贵,而且不能长期保存数据,在不通电情况下数据会消失;外存储器存取速度相对较慢,却可以吃持久化存储。如果进行更加细致地划分,每个计算机系统中的存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上至下,设备变得访问速度越来越慢、容量越来越大,并且每字节的造价也越来越便宜。
最上层的是寄存器,存取时间极快,但容量小。其次是高速缓存,存取时间次之,容量比寄存器大一些。再往下就是我们常见的内存、硬盘,存取速度递减,但容量越来越大。
Speed | Memory | Description |
---|---|---|
Fastest | Cache | 高速缓存是实际上嵌入在 |
RAM | 处理器的所有指令和存储地址都必须来自 |
|
Slowest | Disk | 我们都熟悉软盘或 |
了解内存层次结构的重点是速度和大小之间的权衡-内存越快,内存越小:
- 空间局部性(Spatial locality)表明,块内的数据可能会一起访问。
- 时间位置(Temporal locality)表明最近使用的数据可能很快会再次使用。
这意味着,通过在实际中尽可能快地实现存储相关信息(空间)小块的快速可访问存储器(时间
主存
主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(即数组索引
现代
当系统需要读取主存时,则将地址信号放到地址总线上传给主存,主存读到地址信号后,解析信号并定位到指定存储单元,然后将此存储单元数据放到数据总线上,供其它部件读取。写主存的过程类似,系统将要写入单元地址和数据分别放在地址总线和数据总线上,主存读取两个总线的内容,做相应的写操作。这里可以看出,主存存取的时间仅与存取次数呈线性关系,因为不存在机械操作,两次存取的数据的“距离”不会对时间有任何影响,例如,先取
寄存器与高速缓存
寄存器文件在层次结构中位于最顶部,也就是第
块设备与磁盘
块设备将信息存储在固定大小的块中,每个块都有自己的地址。对操作系统而言,块设备是以字符设备的外观展现的,例如
-
扇区:磁盘盘片上的扇形区域,逻辑化数据,方便管理磁盘空间,是硬件设备数据传送的基本单位,一般
512Byte ; -
块:块是
VFS 和文件系统数据传送的基本单位,必须是扇区的整数倍,格式化文件系统时,可以指定块大小(一般512,1024,2048,4096 字节) ; -
段:一个内存页或者内存页中的一部分,包含一些相邻磁盘扇区中的数据;磁盘的每个
IO 操作就是在磁盘与一些RAM 单元之间相互传一些相邻扇区的内容,大多数情况下,磁盘控制器采用DMA 方式进行数据传送。如果不同的段在RAM 中相应的页框是连续的并且在磁盘上相应的数据块也是相邻的,就可以在通用块层合并它们,产生更大的内存区域,这个区域称为物理段。
通常情况下,我们是通过文件系统来访问块设备,也可以直接使用裸设备,通过指定偏移和大小来读写裸设备。常见的块存储设备就是物理磁盘,磁盘是一种直接存取的存储设备