本章依然涉及的概念较多,做知识储备
在第一章内存外存的时候涉及到了存储器层次结构,今天对这一部分深入了解
首先做一个划分:
1 寄存器是CPU芯片内部的存储设备
2 高速缓存(SRAM)、内存存储(DRAM)以及图中没有标出的ROM都是内存(内存条)
3 磁盘是外存,磁盘分为硬盘(机械硬盘HDD 固态硬盘SSD)、U盘等等。。
根据这个划分,介绍内存外存各自使用的技术
内存中使用的存储单元芯片主要是两种,RAM(随机访问存储器)、ROM(非易失性存储器)
其中RAM的访问读写的速度更快,但RAM有一个劣势:如果断电之后RAM会丧失它的所有信息
这也是为什么要引入ROM,ROM的意义在于关电之后依然能够保存它们的信息
ROM用来存储系统信息、BIOS程序等需要断电保留的程序信息(这些存储在ROM中的程序称为固件),计算机开机后先运行ROM中的固件。
RAM主要分为两类,静态RAM(SRAM),动态RAM(DRAM)
SRAM用来作为寄存器和主存之间的高速缓存存储器,具有双稳态特性,只要有电就可以保持它的值,它的硬件位置可能在内存条上,也有可能在CPU芯片上。
DRAM用来作为内存以及图形系统的帧缓存区,对电子干扰十分敏感,在有电情况下要通过周期性的读出来重写刷新内存中的每一位,它的位置就是内存条上。
SRAM比DRAM的容量小,但读写速度更快,同样更贵。
ROM称为只读存储器,但实际上他是可以进行读写操作的,依据它被重写的次数分类
PROM:编程ROM,只可以被编程一次,之后就只能读操作
EPROM:可擦除可编程ROM,可读可写,基于这种芯片开发出闪存(FLASH)芯片,为电子设备提供快速持久的非易失性存储(例如SSD固态硬盘)
外存也就是磁盘,磁盘分为硬盘、U盘、软盘(目前已被淘汰)等等,是用来存储大量数据的存储设备,它的容量大了很多,同样它的读写速度就慢了很多
目前硬盘作为主流,主要分为两种,传统机械硬盘(HDD)固态硬盘(SSD)
SSD读写由于HDD,当然次于我们上面介绍的内存,例如DRAM
传统的机械硬盘是由盘片构成的,利用读写头读取存储在盘片表面的信息,磁盘中包含一个或多个这样的盘片并装封到密封的容器中
固态硬盘则是基于我们上面讲到的闪存FLASH存储技术,利用FLASH芯片代替盘片
SSD中的读操作优于写操作,SSD中的写操作是基于 块 的,经过一定次数的重复写之后,这个块就会被磨损,不可使用。这就是SSD的一个缺陷:底层闪存块会磨损,当然这个重复写的次数足够满足我们日常的操作
以上就是存储器硬件上的层次结构,和我们日常中名词联系起来
现在介绍在程序上的局部性
一个编写良好的计算机程序要具有良好的局部性,局部性分为两种:时间局部性 空间局部性
时间局部性: 一个引用过一次的内存位置,在不久之后再次被多次引用
空间局部性: 一个引用过一次的内存位置,在不久之后引用它附近的内存位置
所以我们有:
1 一旦从存储器读入了一个数据对象,就尽可能的多使用它,这样会使得程序中的时间局部性较大
2 按照数据对象存储在内存中的顺序,以步长为1的读取数据,可以使得程序中的空间局部性较大
举个例子:如果数据对象是按行存储的(数组),那就一行一行的读取它
步长尽可能为1,不要一会在最开头,一会在最末尾的来回跳着读取
3 把注意力放在内循环上,大部分计算和内存访问都发生在内循环上
这一部分还需要深入了解,先占坑