xv6 risc-v lock notes

本文介绍了xv6操作系统中锁的实现,包括死锁、锁与中断的关系以及睡眠锁。通过分析并发执行导致的问题,阐述了锁的必要性,讲解了自旋锁和睡眠锁的工作原理,以及如何防止死锁和指令重排带来的影响。
摘要由CSDN通过智能技术生成

xv6中专门讲锁的篇幅并不多,锁的代码也在一两行左右,但是锁的使用却是无处不在的,而且要理解好也并不那么容易

对锁的需求来自于interleaving(交错执行),这可能是多处理器环境下,也可能是单处理器环境下在不同进程/线程间切换cpu

为什么单处理器下需要锁?很多你以为的操作并不是原子的,比如a+=1,首先是取出a的值,然后加1,然后赋值给a

如果在赋值之前,因为抢占式调度,cpu选择的另一个进程修改了a的值,那么重新调度回去,完成对a的赋值之后,之前的修改就会丢失

当他们需要访问共享的数据结构时,就出现了问题,如:

  • 一个进程在读一个数据时,可能另一个进程正在修改它,那么这个进程读到的数据就可能是不正确的
  • 多个进程同时更新一个数据,那么可能只有最后完成的更新保留了下来,之前的更新都丢失了

例如:

这样一个数据结构,list指向第一个节点(invariant),push新建一个节点,并将其插入到最前面,然后让list重新指向他

考虑下面情况:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值