操作系统死锁
文章平均质量分 52
白帽小丑
只是一个网络安全爱好者
展开
-
死锁的总结
缺点最明显的就是顺序是固定的,我们前面研究了司机和售票员进程,售票员的进程是不可以在司机前的,所以如果是这个算法就有问题,其次就是运行前要用大量资源,以及进入系统的进程个数资源(进程序列)是规定好的,如果有新的进程进来,重新算又要耗费资源。第三个占有和等待,如果p1进程一直占用p2进程想要的资源,那么我将p1进程中p2需要的资源释放出来,让给p2,这样就可以解决p1占用资源和p2一直等待资源的问题,这个模型貌似是可行的。保守派是如何解决死锁的,根据前面,我们知道他们的思想是从源头切断死锁的出现。原创 2023-02-27 09:57:35 · 153 阅读 · 0 评论 -
信号量(下)实验
这里让两辆车并发,我们会发现结果会出问题,这里是因为两辆车是上车售票下车关着门这一系列事件是互斥的,所以需要进一步优化,我这里不优化了,继续优化需要更详细的模型,大家可以试下。规则图片中只有一个理发师,理发师一个时刻只能帮一个人剪头发,其他人需要坐在数量有限的椅子上。核心规则:不可以同时读和写(竞争),读者与读者之间不冲突(同步),写者与写者之间也竞争。哲学家们,只有同时拿到左边和右边的筷子才可以吃饭,除了吃饭其他事件都在思考。printf("开车门\n");printf("开车\n");原创 2023-02-27 09:53:24 · 114 阅读 · 0 评论 -
信号量(下)
我们这里可以看到互换之后如果是生产者先执行那么问题并不大,如果是消费者先执行,那么到达p(full)这里会一直等待,但是如果这个进程一直占用空间,那么生产者产生的进程又会一直等待,这里就是个死锁。上面这个缓冲区是有界的,那么如果我们要利用这个缓冲区存放更多的数据的话,那么我们需要让这个区域可以反复存取。buffer为空时,通知生产者要生产了,buffer满的时候,通知生产者停止生产。因为用户取的程序也是并发的那么我们取一个也是要前移,由于是循环,我们也需要取余。那么我们则可以用取余的办法去做。原创 2023-02-27 09:51:09 · 147 阅读 · 0 评论 -
信号量(上)实验
我们现在有5个线程,但是只有两份资源可用;我们通过信号量去模拟这一种情况,将信号量的值初始化为2。可以看到每五个进程都同时占用了临界区的通道,也就是临界区同时运行了五个进程,这个是有问题的。同一时间段内只有两个能进入到fork里面,执行完成只有,另外两个才能进入。每个fork执行流一次可以跑两个分支,两分支同步。我们先来看一种情况,当没有信号量进行控制的时候。订票终端是解决冲突问题,所以信号量的值是1。第二个进程无限busy waiting。不进行V操作,造成死锁。原创 2023-02-21 13:44:04 · 540 阅读 · 0 评论 -
信号量(上)
先执行到p(原子操作)的车子(蓝色)会先进入critical section,而如果这时候红色车子进来,那么因为mutex=0了,所以此时会进入while循环(busy waiting),等待蓝车通过critical section,红车才会执行,然后蓝车释放,红车通过critical section,红车释放。这里如果road等于0,那么一个是会出现我们前面讲的死锁,这个死锁是任何进程都无法进入road。这里只是一个顺序执行产生的并发流程,其实还有其他的流程。除了二值信号量,其他的信号量都是一般信号量。原创 2023-02-21 13:38:30 · 291 阅读 · 0 评论