通常,您使用硬件来提供同步指令。.pptVIP

通常,您使用硬件来提供同步指令。.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通常,您使用硬件来提供同步指令。

7.5 同 步 通常是使用硬件提供的有关同步指令,通过用户级软件例程建立的。 7.5.1 基本硬件原语 在多处理器同步中,主要功能是一组能自动读出后并进行写存储单元的硬件原语。它们能够自动读/修改单元。通常情况下,用户不直接使用基本的硬件原语,原语主要供系统程序员用来编制同步库函数。 ; 功能:将一个存储单元的值和一个寄存器的值 进行交换。建立一个锁,锁值为“0”表示开锁, 为“1”表示上锁。 处理器加锁时,将对应于该锁的存储单元的值 交换为某个寄存器的值“1”。如果返回值为“0”, 存储单元的值此时已置换为“1”,防止了别的进 程竞争该锁。 实现同步的关键: 操作的原子性 ;2. 测试并置定(test_and_set) 先测试一个值,如果符合条件则修改其值。 3. 读取并加1(fetch_and_increment) 它返回存储单元的值并自动增加该值。 4. 使用指令对 ;例 实现对由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中,从而使指令序列再重新循环。 ; 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.2 用一致性实现锁; li R2,#1 lockit: exch R2,0(R1) ;原子交换 bnez R2,lockit ;是否已加锁?; 优点; lockit:lw R2,0(R1) ;取锁值 bnez R2,lockit ;锁不可用 li R2,#1 ;存入锁值 exch R2,0(R1) ;交换 bnez R2,lockit ;如锁不为0转移  上面给出了对于三个处理器竞争锁的操作。一旦处理器存入“0”释放锁,所有别的Cache对应块均被作废,必须取新的值来更新它们锁的拷贝。 一个处理器Cache会先获得未加锁值并执行交换操作,当别的Cache失效处理完后,它们会发现已被加锁,所以又必须不停地测试环绕。;表7.5 三个处理机对锁的使用; ll/sc原语的另一个状态:读写操作明显分开。 Ll不产生总线数据传送,这使下面代码与使用经 过优化交换的代码具有相同的特点: lockit: ll R2,0(R1) ;load-linked bnez R2,lockit ;锁无效 li R2,,#1 ;加锁值 sc R2,0(R1) ;存 beqz R2,lockit ;如存失败转移  第一个分支形成环绕的循环体,第二个分支解决了两个同时请求锁的处理器竞争问题。尽管旋转锁机制简单并且具有强制性,但难以将它扩展到处理器数量很多的情况。;7.5.3 同步性能问题 简单旋转锁不能很好地适应可伸缩性。大规模机器 中所有的处理器会产生出大量的竞争问题。 例7.3:设总线上有10个处理器同时准备对同一变量加锁。假设每个总线事务处理(读失效或写失效)是100个时钟周期,忽略实际的Cache块锁的读写时间以及加锁的时间,求10个处理器请求加锁所需的总线事务数目。设时间为0时锁已释放并且所有处理器在旋转,求处理这1

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档