MIPS系列笔记-临界区的支持

本文介绍在MIPS架构中如何使用ll和sc指令实现临界区,以确保信号灯的原子修改,从而保障多处理器环境下的操作不被打断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OS中很多操作是必须保证不被打断的,方法有很多,比如禁止中断,采用信号灯建立临界区等等。相对于粗鲁地禁止掉中断,利用临界区的方法更加灵活。

临界区的实现依赖于对某一参考数据的原子修改。

在x86中,使用了带前缀lock的test and set指令来实现对信号的原子修改。

在MIPS中用了一种新方法:配套使用ll(link load,链接加载)和sc(store conditionally,条件存储)指令。硬件保证自最后的ll开始,如果后继执行没有竞争发生(当前指令流没有被中断过),sc才会成功地写指定位置,并且它还会返回一个0或者1的值到寄存器中指示成功还是失败。1为成功,0为失败。比如:

ll t1, 0(t0) #执行ll指令,硬件开始监控

#some other insts here, modify t1, set sem, etc

sc t1, 0(t0) #执行是否成功依赖于前面是否发生过竞争

beq t1, zero, TryAgain

如果以上代码没有被中断(竞争未发生),则sc执行后t1寄存器内保存的值被设置为1,否则被设置为0。

有了ll/sc,我们可以确切地知道信号灯是否设置成功,于是也就可以实现临界区了。ll/sc是为多处理器引入的,但是,即使在单处理器环境下它同样适用。它避免了禁用中断的问题,可以减少最坏情况下中断延迟时带来的影响。

Reference:《See MIPS Run 2nd》 5.8.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值