-
计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题。
-
两级存储:Cache-主存、主存-辅存(虚拟存储体系)。
-
局部性原理:总的来说,在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内,包括下面两个方面:
- 时间局部性原理:如果一个数据项正在被访问,那么在近期它很可能会被再次访问,既在相邻的时间里会访问同一个数据项。
- 空间局部性原理:在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的,既相邻的空间地址会被连续访问。
-
高速缓存Cache用来存储当前最活跃的程序和数据,直接与CPU进行交互,位于CPU和主存之间,容量小,速度为内存的5-10倍,由半导体材料构成。其内存是主存内存的副本拷贝,对于程序员来说是透明的。
-
Cache由控制部分和存储器组成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,在则命中,不在则依据一定的算法从主存中替换。
-
地址映射:在CPU工作时,送出的是主存单元的地址,而应从Cache存储器中读/写信息。这就需要将主存地址转换我Cache存储器地址,这种地址的转换称为地址映像,由硬件自动完成映射,分为下列三种方法:
-
直接映像:将Cache存储器等分成块,主存也等分成块并编号。主存中的块与Cache中的块的对应关系是固定的,也既二者块号相同才能命中。地址变换简但不灵活,容易造成资源浪费。
-
全相联映像:同样都等分成块并编号。主存中任意一块都与Cache中任意一块对应。因此可以随意调入Cache任意位置,但地址变换复杂,速度较慢。因为主存可以随意调入Cache任意块,只有当Cache满了才会发生块冲突,是最不容易发生块冲突的映像方式
-
组组相连映像:前面两种方式的结合,将Cache存储器先分块在分组,主存也同样先分块在分组,组间采用直接映像,既主存中组号与Cache中组号相同的组才能命中,但是组内全相联映像,也既组号相同的两个组内的所有块可以任意调换。
-
-
Cache的替换算法:替换算法的目的就是使Cache获得尽可能高的命中率。常用算法有如下几种:
- 随机替换算法:就是用随机数发生器产生一个要替换的块号,将该块替换出去。
- 先进先出算法:就是将最先进入Cache的信息块替换出去。
- 近期最少使用算法:这种方法是将近期最少使用的Cache中的信息快替换出去。
- 优化替换算法:这种方法必须先执行一次程序,统计Cache的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换。
-
命中率及平均时间:Cache有一个命中率的概念,既当CPU所访问的数据在Cache中时,命中,直接从Cache中读取数据,设读取一次Cache时间为1ns,若CPU访问的数据不在Cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90% 命中Cache,则CPU读取一次的平均时间为(90% * 1+ 10% *1000)ns
-
基本概念:K、M、G是数量单位,在存储器里相差1024倍。b,B是存储单位,1B=8b
-
磁盘结构和参数
磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。
磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间和等待时间。公式为:存取时间=寻道时间+等待时间(平均定位时间+转动延迟)。
注意:寻道时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇区转到磁头下方所用的时间。 -
磁盘调度算法
磁盘数据的读取时间分为寻道时间+旋转时间,既先找到对应的磁道,而后在旋转到对应的扇区才能读取数据,其中寻道时间耗时最长,需要重点调度,有如下调度算法:
先来先服务FCFS:根据进程请求访问磁盘的先后顺序进行调度。
最短寻道时间优先SSTF:请求访问的磁道与当前磁道最近的进程优先调度,使得每次的寻道时间最短。会产生“饥饿”现象,既远处进程可能永远无法访问。
扫描算法SCAN:又称“电梯算法”,磁头在磁盘上双向移动,其会选择离磁头当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都是从里向外或者从外向里一直移动完才掉头,与电梯类似。
单向扫描调度算法CSCAN:与SCAN不同的是,其只做单向移动,既只能从里向外或者从外向里。