湖北师范大学——操作系统实训题目

仅供参考,有更好的方法请评论,有错误请指出,谢谢!

题目1:进程调度1—静态非剥夺式优先级调度计算平均作业周转时间

问题描述:要求输入3个进程的信息,假设这些进程均是在0时刻同时到达,若进程调度采用非剥夺式静态优先级(优先数数值大的表示优先级比较高;如果遇到优先级一样,按照输入顺序执行。),计算并输出平均作业周转时间。

输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的优先数,第3个数据类型为整型,表示进程的运行时间。

输出格式:输出结果为一个浮点数,保留到小数点后一位,为系统的平均作业周转时间。

样例输入1:
P1 1 1
P2 2 2
P3 3 3
样例输出1:
4.7

样例输入2:
P1 10 10
P2 100 100
P3 100 100
样例输出2:
170.0

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct PROCESS
{
   
	char PROCESS_NAME[10]; //进程名 
	int SPN;               //优先数 
	int PTIME;             //运行时间 
};
int main()
{
   
	struct PROCESS process[3];
	int i,j,avag_time=0;
	for(i=0;i<3;i++)
		scanf("%s %d %d",&process[i].PROCESS_NAME,&process[i].SPN,&process[i].PTIME);
	//优先级排序 
	for(i = 0;i<3;i++)
	{
   
		for(j = 0;j<2-i;j++)
		{
   
			struct PROCESS temp;
			if(process[j+1].SPN>process[j].SPN)
			{
   	
				temp = process[j];
				process[j] = process[j + 1];
				process[j + 1] = temp;
			}
		}
	}
	for(i=0;i<3;i++)
	{
   
		int time;
		if(i==0)
			time=process[i].PTIME;
		else if(i==1)
			time=process[i].PTIME+process[i-1].PTIME;
		else
			time = process[i].PTIME+process[i-1].PTIME+process[i-2].PTIME;
		avag_time+=time;
	}
	printf("%.1f",avag_time/3.0);
	system("pause");
	return 0;
} 

def time(Process, n):
    ttime = 0
    for i in range(n):
        ttime += int(Process[i][2])
    return ttime


if __name__ == '__main__':
    Process = []
    Time = []
    for i in range(3):
        Process.append(input().split())
    Process.sort(key=lambda Process: Process[1], reverse=True)
    for i in range(3):
        Time.append(time(Process, i+1))
    print('%.1f' % float(sum(Time)/3))

题目2:进程调度2–最高响应比优先计算每个作业的周转时间

问题描述:要求输入3个进程的信息,按照最高响应比优先的调度算法计算并输出每个进程的周转时间。(若两个进程的响应比相同,则优先选择先进入的进程。若两个进程的响应比相同,而且进入时刻也相同,则按照输入的顺序执行,如:P4和P6的响应比相同且进入时刻也相同,如P4先输入则选择P4先执行)

输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的进入时刻,第3个数据类型为整型,表示进程的运行时间。

输出格式:输出三个整数之间,整数之间用空格作为分隔,为每个进程的周转时间。

样例输入1:
P1 1 1
P2 2 2
P3 3 3
样例输出1:
1 2 4

样例输入2:
P1 1 4
P2 2 8
P3 3 1
样例输出2:
4 12 3

#include<stdio.h>
#include<stdlib.h>

struct PROCESS
{
   	
	char PROCESS_NAME[10];
    int atime;
    int rtime;			
    int ttime;
    int X;
    float Response_ratio;
};
int main()
{
   
	struct PROCESS p[3]; 
    for (int i=0;i<3;i++)
	{
   
		scanf("%s %d %d",&p[i].PROCESS_NAME,&p[i].atime,&p[i].rtime);
        p[i].X=i+1;
    }
    struct PROCESS temp;
    int nowtime=p[0].atime;
    int sign=0;
    int flag=0;
    int m=0;
    int n=0;
    for(int i=1;i<3;i++)
	{
   
        if(p[i].atime==nowtime)
		{
   
            if(p[i].rtime<p[sign].rtime)
			{
   
                sign=i;
                nowtime=p[i].atime;
                temp=p[i];
                p[i]=p[0];
                p[0]=temp;
            }
        }
        else if(p[i].atime<nowtime)
		{
   
            sign=i;
            nowtime=p[i].atime;
            temp=p[i];
            p[i]=p[0];
            p[0]=temp;
        }
    }
    while (1)
	{
   
        if(p[m].atime>=n)
		{
   
            p[m].ttime=p[m].rtime;
            n=p[m].atime+p[m].rtime;
        }
        else 
		{
   
            p[m].ttime=p[m].rtime+n-p[m].atime;
            n+=p[m].rtime;
        }
        for(int i=1;i<3;i++)
		{
   
            p[i].Response_ratio=(float)(n-p[i].atime)/p[i].rtime;
        }
        m++;
        if(m==3)
		{
   
            break;
        }
        if(flag==0)
		{
   
            if(p[1].Response_ratio>=p[2].Response_ratio)
			{
   
                if(p[1].Response_ratio==p[2].Response_ratio)
				{
   
                    if(p[1].X>p[2].X)
					{
   
                        temp=p[1];
                        p[1]=p[2];
                        p[2]=temp;
                    }
                }
            }
            else 
			{
   
                temp=p[1];
                p[1]=p[2];
                p[2]=temp;
            }
            flag=1;
        }
    }     
    for(int i=0;i<2;i++)
	{
   
        for(int j=1;j<3;j++)
		{
   
            if(p[i].X>p[j].X)
			{
   
                temp=p[i];
                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
    for(int i=0;i<3;i++)
	{
   
		printf("%d ",p[i].ttime);
    }
}

下面的有些许问题:(请在评论区提出错误,不甚感激!)

#include<stdio.h>
#include<stdlib.h>
struct PROCESS
{
   
	char PROCESS_NAME[10];   //进程名
	int  atime;      		 //到达时间
	int  rtime;    			 //运行时间
	int  ttime;              //周转时间
	int  X;          		//进程编号 
	float Response_ratio;    //响应比
	int state;		         //执行状态  1表示已经执行
};

void HRRF(struct PROCESS *p) 
{
   
	int count = 0;		  			//记录已经完成的进程数
	int position = 0;				//记录未完成进程的位置
	int nowtime = 0;		        //现在的时刻 
	
	while (count < 3) 
	{
   
		float max_rp = 0;		
		

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年11月9日
下一篇 2023年11月9日

相关推荐