存储器是操作系统管理的重要资源之一,存储器中为CPU存放指令和数据,存储器是一个线性的字节数组,CPU能够在一个常数时间内访问每个存储器位置。
存储区是一个具有不同层次,成本,访问时间的存储设备的层次结构,CPU寄存器保存着最常用的数据,<靠近CPU内部的小的,速度较快的高速缓存存储器,作为一部分存储相对较慢的主存储器中的数据和指令的缓冲区>。以上说法可能有点抽象,这么说吧,因为现在CPU运算速率是相当快的,而直接从内存中访问数据的速度却是是相当慢的,靠近CPU的高速缓存,就是解决这一矛盾的,在CPU运算器期间,高速缓存提前获取内存中的部分指令和数据,CPU运算完后,可以先从高速缓存中找数据,访问高速缓存的速度相比于内存更快,要是在高速缓存中找不到数据,CPU就访问内存,找需要的数据。
这下应该理解那句话的意思了。除了高速缓存,接下来就是主存,再就是磁盘,现在还有一种相比于磁盘更快一点的存储设备,是固态硬盘,访问速度慢与主存。按照存储器这样的出现介绍顺序,访问速度越慢的存储器,价格越低廉,容量越大。访问速度越快的,价格约昂贵,容量越小。其中局部性好的存储器,访问速率越快。
- 随机访问存储器
随机访问存储器分为静态存储器(SRAM)和动态存储器(DRAM)。静态相比于动态访问速度更快。SRAM用来作为高速缓存的存储器。DRAM作为主存的存储器。
只要有供电,SRAM就会保持稳定,与DRAM不同,不需要刷新,SRAM的存取比DRAM快,SRAM对诸如光和噪音这两样的干扰不敏感,代价是SRAM单元比DRAM单元使用更多的晶体管,因而密集度低,而且更贵,功耗更大。
- 内存模块
每个DRAM被连接到某个被称为内存控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或者从DRAM芯片传送w位。DRAM芯片被封装到内存模块。DRAM中含有多个超单元,每个超单元存储主存的一个字节,而用相应超单元地址为(i, j)的八个超单元来表示主存中字节地址A处的64位字,当要取出内存中地址A中的一个字,内存控制器将A转换成超单元地址(i,j),并将发送到内存模块,然后内存模块再将i和j广播到每个DRAM,作为响应,每个DRAM输出它的(i,j)超单元的八位内容,模块中的电路收集这些输出,并把他们合成64位子,返回给内存控制器。通过多个内存模块连接到内存控制器,能汇聚合成内存,
- 访问主存
数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回,当有读写事件发生时,就会产生总线事务。读事务,主存将数据传给CPU,写事务,CPU传数据到主存。
总线是一行并行的导线,能携带地址,数据和控制信号。取决于总线的设计,数据和地址信号可以共享同一组导线,也可以使用不同的。
- 磁盘存储
磁盘是广为应用的保存大量数据的存储设备,容量可以超级大,读数据的速度相比于DRAM,慢10万倍,相比于SRAM慢100万倍。
磁盘构造:磁盘由盘片构成,每个盘片有两面或者称为表面,表面覆盖有磁性记录材料,盘片中央有一个旋转的主轴。磁盘通常由一个或者多个这样的盘片组成。每个盘片有一组成为磁道的同心圆组成,每个磁道被划分成一组扇区。每个扇区包含一组数据位。扇区由一些格式化位分隔开。
CPU使用一种称为IO映射的技术来向IO设备发送命令,在使用内存映射IO的系统中,地址空间中有一快=块地址是专门为IO设备通信保留的,每个这样的地址称为IO端口,当一个设备连接到总线时,他与一个或多个端口相关联。
磁盘控制器是专门用来访问磁盘的,CPU向磁盘控制器发送访问命令,然后CPU会执行其他的指令,不会等到磁盘控制器返回数据,因为CPU处理时钟是1ns,而磁盘访问速度是毫秒级的,在控制器访问磁盘期间,CPU可以执行千万条指令。所有控制器可以执行读或者写总线事务,不需要CPU干涉这一过程,当扇区中的数据安全到达主存后,控制器通过给CPU发送一个中断信号,这会导致CPU暂停当前的工作,跳转到操作系统例程,这个程序会记录下IO已经完成,然后将控制返回到被中断的地方。处理内存中从磁盘访问的数据。这种数据传送就是DMA,即直接内存访问机制。
- 固态硬盘
固态硬盘是一种基于闪存的存储技术。一个SSD封装有一个或者多个闪存芯片或者闪存翻译层组成,读SSD相比于写要快!
- 局部性
一个编写良好的计算机程序常常具有良好的局部性。他倾向于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身,这种倾向性就是局部性原理。局部性分为时间局部性和空间局部性。一个良好的时间局部性的程序,被引用过一次的内存位置很可能在不远的将来再被多次引用,在一个空间局部性良好的程序中,如果内存位置被引用了一次,那么程序很可能在不远的将来引用附近的内存位置。
重复引用相同变量具有良好的时间局部性。
对于具有步长为k的应用模式的程序,步长越小,空间局部性越好。
对于程序指令来说,循环有好的事件和空间局部性,循环体越小,循环迭代次数越多,局部性越好。