背景介绍
在多用户操作系统,进程是并发执行的,但是存在一种危险-死锁。若无内部鲁棒容错或外部干预,系统将长期处于封锁状态。竞争资源及进程推进顺序非法是导致死锁的主要原因。在当前资源限制下,寻找一组资源分配的执行顺序,从而避免产生死锁,是本文研究的主要内容。将银行家算法为避免死锁获取安全进程序列的递归思想,借鉴到网络爬虫算法中。将请求集长度作为一个变量,边界条件为请求集长度及节点状态数组,从而能够确定请求集节点的合法性。
死锁起因
只有一个进程的系统不会形成死锁,死锁是由一组并发进程竟争资源而引起的。由于系统提供资源的有限性,所有申请资源的进程都得到该类资源是不可能的。而一组进程〔两个或多个进程)中的每一个进程都在占用某种资源的同时,又在等待该组进程中另一个进程所占用的资源,这种等待永远不能结束,则说系统出现了死锁。产生死锁的必要条件:
(l)互斤条件:进程对它所要求的资源进行排他性控制,使并发进程所要求和占用的资源不能被两个以上的进程同时使用。
(2)禁止抢占条件:进程所获得的资源在没有使用完之前,只能由该进程自己去释放,而不能由其它进程强行剥夺。
(3)占有等待条件:进程每次等待申请的新资源的同时,继续占用已分配给它的资源而不释放。
(4)进程的循环等待条件:进程循环链中的每一个进程获得的资源被下一个进程所申请。
死锁的避免
死锁的避免是指系统在分配资源时,对资源的使用情况提前做出预测,从而避免死锁的发生。因为系统采用动态分配资源,所以我们把这种在分配过程中预侧出死锁发生并避免的方法叫做动态预防。避免的具体办法是操作系统按照银行家算法制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量,则按当前的申请分配资源,否则就推迟分配。当进程执行继续申请资源时,系统先测试进程已占有的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量,若超过则拒绝分配资源,若没有超过则再侧试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。系统处于安全状态,即能满足一个进程的需求。同时该进程结束后,归还系统的资源可以满足另一个资源的最大需求。由此可以看出,死锁回避也要占去系统较大的开销。
访问文件或目录
Linux是一个多用户操作系统,它允许多个用户同时登录和工作,允许用户控制文件或目录的访问者和访问方式,因此Linux将文件或目录与用户或组联系起来。Linux给访问文件或目录的用户分成了三类不同级别的用户,分别是:文件的拥有人(u)、文件的拥有组(g)和其他人(o)。
可以使用ls -l命令来查看文件或目录的权限问题,在显示的数据的第一个字段中显示了文件test1的访问权限。第一个字段由10个字符组成,第一位表示文件类型,2一4位表示文件所有者的权限;5一7位表示文件所有者所属组成员的权限;8一10位表示所有者所属组之外的用户的权限。