实验二 调度

#include <stdio.h>
#include <string.h>

void   main()
{
	int    i=0,j=0,finish=0,n=0,k=0,l,m;
	int start,temp,max=1,min,respond[24];
	int reach[24],running[24];
    FILE   *fp;
    char   filename[100];
    char  str[1000];
	printf("\nEnter a filepath/filename:\n");
    gets(filename);             //输文件目录
	fp=fopen(filename, "rt");
//	fp=fopen("c:/1.txt","rt");
    if(fp==NULL)
    {
		printf("cannot open file\n");
		return;
	}
	printf("到达时间\t所需运行时间\n");
    while (fgets(str,1000,fp))
    {
		sscanf(str,"%d,%d\n",reach+i,running+i);

        printf("%d\t\t%d\n",reach[i],running[i]);
		i++;
	}
	fclose(fp);
		for(j=0;j<i;j++)
		{
			for (k=0;k<i-j;k++)
			{
				if (reach[k]>reach[k+1])
				 {
					temp=running[k];
					running[k]=running[k+1];
					running[k+1]=temp;
					temp=reach[k];
					reach[k]=reach[k+1];
					reach[k+1]=temp;
				}
			}
		}
	printf("1.fcfs\n2.SJF\n3.HRRN\n");
	scanf("%d",&n);

	start=reach[1];
	if(n==1)
	{              //fcfs
		printf("fcfs\n");
		printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间  带权周转时间\n");
		for(j=1;j<=i;j++)
		{

			printf("%d\t%d\t\t%d\t\t%d\t\t%d\t  %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);
			start=start+running[j];
			if(start<reach[j+1]) //到达时间与运行时间比较
				start=reach[j+1];
		}

	}
	if(n==2)
	{              //sjf
		printf("sjf\n");
		printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间  带权周转时间\n");
		start=reach[1];
		for(j=1;j<=i;j++)
		{

			printf("%d\t%d\t\t%d\t\t%d\t\t%d\t  %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);

			for(k=j;k<=i;k++)
			{
				if(start+running[j]>reach[k+1])
					max=k;

			}
			for(l=j;l<max;l++)
			{
				for (m=0;m<max-l;m++)
				{
					if (running[m]>running[m+1])
					{
						temp=running[m];
						running[m]=running[m+1];
						running[m+1]=temp;
						temp=reach[m];
						reach[m]=reach[m+1];
						reach[m+1]=temp;
					}
				}
			}
			start=start+running[j];
			if(start<reach[j+1]) //到达时间与运行时间比较
				start=reach[j+1];
		}
	}

	if(n==3){
			printf("hrrf\n");
			start=reach[1];
			printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间  带权周转时间\n");

				for(j=1;j<=i;j++)
				{
					printf("%d\t%d\t\t%d\t\t%d\t\t%d\t  %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);
			        start=start+running[j];	

					for(k=j;k<=i;k++)
					{
						if(start+running[j]>reach[k+1])
							max=k;

					}
					for(k=2;k<=max;k++){
						if(start!=reach[k]){
							respond[k]=1+running[k]/(start-reach[k]);//响应比
						}
					}

					for(l=j;l<max;l++)
					{
						for (m=0;m<max-l;m++)
						{
							if (respond[m]>respond[m+1])
							{
								temp=running[m];
								running[m]=running[m+1];
								running[m+1]=temp;
								temp=reach[m];
								reach[m]=reach[m+1];
								reach[m+1]=temp;
								temp=respond[m];
								respond[m]=respond[m+1];
								respond[m+1]=temp;
							}
						}
					}

			}
		}

}

时间: 2024-10-03 14:00:41

实验二 调度的相关文章

实验二 用C语言表示进程的调度

实验二 一. 实验目的 通过模拟进程的调度,进一步了解进程的调度的具体过程. 二. 实验内容和要求 1.进程PCB的结构体定义 2.定义队列 3.输入进程序列 4.排序(按到位时间) 5.输出进程运行的结果 三.程序 #include<stdio.h>#include<malloc.h>#include<time.h> /*定义一个Course类型的结构体*/typedef struct queue{ int number; int intime; int runnin

实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.        实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)      采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间

实验二 实验报告

实验二 作业调度模拟程序 13物联网  陈梓帆  201306104108 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统

1111实验二 作业调度模拟实验

实验二.作业调度模拟实验 物联网工程 张怡 201306104149 一.实验目的  (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 1.至少用三种调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业. 3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高

实验二作业调度

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)      

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十三:DS1302模块

实验二十三:DS1302模块 DS1302这只硬件虽然曾在<建模篇>介绍过,所以重复的内容请怒笔者懒惰唠叨了,笔者尽可以一笑带过,废话少说让我们进入正题吧.DS1302是执行事实时钟(Real Time Clock)的硬件,采用SPI传输. 表示23.1 访问(地址)字节. [7] [6] [5] [4] [3] [2] [1] [0] 1 A5 A4 A3 A2 A1 A0 R/W DS1302作为从机任由主机蹂躏 ... 啊,是任由主机访问才对.对此,访问便有方向之分.如表23.1所示,访

操作系统 实验二 作业调度模拟程序

实验二.作业调度模拟程序 专业:商软一班   姓名:赖新耀 学号:201406114129 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到

操作系统(实验二、作业调度模拟程序实验)

实验二.作业调度模拟程序实验 专业 商业软件工程   姓名 丘惠敏 学号 201406114203 一.        实验目的   (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 三.        实验方法.步骤及结果测试   1.   

0421实验二 作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)