学院: 经济管理学院
专业: 信息管理与信息系统。
姓名: 田定金
学号: 20104940129
指导教师: 刘任东
上机环境: vc++ 6.0
2011-2024年度第 2 学期。
实验时间:2024年6月
1、实验目的。
进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
2、实验内容。
模拟银行家算法和生产者---消费者算法。
算法介绍:1)银行家算法:
1)数据结构:
1.可利用资源向量**ailable
2.资源种类m ,进程个数n
3.分配矩阵alloc
4.需求矩阵need
2)功能介绍:
模拟实现银行家算法以避免死锁的出现。分两部分组成:
第一部分:银行家算法(扫描)
1.如果request<=need,则转向2;否则,出错。
2.如果request<=**ailable,则转向3,否则等待。
3.系统试探分配请求的资源给进程。
4.系统执行安全性算法。
第二部分:安全性算法。
1.设置两个向量。
1).工作向量:work=**ailable(表示系统可提供给进程继续运行所需要的各类资源数目)
2).finish:表示系统是否有足够资源分配给进程(true:有;false:没有).初始化为false
2.若finish[i]=false&&need<=work,则执行3;否则执行4(i为资源类别)
3.进程p获得第i类资源,则顺利执行直至完成!并释放资源:
work=work+allocation;
finish[i]=true;
转24. 若所有进程的finish[i]=true,则表示系统安全;否则,不安全!
2)生产者---消费者算法。
a、创建生产者线程并向缓冲区中输入数据。
b、判断缓冲区是否已满,如果没满,输入数据;如果满了,生产者等待,消费者取走数据。
c、判断缓冲区是否为空。如果为空输入数据;如果不为空,则消费者阻塞,生产者生产产品后被唤醒,创建消费者线程。然后转至b
而当某个进程释放资源时,则他就是一个消费者。
在同一时刻只能有一个消费者或生产者使用缓冲区,用互斥信号量可以控制各个生产者和消费者之间的互斥,是的生产和消费的工作能够有序进行,而不至于发生死锁。
通过一个有界缓冲区(用数组来实现)把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以生产产品并将产品放入缓冲区中。类似的,只要缓冲区未空,消费者就可以从缓冲区中取走产品并消费他。
但是禁止生产者向满的的缓冲区中送入产品,消费者从空的缓冲区中取走产品用线程的互斥来实现。
**。银行家算法:
#include <>
#define n 5 //进程个数。
#define m 3 //资源种类。
int **ailable[m]=,alloc[n+1][m]=,need[n+1][m]=;
int **ailable1[m],need1[n][m],alloc1[n][m];
int h;
int safede() 安全状态判别算法。
int i,j,work[m],finish[n],tag=n;
for(i=0;i for(i=0;i while(tag--)
for(i=0;i if(i==n)return 1;
else return 0;
int main()
int i,j,request[m];
while(1)
for(i=0;i
if(i==m)
if(i==m)
if(safede()=0) printf("资源分配后系统不是处于安全状态!");若新状态安全,则实际分配资源给pi,否则取消试探性分配。else
printf("可利用资源:");
for(i=0;i printf("分配资源:");
for(i=1;i<=n;i++)
printf("需求矩阵:");
for(i=1;i<=n;i++)
printf("请求结束!");
printf("");
return 0;
2)生产者---消费者算法。
#include<>
#include<>
#include<>
#include
#include<>
/定义一些常量;
/本程序允许的最大临界区数;
#define max_buffer_num 10 //秒到毫秒的乘法因子;
#define inte_per_sec 1000 //本程序允许的生产和消费线程的总数;
#define max_thread_num 64 //定义一个结构,记录在测试文件中指定的每一个线程的参数
struct threadinfo
int serial线程序列号
char entity是p还是c
double delay线程延迟
int thread_request[max_thread_num]; 线程请求队列
int n_request请求个数
; /全局变量的定义
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....