链接取数/条件存数

原子交换原语:将寄存器中的一个值和存储器中的一个值相互交换。

采用指令对的方法实现单个的原子存储器操作。这一指令对包括链接取数指令和条件存数指令。

链接取数指令:返回锁单元的原始值。

示例:

ll $s1,20($s2)     含义:$s1=Memory[$s2+20]

条件存数指令:保存寄存器的值,如果执行成功将寄存器的值修改为1,否则修改为0。

示例:

sc  $s1,20($s2)      含义:Memory[$s2+20]=$s1,($s1=0或1)

顺序地使用这两条指令,如果ll指令所指定的锁单元的内容在sc指令执行前已经被改变,sc指令执行失败

 

实现存储器单元的原子交换的指令序列:(存储器单元的地址由$s1中的值指出,寄存器$s4)

again:    add $t0,$zero,$s4
        ll    $t1,0($s1)
        sc    $t0,0($s1)
        beq   $t0,$zero,again
        add   $s4,$zero,$t1

解析:执行第一行:寄存器s4中保存的值赋值给寄存器t0中

          执行第二行:t1中保存锁单元原始内容A

          执行第三行:执行sc指令,如果在ll和sc之间任何时候有处理器插入,并修改了锁单元的值,t0置为0,条件存数指令执行失败,否则条件存数指令执行成功,t0置为1,保存$s4中的值在锁单元之中

          如果t0=1

          跳过第四行执行第五行,将A保存在寄存器$s4中,从而实现了寄存器$s4中的值和存储器中的值A的互相交换。

          如果t0为0,引起指令序列重新执行。

         

 

 

 

 

          

          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值