目录
0.前言
本系列文章旨在记录操作系统的知识点,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。专题篇为大题常考题型,必须要重点把握。
1.银行家算法
安全序列:若按此序列分配资源,每个进程都能完成,此时系统为安全状态
若找不出任何一个安全序列,则系统为不安全状态
1.1 安全状态
safe sequence:P2,P1,P3,P4,最后每个进程都能执行
检验是否存在安全序列的方法:V向量表示还剩余的资源,则每一轮判断V是否满足C-A矩阵中的某一进程,若满足则分配给该进程所需资源,执行后释放资源,最终V = V + A。如果无论怎样的执行顺序都不能使V满足任何进程的需要,则发生死锁,系统处于不安全状态。
1.2 不安全状态
如果P2先执行,则现在这个序列是安全序列。但是如果在P2之前P1请求了额外的一个R1和一个R3,如果允许分配,则V变成{0,1,1},导致无法找到安全序列,系统处于不安全状态。
2.哲学家就餐问题
问题分析:哲学家就餐问题与之前的同步互斥最大的不太在于,每个进程需要持有两个临界区资源才能正确执行,而当有多个临界区时,可能会发生死锁。
朴素的想法:
分析:最简单的想法是,哲学家先拿起左边的筷子,再拿起右边的筷子,然后吃完再依次放回,但这种方法没有实现互斥地访问临界区,可能出现每个进程都持有左边的筷子,都在等待右边的筷子。
正确解法一:
分析:第一种解法,让哲学家竞争进入吃饭房间的资格,每次只能有一个哲学家在房间中吃饭,吃完再离开。
正确解法二:
分析:方法二的思想是先测试,只有左右都有叉子才吃饭。哲学家先思考,如果想要吃饭,则先判断左边的邻居是否正在吃;如果正在吃,则等待,如果没有吃则拿起左边的叉子,右边的叉子进行同样的判断。吃完后,先检查左边邻居是否在等待叉子,如果没有等待,则放下左叉子;如果在等待,则直接给左邻居,右边进行同样的判断。这样的方式保证了,拿筷子和放筷子都在临界区内完成。