为了以合理的价格,设计容量和速度满足计算机系统的需求,计算机体系结构设计者设计出了存储器的层次结构。

“Cache-主存”和“主存—辅存”是最常见的两种层次结构。

常见的集中cache hierarchy的size与access time:

计算机运行的任何时刻都存在多个进程,每个进程都有自己的地址空间。如果为每个进程分配全部的地址空间,那系统的开销太大,而且很多进程也只是使用该地址空间内的一小部分。

虚拟存储器一种存储器共享技术,把物理内存的一部分拿出来让很多进程共享。且有一套保护机制,保证一个进程只能访问自己的内存块。虚拟存储技术也可以减少程序启动时间,

因为程序启动前没必要将所有代码和数据都加载入内存。

虚拟存储器的特点:

1)       多个进程共享主存空间,主存空间以页/段为单位,分配给个进程。

2)       自动的对存储系统进行管理,减轻了程序员负担。(不用担心空间越界的问题)。

3)       动态加载,程序可以在需要的时候方便的载入主存的任何一个位置。

分段,以程序的逻辑意义进行划分,分为代码段,数据段,堆栈段等。

分页,以虚拟存储器的空间来进行划分,4k~64k

MMU完成虚拟内存地址到物理地址的转换,虚拟存储器的必要部件。

在多处理器,为了支持多用户多任务的操作系统,必须支持虚拟存储器。

MMU的地址映射是分级操作的,每一级的表项都指向下一级页表的地址,最后一级上的每一行叫做地址变换条目,来完成映射。

每一行的地址变换条目中都包含一些控制位和访问权限等信息(如是否cache等信息),但是每次从几级页表中读取地址变换条目会有点慢,

所以存在一种快速变换列表(TLB),每次的地址映射先从TLB中查找变换条目,cache miss也会产生加载动作。

只有在访问存储器时,才会有地址映射的变换。在普通的CPU读写操作中,一般都是在cache中完成的。

MMU一般放在CPU和Cache旁边的,只在读写cache miss的情况下,才会启用MMU

Cache是按块进行管理的,Cache和主存被分割成大小相同的块,信息以块为单位调入Cache,CPU访问内存分为两部分,块地址和块内地址。

由于主存的容量远大于Cache的大小,所以说数据从主存到Cache存在一个映射问题。

1)       全相联映射(full associative),主存中的任何一块都可以放在Cache的任何一个位置。主存映射灵活但是CPU的检索会比较慢。

2)       直接映像(direct mapped),主存中的一个块只能放在Cache中的唯一的位置。主存的第i块,Cache的第j块,则j=I mod(M),M为Cache块数

3)       组相连映像(set associative),主存中的每一块都可以被放置到Cache中的唯一的一个组的任何位置。直接映像和全相连映像的折中。

Cache中有一个目录表,该表中包含的项数与Cache中的相同,每一项对应Cache中的一个块,记录了该主存块的高位部分(tag)。每一组中,主存块可以由其tag唯一的来确定。

Cache的更新情况:

1)       Read cache miss时,需要从主存中奖数据读出。

2)       CPU需要将数据写入Cache。其中的写策略有:write-through,不仅将数据写入Cache,同时写入主存中。

Write-back,只将数据写入Cache,在发生Cache替换的时候,才写入主存。

在读写都miss的情况下,还有read alloacted和write allocated策略。

Cache替换方法:

1)       随机法,不考虑程序局部性,效率较低。

2)       先进先出法,有点容易实现,但是反应不了程序局部性。

3)       最近最少使用方法(LRU),实现较困难,但是可以反映程序局部性。

在集中式的共享存储器体系结构中,每个处理器都有自己的高速缓存,所以cache中的数据,存在一致性问题。具体可以分为两个方面:

1)       高速缓存一致性(coherence),定义了读操作可以返回怎样的值。

2)       存储器一致性(consistency),定义了写入的数据,何时进行读操作。

