- 1、本文档共162页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap7-多处理机
2×2开关四种可能的连接方式 ② Omega网络 7.4 互连网络 一个16×16 Omega网络 7.5 同 步 通常是使用硬件提供的有关同步指令,通过用户级软件例程建立的。 7.5.1 基本硬件原语 在多处理器同步中,主要功能是一组能自动读出后并进行写存储单元的硬件原语。它们能够自动读/修改单元。通常情况下,用户不直接使用基本的硬件原语,原语主要供系统程序员用来编制同步库函数。 第7章 多处理机 功能:将一个存储单元的值和一个寄存器的值 进行交换。建立一个锁,锁值为“0”表示开锁, 为“1”表示上锁。 处理器加锁时,将对应于该锁的存储单元的值 交换为某个寄存器的值“1”。如果返回值为“0”, 存储单元的值此时已置换为“1”,防止了别的进 程竞争该锁。 实现同步的关键: 操作的原子性 1. 典型操作:原子交换(atomic exchange) 7.5 同 步 2. 测试并置定(test_and_set) 先测试一个值,如果符合条件则修改其值。 3. 读取并加1(fetch_and_increment) 它返回存储单元的值并自动增加该值。 4. 使用指令对 LL(load linked或load locked)的取指令 SC(store conditional)的特殊存指令 7.5 同 步 例 实现对由R1指出的存储单元进行原子交换操作 try:mov R3,R4 ;送交换值 ll R2,0(R1) ;load linked sc R3,0(R1) ;store conditional beqz R3,try ;存失败转移 mov R4,R2 ;将取的值送往R4 最终R4和由R1指向的单元值进行原子交换,在ll和sc之间如有别的处理器插入并修改了存储单元的值,sc将返回“0”并存入R3中,从而使指令序列再重新循环。 7.5 同 步 ll/sc机制的一个优点:可用来构造别的同步原语 例如:原子的fetch-and-increment try: ll R2,0(R1) ;load linked addi R2,R2,#1 ;增加 sc R2,0(R1) ;store conditional beqz R2,try ;存失败转移 指令对的实现必须跟踪地址 由ll指令指定一个寄存器,该寄存器存放着一个 单元地址,这个寄存器常称为连接寄存器。 7.5 同 步 7.5.2 用一致性实现锁 采用多处理机的一致性机制来实现旋转锁。 旋转锁 处理器环绕一个锁不停地旋转而请求获得该锁。 1. 无Cache一致性机制 在存储器中保存锁变量,处理器可以不断地通 过一个原子操作请求加锁,比如先交换,再测试返 回值从而知道锁的状况。释放锁的时候,处理器可 简单地将锁置为“0” 。 7.5 同 步 li R2,#1 lockit: exch R2,0(R1) ;原子交换 bnez R2,lockit ;是否已加锁? 2. 机器支持Cache一致性 将锁缓冲进入Cache,并通过一致性机制使锁值保 持一致。 7.5 同 步 优点 可使“环绕”的进程对本地Cache块进行操作; 可利用锁访问的局部性,即处理器最近使用过 的锁不久又会使用。 改进旋转锁(获得第一条好处) 使其环绕过程仅对本地Cache中锁的拷贝进行读, 直到它返回“0”确认锁可用,然后再进行加锁交换操 作。使用锁完毕后新竞争又开始进行。 7.5 同 步 lockit:lw R2,0(R1) ;取锁值 bnez R2,lockit ;锁不可用 li R2,#1 ;存入锁值 exch R2,0(R1) ;交换 bnez R2,lockit ;如锁不为0转移 上面给出了对于三个处理器竞争锁的操作。一旦处理器存入“0”释放锁,所有别的Cache对应块均被作废,必须取新的值来更新它们锁的拷贝。 一个处理器Cache会先获得未
文档评论(0)