银行家算法可视化模拟器实现
核心功能实现
构建银行家算法模拟器需包含以下核心模块:
资源状态可视化
# 资源矩阵展示
def display_matrices(available, allocation, need):
# 使用Pandas DataFrame展示矩阵状态
alloc_df = pd.DataFrame(allocation, columns=[f"R{i}" for i in range(len(available))])
need_df = pd.DataFrame(need, columns=[f"R{i}" for i in range(len(available))])
st.subheader("当前资源分配状态")
st.dataframe(alloc_df.style.highlight_max(axis=0))
st.subheader("进程需求矩阵")
st.dataframe(need_df.style.highlight_min(axis=0))
安全状态检测算法
# 安全序列检测
def check_safety(available, allocation, need):
work = available.copy()
finish = [False] * len(allocation)
sequence = []
while len(sequence) < len(allocation):
found = False
for idx in range(len(allocation)):
if not finish[idx] and all(need[idx] <= work):
# 模拟资源分配
work = np.add(work, allocation[idx])
finish[idx] = True
sequence.append(f"P{idx}")
found = True
if not found:
return False, []
return True, sequence
资源请求处理逻辑
# 资源请求处理
def process_request(pid, request, available, allocation, need):
# 校验请求合法性
if any(request > need[pid]):
return False, "请求超过最大需求"
if any(request > available):
return False, "资源不足"
# 尝试分配资源
new_avail = available - request
new_alloc = allocation[pid] + request
new_need = need[pid] - request
# 临时更新状态矩阵
temp_allocation = allocation.copy()
temp_need = need.copy()
temp_allocation[pid] = new_alloc
temp_need[pid] = new_need
# 安全检测
is_safe, seq = check_safety(new_avail, temp_allocation, temp_need)
return is_safe, seq
可视化交互控制
- 进程选择器:动态生成进程选项列表
- 资源滑动条:为每种资源类型设置请求量
- 执行控制:分步执行/自动演示切换按钮
关键技术实现
开发过程中需注意:
- 使用
st.session_state保持算法状态一致性 - 安全检测算法采用非递归实现避免栈溢出
- 为每个进程创建独立状态机管理生命周期
教学应用场景
在操作系统课程中可用于:
| 场景 | 演示重点 |
|---|---|
| 安全状态 | 展示安全序列生成过程 |
| 死锁预防 | 模拟不安全请求的拒绝机制 |
| 资源分配 | 对比不同分配策略效果 |