解决cache一致性问题的方案:

基于总线监听(Bus Snooping)的MESI方案,对cache的访问以cache line为单位,一个cache line通常为32/64字节,MESI给每个cache line定义一个一致性状态:原理简单,易于实现,软件透明

[M]:Modified状态,表示该cache line中数据经过修改,是系统中唯一正确的数据,其他处理器cache全部失效,读操作直接由本处理器cache提供数据,

(同一数据在各个Cache中,只可能有一个Cache中的状态是[M])

[E]:  Exclusive状态,该cache line是系统中唯一与主存一致的数据,其他处理器cache全部失效,对数据的读操作,可以由主存/cache提供,写操作,状态从[E]改为[M]。

[S]:Shared状态,该处理器的cache与其他处理器的cache处于共享状态,可以直接cache read,但是写操作,应该是write-through,状态改为[E]。

[I]:处于该状态的Cache行无效,对处于[I]状态的数据进行读操作,会发生cache miss。

MESI状态除了受本地处理器存储操作的影响外,共享总线上的其他处理器的读写操作也会改变共享数据的性质,改变本地Cache的MESI状态。

本地处理器的读写操作对MESI状态的影响:

读命中时,Cache line的状态只能是[M],[E],[S]的,直接由cache提供数据。

读不命中时,数据不在cache或者cache line状态是[I],总之是要访问存储器,首先,查询Cache 目录表,某个Cache中处于[M]状态,则更新主存,再从主存中读取数据,

更新状态为[S],如果本身cache line状态是[I],更新状态为[S]。

写命中,处于[M],[E],[I]的Cache line,直接更新本地Cache,处于[S]状态的Cache line,修改主存,更新Cache line状态为[E]

写不命中,更新主存,Cache line各行不变。

其他处理器对MESI状态的影响:

当在其他Cache中发现,处于[M]状态的Cache line时,表示主存中的数据已经”失效”,监听模块将暂时占用总线将[M]中的Cache数据写入主存中,

此次的总线使用权不经过总线仲裁,回写完毕后,直接将总线使用权交给主模块。同时将监听模块的Cache line的专题改为[S]

如果监听命中了处于[E],[S]的Cache line,直接将更新该处理器的Cache line,并将状态改为[S]

如果主模块出现了写存储器操作,则监听模块将所有监听命中的Cache line改为[I]状态。

监听Cache协议存在一定的局限性,它只适用于由总线互联的多处理器系统,受总线带宽和Cache本身工作效率的影响,这种系统所接的处理器数目不能太多,一般在10个左右。

在互联网络型多处理器系统中,Cache一致性不是向所有的Cache广播,而是通过查找目录表,可以知道某共享数据块副本所在的所有的Cache,

直接向这些cache发出一致性命令,克服了对处理器数目过低的限制。

Tang实现方法:允许未经修改的数据存在多个Cache中,但是经过修改的数据块只能存在一个Cache中。Cache内的每一个Line都带有一个修改位。

各个Cache的全部修改位,集中记录在主存的一个集中式目录表中。

写命中时,如果该Cache line的修改位已经有效,则直接写入。否则修改集中目录表中记录,并作废其他Cache中的副本。

写不命中时,首先搜索集中式目录表,若另一Cache中有修改过的Cache line,直接写入主存,再从主存中,write allocate。

若另一Cache中没有修改过的Cache line,副本全部作废后,由write through和write back来确定接下来是先写入Cache还是直接写入主存。

由cache coherence带来的主存的读写,与write through/write back这样策略独立。

两种解决cache coherence的方案:

1)处理器写数据项之前,保证该处理器的独占访问;

2)写入数据时,更新该数据的所有副本。

总线监听法和目录法都可以实现这两种策略。(这两种方法的本质区别不是很明白)

MMU与Cache和CPU之间的位置关系。

如果MMU在Cache和CPU之间,那每次的Cache操作都必须先经过虚实地址的转变;降低了cache的效率,Cache中存放物理tag

如果MMU在Cache和BUS之间,Cache中存放虚拟tag,在miss的情况下,需要到MMU进行addr transfer。

http://www.cnblogs.com/-9-8/p/5921052.html

由于virtual address与physical address不是一个对应的关系,所以:

在Cache中同时存放物理tag和虚拟tag,MMU放在旁路,Cache可以正常的读操作,写操作,以及总线的snooping操作,只有在

读写失效的情况下,启用MMU单元。这样解决了虚拟存储器和bus snnoping的问题。称为双TAG的数据CACHE

cache与MMU与总线仲裁的更多相关文章

  1. [国嵌笔记][036][关闭MMU和CACHE]

    关闭MMU和CACHE 1.Cache是一种容量小,但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝.按功能分为ICache(指令Cache)和DCache(数据Cache) 2.虚拟地址 ...

  2. u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

    u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...

  3. MMU内存管理单元

    arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...

  4. [转帖]MMU内存管理单元

    MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...

  5. 第七章 内存管理单元MMU介绍

    7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ...

  6. MMU讲解

    MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制 ...

  7. s3c2440之cache

    cache高速缓冲存储器注意与块设备页高速缓存进行区别,一个是硬件的实现一个是软件的实现,块设备页高速缓存. s3c2440/s3c2410里面主要有一个arm920t的核,但同时包含几个协处理器,协 ...

  8. Cache基础知识OR1200在ICache一个简短的引论

    以下摘录<步骤吓得核心--软-core处理器的室内设计与分析>一本书 12.1 Cache基本知识 12.1.1 Cache的作用 处理器的设计者通常会声称其设计的处理器一秒钟能做多少次乘 ...

  9. 转 s3c2440硬件学习----内存管理单元MMU

    本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ...

随机推荐

  1. 【贪心】POJ 1065

    头一次接触POJ,然后写了自己比较擅长的贪心. 解题思路大概就是从小排(这个很重要,然后用cmp随便长度或者重量的排序,选择最小的开始) 直到所有比他weight大的,没有符合条件的了.就代表要再加一 ...

  2. Ubuntu14.04安装Ubuntu Tweak

    第一步:添加tweak源 sudo add-apt-repository ppa:tualatrix/ppa 第二步:更新 sudo apt-get update 第三步:安装ubuntu-tweak ...

  3. thinkPHP访问不同表前缀

    $Model=new Model(); $goods=$Model->Table('sdb_goods'); $param['brief']=array('like','%'.$p_title. ...

  4. Unity3D优化总结(一)

    1.如使用碰撞器,简单的模型尽量使用自带的碰撞器如BoxCollider,少使用Mesh Collider. 2.如要使用Mesh Collider,可以做一个专用的模型(尽量少网格)做为Mesh C ...

  5. 对拍老是忘记的看这里:bat代码

    需要写三个程序,makedata.exe 产生测试数据, program1.exe 是你要检测的程序,program2.exe 往往是一个正确但效率不高(暴力的居多)的程序. 代码很简单,稍作解释:l ...

  6. jQuery中的事件和动画效果

    刚刚学习了jqyery的一些事件和动画,下面我来总结一下: 1.基础事件 1.window事件,它的对应方法是ready(),$(document).ready()方法是事件模块中最重要的一个函数,可 ...

  7. HTML基础篇之列表相关标签和特殊字符实体

    HTML字符实体 常用的字符实体: 实体字符 字符实体 大于号 (>) > 小于号 (<) < 引号 (") " 注册商标(®) ® 版权(© ) © &a ...

  8. Unity内存理解(转)

    Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBu ...

  9. Approaches to Vector Computation

    COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  10. Preference Screen 首选项

     设置Preference Screen (res\xml\userpreferences.xml) <?xml version="1.0" encoding="u ...