没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验(进程调度 存储管理 磁盘调度 银行家算法 文件系统设计).doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 46 浏览量
2022-05-07
21:16:15
上传
评论 1
收藏 251KB DOC 举报
温馨提示
试读
29页
操作系统实验(进程调度 存储管理 磁盘调度 银行家算法 文件系统设计).doc
资源推荐
资源详情
资源评论
操作系统实验
实验一 进程调度
一、 实验目的
多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处
理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。
二、 实验要求
1. 设计进程调度算法,进程数不定
2. 包含几种调度算法,并加以实现
3. 输出进程的调度过程——进程的状态、链表等。
三、 参考例
1. 题目——优先权法、轮转法
简化假设
1) 进程为计算型的(无 I/O)
2) 进程状态:ready、running、finish
3) 进程需要的 CPU 时间以时间片为单位确定
2. 算法描述
1) 优先权法——动态优先权
当前运行进程用完时间片后,其优先权减去一个常数。
2) 轮转法
四、 实验流程图
开始
键盘输入进程数 n ,和调度方法的选择
优先权法? 轮转法
产生 n 个进程,对每个进程产生一个 PCB ,并用
随机数产生进程的优先权及进程所需的 CPU 时间
按优先权大小,把 n 个进程拉成一个就绪队列
初始化其他数据结构区
链首进程投入运行
时间片到,进程所需的 CPU 时间减 1 ,优先权减
3 ,输出个进程的运行情况
所需的 CPU 时间 =0 ?
撤销进程
就绪队列为空?
结束
将进程插入就绪队列
N
Y
N
Y
Y
B
N
注意:
1. 产生的各种随机数的取值范围加以限制,如所需的 CPU 时间限制在 1~20 之间。
2. 进程数 n 不要太大通常取 4~8 个
3. 使用动态数据结构
4. 独立编程
5. 至少三种调度算法
6. 若有可能请在图形方式下,将 PCB 的调度用图形成动画显示。
五.实验过程:
(1)输入:进程流文件(1.txt),其中存储的是一系列要执行的进程, 每个作业包括四个数据项:
进程名 进程状态(1 就绪 2 等待 3 运行) 所需时间 优先数(0 级最高)
进程 0 1 50 2
进程 1 2 10 4
进程 2 1 15 0
进程 3 3 28 5
进程 4 2 19 1
进程 5 3 8 7
输出: 进程执行流等待时间,平均等待时间
本程序包括:FIFO 算法,优先数调度算法,时间片轮转调度算法
产生 n 个进程,对每个进程用随机数产生进程的轮转时间片数及进程所
需的时间片数,已占用 CPU 的时间片数置为 0
按进程产生的先后次序拉成就绪队列链
链首进程投入运行
时间片到,进程所需时间片数减 1 ,已占用 CPU 时间片数加 1
输出各进程的运行情况
进程所需时间片数 =0 ? 撤销该进程 就绪队列为空吗?
占用 CPU 的时间片数 = 轮转时间片数?
占用 CPU 的时间片数置为 0
把该进程插入就绪队列尾
B
N
Y
N
Y
Y
结束
N
(2)程序代码
#include<stdio.h>
#include<string.h>
#include<iostream.h>
const int block_time=10; //定义时间片的长度为 10 秒
const int MAXPCB=100; //定义最大进程数
//定义进程结构体
typedef struct node
{
char name[20];
int status;
int time;
int privilege;
int finished;
int wait_time; }pcb;
pcb pcbs[MAXPCB];
int quantity;
//初始化函数
void initial()
{
int i;
for(i=0;i<MAXPCB;i++)
{
strcpy(pcbs[i].name,"");
pcbs[i].status=0;
pcbs[i].time=0;
pcbs[i].privilege=0;
pcbs[i].finished=0;
pcbs[i].wait_time=0;
}
quantity=0;
}
//读数据函数
int readData()
{
FILE *fp;
char fname[20];
int i;
cout<<"请输入进程流文件名:";
cin>>fname;
if((fp=fopen(fname,"r"))==NULL)
{
cout<<"错误,文件打不开,请检查文件名"<<endl;
}
else
{
while(!feof(fp))
{
fscanf(fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,
&pcbs[quantity].time,&pcbs[quantity].privilege);
quantity++;
} //输出所读入的数据
cout<<"输出所读入的数据"<<endl;
cout<<"进程名 进程状态 所需时间 优先数"<<endl;
for(i=0;i<quantity;i++)
{
cout<<" "<<pcbs[i].name<<" "<<pcbs[i].status<<" "<<pcbs[i].time<<"
"<<pcbs[i].privilege<<endl;
}
return(1);
}
return(0);
}
//重置数据,以供另一个算法使用
void init()
{
int i;
for(i=0;i<MAXPCB;i++)
{
pcbs[i].finished=0; pcbs[i].wait_time=0;
}
}
//先进先出算法
void FIFO()
{
int i,j; int total;
//输出 FIFO 算法执行流
cout<<endl<<"*****************************************************"<<endl;
cout<<"FIFO 算法执行流:"<<endl; cout<<"进程名 等待时间"<<endl;
for(i=0;i<quantity;i++)
{
cout<<" "<<pcbs[i].name<<" "<<pcbs[i].wait_time<<endl;
for(j=i+1;j<quantity;j++)
{ pcbs[j].wait_time+=pcbs[i].time; }
}
total=0;
for(i=0;i<quantity;i++)
{ total+=pcbs[i].wait_time; }
cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl;
}
//优先数调度算法
void privilege()
{
int i,j,p;
int passed_time=0;
int total;
int queue[MAXPCB];
int current_privilege=1000;
for(i=0;i<quantity;i++)
{
current_privilege=1000;
for(j=0;j<quantity;j++)
{
if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege))
{ p=j;
current_privilege=pcbs[j].privilege;
}
}
queue[i]=p;
pcbs[p].finished=1;
pcbs[p].wait_time+=passed_time;
passed_time+=pcbs[p].time;
}
//输出优先数调度执行流
cout<<endl<<"***********************************************************"<<endl;
cout<<"优先数调度执行流:"<<endl;
cout<<"进程名 等待时间"<<endl;
for(i=0;i<quantity;i++)
{
cout<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<endl;
}
total=0;
for(i=0;i<quantity;i++)
{ total+=pcbs[i].wait_time; }
cout<<"总等待时间:"<<total<<" 平均等待时间:"<<total/quantity<<endl;
}
//时间片轮转调度算法
void timer()
{
剩余28页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功