【操作系统】单通道程序运行耗时程序&进程调度算法

该文详细介绍了两个实验,一是研究单通道程序运行耗时,通过计算不同优先级程序的执行时间,分析多道程序运行效率。二是探讨了进程调度算法,包括先来先服务和短作业优先策略,通过模拟进程排序展示了这两种算法的工作原理。
摘要由CSDN通过智能技术生成

实验1 单通道程序运行耗时程序

1、实验目的

通过书本例题,三道程序运行时,计算多通道运行消耗的时间以及处理机调度程序进行程序状态转换耗费时间。

2、实验思路

多道程序并行处理机制,当优先级高的程序占用计算通道时,下一优先级程序等待,当优先级高的程序占用io通道时,次高优先级的程序就可以占用计算通道,以此类推,以节约多程序总体运行时间。

3、实验内容

实验程序

#include <iostream>
using namespace std;
class process
{
public:
    int priority;//优先级 
    int runtime_1;//计算第一次时间 
    int iotime;//io通道占用时间 
    int runtime_2;//第二次计算时间 
    int end;//进程结束标志 
     process(int x,int y,int z,int k,int m);

};
process::process(int x,int y,int z,int k,int m)
{
	priority=x;
	runtime_1=y;
	iotime=z;
	runtime_2=k;
	end=m;
}

int Time_1(process a, process b, process c)//三个进程ABC 
{
	int T = 0;//开始时将T清零 
	T=T+a.runtime_1;//加上第一次a进程计算时间 
	if(a.priority>b.priority)//比较a、b两进程优先级 
	{
	T+=a.iotime+a.runtime_2;//加上a进程第二次计算时间和io通道占用时间 
	a.end=0;//a进程结束 
    }
	if(a.end==0)//当a进程结束时 
	T+=(b.runtime_1-a.iotime);// b进程第一次计算时间减进程aio通道占用时间 
	if(b.priority>c.priority&&b.iotime>c.runtime_1&&b.iotime<c.iotime)//计算通道可以与io通道并行计算 
	{
	T+=(b.iotime+b.runtime_2);
	b.end=0;
    }
	if(b.end==0)//当b进程结束 
	T=T+(c.iotime-b.runtime_2)+c.runtime_2;
	return T;
	
}

int Time_2(process a, process b, process c)//加入状态转换的时间 
{
	int T = 0;
	T=T+a.runtime_1+1;
	if(a.priority>b.priority)
	{
	T+=a.iotime+1+a.runtime_2+1;
	a.end=0;
    }
	if(a.end==0)
	T+=(b.runtime_1-a.iotime)+2;
	if(b.priority>c.priority&&b.iotime>c.runtime_1&&b.iotime<c.iotime)
	{
	T+=(b.iotime+b.runtime_2)+2;
	b.end=0;
    }
	if(b.end==0)
	T=T+(c.iotime-b.runtime_2)+c.runtime_2+3;
	return T;
}

int main()
{
	int T=0;
	process a(3,30,40,10,1),b(2,60,30,10,1),c(1,20,40,20,1);
	cout<<"三个进程消耗时间为:"<<Time_1(a, b, c)<<"ms"<<endl; 
	cout<<"加入程序状态转换时间后三个进程消耗时间为:"<<Time_2(a, b, c)<<"ms"<<endl;
 }

4、实验结果

在这里插入图片描述

5、总结思考

通过本次实验掌握了单通道程序运行耗时程序,通过书本例题,三道程序运行时,计算多通道运行消耗的时间以及处理机调度程序进行程序状态转换耗费时间,从而更进一步的学习操作系统。

实验2 进程调度算法

1、实验目的

了解熟悉先来先服务和短作业优先两个进程调度算法的内容并使用

2、设计思路

创建进程类,定义时间排序函数(先来先服务)和内存大小排序函数(短作业优先),将abc三个进程放入算法中进行排序

3、实验内容

实验程序

#include<iostream>
#include<algorithm>
using namespace std;
class pcb
{
public:
	int runtime;//运行时间
	int arrivetime;//到达时间
	int reg;//内存占用大小
	char name;
	 pcb(int x,int y,int z,char n);
};
pcb::pcb(int x,int y,int z,char n)
{
	runtime=x;
	arrivetime=y;
	reg=z;
	name=n;
}
pcb arriveque[3]={pcb(20,6,30,'a'),pcb(30,4,50,'b'),pcb(10,8,5,'c')};//到达时间排序队列
pcb regque[3]={pcb(20,6,30,'a'),pcb(30,4,50,'b'),pcb(10,8,5,'c')};//内存大小排序队列
//到达时间排序
void timesort(pcb x[3])
{
int i,j;
pcb temp(0,0,0,'x');
for(i=0;i<2;i++)
{
      for(j=0;j<2-i;j++)
   {
      if(x[j].arrivetime>x[j+1].arrivetime)
	  {
	    temp=x[j];
		x[j]=x[j+1];
		x[j+1]=temp;
	  }
   }
}
cout<<"此时运行顺序为:"<<endl; 
			for(int m=0;m<3;m++)
		        cout<<arriveque[m].name<<"到达"<<endl;
			for( i= 0; i < 3; i++)
				cout<<x[i].name<<"运行"<<" "<<x[i].name<<"运行结束"<<endl; 

}
//内存大小排序
void regsort(pcb x[3],pcb y[3])
{
int i,j;
pcb temp(0,0,0,'x');
for(i=0;i<3;i++)
{
      for(j=0;j<2-i;j++)
   {
      if(x[j].reg>x[j+1].reg)
	  {
	    temp=x[j];
		x[j]=x[j+1];
		x[j+1]=temp;
	  }
   }
}
cout<<"此时运行顺序为:"<<endl; 
			for(int m=0;m<3;m++)
		        cout<<arriveque[m].name<<"到达"<<endl;
			for( i= 0; i < 3; i++)
				cout<<x[i].name<<"运行"<<" "<<x[i].name<<"运行结束"<<endl; 

}

int main()
{
cout<<"**********请选择要进行的功能:**********"<<endl;
cout<<"**********1.展示目前进程信息**********"<<endl;
cout<<"**********2.先来先服务**************"<<endl;
cout<<"**********3.短作业优先**************"<<endl;
cout<<"**********4.退出**************"<<endl;
int n;
int t,y; 
	while(1)
	{
		int i=0;
		cout<<endl;
		cout<<"请输入你的选择"<<endl;
		cin>>n;
	  switch(n)
	  {
	  	case 1:
	  		cout<<"进程名"<<" "<<"运行时间"<<" "<<"到达时间"<<" "<<"存储大小"<<endl; 
		      for( i=0;i<3;i++)
			  cout<<arriveque[i].name<<"	 "<<arriveque[i].runtime<<"	 "<<
			  arriveque[i].arrivetime<<"	 "<<arriveque[i].reg<<endl;
			  break; 
		case 2:
			  timesort(arriveque);
			  break;
		case 3:
			    
		     regsort(regque,arriveque);
			  break;
		case 4:
			  exit(0);

	  }
	}
return 0;
}

4、实验结果

在这里插入图片描述

5、总结思考

通过本次实验掌握了进程调度算法,了解熟悉先来先服务和短作业优先两个进程调度算法的内容并使用,从而更好的学习操作系统。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值