- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- Unit 1 Fun numbers and letters (说课稿)-2024-2025学年人教PEP版(一起)(2024)英语二年级上册.docx VIP
- 印刷成本核算方式.docx VIP
- 森林防火教学课件.ppt VIP
- 二级保密资格档案目录(24盒)优质材料.doc VIP
- 2025水利工程五大员专业题库(含答案).docx VIP
- 图书馆业务知识培训ppt课件.pptx VIP
- 传感器智能传感器与无线传感器网络技术.pptx VIP
- 中国共产党基层组织选举工作条例学习宣贯ppt课件.pptx VIP
- 游消费者行为学(第二版)孙九霞全套PPT课件.pptx
- 东芝 e-STUDIO 2000AC 2500AC 彩色复印机维修手册(拆卸安装篇).pdf VIP
文档评论(0)