0
点赞
收藏
分享

微信扫一扫

LINUX系统中的锁

花姐的职场人生 2022-03-15 阅读 68

LINUX系统中的锁


说一下LINUX系统中的锁

互斥锁,读写锁,自旋锁

自旋锁发生死锁

死锁产生的条件

多个并发进程因争夺系统资源而产生相互等待的现象。

  • 互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源;

  • 请求和保持条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但该进程不会释放自己已经占有的资源

  • 不可剥夺条件:进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用后自己释放

  • 环路等待条件:进程发生死锁后,必然存在一个进程-资源之间的环形链 ,环路中每个进程都在等待下一个进程所占有的资源

如何避免死锁

  • 破坏请求和等待条件。 所有的进程在开始运行之前,必须一次性地申请其在整个运行过程中所需要的全部资源
  • 破坏不可抢占条件。 当进程新的资源未得到满足时,释放已占有的资源
  • 破坏环路等待条件。 系统给每类资源赋予一个序号,每个进程按编号递增的请求资源,释放则相反

死锁检测和死锁恢复

  • 死锁检测
    • 每种类型一个资源的死锁检测
    • 每种类型多个资源的死锁检测
  • 死锁恢复
    • 抢占恢复。 从一个或多个进程中抢占足够数量的资源分配给死锁进程,以解除死锁状态
    • 回滚恢复。 周期性地检查进程的状态(包括请求的资源),将其写入一个文件,当发生死锁,回滚到之前的某个时间点
    • 杀死进程恢复。 终止或撤销系统中的一个或多个死锁进程,直至打破死锁状态。

信号处理机制

哪两个信号不能忽略

SIGKILL和SIGSTOP,这两种信号不能被忽略

  • 它们向超级用户提供一种使进程终止或停止的可靠方法。
  • 如果忽略某些由硬件异常产生的信号(例如非法存储访问或除以0),则进程的行为是示定义的。

原子操作和锁机制

原子操作实现同步

举报

相关推荐

0 条评论