在MIPS中实现原子操作

在MIPS中实现原子操作

一、详解原子操作

1、原子操作的特点

①不可中断性:一旦开始,就不会被其他操作打断直到完成。

②完整性:操作要么完全执行,要么完全不执行,没有中间状态。

③独立性:执行结果不依赖于线程的调度方式或者操作的交错执行。

即原子操作是一个不可分的操作

2、为什么要实现原子操作

在多个进程同时对一个内存单元进行操作的时候,如果任务之间不进行同步,就会有数据竞争的风险。举个例子,例如

A和B都需要对寄存器s0进行+1的操作,即最终我们希望s0最后会+2。

A从寄存器中取出了一个数据0;

B从寄存器中取出了一个数据0;

A对取出的数据+1;

B对取出的数据+1;

A放回数据,s0的值为1;

B放回数据,s0的值为1;在这个过程中,由于+1这个操作不是原子的,导致A的操作被B覆盖了,如果我们将这个+1的操作原子化,将取数据,+1,放回数据合并成一个不可再分的原子化操作,那么我们就可以避免数据冲突。

(至于为什么不直接用addi,是因为很多时候我们需要取数据+操作+放回数据而不是直接修改数据,这里的+1只是模拟这个过程)

二、原子操作的实现

1、链接取数指令和条件存数指令

①链接取数指令

示例:ll $t1,0($s1)

含义:LL指令从内存$s1中读取一个字,并将其加载到寄存器$t1中。与普通的加载指令(如LW)不同,LL指令还会在内部记录加载的内存地址和对应的数据,为后续的SC指令做准备。

②条件存数指令

示例:sc $t1,0($s1)

含义:SC指令试图将一个寄存器$t1中的值写入到内存$s1中。但是,SC会根据上一个保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值