• 【问题思考总结】共享设备和独占设备的区别,为什么共享设备不会死锁?


    问题

    今天做题的时候突然想到,为什么独占设备会引起死锁,共享设备不会导致死锁?我的理解是,独占设备自己拥有,用完释放,别人拿走。共享设备你用了我也要用,这不是不行吗。。。反正就很乱。

    思考

    首先明确几个定义:
    临界资源:一次仅能允许一个进程使用的共享资源
    独占设备:一段时间内只允许一个用户(一个进程)使用的设备
    共享设备:一段时间内允许多个进程同时访问的设备

    目前看来我的想法没错啊,独占设备我自己占着用完释放就好了(不过如果一直拿着不释放可能确实会导致死锁把,但是共享设备也是分时共享啊!一个进程拿着别的进程不能用不也是死锁???)

    回到死锁的定义:是指由于多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。

    那么如何预防死锁呢?如果能预防,死锁就不会出现。

    1. 互斥条件:资源排他性使用,一个进程占有,别的进程等待
    2. 不剥夺条件:一个进程占有,别的进程等待(说实话,我真感觉和互斥是一样的,不都是拿不走,不剥夺导致互斥,互斥导致不剥夺)
    3. 请求并保持条件:自己拿着资源然后要别的,别的拿不到,自己也不放手,这个针对自己的。
    4. 循环等待:做了个环,确实,如果没有环,迟早一个解套了,第二个也解套了,慢慢全解了。

    回过头来看看独占设备和共享设备是否会出现死锁?

    独占设备在一段时间内只允许一个进程使用,共享设备允许多个进程使用,但是实际上,在同一个时刻,难道不是都是只有一个进程在使用?

    不过我想,关键的区别就在于能否在该进程结束之前被其他进程使用

    比如打印机是独占设备,不可能一行打印这个文档,一行打印那个文档,因此,在进程结束之前是不可能被剥夺的。而磁盘,一个进程在读磁盘,读一会儿,另一个进程可以抢占她,自己先读,这也就是进程中断的作用,因此,从这点来看,独占设备和共享设备是有区别的。

    那么很显然,共享设备比如说磁盘,一个进程占有并使用,另一个进程可能剥夺,破坏了不剥夺和互斥条件,因此不会造成死锁(比如我想一直占用磁盘,但是优先级更高的进程来了,我必须让出磁盘,或者时间片到了这种的。。)而对于打印机,我一个进程只要占有了,那么在完成之前,是不可以被抢占的,因此造成了如果这个进程一直占有打印机,在打印的同时可能因为某些原因停滞,那么其他进程只能等待,因此,死锁将会产生。

    总结

    本文只是针对这个迷思的一些胡思乱想,看了外网也没有关于这个问题的解释,故开个坑,欢迎博友一起讨论交流(考研太伤了,没有时间去真正理解很多事情),集思广益。

  • 相关阅读:
    前端例程20221024:流光效果按钮
    UE5——源码阅读——10——引擎预初始化
    大数据毕业设计选题推荐-消防监控平台-Hadoop-Spark-Hive
    认识O(NlogN)的排序
    CUDA中内置的Vector类型和变量
    代码比较模板
    JavaScript系列从入门到精通系列第十三篇:JavaScript中基本数据类型和引用数据类型,创建对象的两种方式
    linux 安装 jdk 环境
    Python数据可视化-----生成数据二
    【PIE-Engine 数据资源】8天合成LAI产品(MOD15A2H.006)
  • 原文地址:https://blog.csdn.net/weixin_45415929/article/details/133688755