⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disk_scheding.c

📁 此算法模拟操作系统中磁盘移动臂调度算法
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	int select,i,head,way,j,temp;
	int sum=0;
	int disk[7];
	printf("***************************************************\n");
	printf("this is disk scheduling simulation\n");
	printf("please select the algorithm you wan to simulation\n");
	printf("1.C-Look    2.FCFS    3.SSTF\n");
    scanf("%d",&select);
	printf("please input the disk scan queue(1-200)\n");
	for(i=0;i<=9;i++)
	{
		scanf("%d",&disk[i]);
		if(disk[i]>200||disk[i]<1)
		{
			printf("error!\n");
			exit(0);
		}
	}
	printf("please input the disk head position(1-200)\n");
	scanf("%d",&head);
	if(head>200||head<1)
	{
		printf("error!\n");
		exit(0);
	}
	printf("please input the way the head to\n 1: 1-200  2: 200-1 \n");
	scanf("%d",&way);
	if(way!=1&&way!=2)
	{
		printf("error!\n");
		exit(0);
	}
	if(select==1)
	{
		for(i=0;i<=9;i++)                                       //对queue排序
		{
			for(j=9;j>i;j--)
				if(disk[j]<disk[j-1])
				{
					temp=disk[j];
					disk[j]=disk[j-1];
					disk[j-1]=temp;
				}
		}
		for(i=0;i<=9;i++)
			if(head>=disk[i]&&head<=disk[i+1])
			{
				temp=i+1;
				break;
			}
		if(way==1)
		{
				for(i=0;i<=9;i++)
				{
					printf("now disk head to %d\n",disk[temp]);
					printf("yi dong de ci dao shu wei:%d",abs(head-disk[temp]));
					sum=sum+abs(head-disk[temp]);
					head=disk[temp];
					temp=(temp+1)%10;
					printf("---------------------------------------------\n");
				}
		}
		if(way==2)
		{
				temp=temp-1;
				for(i=0;i<=9;i++)
				{
					printf("now disk head to %d\n",disk[temp]);
					head=disk[temp];
					printf("yi dong de ci dao shu wei:%d\n",abs(head-disk[temp]));
					sum=sum+abs(head-disk[temp]);
					temp=temp-1;
					if(temp<0)
						temp=9;
					printf("\n---------------------------------------------\n");
				}
		}
	}
	else if(select==2)
	{
		for(i=0;i<=9;i++)
		{
			printf("now disk head to %d\n",disk[i]);
			printf("yi dong de ci dao shu wei:%d",abs(head-disk[i]));
			sum=sum+abs(head-disk[i]);
			head=disk[i];
			printf("\n---------------------------------------------\n");
		}
	}
	else if(select==3)
	{
		int min=10;
		int distance[11];
		int flag[10]={1,1,1,1,1,1,1,1,1,1};
		for(i=0;i<9;i++)
		{
			for(j=0;j<9;j++)
			{
				distance[j]=abs(head-disk[j]);
			}
			distance[min]=255;
			for(j=0;j<9;j++)
			{
				if(distance[min]>distance[j])
				{
					if(flag[j]==1)
						min=j;
				}
			}
			printf("least is :%d\n",min);
			printf("now disk head to %d\n",disk[min]);
			printf("yi dong de ci dao shu wei:%d:",abs(head-disk[min]));
			sum=sum+abs(head-disk[min]);
			head=disk[min];
			flag[min]=0;									//have tackled
			printf("\n---------------------------------------------\n");
		}
	}
		printf("yi gong yi dong de ci dao shu wei:%d",sum);
		return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -