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

“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. Asterisk manager API(AMI)文档(中文版)

    Asterisk控制接口(AMI)允许管理客户端程序连接到一个asterisk实例并且可以通过TCP/IP流发送命令或读取事件.这在试图跟踪asterisk的状态或其中的电话客户端状态时很有用,AMI ...

  2. log4j详解(一)

    >>>>1. 概述<<<< 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统 ...

  3. WPF中UserControl和DataTemplate

    最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...

  4. ExAllocatePool、ExAllocatePoolWithTag

    PVOID p = ExAllocatePool(Pool_Type, Size); PVOID p = ExAllocatePoolWithTag(Pool_Type, Size, Tag); 调用 ...

  5. uploadfile图片上传和ashx

    uploadify.swf需要是支持中文   $(function () {   //获取所有上传按钮id   $("div[id^='fileInput_']").each(fu ...

  6. cloudera learning8:MapReduce and Spark

    YARN:Yet Another Resource Negotiator, Hadoop集群的资源管理器,可以对运行在Hadoop上的MapReduce V2,Spark,Impala等进行内存和CP ...

  7. Quartz2D 编程指南(二)变换、图案、阴影

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 5.变换 简介 Quartz 2D ...

  8. Programming pearls 编程珠玑的题目

    Programming pearls 编程珠玑的题目 这段时间有空都在看编程珠玑,很经典的一本书,一边看一边用 python 做上面的题目,我做的都放到 github 上了 https://githu ...

  9. SQL优化----百万数据查询优化

    百万数据查询优化 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构.索引的使用要恰到好处,其使用原则如下: ...

  10. spark 源码安装

    clone 源码 git clone git://github.com/apache/spark.git maven编译源码 国外镜像比较慢,此处修改maven仓库的镜像为阿里云镜像: <mir ...