必背八股文-操作系统(2)

什么是死锁?产生死锁的原因是什么?

死锁是指两个或多个进程因为彼此持有对方需要的资源而互相等待的一种状态。死锁的原因主要有资源竞争、资源分配不当、进程依赖关系等。为了避免死锁的发生,可以采取避免竞争资源、避免循环等待、使用超时机制、增加资源数量等措施。

死锁的必要条件是什么?

  1. 互斥条件(Mutual Exclusion):至少有一个资源是被独占使用的,即一次只能被一个进程使用。
  2. 请求和保持条件(Hold and Wait):进程持有至少一个资源,并请求获取其他进程持有的资源。
  3. 不剥夺条件(No Preemption):资源只能在进程使用完之后才能被释放,不能被其他进程抢占。
  4. 循环等待条件(Circular Wait):存在一个进程资源请求链的循环,例如进程 A 等待进程 B 持有的资源,进程 B 等待进程 C 持有的资源,进程 C 等待进程 A 持有的资源。

如何处理死锁问题

  1. 避免循环等待:当多个进程或线程需要获取多个资源时,可以规定所有的进程或线程只能按照一定的顺序获取资源,以避免循环等待的情况。
  2. 使用超时机制:可以规定当进程或线程在一定时间内无法获取到所需的资源时,就自动放弃该资源的请求,以避免一直等待而导致死锁。
  3. 资源预分配:可以预先分配一定数量的资源给进程或线程,避免在后续运行中出现资源争抢的情况。
  4. 死锁检测和解除:可以通过监控进程或线程之间的资源请求和占用情况,发现死锁的发生并及时进行解除。
  5. 基于优先级的策略:可以规定某些资源只能由优先级更高的进程或线程访问,以确保重要任务的顺利进行。

自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量?

自旋锁(spinlock)和信号量(semaphore)都是用于实现线程或进程间同步和互斥的机制。它们有一些关键区别,使用时需要注意以下几点:

  1. 阻塞与忙等待:自旋锁采用忙等待策略,当锁被占用时,其他线程会不断地尝试获取锁,直到成功。这会导致CPU资源的浪费,尤其是在高并发环境下。信号量则是阻塞等待,当无法获取信号量时,线程会进入阻塞状态,不会占用CPU资源。
  2. 上下文切换:自旋锁不会导致上下文切换,因为线程会一直尝试获取锁,不会让出CPU。信号量可能导致上下文切换,因为当线程无法获取信号量时,它会被阻塞,操作系统可能会将CPU分配给其他线程。

在互斥使用时需要注意:

  • 如果临界区很短,或者锁竞争不激烈,自旋锁可能是一个更好的选择,因为它不会导致上下文切换。
  • 如果临界区较长,或者锁竞争激烈,信号量可能是一个更好的选择,因为

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等

全部评论
怎么避免进程依赖关系导致的死锁呢?
点赞
送花
回复 分享
发布于 2023-05-13 20:12 浙江
😀
点赞
送花
回复 分享
发布于 02-05 12:42 山东
国泰君安
校招火热招聘中
官网直投

相关推荐

1 11 评论
分享
牛客网
牛客企业服务