存储器层次结构
存储器层次结构(高->低):1.cache(SRAM):速度快(5ns),价格高。
2.主存储器(DRAM):60ns左右,与SRAM的价格差异是因为同样的硅片能做出的DRAM的容量更大,速度差异是由于两者的工作原理。
3.磁盘:10Mns,价格便宜。
命中时间:指访问存储器层次结构中高层次存储器所需要的时间。
缺失损失:把相应的块从较低层次换到高层,加上把信息块传送给处理的时间。
如果命中率足够高,存储器层次就将拥有接近最高层次的访问时间以及接近最低层次的容量。
cache缺失处理:使流水线阻塞,冻结所有寄存器内容,然后处理cache的缺失,把数据从存储器取到cache中。一旦数据可用,程序就从导致cache缺失的地方开始重新执行。
时间局域性:如果一个数据项被引用,那么在不久的将来它很可能再次被引用。
空间局域性:如果一个数据项被引用,那么与它地址相近的数据项可能很快也会被引用。
利用空间局域性,增加块的大小可以减少缺失率;但是块大小在cache大小中所占的比例增加到一定程度时,缺失率也会随之增加,这是因为块数目变小时会使一块中很多字在还没有被访问时就被替换出cache,从而带来冲突的增多。同时块越大传输时间越长,因此单纯增加块的大小会使缺失损失增加。增加存储器的带宽可以减少把块从存储器送到cache的时间。
直接映像:依据存储器地址给存储器中每个字分配一个cache地址,每个存储器地址对应于cache中一个确定地址。由于每个cache的地址可能对应存储器中多个不同的地址,因此要在cache中加入标记(Tag),通过Tag来判断是否为所请求的字。Tag只需要包含地址的高位部分,即地址中没有用作cache index的那些位。同时在cache中加入有效位(Valid),表示块是否含有有效地址。直接映像的cache可视为1 way组关联cache。根据时间局域性可知一个被引用的数据很可能再次被引用,而直接映像的关联度太低,很可能将即将要用的数据替换出cache。
全关联:存储器中的块可以和cache中任何一块相关联,可以放在cache中的任何位置。因此在全关联中要找一个给定块,必须检索cache中所有的项,通过与每个项相关的一个比较器并行完成比较,硬件开销很大。由于关联度越高,有用数据被替换出cache的几率越小,命中率越高,因此提高关联度可以降低缺失率,但硬件开销太大。
组关联:介于两者之间的设计是组关联。每个组有n个位置可放的组关联cache称为n way组关联cache。组关联增加了关联度同时比全关联减少了比较项。
替换块的选择:最常使用的方法是最少使用算法(LRU-Least Recently Used)。
增加关联度的好处是它通常能降低缺失率。缺失率的改进来源于减少了对同一位置产生的竞争导致的缺失。随着cache大小的增加,关联度对性能的影响相对不变,因为较大cache的总缺失率比较低,使由关联度引起的缺失率的改进显著降低,并且关联度提高将带来硬件开销的增加。
虚拟存储器:实现程序虚拟地址到物理地址的转换,这种转换处理加强了程序地址空间的保护,用于允许多个程序有效安全的共享存储器以及消除因存储器容量给编程造成的障碍。
在虚拟存储器中,地址被划分为虚拟页号和偏移量。物理页号由虚拟页号转换得到,构成物理地址的高位部分,而页偏移量是不变的,构成物理地址的低位部分,它决定了页的大小。虚拟地址可寻址的页数不必与物理地址可寻址的页数相同。虚拟页数多于物理页数是描述一个根本没有容量限制的虚拟存储器的基础。
在虚拟存储器中,利用一张给出存储器index的全表来定位页,这种结构称为页表。页表常驻在存储器中,用虚拟地址中的页号作为index,其内容是相应的物理页号。通常页表都是全关联。每个程序都有自己的页表,把该程序的虚拟地址空间映射到主存中。为了指出页表在存储器中的位置,硬件包含一个指向页表首地址的寄存器,称之为页表寄存器。
缺页:在虚拟存储器中缺失页通常被称为缺页。一旦出现缺页就会产生异常,此时操作系统获得控制权,它必须在存储器层次结构的下一层(磁盘)上找到该页,然后决定把请求页放到存储器的什么位置。操作系统在创建进程时,往往在磁盘上为该进程的所有页创建空间,同时它也创建一个数据结构以记录每一虚拟页在磁盘上的存储位置。当发生缺页时,如果主存中所有的页都在被使用,操作系统就必须选择某一项进行替换。
页表、PC和寄存器一起表明了一个程序的状态。如果想让另一个程序只用CPU,就必须保存这些状态,此后恢复该状态,程序可以继续执行,并把这种状态称为进程。进程的地址空间以及它可以在存储器中访问的所有数据都由其常驻在存储器中的页表定义的。每个进程都有自己的页表,操作系统负责分配物理地址和更新页表,因此不同进程的虚拟地址空间不会冲突。
TLB:用于加快地址变换,避免了通过访问寄存器的页表实现地址变换。它是一个只保存页表映像的全关联cache。TLB中每个标记存放虚拟页号的一部分,每个数据项存放一个物理页号,同时包括有访问位和修改位。
TLB包含了页表中从虚拟页到物理页映射的一个子集,因此它必须有标记字段。如果页在TLB中没有匹配的项,就必须检查页表。页表或者提供该页的物理页号(TLB缺失),或者指出该页在磁盘上(缺页)。在TLB缺失并从页表中找到缺失的变换之后,需要从TLB中选择一项进行替换,由于TLB表项中包括访问位和修改位,所以当替换一项时,需要把这些复制写回页表项中,这些位是TLB表项中唯一可以修改的部分,用时利用写回策略把页表写回磁盘。事实上TLB并不包括真实的修改位,它利用写访问位来判断该页是否能写,并在第一次写时设置该页表中的修改位,可以用于检测第一次写操作。
当操作系统决定把某一页移到磁盘上去时就会迫使该页的全部内容从cache中删除。同时,操作系统修改页表和TLB,而后试图访问该页的数据都将会导致缺页。
虚拟寻址、物理地址标记的cache:cache和TLB并行进行访问,来自cache的物理地址标记要与来自TLB的物理地址进行比较,判断cache中是否保存了需要的数据,这种设计同时拥有了虚拟寻址cache的快速和物理寻址cache的简单结构。
为了支持操作系统实现虚拟存储器的保护,硬件必须提供以下三种基本能力:
1.支持至少两种模式,分别指出正在运行的进程是用户进程还是操作系统进程,操作系统进程也被称为核心进程、管理进程或者执行进程。
2.提供一部分用户进行只能读不能写CPU状态。这包括指出处理器处在用户态该是管理态的用户/管理模式位、页表指针以及TLB。操作系统利用只能在管理态使用特殊指令对它们进行写操作。
3.提供能让CPU从用户态到管理态相互转换的机制。
通过这些机制并把页表保存在操作系统的地址空间,操作系统就可以更改页表,并防止用户进程修改它们。
当操作系统决定从一个执行进程P1变换到另一个执行进程P2时,它必须确保P2不会访问到P1的页表。通过在TLB中增加一个进程标识符就能很快完成进程的切换。
当处理TLB缺失时,将查找一个页表项取入TLB。如果匹配的页表有效位关闭,那么对应的页就不存在存储器中,产生缺页;如果该有效位开启,只是简单地从页表中取出物理页号来创建TLB表项。处理缺页要求使用异常机制中断正在运行的进程,把控制传给操作系统,稍后恢复执行被中断的进程。EPC中会保存引起缺页的虚拟地址。一旦操作系统知道缺页的虚拟地址,它必须完成三个步骤:
1.用虚拟地址查找页表项,并在磁盘上找到被访问页的位置。
2.选择被替换的物理页,如果所选页被重新写过,必须在把新的虚拟页装入之前把该物理页写回磁盘上。
3.启动读操作,把被访问的页从磁盘上调入到所选择的物理页的位置上。
通常操作系统会选择另一个进程在CPU中执行直到磁盘访问结束。由于操作系统已保存了进程的状态,它就会随意地把处理器的控制权交给另一个进程。
虚拟存储器系统选择全关联和专门的表是因为:
1.页表缺失的代价是非常昂贵。
2.全关联运行软件使用复杂的替换策略降低缺失率。
3.全关联很容易被寻址。
页:
[1]