1 Star 0 Fork 0

WHC/xv6-course

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
52-sleeplock.org 2.27 KB
一键复制 编辑 原始数据 按行查看 历史
殊蕤 提交于 2023-11-26 22:55 . add: 添加死锁分析

sleeplock 与死锁

Spin Lock 回顾

  1. acquire
  2. release
  3. 并发编程
    • mutex
    • atomic

Sleep Lock 睡眠锁

  1. 磁盘 IDE 读写
    • 依赖 interrupt
  2. disk 竞争
    • spinlock ???
      • while loop
  3. sleeplock 睡眠锁
    • spinlock 内涵
    • locked 记录是否上锁

../../study/os/xv6-public/sleeplock.h

rg -n initsleeplock $PWD | sort
/data/gitana/study/os/xv6-public/bio.c:51:    initsleeplock(&b->lock, "buffer");
/data/gitana/study/os/xv6-public/defs.h:139:void            initsleeplock(struct sleeplock*, char*);
/data/gitana/study/os/xv6-public/fs.c:178:    initsleeplock(&icache.inode[i].lock, "inode");
/data/gitana/study/os/xv6-public/sleeplock.c:14:initsleeplock(struct sleeplock *lk, char *name)

Sleep Lock 死锁场景

  1. 死锁 deadlock
  2. 经典案例
    • 生产者/消费者
    • 哲学家
S: Sleep Lock
X: Spin Lock
a: acquire
r: release

分析流程:
TIME
--------------------------- Long Time --------------------------->
T1:(S)|  (S/a) |     (S/r)     ...      (S/a)            |
   (X)|        |               ...         (X/a)         |
      |        |               ...            x          |
      |        |               ...            x          |
      |        |               ...            x          |
      |        |               ...            x          |
T2:(S)|        |               ...            (S/a)      |
   (X)|        |(X/a)          ...            x          |
      |        |               ...            x          |
      |        |               ...            x          |
      |        |               ...            x          |
      |        |               ...            x          |

                                              T1: hold S, wait X
                                              T2: hold X, wait S

Sleep Lock 实现

  1. 获取锁 acquiresleep
  2. 释放锁 releasesleep
  3. acquiresleep/releasesleep
    • 包裹 spinlock: acquire/release
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/whc_softHardware/xv6-course.git
git@gitee.com:whc_softHardware/xv6-course.git
whc_softHardware
xv6-course
xv6-course
master

搜索帮助

D67c1975 1850385 1daf7b77 1850385