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

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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值