局部性原理:
- 时间局部性:如果某个数据项被访问,那么在不久的将来他可能再次被访问
- 空间局部性:如果某个数据项被访问,那么与地址相邻的数据项可能很快也将被访问
- 例子:循环结构体现了指令和数据的时间局部性;顺序执行和对数组或者记录中的元素进行顺序访问则体现了指令和数据的空间局部性
层次结构:
存储器层次结构:一种由多存储器层次组成的结构,存储器的容量和访问时间随着离处理器距离的增加而增加
数据层次结构:靠近处理器那一层的数据是那些较远层次中的子集,所有的数据被存储在最缓慢的层
存储器的层次结构可以由多层构成,但是数据每次只能在相邻的两个层次之间进行复制,高层次的存储器靠近处理器,比低层存储器容量小但是访问速度更快。
两级层次结构中存储信息交换的最小单元称为块或行
定义
- 块或行:两级层次结构中存储信息交换的最小单元
- 命中率:在高层存储器中找到目标数据的存储访问比例
- 缺失率:1-命中率
- 命中时间:访问某存储器层次结构所需要的时间,包括了判断当前访问是命中还是缺失所需的时间
- 缺失代价:将相应的块或行从低层存储器替换到高层存储器以及将该信息快传送给处理器的时间之和
存储器技术:
- 一些典型的存储器:
- 闪存:一种电可擦除的可编程只读存储器
- 磁盘存储器:
- 磁道:位于磁盘表面的数万个同心圆环中的任意一个圆环称为一个磁道
- 扇区:构成磁盘上磁道的基本单位,是磁盘上数据读写的最小单位
- 每个扇区的容量通常是512-4096字节,信息在磁介质上保存的顺序为扇区号、一个间隙、包含该扇区的纠错码、一个间隙、下一个扇区的扇区号
- 为了访问数据,操作系统必须对磁盘进行三步操作:
- 寻道:把读写磁头移动到磁盘上适当的磁道上面
- 扇区旋转:磁头到了正确的磁道后,必须等待要访问的扇区转动到读写头下面。等待的时间称为旋转延时,平均延时通常指磁盘转动一周时间的一半
- ???(读写数据?)
cache 基本原理:
- 直接映射:每个存储器中的数据项都放在cache中的确定位置
较大的 cache 块能够更好的利用空间局部性以降低缺失率
指令 cache 缺失时的处理步骤(指令存储器的 cache):
- 把程序计数器 PC 和 原始值 PC-4 送到存储器中
- 通知主存执行一次读操作,并等待主存访问完成
- 写 cache 项,将从主存取回的数据写入 cache 中存放数据的部分,并设置 cache 中对应的(有效位,标记为和索引)
- 重启指令执行第一步,此时指令在 cache 中
数据 cache 缺失与指令 cache 缺失时的处理步骤基本相同,发生缺失时,处理器发生阻塞,直到从存储器中取回数据后才响应
写操作和读操作的不同之处在于:如果只将数据写入数据 cache(而不改变主存的内容),那么,再写入 cache 之后,主存与 cache 相应位置的值将不同,此时 cache 和主存被认为不一致
写操作:
- 写命中(处理器 sw 指令的地址在数据 cache 中)时保持 cache 和主存一致性的方法:
- 写直达(写通过、写穿):更新 cache 的同时更新下一存储器层次,保持二者的一致性
- 写缓冲:一中解决写直达缓慢的解决方法。在一个数据等待被写入主存时,先将它放入写缓冲(保存等待写入主存数据的缓冲队列)中。如果写缓冲已经满了,则处理器必须阻塞直到写缓冲中有一个位置。(写缓冲写入内存主要存储器的写操作速度,数据写入写缓冲主要看处理器的写操作速度)当存储器完成写操作的速度慢于处理器产生写操作的速度,那么就必须产生上述阻塞,再多的缓冲器也没有用,当存储器的写操作速度快于处理器时,也有可能由于写冲突而发生阻塞
- 写回:新值仅被写入 cache 中,直到修改过的块需要被替换(不论是读或者写,只要有内容替换)的时候才将该块写入下一存储器层次
- 写直达(写通过、写穿):更新 cache 的同时更新下一存储器层次,保持二者的一致性
- 写缺失时的处理:
- 写分配:将数据写入下一存储器层次,并将该块数据放回 cache
- 写不分配:将数据写入下一存储器层次,不放回 cache
- 因为采用写回操作时,如果出现写缺失,更新操作可能造成 cache 中更新但是没有写入下一存储器层次的数据丢失(可以采用脏位),因此写回一般和写不分配搭配(并不绝对)
在组相联中,cache 的组成为
标记 | 索引 | 块偏移 |
---|---|---|
选择块 | 选择组 | 选择被请求的数据地址 |
- 全相联不需要索引位
汉明码达到 DED 只需要加一位奇偶校验位校验所有的数据
虚拟存储器
一种将主存用作辅助存储器高速缓存的技术。主存可以看作硬盘的 cache(主存既有虚拟页号也有物理页号??)
虚拟存储器实现了程序地址空间(虚拟地址)到物理地址的转换,这种地址转换处理加强了各个程序地址空间之间的保护
- 物理地址:主存储器的地址
- 保护:一组确保共享处理器、主存、I/O 设备的多个进程之间没有故意地、无意地读写其他进程地数据机制,这些保护机制可以将操作系统和用户的进程隔离开来
虚拟存储器允许单用户使用超过主要存储器的容量
虚拟存储器和 cache 的工作原理是一样的,但是在虚拟存储器中,块被称之为页,访问缺失被称为缺页,在虚拟存储器中,处理器产生一个虚拟地址,再结合软硬件转换成一个物理地址
- 缺页:访问的页不在主存储器中
- 虚拟地址:虚拟空间的地址,当需要访问主存时需要通过地址映射转换为物理地址
- 地址转换(地址映射):在访问内存时将虚拟地址映射为物理地址
虚拟存储器中通常采用写回机制,因为写直达的开销太大
页表:保存着虚拟地址和物理地址之间转换关系的表。包含有效位、虚页号和物理页号
- 若有效位为 1,则表明该页在主存中,可以直接通过访问物理页号获取数据
- 若有效位为 0,表明该页不在主存中,即缺页,需要去磁盘访问
- 页表包含了每一个可能的虚拟页的映射
因为虚拟存储器采用全相连映射,所以物理页号和虚拟页号其实没有什么关系
段式管理:一种可变长度的地址映射策略。其中每个地址由两部分组成:映射到物理地址的段号和段内偏移