系统控制器、侦听标签修改方法和信息处理装置的制作方法

文档序号:6609435阅读:134来源:国知局
专利名称:系统控制器、侦听标签修改方法和信息处理装置的制作方法
技术领域
本发明涉及多处理器系统中的系统控制器、侦听标签(sno叩tag)修 改方法和信息处理装置,用于控制具有关于每个CPU的缓存标签(cache tag)的拷贝信息(copy information)的侦听标签,以确保缓存存储器 (cache memory )的 一 致性。
背景技术
近年来,信息处理装置已被广泛用于各个领域。因此,比以往更多地 要求多处理器配置中的芯片集的高处理能力。图23示出多处理器系统的示例。在图23所示的多处理器系统中, CPU 520a和520b经由CPU总线530a被连接到系统控制器510,而CPU 520c和520d经由CPU总线530c被连接到系统控制器510。 CPU 520a-520d分别包括缓存存储器521a-521d以及缓存标签522a-522d。另外,系 统控制器510包括对应于各个CPU 520a-520d中的缓存标签522a-522d的 侦听标签511a-511d。存储在缓存存储器521中的数据的状态和地址被记录在缓存标签522 中。关于相应缓存标签522的拷贝信息被记录在侦听标签511中。图24示出传统的缓存标签/侦听标签的示例。图24示出连接到图23 所示的同一 CPU总线530a的CPU 520a和520b与系统控制器510之间的 关系。同一索引的条目被示出在CPU 520a的缓存标签522a中,CPU 520b 的缓存标签522b中,以及系统控制器510的侦听标签511a和侦听标签 511b中。应该注意,缓存存储器521被假设受控于4路集合关联方法(4-Way set associative method)。系统控制器510中的侦听标签511a保留着关于相应缓存标签522a的 拷贝信息。而且,系统控制器510中的侦听标签511b保留着关于相应缓
存标签522b的拷贝信息。在图24中,注册在缓存标签522中的条目在相 应的侦听标签511中具有有效条目。图24所示缓存标签522和侦听标签511中的每个条目的状态和地址被 描述。这里,MESI协议被用于缓存一致性。MESI协议是一种缓存一致性 协议,并且将缓存的每一行划分成指示修改状态的M (Modified,修改 的)、指示独占状态的E (Exclusive,独占的)、指示共享状态的S (Shared,共享的)和指示无效状态的I (Invalid,无效的),然后控制它 们。图25示出驱逐(Eviction)。驱逐用于从系统控制器510指示针对 CPU 520执行缓存排出(ejection)过程。在下文中,驱逐将利用图25的 示例来描述。首先,如阶段0所示,假设在缓存标签522和侦听标签511两者中同 一索引为空白。此时,当CPU 520读取块号(block number) A吋,块号 A被分别注册在缓存标签522和侦听标签511中,如阶段1所示。此外, 当CPU 520继续通过块号B、块号C和块号D读取同一索引时,它们变为 路满(way-fiill),如阶段2所示。在这种路满状态中,如果CPU 520希望进一步读取同一索引的块号 E, CPU 520则不得不首先删除缓存标签522中的任何数据。这里,块号 A将被删除。如果CPU 520不支持缓存替换请求并且块号A的状态不是M(修改的),则在CPU 520中的块号A处发生静默丢弃(silent drop)。 如阶段3所示,块号A在缓存标签522中被删除。应该注意,静默丢弃将 在不通知他人的情况下抛弃数据。类似地,当系统控制器510接收到CPU 520对块号E的读取时,系统 控制器510也将注册块号E并且不得不删除侦听标签511中的任何一个数 据。这里,块号B将被删除。此时,由于存在"存在于缓存标签522中的 条目必须存在于侦听标签511中"的包含规则,因此系统控制器510不得 不使得CPU 520也删除系统控制器510已经删除的条目,从而需要向CPU 520发布排出请求,如阶段4所示。该排出请求被称为驱逐。最终,在缓 存标签522和侦听标签511两者中都将存在空白条目,从而块号E可被分
别注册在两者中,如阶段5所示。应该注意,描述与用于确保多处理器系统中的缓存存储器的一致性的 系统控制器相关的技术的现有技术文献例如包括专利文献1 (日本专利早期公开No. 2001-43204)。专利文献1描述了一种与对应于上述系统控制 器510的缓存存储器控制装置相关的技术,用于利用总线侦听方法来确保 缓存存储器的一致性。但是,在专利文献1中描述的技术无法解决下述问 题。在没有来自CPU 520的缓存替换请求的系统中,系统控制器510巾的 侦听标签511通常具有已被替换的条目,就是说,已被CPU 520降到I (无效的)(参考图25中的阶段3)。由于该特性,即使CPU 520尚未路 满,系统控制器510也可能误解成CPU 520路满,并发布驱逐(参考图25 中的阶段4)。从而,针对CPU 520,系统控制器510碰巧发布了比所需更多的数据 排出请求。因此,当遭受数据排出请求的条目是CPU 520仍旧需要的条目 时,CPU 520不得不在随后其需要该条目时发布读取请求以再次获得该条 目,这是系统性能下降的主要原因。发明内容本发明的目的在于提供用于减少系统控制器驱逐次数并防止系统性能 恶化的技术。本发明的特征在于与连接到同一 CPU总线的各个CPU相对应的侦听 标签在系统控制器中以集成方式被管理,并且当同一地址在连接到同一 CPU总线的每个CPU的缓存标签中都被注册成共享状态时,该地址仅在 与同一地址被注册到的CPU相对应的侦听标签中的任何一个中被注册成共 享状态。换言之,系统控制器具有用于进行控制以使得处于共享状态(共 享的)的同一地址仅被注册在连接到同一 CPU总线的CPU的侦听标签中 的任何一个中。具体而言,本发明管理多处理器系统中的多个包括缓存存储器的 CPU,其中包括针对每个CPU的具有关于每个CPU保留的缓存标签的拷
贝信息的侦听标签,并且如果同一地址被注册在连接到同一CPU总线的每 个CPU中,则该地址仅在与同一地址被注册到的CPU相对应的侦听标签 中的任何一个中被注册成共享状态。从而,可以减少系统控制器中的侦听 标签中的已用条目的数目。此外,本发明可以包括执行针对来自CPU的请求的过程的请求处理部 分。如果读取请求已被从一个CPU发布并且被请求读取的地址已在对应f 与发布该读取请求的CPU连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,该请求处理部分则执行不将上述地址注册在与发布读取请求的CPU相对应的侦听标签中的侦听标签修改过程。从而,侦听标签修改中驱逐的次数可利用简单的电路来减少,这可以提高系统性能。 此外,本发明可以包括这样的请求处理部分,如果读取请求已被从--个CPU发布并且被请求读取的地址已在对应于与发布该读取请求的CPU 连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,该请求处理部分则执行将上述地址在被请求读取的地址已被注册到的侦听标签 中的条目改变到无效状态的侦听标签修改过程,并将上述地址注册在与发布读取请求的CPU相对应的侦听标签中。从而,侦听标签持续保留CPU 中的缓存标签中已被从s (共享的)降到I (无效的)的条目的可能性可得以降低,这可以提高系统性能。此外,本发明可以包括这样的请求处理部分,如果读取请求已被从一个CPU发布并且被请求读取的地址已在对应于与发布该读取请求的CPU 连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,该诺求处理部分则将被请求读取的地址已被注册到的侦听标签和与发布读取请求的CPU相对应的侦听标签中的空白条目的数目(空白路的数目)或己用条目的数目(已用路的数目)相比较,并根据比较结果,确定是执行不将上述地址注册在与发布读取请求的CPU相对应的侦听标签中的侦听标签修 改过程,还是执行将上述地址在上述地址已被注册到的侦听标签中的条H 改变到无效状态并将上述地址注册在与发布读取请求的CPU相对应的侦听标签中的侦听标签修改过程,并执行所确定的侦听标签修改过程。 从而,可以提高系统性能,同时维持减少无用驱逐的发生和降低侦听
标签持续保留CPU中的缓存标签中已从S (共享状态)降到I (无效状 态)的条目的可能性之间的平衡。此外,本发明可以包括这样的请求处理部分,当缓存替换请求己被从一个CPU发布时,所述请求处理部分侦听与发布缓存替换请求的CPU连 接到同一 CPU总线的另一 CPU的共享状态,然后作为结果,如果被请求 缓存替换的地址已在除发布缓存替换请求的CPU之外的CPU中被注册成共享状态,则执行使发布的缓存替换请求无效的缓存替换请求应对过程。 从而,可以防止缓存替换请求可能导致的侦听标签中的一致性错误。 此外,本发明可以包括这样的请求处理部分,当缓存替换请求己被从一个CPU发布时,所述请求处理部分侦听与发布缓存替换请求的CPU连 接到同一 CPU总线的另一 CPU的共享状态,并且作为结果,如果被请求 缓存替换的地址尚未被注册在除发布缓存替换请求的CPU之外的CPU 中,则执行将发布的缓存替换请求扩展为来自与发布缓存替换请求的CPU 连接到同一 CPU总线的所有CPU的缓存替换请求的缓存替换请求应对过 程。从而,可以防止侦听标签由于缓存替换请求而持续保留已被CPU降到I (无效状态)的地址的条目。此外,本发明可以包括这样的请求处理部分,该请求处理部分不仅在读取请求被从一个CPU发布的情况下,而且在同一 CPU总线中CPU中的 缓存标签的条目状态被从E (独占状态)修改到S (共享状态)并且在同 一 CPU中一个E (独占状态)被改变到两个S (共享状态)注册的情况下,执行在相应侦听标签中进行一个s (共享状态)注册的侦听标签修改过程。从而,上述侦听标签修改过程还可应用在将条目状态从E (独占状 态)改变到s (共享状态)的情况下。此外,本发明可以包括这样的请求处理部分,该请求处理部分取决于模式信号,在读取请求被从CPU发布时,改变将被执行的侦听标签修改处理方法。从而,侦听标签修改过程的逻辑可被自由地改变,这使得真实机 器能够研习取决于侦听标签修改方法的不同的性能变化,并且还能够针对 每个多处理器系统选择适当的侦听标签修改处理方法。可以取决于提供给请求处理部分的模式信号来选择的侦听标签修改处
理方法包括至少以下方法,例如,在处于共享状态的读取请求已被从一个 CPU发布并且同一地址已被注册在连接到同一 CPU总线的每个CPU的缓 存存储器的标签中的情况下进行控制以不将上述被请求读取的地址注册 在与发布读取请求的CPU相对应的侦听标签中的方法;进行控制以将上述 地址在被请求读取的地址已被注册到的侦听标签中的条目改变到无效状态 并将上述地址注册在与发布读取请求的CPU相对应的侦听标签中的方法; 以及与现有技术类似地,将同一地址在多个侦听标签中注册成共享状态的 方法。根据本发明,系统控制器中的侦听标签中的空白条目的数目得以增 大,并且侦听标签的使用可得以减少,这可以减少驱逐的发生。当驱逐的 次数被减少时,必要数据被扔到CPU中的缓存存储器之外的情况的数目得 以减少,这提高了系统性能。


