欢迎来到天天文库
浏览记录
ID:13272829
大小:163.50 KB
页数:9页
时间:2018-07-21
《多处理器cache一致性研究》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、多处理器cache一致性研究孙增亮20721037摘要:本文介绍了实现多处理器cache一致性的实现,并介绍了几种新的技术手段关键词:cache一致性监听协议目录协议性能MEIMSIMESIMOESI一、Cache的一致性问题在个人计算机中,随着单处理器性能开发到极限,多处理器系统将成为主流。然而,在多处理器系统中,Cache结构带来了新的问题:如果不同处理器中的进程需要共享某些数据,那么同一数据就可能有多个副本分别存放在各个Cache中,当某个Cache中的数据被更新后,而其他Cache中的相同数据副本并未作相应修改,则那些处理器从私有Cache中
2、读取的将是错误数据,造成了同一数据多个版本共存的现象。这就是Cache一致性问题。引起数据不一致的原因大致有三种:1)共享可写数据引起的不一致。如前所述,同一数据的副本存在于多个Cache中,当某个处理器修改了自己Cache中的数据,而其他Cache中相同数据副本并未随之作同样的修改,导致多个Cache中数据的不一致。另外,某个Cache中的数据被更新后,在没有写回内存前,也会造成Cache与内存的数据不一致。假如此时恰有一个处理器进程(假设该处理器的私有Cache中无修改数据的拷贝)需要此数据,读取内存数据时,就会导致数据错误。2)进程迁移引起的不
3、一致。在多处理器系统中,进程可以在处理器中相互迁移。如果某个处理器中的进程修改了私有Cache中的数据,但还没写回内存前,由于某种原因需要迁移到其他处理器中继续运行,而此时读到的将是“过时”的数据。3)输入输出操作引起的数据不一致。假设多个Cache中存在内存中同一个数据块的数据拷贝,当系统启动I/O操作时,I/O处理器(通道或DMA)就有可能更新内存中的数据,从而导致Cache与内存的数据的不一致。二、传统的解决方案实现Cache一致性的途径有两大类:一类是软件办法,在程序编译时,通过软件分析,把数据划分为可用Cache和不可用Cache两种。各处
4、理器间公用的可写数据皆属不可用Cache类,不能放入Cache;另一类是硬件办法,在程序运行时,通过硬件来动态地识别出不一致产生的条件并予以及时处理,从而使Cache的使用有很高的效率。并且此办法对程序员和系统软件开发人员是透明的,减轻了软件研制负担,从而普遍被采用。硬件方法中最有代表性的技术是目录协议(directoryscheme)和监听Cache协议(snoopyCacheprotoco1)。2.1目录协议目录协议中Cache一致性命令不是向所有的Cache广播。而是只发送到拥有指定数据块副本的那些Cache。这就需要在系统中记录下关于每个Ca
5、che存放有哪些数据块副本的信息,这些信息记录在目录表内。目录协议的最大特点是通过查找目录表即可知道某共享数据块副本所在的全部Cache。基于Cache目录的协议,就是当某个处理器的写操作无法为其他的处理器知道时,通过修改目录间接地向其他处理器报告,以便其他处理器采取措施。目录协议的思想是非常简单的,即将所有使用某一数据块的处理器登记在册,每次变动前都要查目录,变动后则修改目录。根据目录存储方法的不同可以将基于Cache目录的协议分为集中式目录协议和分布式目录协议。2.1.1集中式目录协议集中式目录协议是指在主存储器中只用一个目录来标志数据块在各个处
6、理器Cache中存储的情况。集中式目录协议有几种方案,其中全映射方案就是采用一个集中存储的目录,每个数据块都在目录中建立一个项,目录项中设有与系统处理器个数相同的“存在位”,每个处理机一位。如果该数据块存在于某处理器的Cache中,相应位就置1,反之就置0,此外,在每一项中还设置了一个重写位,如果该位为l,表示该数据块的内容已经被改写过,此时存在位中只能有一位为l,即改写此数据块的那个处理器拥有该块。与目录表相对应,每个Cache中也为每个数据块安排两个控制信息位。一个是有效位(V),表示该数据的有效或无效,只有当V=l时该数据块才可用的。另外一位称
7、为专用位(P),如P=l,处理器可以直接向该数据块执行写操作,实际上这时的Cache是该数据块唯一正确的Cache拷贝。反之,当P=0时。不允许直接写入。如图1所示,全映射目录协议中各标志位的情况。101X重写数据存在位VPXVPXVPXP1P1P1图12.1.2分布式目录协议分布式目录协议又称为链表式目录协议,该协议将目录分散配置到各Cache中,用链表将有关的Cache连接在一起。每个数据块建立一个数据链表,每个链表中只包含拥有该数据块的Cache。于是,存储器中的每个数据块都只有一个指针,指向使用这个数据块的头结点。头结点再指向下一个拥有此数据
8、块的Cache,直到最后一个结点。链表可以是单向也可以是双向,单向链表只要一个指针,双向链表则需要前项指针和
此文档下载收益归作者所有