没有合适的资源?快使用搜索试试~ 我知道了~
首页计算机操作系统-进程调度-实验报告
资源详情
资源评论
资源推荐

实验一 进程调度
一、实验目的
多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进
程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加
深对进程调度的理解。
二、实验内容
1. 优先权法、轮转法
简化假设
1) 进程为计算型的(无 I/O)
2) 进程状态:ready、running、finish
3) 进程需要的 CPU 时间以时间片为单位确定
2. 算法描述
1) 优先权法——动态优先权
当前运行进程用完时间片后,其优先权减去一个常数。
2) 轮转法
三、实验要求
1.如采用随机数,随机数的取值范围应加以限制,如所需的 CPU 时间限制在 1~20 之间。
2.进程数 n 不要太大通常取 4~8 个
3.独立编程
4.二种调度算法
5.若有可能请在图形方式下,将 PCB 的调度用图形成动画显示。
四、团队分工
个人完成
五、实验过程
流程图:
F 优先权

R 时间片轮转
步骤:
1、选择优先权调度或者时间片轮转(输入错误会提示重新输入)
2、若是优先权调度
1 选择输入方式(随机数生成,自己输入,文件调入)
2 产生 n 个进程,每个进程有服务时间和优先权
3 按优先权的大小,把进程放入一个就绪队列
4 进程执行后,服务时间-1,优先权-3
5 判断该进程服务时间是否为 0,是则撤销进程,否则放入就队列
6 判断就绪队列是否为空,是则结束,否则执行 345
3、若是时间片轮转
1 选择输入方式(随机数的生成,自己输入,文件输入)
2 产生 n 个进程,每个进程有到达时间和服务时间
3 按照进程的到达时间的先后,放入就绪队列
4 进程执行后,所需时间片-1,服务时间-1

5 判断该进程服务时间是否为 0,是则撤销进程,否则判断占用的 CPU 时间片数是
否等于轮转时间片数,是则将占用 CPU 的时间片数置为 0,把该进程放入就绪队
列,否则返回就绪队列
6 执行 345
判断就绪队列是否为空,是则执行 345,否则结束。
4、是否选择继续,是,循环 123,否,结束。
六、实验分析与实现
void PSA_fun()
{
//初始化
srand((unsigned)time(0));
PCB p[Maxsize];
int n,i,j,$nish=0; //n 表示进程数目,$nish 表示完成的进程数
//初始化进程
cout<<"请选择输入的方式:A(随机数生成),B(自己输入),C(调用测试数据)";
char select;
while (1)
{
cin>>select;
if (select=='A'||select=='B'||select=='C')
break;
else
{
cout<<"请按要求重新输入:\n";
continue;
}
}
if (select=='B')//自己输入
{
cout<<"请输入进程数目:";
cin>>n;
for(i=0;i<n;i++)
{
p[i].name='A'+i;
cout<<"请输入进程"<<i+1<<"的服务时间:";
cin>>p[i].time;
cout<<"请输入进程"<<i+1<<"的优先权:"; //把进程时间限定在 10 以内
cin>>p[i].pri;
//把进程优先权限定在 10 以内
}
}
if(select=='A')//随机数生成
{
cout<<"请输入进程数目:";
cin>>n;
for(i=0;i<n;i++)
{
p[i].name='A'+i;
p[i].time=rand()%10+1; //把进程时间限定在 10 以内
p[i].pri=rand()%10+1; //把进程优先权限定在 10 以内
}
}
if(select=='C')//测试数据
{
ifstream $le;
$le.open("BankText.txt",ios::in);
if(!$le)
{
cerr<<"\n\n 文件打开失败,请检查你的文件"<<endl;
剩余13页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0