摘 要
算法实验:
实验一、银行家算法
实验二、处理机管理
轮转法
高响应比调度算法
实验三、可变式分区管理
内存回收
循环首次适应算法
最佳适应算法
实验五、分页存储管理
LRU
FIFO
改进的Clock算法
实训项目
生产者消费者问题
读者优先的读者-写者问题
写者优先的读者-写者问题
哲学家就餐问题
关键词:资源、安全序列、时间片、响应比、分区、页面置换、信号量等
目 录
一、操作系统理论算法实验
实验一、银行家算法
实验题目
设计要求
需求分析
数据结构
算法思想
算法流程
算法实现
运行结果
结论展望
实验二:处理机管理
实验题目
设计要求
需求分析
数据结构
算法思想
算法流程
算法实现
运行结果
结论展望
实验三:可变式分区管理
实验题目
设计要求
需求分析
数据结构
算法思想
算法流程
算法实现
运行结果
结论展望
实验五:分页存储管理
实验题目
实验要求
需求分析
数据结构
算法思想
算法流程
算法实现
运行结果
结论展望
二、实训项目:Linux系统、Windows系统
实验二:进程同步模拟
实验内容
实验目的/目标
开发/运行/测试环境
实验步骤
关键数据结构
问题解析
算法思想
算法流程
算法实现
运行结果
结论体会
结论和展望
一、操作系统理论算法实验
实验一、银行家算法
实验题目
编制银行家算法通用程序,并检测所给状态的系统安全性。假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其它进程抢占。进程申请的资源不能满足时,必须等待。
设计要求
1. 程序中使用的数据结构及主要符号说明
2. 资源的种类和数目可以变化的
3. 进程可以任意的顺序创建和变化
需求分析
银行家算法是在操作系统中,避免死锁的一种方法。通过银行家算法,我们能对资源进行合理的分配,从而避免了资源的冲突进而发生死锁。
数据结构
//全局
//系统可用(剩余)资源
int available[resourceNum] = {3, 3, 2};
//进程的最大需求
int maxRequest[processNum][resourceNum] = {{7, 5, 3}, {3, 2, 2}, {9, 0, 2}, {2, 2, 2}, {4, 3, 3}};
//进程已经占有(分配)资源
int allocation[processNum][resourceNum] = {{0, 1, 0}, {2, 0, 0}, {3, 0, 2}, {2, 1, 1}, {0, 0, 2}};
//进程还需要资源
int need[processNum][resourceNum] = {{7, 4, 3}, {1, 2, 2}, {6, 0, 0}, {0, 1, 1}, {4, 3, 1}};
//是否安全
bool Finish[processNum];
//安全序列号
int safeSeries[processNum] = {0, 0, 0, 0, 0};
//进程请求资源量
int request[resourceNum];
//资源数量计数
int num;
//局部
//表示系统可提供给进程继续运行所需的各类资源数目
int work[resourceNum] = {0};