操作系统面试—死锁(二)——银行家算法

本文介绍了银行家算法,用于解决多实例资源的死锁问题。银行家算法借鉴银行系统,确保在分配资源时不引发系统不安全状态。文章详细阐述了算法的数据结构,如available、max、allocation和need矩阵,并解释了安全性算法和资源请求算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是对操作系统概念(第七版)第七章——死锁的学习总结,不足之处欢迎批评指正。

上文中我们提到了资源分配图算法,只适合每种资源只有一个实例的情况。当每种资源不止一个实例时,资源分配图算法将不再适合,因此需要用到我们这一章要讲的银行家算法。

银行家算法的命名是它可以用了银行系统,当不能满足所有客户的需求时,银行绝不会分配其资金。

当新进程进入系统时,它必须说明其可能需要的每种类型资源实例的最大数量这一数量不可以超过系统资源的总和。当用户申请一组资源时,系统必须确定这些资源的分配是否处于安全状态,如何安全,则分配,如果不安全,那么进程必须等待指导某个其他进程释放足够资源为止。


为了实现银行家算法,需要定义一下几个数据结构,n表示系统进程的个数,m表示资源类型的种类:

available——长度为m的向量,代表每种资源的现有实例的数量。

max——n*m矩阵,定义每个进程的最大需求量。

allocation——n*M矩阵,定义每个进程现在已经分配的各类资源的实例数量。

need——n*m矩阵,定义每个进程还需要的剩余的资源。

另外allocation-i代表分配进程pi的资源,need-i表示进程为完成其任务可能仍然需要申请的额外的资

### 计算机专业复试中的操作系统知识点与面试题 #### 响应比最高(HRRN)调度算法 一种常见的作业调度策略是高响应比优先(Highest Response Ratio Next, HRRN)。该方法通过计算每个作业的响应比来决定哪个作业应该被优先执行。响应比定义为 \((\text{已等待时间} + \text{要求运行时间}) / \text{要求运行时间}\)[^1]。此算法综合考虑了短作业优先和先来先服务的特点,从而提高了系统的吞吐量并减少了饥饿现象。 #### 进程管理基础概念 进程可以分为就绪态、运行态以及阻塞态三种基本状态。当一个新程序启动时,它会进入创建阶段;一旦分配到CPU资源,则转为运行态;如果当前任务无法继续完成而需等待某些事件发生,则变为阻塞态直到条件满足为止[^2]。理解这些转换对于分析多道程序设计非常重要。 #### 死锁预防与检测 死锁是指两个或多个进程无限期地相互等待对方释放它们所占有的资源的情况。为了防止这种情况的发生,可以通过破坏四个必要条件之一实现——即互斥使用资源、持有并请求更多资源、不可剥夺性和循环等待。另外还有银行家算法用于安全状态下分配有限数量共享资源给不同用户而不引起死锁问题[^3]。 #### 文件系统结构 文件系统负责管理和存储数据对象及其属性信息。通常由目录项组成树形层次结构以便于查找定位特定路径下的目标节点。此外还涉及到磁盘空间的有效利用方式比如连续分配法、链接表法或者索引结点(INODE)机制等等[^4]。 #### 虚拟内存技术 虚拟地址空间允许应用程序访问大于实际物理RAM大小的数据区域。页式管理系统将逻辑地址划分为若干固定长度页面(Page),并通过映射关系找到对应的实际框架(Frame)位置存取所需内容。同时引入快表(TLB)加速频繁使用的页面变换过程提高效率[^5]。 ```python def calculate_response_ratio(wait_time, run_time): """Calculate the response ratio for a job.""" return (wait_time + run_time) / run_time jobs = [{"id": 1, "run_time": 8}, {"id": 2, "run_time": 4}] for i in range(len(jobs)): jobs[i]["response_ratio"] = calculate_response_ratio(i * 2, jobs[i]["run_time"]) selected_job = max(jobs, key=lambda x:x["response_ratio"]) print(f"The selected job is {selected_job['id']} with RR={selected_job['response_ratio']}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值