图l示出本发明实施例中的多处理器系统的配置示例; 图2示出该实施例的缓存标签/侦听标签的示例; 图3示出该实施例的请求处理部分的配置示例;图4是在第一情况中根据侦听标签修改样式1的侦听标签修改过程流 程图;图5是在第一情况中根据侦听标签修改样式2的侦听标签修改过程流 程图;图6是在第一情况中根据侦听标签修改样式3的侦听标签修改过程流 程图;图7A、 7B、 8A和8B示出在第一情况中的侦听标签修改的示例; 图9A、 9B、 IOA和IOB示出在第一情况中的侦听标签修改的示例; 图11是在第二情况中根据侦听标签修改样式1的侦听标签修改过程 流程图;图12是在第二情况中根据侦听标签修改样式2的侦听标签修改过程 流程图13是在第二情况中根据侦听标签修改样式3的侦听标签修改过程 流程图;图14A、 14B、 15A禾卩15B示出在第三情况中的侦听标签修改的小-例;图16A、 16B、 17A禾n 17B示出在第四情况中的侦听标签修改的示例;图18是在可以改变侦听标签修改模式的情况下的侦听标签修改过程 流程图;图19A和19B示出使缓存替换请求无效的过程的示例;图20A和20B示出扩展缓存替换请求的过程的示例;图21是根据该实施例的缓存替换请求应对(addressing)过程流程图;图22是在可以改变侦听标签修改模式的情况下的缓存替换请求应对 过程流程图;图23示出多处理器系统的示例; 图24示出传统的缓存标签/侦听标签的示例;以及 图25示出驱逐。
具体实施方式
在下文中,本发明的实施例将利用附图来描述。图l示出根据本发明实施例的多处理器系统的配置示例。图l所示多 处理器系统被配置以四个系统板100a-100d和地址交叉(crossbar)板 200。各个系统板100a-100d和地址交叉板200经由局部总线300a-300d、 全局总线301、局部通知路径302(a-d)、全局通知路径303等相连。系统板100a包括系统控制器110和四个CPU 120a-120d。 CPU 120a 和CPU 120b经由CPU总线130a连接到系统控制器110,而CPU 120c和 CPU 120d经由CPU总线130c连接到系统控制器110。其它系统板100b-100d具有与系统板100a类似的配置。各个CPU 120a-120d分别包括缓存存储器121a-121d和缓存标签
122a-122d。在本实施例中,缓存存储器121被假设受控于4路集合关联 方法。系统控制器IIO包括侦听标签llla-llld、 CPU发布的请求队列112a 和112c、局部仲裁器113、请求处理部分114和请求执行部分115。侦听标签llla-llld分别对应于缓存标签122a-122d。 CPU发布的诺 求队列112保留CPU 120针对每个CPU总线130发布的请求。这邻., CPU发布的请求队列112a保留由CPU 120a和120b发布的请求,而CPU 发布的请求队列112c保留由CPU 120c和120d发布的请求。局部仲裁器 113将保留在CPU发布的请求队列112中的请求输出到局部总线300a。请求处理部分114执行针对从全局总线301发送的请求的过程。请求 处理部分114包括资源管理部分116和请求执行激活部分117。资源管理 部分116检查用于处理请求的资源等。请求执行激活部分117启动请求执 行部分115或修改侦听标签111。地址交叉板200包括全局仲裁器210和可执行性确定电路220。全局 仲裁器210将从局部总线300a-300d输入的请求经由全局总线301输出到 所有系统板100a-100d。可执行性确定电路220基于从局部通知路径302a-302d输入的通知来确定请求执行是对的还是错的,并将结果和请求执行 所需的信息经由全局通知路径303通知给各个系统板100a-100d。这里,将描述例如在CPU 120a执行读取请求的情况下,图l所示系 统中的操作。这里,假设CPU 120a读取块号1000。CPU 120a首先搜索缓存标签122a,以确认块号1000处的数据是否存 在于其自己的缓存存储器121a中。作为搜索结果,如果CPU 120a确定在 其自己的缓存存储器121a中不存在有效数据,CPU 120a则向CPU总线 130a发布读取请求。由CPU 120a发布的请求经由CPU发布的请求队列112a、局部仲裁 器113和局部总线300a被输入到全局仲裁器210。输入到全局仲裁器210 的请求被同时经由全局总线301通知给所有系统板100a-100d。在系统板100a上,请求被从全局总线301输入到请求处理部分114。 请求处理部分114读取各个侦听标签111,并利用资源管理部分116检杳
是否存在用于处理请求的资源等。结果被经由局部通知路径302a发送到 可执行性确定电路220。可执行性确定电路220基于来自所有局部通知路径302a-302d的通知 来确定请求执行是对的还是错的,并经由全局通知路径303将结果和请求 执行所需的信息通知给请求执行激活部分117。请求执行激活部分117基 于请求执行确定的结果是对的还是错的和请求执行所需的信息来修改侦听 标签111或启动请求执行部分115。例如,如果源己被保护并且所有搜索侦听标签111的结果都是无效 的,请求执行激活部分117则将块号IOOO注册在侦听标签llla中。应该 注意,注册的状态取决于发布的请求。同时,请求执行部分115读取存储 器中的块号1000并将获得的数据发送到CPU 120a。 CPU 120a修改缓存 存储器121a和缓存存储器122a。此外,例如,如果源己被保护,并且作为搜索侦听标签111的结果, 块号1000已在侦听标签lllc中被注册成指示修改状态的M (修改的), 请求执行激活部分117则将块号1000注册在侦听标签llla中。应该注 意,注册的状态取决于发布的请求。而且,块号IOOO在侦听标签lllc中 的状态被改变到指示共享状态的S (共享的)或指示无效状态的I (无效 的)。此时将改变的状态取决于发布的请求。同时,请求执行部分115指 示CPU 120c发出块号1000处的M数据,并将输出的数据发送到CPU 120a。 CPU 120a修改缓存存储器121a和缓存标签122a,并且CPU 120c 修改缓存标签122c。图2示出本实施例的第一情况的缓存标签/侦听标签的示例。图2示 出在图1中连接到同一 CPU总线130a的CPU 120a和CPU 120b与系统控 制器IIO之间的关系。同一索引的条目被示出在CPU 120a中的缓存标签 122a中、CPU 120b中的缓存标签122b中和系统控制器IIO中的侦听标签 llla和侦听标签lllb中。针对图2的缓存标签122和侦听标签111中的每个条目描述状态和地 址。这里,MESI被用于缓存一致性。MESI协议是一种缓存一致性协 议,并将缓存的每一行划分成M (修改的)、E (独占的)、S (共享
的)和I (无效的)并控制它们。在侦听标签lll中,原则上,关于相应缓存标签122的拷贝信息被注册。但是,在本实施例中,如果一个公共地址在经由同一 CPU总线130 连接的多个CPU 120的缓存标签122中已被注册成S (共享的) (registered in S),该公共地址则仅被注册在相应的各个侦听标签111中 的任何一个中。在图2中,块号1000和2000已在缓存标签122a和缓存标签122b两 者中被注册成S (共享的)。由于CPU 120a和CPU 120b被连接到同一 CPU总线130a,因此该公共地址仅被注册在系统控制器110中的侦听标 签llla和侦听标签lllb中的任何一个中。在图2中,公共地址,即块号 1000和2000两者仅在侦听标签111a中被注册成S (共享的),而不被注 册在侦听标签lllb中。因此,在侦听标签111b中将不存在关于块号1000和2000的S (共 享的)注册信息。但是,如果侦听标签111需要被涉及,例如由于来自另 一 CPU的对于块号1000的请求,则由于关于块号1000的s (共享的)注 册信息被从侦听标签llla读出,因此即使侦听标签lllb中没有块号1000 处的S (共享的)注册信息,操作也不会受到影响。另外,如果已经发生 针对块号1000的缓存存储器清除请求,则由于CPU 120a和CPU 120b被 连接到同一 CPU总线130a,因此该清除请求由于针对CPU 120a而同时 也在CPU 120b中被处理。图3示出本实施例的请求处理部分的配置示例。还如图1所示,请求 处理部分114包括资源管理部分116和请求执行激活部分117。另外,请 求执行激活部分117包括侦听标签修改部分118和缓存替换请求应对部分 119。侦听标签修改部分118修改侦听标签111。但是,还如图2的示例所 述,在本实施例中,为了管理与以集成方式一起连接到同一CPU总线130 的各个CPU 120相对应的各个侦听标签111,还在考虑到这种管理的情况 下修改侦听标签111。换言之,侦听标签修改部分118在考虑到相同地址 可能未被注册在与连接到同一 CPU总线130的各个CPU 120相对应的各
个侦听标签111中的情况下修改侦听标签111。各种样式可被设想作为本 实施例的侦听标签修改样式。这些样式随后将详细描述。
另外,侦听标签修改部分118可以利用模式信号在多种侦听标签修改样式(包括传统修改样式)之间切换并执行修改。
缓存替换请求应对部分119执行使缓存替换请求无效的过程或扩展缓 存替换请求的过程,以便应对在发布缓存替换请求时可能发生的问题。在 本实施例中,由缓存替换请求应对部分119执行的操作随后将详细描述。
侦听标签修改部分118对侦听标签111的修改将被描述。这里,例 如,在图2所示的标签状态中,在被请求读取的地址已在对应于与发布读 取请求的CPU 120a连接到同一 CPU总线130a的CPU 120b的侦听标签 lllb中被注册成S (共享的)的情况下,将引入三种侦听标签修改样式。
在侦听标签修改样式1中,当一个CPU 120a发布读取请求时,如果 被请求读取的地址已在对应于与发布该读取请求的CPU 120a连接到同一 CPU总线130a的CPU 120b的侦听标签111b中被注册成S (共享的), 对应于已经发布该读取请求的CPU 120a的侦听标签llla则不被修改。换 言之,被请求读取的地址不被注册在与发布该读取请求的CPU 120a相对 应的侦听标签llla中。
例如,在图2中,如果CPU 120a发布读取块号5000的请求,则由于 块号5000已在与连接到同一 CPU总线130a的CPU 120b相对应的侦听标 签lllb中被注册成S (共享的),因此与发布该读取请求的CPU 120a相 对应的侦听标签llla不被修改。
图4是在第一情况下,根据侦听标签修改样式1的侦听标签修改过程 流程图。CPU 120a发布读取请求(步骤SIO)。对应于与发布读取请求的 CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签111b 被搜索(步骤Sll)。作为搜索结果,如果被请求读取的地址尚未被注册 成S (共享的)(歩骤S12),则被请求读取的地址被注册在与发布该读 取请求的CPU 120a相对应的侦听标签111a中(歩骤S13)。如果被请求 读取的地址已被注册成S (共享的)(步骤S12),与发布该读取请求的 CPU 120a相对应的侦听标签111a则不被修改。 如上所述,在侦听标签修改样式l中,仅仅确定被请求读取的地址是 否已在侦听标签lllb中被注册成S (共享的),这可以用简单的电路来 实现。另外,在侦听标签修改样式1中,与发布读取请求的CPU 120a相 对应的侦听标签llla在被请求读取的地址已在侦听标签lllb中被注册成 S (共享的)的情况下不被修改,这可以减少在修改侦听标签时的驱逐次 数并提高系统性能。在侦听标签修改样式2中,当一个CPU 120a发布读取请求时,如果 被请求读取的地址已在对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a的CPU 120b的侦听标签lllb中被注册成S (共享的), 则从侦听标签lllb中删除被请求读取的地址,以使其状态改变到I (无效 的),并且被请求读取的地址被重新注册在与发布读取请求的CPU 120a 相对应的侦听标签llla中。例如,在图2中,如果CPU 120a发布读取块号5000的请求,则由于 块号5000已在与连接到同一 CPU总线130a的CPU 120b相对应的侦听标 签lllb中被注册成S (共享的),因此该注册被删除,并且块号5000被 注册在与发布读取请求的CPU 120a相对应的侦听标签111a中。此时,如 果在侦听标签llla中不存在空白条目,则使用驱逐功能。图5是在第一情况下根据侦听标签修改样式2的侦听标签修改过程流 程图。当CPU 120a发布读取请求时(步骤S20),对应于与发布读取诺 求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签 lllb被搜索(步骤S21)。作为搜索结果,如果被请求读取的地址尚未被 注册成S (共享的)(步骤S22),被请求读取的地址则被注册在与发布 读取请求的CPU 120a相对应的侦听标签111a中(步骤S24)。作为搜索结果,如果被请求读取的地址已被注册成S (共享的)(歩 骤S22),注册在侦听标签lllb中的地址则被改变成I (无效的)(歩骤 S23),并且被请求读取的地址被注册在与发布读取请求的CPU 120a相对 应的侦听标签llla中(步骤S24)。如上所述,在侦听标签修改样式2中,被请求读取的地址被注册在与 发布第一读取请求的CPU 120a相对应的侦听标签llla中,并且相应的已
被注册在侦听标签lllb中的地址被改变成I (无效的)。从而,侦听标签 111持续保留CPU 120中的缓存标签122中的已从S (共享的)改变到I (无效的)的条目的可能性可得以降低,这可以提高系统性能。在侦听标签修改样式3中,当一个CPU 120a发布读取请求时,如果 被请求读取的地址已在对应于与发布读取请求的CPU 120a连接到同 CPU总线130a的CPU 120b的侦听标签111b中被注册成S (共享的), 则基于与发布读取请求的CPU 120a相对应的侦听标签llla中的空白条[:l 的数目(或已用条目的数目)和侦听标签111b中的空白条目的数目(或 已用条目的数目),确定其中注册有被请求读取的地址的侦听标签1。 例如,具有较大空白条目数目的侦听标签111被确定为被请求读取的地址 被注册到的侦听标签lll。例如,在图2中,如果CPU 120a发布读取块号5000的请求,则由于 块号5000已在与连接到同一 CPU总线130a的CPU 120b相对应的侦听标 签lllb中被注册成S (共享的),因此与发布读取请求的CPU 120a相对 应的侦听标签llla和侦听标签111b中的空白条目的数目被比较。这里,注册有该地址的侦听标签111是基于如下条件来确定的"如 果侦听标签llla中的空白条目的数目大于或等于侦听标签111b中的空白 条目的数目(其中在块号5000处的条目被视为空白条目),则被请求读 取的地址被注册在侦听标签111a中,而如果侦听标签llla中的空白条目 的数目小于侦听标签111b中的空白条目的数目,则被请求读取的地址被 注册在侦听标签lllb中"。如图2所示,侦听标签111a中空白条目的数目为0,而侦听标签 111b中空白条目的数目为3 (包括块号5000处的条目)。由于侦听标签 111b中空白条目的数目较大,因此侦听标签111a不被修改。换言之,被 请求读取的地址不被注册在与发布读取请求的CPU 120a相对应的侦听标 签llla中。如果侦听标签llla中空白条目的数目较大,则侦听标签111b中块号 5000处的注册被降到I (无效的)(dropped to I),并且块号5000被注册 在与发布读取请求的CPU 120a相对应的侦听标签llla中。
图6是在第一情况下根据侦听标签修改样式3的侦听标签修改过程流程图。当CPU 120a发布读取请求时(步骤S30),对应于与发布读取请 求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签 lllb被搜索(步骤S31)。作为搜索结果,如果被请求读取的地址尚未被 注册成S (共享的)(步骤S32),被请求读取的地址则被注册在与发布 读取请求的CPU 120a相对应的侦听标签llla中(步骤S36)。作为搜索结果,如果被请求读取的地址已被注册成S (共享的)(歩 骤S32),则将与发布读取请求的CPU 120a相对应的侦听标签llla中空 白条目的数目与侦听标签lllb中空白条目的数目相比较(步骤S33)。 这里,应该注意,被请求读取的地址已被注册到的侦听标签lllb中条目 被视为空白条目。如果侦听标签llla中空白条目的数目大于或等于侦听标签l]lb中空 白条目的数目(步骤S34),则注册在侦听标签lllb中的地址被改变到I (无效的)(步骤S35)。被请求读取的地址被注册在与发布读取请求的 CPU120a相对应的侦听标签llla中(步骤S36)。如果侦听标签llla中空白条目的数目小于侦听标签lllb中空白条目 的数目(步骤S34),则不修改与发布读取请求的CPU 120a相对应的侦 听标签llla。这样一来,由于侦听标签修改样式3以很好的平衡执行侦听标签修改 样式1和2,因此可以提高系统性能,同时保持减少无用驱逐的发生和降 低侦听标签持续保留CPU中的缓存标签中已从S (共享的)改变到I (无 效的)的条目的可能性之间的平衡。图7A、 7B、 8A和8B示出在第一情况下的侦听标签修改的示例。在 下文中,通过使用图7A、 7B、 8A和8B,将描述在被请求读取的地址已 在对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a的CPU 120b的侦听标签lllb中被注册成S (共享的)的情况下侦听标签修改的 示例。图7A、 7B、 8A和8B示出修改图l所示配置中的缓存标签122a、 缓存标签122b、侦听标签llla和侦听标签lllb中的同一索引的示例。图7A示出传统侦听标签修改的示例。在图7A中,阶段0示出某一
时刻各个标签的状态。各个条目的所有状态都为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号1000降到I (无效的),换言之,将块 号1000的状态改变到I (无效的),并发布读取块号5000的请求。各个 标签变为阶段1的状态。由于侦听标签llla处于路满状态,因此系统控制器110对块号2000 执行驱逐并注册块号5000。由于系统控制器IIO执行了驱逐,因此CPU 120a将缓存标签122a中的块号2000降到I (无效的),换言之,将块号 2000的状态改变到I (无效的)。各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图7B示出在第一情况下根据侦听标签修改样式1的侦听标签修改的 示例。在图7B中,阶段0示出某一时刻各个标签的状态。各个条目的所 有状态都为S(共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号1000降到I (无效的),并发布读取块 号5000的请求。各个标签变为阶段1的状态。由于块号5000已被注册在对应于与CPU 120a连接到同一 CPU总线 130a的CPU 120b中的缓存标签122b的侦听标签Ulb中,因此系统控制 器IIO不修改侦听标签llla。各个标签变为阶段2的状态(相对阶段l的状态没有改变)。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图8A示出在第一情况下根据侦听标签修改样式2的侦听标签修改的 示例。在图8A中,阶段0示出某一时刻各个标签的状态。各个条目的所 有状态都为S(共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号1000降到I (无效的),并发布读取块 号5000的请求。各个标签变为阶段1的状态。
由于块号5000已被注册在对应于与CPU 120a连接到同一 CPU总线 130a的CPU 120b中的缓存标签122b的侦听标签111b中,因此系统控制 器IIO删除侦听标签111b中的块号5000。由于侦听标签llla处于路满状 态,因此系统控制器110对块号2000执行驱逐并注册块号5000。山于系 统控制器110执行了驱逐,因此CPU 120a将缓存标签122a中的块兮 2000降到I (无效的)。各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图8B示出在第一情况下根据侦听标签修改样式3的侦听标签修改的 示例。在图8B中,阶段0示出某一时刻各个标签的状态。各个条目的所 有状态都为S(共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a对块号1000进行I降落(I-drop),并发布读 取块号5000的请求。各个标签变为阶段1的状态。系统控制器110将分别对应于连接到同一 CPU总线130a的CPU 120a 和CPU 120b的侦听标签llla和侦听标签111b中的已用条目的数目相比 较。这里,由于侦听标签111b具有较少已用条目数目(除块号5000 外),因此侦听标签llla和侦听标签lllb不被特别修改。各个标签变为 阶段2的状态(相对阶段1的状态没有改变)。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图9A、 9B、 IOA和IOB示出在第二情况下侦听标签修改的示例。在 下文中,通过使用图9A、 9B、 IOA和IOB,将描述在被请求读取的地址 已在对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a的 CPU 120b的侦听标签111b中被注册成S (共享的)的情况下侦听标签修 改的示例。图9A、 9B、 IOA和IOB示出修改图1所示配置中的缓存标签 122a、缓存标签122b、侦听标签llla和侦听标签lllb中的同一索引的示图9A示出在第二情况下传统侦听标签修改的示例。在图9A中,阶
段0示出某一时刻各个标签的状态。各个条目的所有状态都为S (共享 的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落。各 个标签变为阶段l的状态(相对阶段O的状态没有改变)。系统控制器IIO将块号5000注册在侦听标签llla中的空白条目中。 各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图9B示出在第二情况下根据侦听标签修改样式1的侦听标签修改的 示例。在图9B中,阶段0示出某一时刻各个标签的状态。各个条目的所 有状态都为S(共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落。各 个标签变为阶段l的状态(相对阶段O的状态没有改变)。由于块号5000己被注册在对应于与CPU 120a连接到同一 CPU总线 130a的CPU 120b中的缓存标签122b的侦听标签111b中,因此系统控制 器IIO不修改侦听标签llla。各个标签变为阶段2的状态(相对阶段1的 状态没有改变)。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图IOA示出在第二情况下根据侦听标签修改样式2的侦听标签修改的 示例。在图10A中,阶段O示出某一时刻各个标签的状态。各个条目的所 有状态都为S(共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落,就 是说不改变状态。各个标签变为阶段1的状态(相对阶段0的状态没有改 变)。由于块号5000已被注册在对应于与CPU 120a连接到同一 CPU总线
130a的CPU 120b中的缓存标签122b的侦听标签111b中,因此系统控制 器110删除侦听标签11 lb中的块号5000。系统控制器110将块号5000注 册在侦听标签11 la中的空白条目中。各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签22a 中。各个标签变为阶段3的状态。图IOB示出在第二情况下根据侦听标签修改样式3的侦听标签修改的 示例。在图10B中,阶段O示出某一时刻各个标签的状态。各个条目的所 有状态都为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落。各 个标签变为阶段l的状态(相对阶段O的状态没有改变)。系统控制器110将分别对应于连接到同一 CPU总线130a的CPU 120a 和CPU 120b的侦听标签llla和侦听标签111b中的已用条目的数目相比 较。这里,由于两者已用条目的数目(除块号5000夕卜)是相同的,因此 系统控制器IIO删除注册在侦听标签111b中的块号5000。系统控制器 110将块号5000注册在侦听标签llla中的空白条目中。各个标签变为阶 段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。在上文中,已经描述了在被请求读取的地址已在对应于与发布读取请 求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签 lllb中被注册成S (共享的)的情况下侦听标签修改的示例。接下来,将 描述在被请求读取的地址已在对应于与发布读取请求的CPU 120a连接到 同一 CPU总线130a的CPU 120b的侦听标签111b中被注册成E (独占 的)的情况下侦听标签修改的示例。如果被请求读取的地址己被注册成K (独占的),则E (独占的)被改变为S (共享的),并且执行上述侦听 标签修改。图11是在第二情况下根据侦听标签修改样式1的侦听标签修改过程 流程图。在图11中,考虑到被请求读取的地址已在对应于与发布读取请
求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签 lllb中被注册成E (独占的)这一情况,根据上述侦听标签修改样式1的 侦听标签修改被执行。CPU 120a发布读取请求(步骤S40)。对应于与发布读取请求的 CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签lHb 被搜索(步骤S41)。作为搜索结果,如果被请求读取的地址尚未被注册 成E (独占的)(步骤S42),被请求读取的地址则被注册在与发布读取 请求的CPU 120a相对应的侦听标签111a中(歩骤S43)。作为搜索的结果,如果被请求读取的地址已被注册成E (独占的) (步骤S42),被请求读取的地址在侦听标签lllb中的状态则被从E (独 占的)改变到S (共享的)(步骤S44)。与发布读取请求的CPU 120a 相对应的侦听标签llla不被修改。图12是在第二情况下根据侦听标签修改样式2的侦听标签修改过程 流程图。在图12中,考虑到被请求读取的地址已在对应于与发布读取请 求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签 lllb中被注册成E (独占的)这一情况,根据上述侦听标签修改样式2的 侦听标签修改被执行。CPU 120a发布读取请求(步骤S50)。对应于与发布读取请求的 CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签111b 被搜索(步骤S51)。作为搜索结果,如果被请求读取的地址尚未被注册 成E (独占的)(步骤S52),被请求读取的地址则被注册在与发布读取 请求的CPU 120a相对应的侦听标签111a中(步骤S54)。作为搜索的结果,如果被请求读取的地址已被注册成E (独占的) (步骤S52),注册在侦听标签111b中的地址则被降到I (无效的)(歩 骤S53),并且被请求读取的地址被注册在与发布读取请求的CPU 120a 相对应的侦听标签llla中(步骤S54)。图13是在第二情况下根据侦听标签修改样式3的侦听标签修改过程 流程图。在图13中,考虑到被请求读取的地址已在对应于与发布读取请 求的CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签lllb中被注册成E (独占的)这一情况,根据上述侦听标签修改样式3的 侦听标签修改被执行。CPU 120a发布读取请求(步骤S60)。对应于与发布读取请求的 CPU 120a连接到同一 CPU总线130a的另一 CPU 120b的侦听标签11 lb 被搜索(步骤S61)。作为搜索结果,如果被请求读取的地址尚未被注册 成E (独占的)(步骤S62),被请求读取的地址则被注册在与发布读取 请求的CPU 120a相对应的侦听标签111a中(步骤S66)。作为搜索的结果,如果被请求读取的地址已被注册成E (独占的) (步骤S62),则将与发布读取请求的CPU 120a相对应的侦听标签]lla 中的空白条目的数目与侦听标签111b中的空白条目的数目相比较(步骤 S63)。这里,应该注意,被请求读取的地址已在侦听标签lllb中被注册 到的条目被视为空白条目。如果侦听标签llla中的空白条目的数目大于或等于侦听标签111b中 空白条目的数目(步骤S64),侦听标签lllb中注册的该地址则被降到I (无效的)(步骤S65)。被请求读取的地址被注册在与发布读取请求的 CPU120a相对应的侦听标签llla中(步骤S66)。如果侦听标签llla中的空白条目的数目小于侦听标签111b中空白条 目的数目(步骤S64),则将被请求读取的地址在侦听标签111b中的状 态被从E (独占的)改变到S (共享的)(步骤S67)。与发布读取请求 的CPU 120a相对应的侦听标签llla不被修改。图14A、 14B、 15A和15B示出第三情况下侦听标签修改的示例。在 下文中,通过使用图14A、 14B、 15A和15B,将描述在被请求读取的地 址已在对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a的 CPU 120b的侦听标签111b中被注册成E (独占的)的情况下侦听标签修 改的示例。图14A、 14B、 15A和15B示出修改图1所示配置中的缓存标 签122a、缓存标签122b、侦听标签llla和侦听标签111b中的同一索引 的示例。图14A示出在第三情况下传统侦听标签修改的示例。在图14A中, 阶段O示出某一时刻各个标签的状态。缓存标签122b和侦听标签111b中
块号5000的状态为E (独占的),而其他条目的状态为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号1000降到I (无效的),就是说,将块 号1000的状态改变到I (无效的),然后发布读取块号5000的请求。此 时,同一 CPU总线130a的CPU 120b将块号5000在缓存标签122b中的 状态从E (独占的)改变到S (共享的)。各个标签变为阶段1的状态。由于侦听标签llla处于路满状态,因此系统控制器110对块号2000 执行驱逐并注册块号5000。此时,块号5000在侦听标签lllb中的状态被 从E (独占的)改变到S (共享的)。由于系统控制器IIO执行了驱逐, 因此CPU 120a将缓存标签122a中的块号2000降到I (无效的),就是 说,将块号2000的状态改变到I (无效的)。各个标签变为阶段2的状 态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图14B示出在第三情况下根据侦听标签修改样式1的侦听标签修改的 示例。在图14B中,阶段O示出某一时刻各个标签的状态。块号5000在 缓存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的 状态为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a对块号1000进行I降落,并发布读取块号5000 的请求。此时,同一 CPU总线130a的CPU 120b将块号5000在缓存标签 122b中的状态从E (独占的)改变到S (共享的)。各个标签变为阶段1 的状态。由于块号5000己在对应于与CPU 120a连接到同一 CPU总线130a的 CPU 120b中的缓存标签122b的侦听标签lllb中被注册成E (独占 的),因此系统控制器110将块号5000在侦听标签lllb中的状态从E (独占的)降到S (共享的)。系统控制器IIO不修改侦听标签llla。各 个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图15A示出在第三情况下根据侦听标签修改样式2的侦听标签修改的 示例。在图15A中,阶段O示出某一时刻各个标签的状态。块号5000在 缓存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的 状态为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号1000降到I (无效的),就是说,改变 块号1000的状态到I (无效的),并发布读取块号5000的请求。此时, 同一 CPU总线130a的CPU 120b将块号5000在缓存标签122b中的状态 从E (独占的)改变到S (共享的)。各个标签变为阶段1的状态。由于块号5000已被注册在对应于与CPU 120a连接到同一 CPU总线 130a的CPU 120b中的缓存标签122b的侦听标签111b中,因此系统控制 器UO删除侦听标签111b中的块号5000。由于侦听标签llla处于路满状 态,因此系统控制器110对块号2000执行驱逐并注册块号5000。由于系 统控制器110执行了驱逐,因此CPU 120a将缓存标签122a中的块号 2000降到I (无效的),就是说,将块号2000的状态改变到I (无效 的)。各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图15B示出在第三情况下根据侦听标签修改样式3的侦听标签修改的 示例。在图15B中,阶段0示出某一时刻各个标签的状态。块号5000在 缓存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的 状态为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a处于 路满状态,因此CPU 120a将块号IOOO降到I (无效的),就是说,改变 块号1000的状态到I (无效的),并发布读取块号5000的请求。此时, 同一 CPU总线130a的CPU 120b将块号5000在缓存标签122b中的状态 从E (独占的)改变到S (共享的)。各个标签变为阶段1的状态。系统控制器110将分别对应于连接到同一 CPU总线130a的CPU 120a
和CPU 120b的侦听标签llla和侦听标签111b中的已用条目的数目相比 较。这里,由于侦听标签111b具有较少己用条目数目(除块号5000 外),因此侦听标签llla不被特别修改。块号5000在侦听标签111b中 的状态被从E (独占的)改变到S (共享的)。各个标签变为阶段2的状 态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图16A、 16B、 17A和17B示出在第四情况下侦听标签修改的示例。 在下文中,通过使用图16A、 16B、 17A和17B,将描述在被请求读取的 地址已在对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a 的CPU 120b的侦听标签111b中被注册成E (独占的)的情况下侦听标签 修改的示例。图16A、 16B、 17A和17B示出修改图1所示配置中的缓存 标签122a、缓存标签122b、侦听标签llla和侦听标签111b中的同--索 引的示例。图16A示出在第四情况下传统侦听标签修改的示例。在图16A中, 阶段O示出某一时刻各个标签的状态。块号5000在缓存标签122b和侦听 标签lllb中的状态为E (独占的),而其他条目的状态为S (共享的)。这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落,就 是说,不改变状态。此时,同一 CPU总线130a的CPU 120b将块号5000 在缓存标签122b中的状态从E (独占的)改变到S (共享的)。各个标签变为阶段1的状态。系统控制器IIO将块号5000注册在侦听标签llla中的空白条目中。 此时,块号5000在侦听标签lllb中的状态被从E (独占的)改变到S (共享的)。各个标签变为阶段2的状态。响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。图16B示出在第四情况下根据侦听标签修改样式1的侦听标签修改的 示例。在图16B中,阶段O示出某一时刻各个标签的状态。块号5000在
缓存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的 状态为S (共享的)。
这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落,就 是说,不改变状态。此时,同一 CPU总线130a的CPU 120b将块号5000 在缓存标签122b中的状态从E (独占的)改变到S (共享的)。各个标签 变为阶段l的状态。
由于块号5000已在对应于与CPU 120a连接到同一 CPU总线130a的 CPU 120b中的缓存标签122b的侦听标签11 lb中被注册成E (独占 的),因此系统控制器110将块号5000在侦听标签111b中的状态从E (独占的)改变到S (共享的)。系统控制器IIO不修改侦听标签llla。 各个标签变为阶段2的状态。
响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。
图17A示出在四情况下根据侦听标签修改样式2的侦听标签修改的示 例。在图17A中,阶段O示出某一时刻各个标签的状态。块号5000在缓 存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的状 态为S (共享的)。
这里,假设CPU 120a希望读取块号5000。由于缓存标签22a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落,就 是说,不改变状态。此时,同一 CPU总线130a的CPU 120b将块号5000 在缓存标签122b中的状态从E (独占的)改变到S (共享的)。各个标签
变为阶段l的状态。
由于块号5000已被注册在对应于与CPU 120a连接到同一 CPU总线 130a的CPU 120b中的缓存标签122b的侦听标签111b中,因此系统控制 器IIO删除侦听标签lllb中的块号5000。系统控制器IIO将块号5000注 册在侦听标签llla中的空白条目中。各个标签变为阶段2的状态。
响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。
图17B示出在第四情况下根据侦听标签修改样式3的侦听标签修改的
示例。在图17B中,阶段O示出某一时刻各个标签的状态。块号5000在 缓存标签122b和侦听标签lllb中的状态为E (独占的),而其他条目的 状态为S (共享的)。
这里,假设CPU 120a希望读取块号5000。由于缓存标签122a未处 于路满状态,因此CPU 120a发布读取块号5000的请求而不执行降落,就 是说,不改变状态。此时,同一 CPU总线B0a的CPU 120b将块号5000 在缓存标签122b中的状态从E (独占的)改变到S (共享的)。各个标签 变为阶段1的状态。
系统控制器110将分别对应于连接到同一 CPU总线130a的CPU 120a 和CPU 120b的侦听标签llla和侦听标签lllb中的已用条目的数目相比 较。这里,由于两者已用条目的数目(除块号5000夕卜)是相同的,因此 系统控制器110删除注册在侦听标签lllb中的块号5000。系统控制器 110将块号5000注册在侦听标签llla中的空白条目中。各个标签变为阶 段2的状态。
响应于读取结果的回复,CPU 120a将块号5000注册在缓存标签122a 中。各个标签变为阶段3的状态。
上述各种侦听标签修改样式可以利用模式信号来改变。
图18是在可以改变侦听标签修改模式的情况下的侦听标签修改过程 流程图。这里,模式A、 B、 C和D分别指的是传统的侦听标签修改,侦 听标签修改样式1、侦听标签修改样式2和侦听标签修改样式3。
CPU 120a发布读取请求(步骤S70)。如果侦听标签修改模式为A (歩骤S71),被请求读取的地址则被注册在与发布读取请求的CPU 120a相对应的侦听标签llla中(步骤S80)。
如果侦听标签修改模式不为A,则对应于与发布读取请求的CPU 120a连接到同一 CPU总线130a的另一CPU 120b的侦听标签lllb被搜索 (步骤S72)。作为搜索结果,如果被请求读取的地址尚未在侦听标签 lllb中被注册成S (共享的)或E (独占的)(步骤S73),被请求读取 的地址则被注册在与发布读取请求的CPU 120a相对应的侦听标签111a屮
(步骤S80)。
如果被请求读取的地址已在侦听标签lllb中被注册成S (共享的) 或E (独占的)(步骤S73),则检查侦听标签修改模式是B、 C还是I) (步骤S74)。
如果侦听标签修改模式为B,则检查被请求读取的地址在侦听标签 lllb中的状态是S (共享的)还是E (独占的)(步骤S77)。如果地址 状态为E (独占的),则被请求读取的地址在侦听标签lllb中的状态被 从E (独占的)改变到S (共享的)(步骤S78)。如果地址状态为S (共享的),侦听标签lll则不被修改。
如果侦听标签修改模式为C,则被请求读取的地址在侦听标签lllb 中的状态被从S (共享的)或E (独占的)改变到I (无效的)(步骤 S79),并且被请求读取的地址被注册在与发布读取请求的CPU120a相对 应的侦听标签llla中(步骤S80)。
如果侦听标签修改模式为D,则将与发布读取请求的CPU 120a相对 应的侦听标签11 la中的空白条目的数目与侦听标签11 lb中空白条目的数 目相比较(步骤S75)。这里,应该注意,被请求读取的地址在侦听标签 11 lb中被注册到的条目被视为空白条目。
如果侦听标签lllb中空白条目的数目大于或等于侦听标签11b中空 白条目的数目(步骤S76),则将被请求读取的地址在侦听标签lllb屮 的状态从S (共享的)或E (独占的)改变到I (无效的)(步骤S79), 并且被请求读取的地址被注册在与发布读取请求的CPU 120a相对应的侦 听标签llla中(步骤S80)。
如果侦听标签Ulb中空白条目的数目小于侦听标签lllb中空白条冃 的数目(步骤S76),则检查被请求读取的地址在侦听标签lllb中的状 态是s (共享的)还是E (独占的)(步骤S77)。如果地址状态为l': (独占的),被请求读取的地址在侦听标签lllb中的状态则被从E (独 占的)改变到S (共享的)(步骤S78)。如果地址状态为S (共享 的),侦听标签lll则不被修改。
由于侦听标签修改过程可以利用模式信号来改变,因此侦听标签修改
过程的逻辑可被自由地改变,这使得真实机器能够研习取决于侦听标签修 改方法的不同的性能变化。另外,根据结果,具有适当模式设置的操作变 为可能。
接下来,将描述缓存替换请求应对部分119的缓存替换请求应对过
程。如图2所示,在本实施例中,分别对应于连接到同一 CPU总线30a 的CPU 120a和CPU 120b的侦听标签llla和侦听标签lllb被连接到同一 CPU总线130a的CPU 120a和CPU 120b共享。但是,在此状态下,当发 布缓存替换请求时,可能出现问题,这是因为例如当注册成S (共享的) 的条目仅仅由于缓存替换请求被降到I (无效的)时,如果连接到同一 CPU总线130a的另一 CPU的缓存标签122保留着注册成S (共享的)的 相同地址,则在侦听标签111中将不保留关于该地址的S (共享的)注册 信息。在下文中,将描述应对由于发布缓存替换请求而可能导致的问题的 过程。
图19A和19B示出使缓存替换请求无效的过程的示例。在下文中, 通过使用图19A和19B,将描述在CPU 120a已经发布缓存替换请求的情 况下的过程示例。图19A和19B示出在图1所示配置中的缓存标签 122a、缓存标签122b、侦听标签llla和侦听标签lllb中的同一索引的示
图19A示出在不执行使缓存替换请求无效的过程的情况下的示例。 在图19A中,阶段0示出在某一时刻各个标签的状态。这里,CPU 120a 发布针对块号1000的缓存替换请求,并从缓存标签122a中删除块号 1000。各个标签变为阶段1的状态。
系统控制器IIO接收来自CPU 120a的缓存替换请求,并从侦听标签 111a中删除块号1000。各个标签变为阶段2的状态。
但是,在阶段2的状态中,块号1000已被注册在与发布缓存替换请 求的CPU 120a连接到同一 CPU总线130a的CPU 120b中的缓存标签 122b中,然而,块号1000尚未被注册在系统控制器110中的侦听标签 llla和侦听标签lllb中的任何一个中,这导致一致性错误。
图19B示出当在本实施例中执行使缓存替换请求无效的过程的情况下
的示例。在图19B中,阶段0示出在某一时刻各个标签的状态。这里,
CPU 120a发布针对块号1000的缓存替换请求,并从缓存标签122a中删 除块号1000。此时,系统控制器IIO的请求处理部分114中的缓存替换请 求应对部分119在CPU总线130a内侦听,并从缓存标签122b中检测到 CPU 120b已将块号1000注册成S (共享的)。各个标签变为阶段1的状 态。
根据侦听到CPU 120b已将块号1000注册成S (共享的)的结果,系 统控制器110使来自CPU 120a的缓存替换请求无效。换言之,侦听标签 111a中的块号1000不被删除。各个标签变为阶段2的状态。
这样一来,当CPU 120a已经发布缓存替换请求时,发布该缓存替换 请求的CPU 120a所连接的CPU总线130a的内部被侦听,并且如果在 CPU总线130a中存在其中已注册了被请求缓存替换的地址的缓存标签 122b,系统控制器IIO则执行使缓存替换请求无效的过程。从而,可以防 止一致性错误。
图20A和20B示出扩展缓存替换请求的过程的示例。在下文中,通 过使用图20A和20B,将描述在CPU 120a已经发布缓存替换请求的情况 下的过程示例。图20A和20B示出在图1所示配置中的缓存标签122a、 缓存标签122b、侦听标签llla和侦听标签lllb中的同一索引的示例。
图20A示出在不执行扩展缓存替换请求的过程的情况下的示例。在 图20A中,阶段0示出在某一时刻各个标签的状态。这里,CPU 120a发 布针对块号1000的缓存替换请求,并从缓存标签122a中删除块号1000。 各个标签变为阶段1的状态。
系统控制器IIO接收来自CPU 120a的缓存替换请求。但是,由亍块 号1000尚未被注册在侦听标签111a中,因此系统控制器IIO不特别执行 任何过程。各个标签变为阶段2的状态(相对阶段l的状态没有改变)。
但是,在阶段2的状态中,虽然块号1000尚未被注册在连接到同一 CPU总线130a的CPU 120a和CPU 120b中的任何一个中,但是块号1000 保持被注册在侦听标签111b中,这就留下了垃圾信息。
图20B示出当在本实施例中执行扩展缓存替换请求的过程的情况下的
示例。在图20B中,阶段O示出在某一时刻各个标签的状态。这里,CPU
120a发布针对块号IOOO的缓存替换请求,并从缓存标签122a中删除块" 1000。此时,系统控制器IIO的请求处理部分114中的缓存替换请求应对 部分119在CPU总线130a内侦听,并检测到块号1000在CPU 120b的缓 存标签122b中也尚未被注册。各个标签变为阶段1的状态。
根据块号1000也尚未被注册在CPU 120b中这一侦听结果,系统控制 器110将缓存替换请求从CPU 120a扩展到整个CPU总线130a,并执行该 过程,这里假设缓存替换请求已经从连接到同一 CPU总线130a的所有 CPU 120a和CPU 120b被发布。从而,侦听标签lllb中的块号1000将被 删除。各个标签变为阶段2的状态。
这样一来,当CPU 120a已经发布缓存替换请求时,发布了该缓存替 换请求的CPU 120a被连接到的CPU总线130a的内部被侦听,如果被请 求缓存替换的地址尚未也被注册在CPU总线130a中的另一 CPU 120b 中,则从CPU 120a发布的缓存替换请求被扩展到从连接到CPU总线 130a的所有CPU 120发布的缓存替换请求。从而,可以防止在侦听标签 111中留下垃圾。
图21是根据本实施例的缓存替换请求应对过程流程图。在图21中, 确定被请求缓存替换的地址是否已被注册在发布该缓存替换请求的CPU 120a所连接的CPU总线130a中的另一 CPU 120b中,并且执行使缓存替 换请求无效的过程或者扩展缓存替换请求的过程。
CPU 120a发布缓存替换请求(步骤S90)。发布该缓存替换请求的 CPU 120a连接到的CPU总线130a的内部被侦听(歩骤S91)。
作为侦听结果,如果被请求缓存替换的地址已被注册在CPU总线 130a中的另一 CPU 120b中(步骤S92),则来自CPU 120a的缓存替换 请求被抛弃(步骤S93)。
作为侦听结果,如果被请求缓存替换的地址尚未被注册在CPU总线 130a中的另一 CPU 120b中(步骤S92),则将来自CPU 120a的缓存替 换请求扩展到从连接到CPU总线HOa的所有CPU 120发布的缓存替换请 求(步骤S94),并执行缓存替换请求(步骤S95)。
虽然图3所示缓存替换请求应对部分119执行上述过程,但是如果侦 听标签修改部分U8在包括传统修改样式在内的侦听标签修改模式之间切
换,缓存替换请求应对部分119则确定是否执行缓存替换请求应对过程。 在传统修改样式的情况下,缓存替换请求应对部分119确定不执行缓存替
换请求应对过程。
图22是在侦听标签修改模式可被改变的情况下的缓存替换请求应对 过程的流程图。在传统侦听标签修改的情况下,不需要使缓存替换请求无 效的过程或扩展缓存替换请求的过程。在图22中,将描述在传统的侦听 标签修改和本实施例的侦听标签修改可被切换的情况下的过程示例。这 里,传统的侦听标签修改是模式A,侦听标签修改样式1是模式B,侦听 标签修改样式2是模式C并且侦听标签修改样式3是模式D。
CPU 120a发布缓存替换请求(步骤S100)。如果侦听标签修改模式 为A (步骤SIOI),则执行缓存替换请求(步骤S106)。
如果侦听标签修改模式不为A (步骤S101),则发布该缓存替换请 求的CPU120a连接到的CPU总线130a的内部被侦听(步骤S102)。
作为侦听结果,如果被请求缓存替换的地址已被注册在CPU总线 130a中的另一CPU 120b中(歩骤S103),则来自CPU 120a的缓存替换 请求被抛弃(步骤S104)。
作为侦听结果,如果被请求缓存替换的地址尚未被注册在CPU总线 130a中的另一CPU 120b中(步骤S103),则来自CPU 120a的缓存替换 请求被扩展到从连接到CPU总线130a的所有CPU 120发布的缓存替换请 求(步骤S105),并且该缓存替换请求被执行(步骤S106)。
在上文中,虽然已经描述了本发明的实施例,但是本发明不局限于以 上描述。例如,虽然有两个CPU 120连接到一个CPU总线BO的示例在 本实施例中被描述,但是本发明还可被类似地实施在有三个或更多个 CPU连接到一个CPU总线的情况。
本申请要求2006年8月18日递交的日本专利申请No. 2006-223231 的优先权,该申请的内容通过引用被结合于此。
权利要求
1.一种在多处理器系统中用于管理包括缓存存储器的多个CPU的系统控制器,该控制器包括针对每个所述CPU的侦听标签,其具有关于每个CPU所保留的所述缓存存储器的标签的拷贝信息;以及请求处理部分,其用于执行针对来自所述CPU的请求的过程,其中,当要求在缓存存储器的标签中将地址注册成共享状态的请求已被从所述多个CPU中的一个CPU发布时,如果同一地址被注册在连接到同一CPU总线的每个CPU的所述缓存存储器的标签中,则所述请求处理部分执行侦听标签修改过程,以使得所述地址仅在与注册有同一地址的CPU相对应的侦听标签中的任何一个中被注册成共享状态。
2. 如权利要求1所述的系统控制器,其中,当处于共享状态的读取请 求己被从所述多个CPU中的一个CPU发布时,如果被请求读取的地址已 在对应于与发布该读取请求的CPU连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,则所述请求处理部分进行控制以不将所述被请求读取的地址注册在与发布该读取请求的CPU相对应的侦听标签中。
3. 如权利要求1所述的系统控制器,其中,当处于共享状态的读取诺 求已被从所述多个CPU中的一个CPU发布时,如果被请求读取的地址已 在对应于与发布该读取请求的CPU连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,则所述请求处理部分进行控制以将所述地址 在被请求读取的地址已被注册到的侦听标签中的条目改变到无效状态,并将所述地址注册在与发布该读取请求的CPU相对应的侦听标签中。
4. 如权利要求1所述的系统控制器,其中,当处于共享状态的读取请 求已被从所述多个CPU中的一个CPU发布时,如果被请求读取的地址已 在对应于与发布该读取请求的CPU连接到同一 CPU总线的另一 CPU的侦听标签中被注册成共享状态,则所述请求处理部分将被请求读取的地址已被注册到的侦听标签与对应于发布该读取请求的CPU的侦听标签中的空白条目的数目或已用条1:1的 数目相比较,并根据比较结果,确定是进行控制以不将所述地址注册在与 发布该读取请求的CPU相对应的侦听标签中,还是进行控制以将所述地址 在所述地址己被注册到的侦听标签中的条目改变到无效状态并将所述地址 注册在与发布该读取请求的CPU相对应的侦听标签中,并且基于该确定来 执行侦听标签修改过程。
5. 如权利要求1所述的系统控制器,其中,当缓存替换请求已被从所 述多个CPU中的一个CPU发布时,所述请求处理部分侦听与发布该缓存 替换请求的CPU连接到同一 CPU总线的另一 CPU的共享状态,并且作为 结果,如果被请求缓存替换的地址已在除发布该缓存替换请求的CPU之外 的CPU中被注册成共享状态,则进行控制以使发布的缓存替换请求无效。
6. 如权利要求1所述的系统控制器,其中,当缓存替换请求己被从所 述多个CPU中的一个CPU发布时,所述请求处理部分侦听与发布该缓存 替换请求的CPU连接到同一 CPU总线的另一 CPU的共享状态,并且作为结果,如果被请求缓存替换的地址尚未被注册在除发布该缓存替换请求的CPU之外的CPU中,则进行控制以将发布的缓存替换请求扩展为来自与 发布该缓存替换请求的CPU连接到同一 CPU总线的所有CPU的缓存替换请求。
7. 如权利要求1所述的系统控制器,其中,当要将注册在所述缓存存储器的标签中的一个地址的独占状态改变到共享状态的请求已被从所述多个CPU中的一个CPU发布时,所述请求处理部分检查同一地址是否已在 与连接到同一 CPU总线的另一 CPU相对应的侦听标签中被注册成共享状态,并且如果存在同一地址己在其中被注册成共享状态的侦听标签,则执 行侦听标签修改过程,以使得所述地址仅在任何一个侦听标签中被注册成 共享状态。
8. 如权利要求1所述的系统控制器,其中,当处于共享状态的读取请 求已被从所述多个CPU中的一个CPU发布时,如果同一地址已被注册在 连接到同一 CPU总线的每个CPU的所述缓存存储器的标签中,所述请求处理部分则根据提供给所述请求处理部分的模式信号来选择执行以下侦听标签修改过程中的至少一种进行控制以不将所述被请求读取的地址注册 在与发布该读取请求的CPU相对应的侦听标签中的侦听标签修改过程;进 行控制以将所述地址在被请求读取的地址已被注册到的侦听标签中的条I I 改变到无效状态并将所述地址注册在与发布该读取请求的CPU相对应的侦 听标签中的侦听标签修改过程;以及将同一地址在所述被请求读取的地址已被注册到的侦听标签和与发布所述读取请求的CPU相对应的侦听标签两者中都注册成共享状态的侦听标签修改过程。
9. 一种由在多处理器系统中用于管理包括缓存存储器的多个CPU的系 统控制器执行的侦听标签修改方法,该系统控制器包括针对每个所述CPU 的具有关于每个CPU所保留的所述缓存存储器的标签的拷贝信息的侦听标签,该方法包括当处于共享状态的读取请求已被从所述多个CPU中的一个CPU发布 时,检査与所述CPU相对应的侦听标签中的拷贝信息,如果同一地址被注册在连接到同一 CPU总线的每个CPU的所述缓存 存储器的标签中,则执行侦听标签修改过程,以使得该地址仅在与同一地 址被注册到的CPU相对应的侦听标签中的任何一个中被注册成共享状态。
10. 如权利要求9所述的侦听标签修改方法,其中,当处于共享状态 的读取请求已被从所述多个CPU中的一个CPU发布时,如果被请求读取 的地址已在对应于与发布该读取请求的CPU连接到同一 CPU总线的另-CPU的侦听标签中被注册成共享状态,则所述执行侦听标签修改过程的歩 骤进行控制以不将所述被请求读取的地址注册在与发布该读取请求的CPU相对应的侦听标签中。
11. 如权利要求9所述的侦听标签修改方法,其中,当处于共享状态 的读取请求已被从所述多个CPU中的一个CPU发布时,如果被请求读取 的地址已在对应于与发布该读取请求的CPU连接到同一 CPU总线的另-CPU的侦听标签中被注册成共享状态,则所述执行侦听标签修改过程的歩骤进行控制以将所述地址在被请求读取的地址已被注册到的侦听标签中的条目改变到无效状态,并将所述地址注册在与发布该读取请求的CPU相对应的侦听标签中。
12. 如权利要求9所述的侦听标签修改方法,其中,当处于共享状态 的读取请求已被从所述多个CPU中的一个CPU发布时,如果被请求读取的地址己在对应于与发布该读取请求的CPU连接到同一 CPU总线的另--CPU的侦听标签中被注册成共享状态,则所述执行侦听标签修改过程的步骤将被请求读取的地址己被注册到的侦听标签与对应于发布该读取请求的CPU的侦听标签中的空白条目的数目或已用条目的数目相比较,并根据比较结果,确定是进行控制以不将所述地址注册在与发布该读取请求的CPU相对应的侦听标签中,还是进行控制以将所述地址在所述地址已被注册到的侦听标签中的条目改变到无效状态并将所述地址注册在与发布该读取请求的CPU相对应的侦听标签中,并且基于该确定来执行侦听标签修改过程。
13. 如权利要求9所述的侦听标签修改方法,其中,当缓存替换请求 已被从所述多个CPU中的一个CPU发布时,所述执行侦听标签修改过程 的步骤侦听与发布该缓存替换请求的CPU连接到同一 CPU总线的另-CPU的共享状态,并且作为结果,如果被请求缓存替换的地址已在除发布 该缓存替换请求的CPU之外的CPU中被注册成共享状态,则进行控制以使发布的缓存替换请求无效。
14. 如权利要求9所述的侦听标签修改方法,其中,当缓存替换请求 已被从所述多个CPU中的一个CPU发布时,所述执行侦听标签修改过程 的步骤侦听与发布该缓存替换请求的CPU连接到同一 CPU总线的另一 CPU的共享状态,并且作为结果,如果被请求缓存替换的地址尚未被注册 在除发布该缓存替换请求的CPU之外的CPU中,则进行控制以将发布的 缓存替换请求扩展为来自与发布该缓存替换请求的CPU连接到同一 CPU 总线的所有CPU的缓存替换请求。
15. 如权利要求9所述的侦听标签修改方法,其中,当要将注册在所述缓存存储器的标签中的一个地址的独占状态改变到共享状态的请求已被 从所述多个CPU中的一个CPU发布时,所述执行侦听标签修改过程的步 骤检查同一地址是否已在与连接到同一 CPU总线的另一 CPU相对应的侦听标签中被注册成共享状态,并且如果存在同一地址已在其中被注册成共 享状态的侦听标签,则执行侦听标签修改过程,以使得所述地址仅在任何 一个侦听标签中被注册成共享状态。
16. 如权利要求9所述的侦听标签修改方法,其中,当处于共享状态 的读取请求已被从所述多个CPU中的一个CPU发布时,如果同一地址巳 被注册在连接到同一 CPU总线的每个CPU的所述缓存存储器的标签中, 所述执行侦听标签修改过程的步骤则根据提供给所述请求处理部分的模式信号来选择执行以下侦听标签修改过程中的至少一种进行控制以不将所述被请求读取的地址注册在与发布该读取请求的CPU相对应的侦听标签中 的侦听标签修改过程;进行控制以将所述地址在被请求读取的地址己被注 册到的侦听标签中的条目改变到无效状态并将所述地址注册在与发布该读 取请求的CPU相对应的侦听标签中的侦听标签修改过程;以及将同一地址 在所述被请求读取的地址已被注册到的侦听标签和与发布所述读取请求的 CPU相对应的侦听标签两者中都注册成共享状态的侦听标签修改过程。
17. —种具有多个CPU和用于管理所述多个CPU的系统控制器的信息 处理装置,其中每个所述CPU包括缓存存储器,该系统控制器包括侦听标签,其具有关于每个CPU所保留的所述缓存存储器的标签的拷 贝信息,该侦听标签是对应于所述多个CPU中的每个CPU来提供的;以 及请求处理部分,其用于执行针对来自所述CPU的请求的过程,其中,当要求在缓存存储器的标签中将地址注册成共享状态的请求已被从一个 CPU发布时,如果同一地址被注册在连接到同一 CPU总线的每个CPU的所述缓存存储器的标签中,则所述请求处理部分执行侦听标签修改过程,以使得所述地址仅在与连接到所述同一 CPU总线的CPU相对应的侦听标签中的任何一个中被注册成共享状态。
全文摘要
在多处理器系统中,一种系统控制器包括侦听标签,所述侦听标签是关于各个CPU保留的缓存标签的拷贝信息。如果同一地址在连接到同CPU总线的每个CPU的缓存标签中都被注册成S(共享状态),则该地址仅在与同一地址被注册到的CPU相对应的侦听标签中的任何一个中被注册成S(共享状态)。
文档编号G06F12/08GK101127007SQ20071010702
公开日2008年2月20日 申请日期2007年5月17日 优先权日2006年8月18日
发明者伊藤大介, 大胁威, 山本崇史, 植木俊和, 畑井田诚, 石塚孝治, 细川由佳 申请人:富士通株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1