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

📄 磁盘调度.txt

📁 大三操作系统实验,用FIFS,电梯法,最短优先实现磁盘调度.
💻 TXT
字号:
// 磁盘调度.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include <math.h>

typedef struct 
{
	char name;
	int ad;
}Disk;

void FIFS(Disk *,int,int);
void Short(Disk *,int,int);
void Lift(Disk *,int ,int);

int main(int argc, char* argv[])
{
	int num,place;
	cout << "请求磁盘调度的个数:";
	cin >> num;
	Disk *array = new Disk[num];
	cout << "依次输入各调度号序号及所在位置:\n";
	for(int i = 0; i < num; i++)
	{
		cin >> array[i].name >> array[i].ad;
	}
	cout << "输入当前读写头位置:";
	cin >> place;
	FIFS(array,num,place);
	Short(array,num,place);
	Lift(array,num,place);
	delete []array;
	return 0;
}

void FIFS(Disk * array,int N,int place)
{
	int sum = 0;
	cout << "FIFS访问顺序:";
	for(int i = 0; i< N; i++)
	{
		cout << array[i].name << " ";
		sum += abs(place - array[i].ad);
		place = array[i].ad;
	}
	cout << "\n平均移动道数为:" << double(sum)/N <<endl;
}

void Short(Disk *array,int N,int place)
{
	bool *flag = new bool[N];
	for(int j = 0;j<N; j++)
		flag[j] = 0;
	int sum = 0,temp,tempMove;
	cout << "Short访问顺序:";
	for(int i = 0; i< N; i++)
	{
		temp = 0;
		tempMove=999;
		for(int k = 0;k < N;k++)
		{
			if(!(flag[k]))
			{
				if(abs(array[k].ad - place) < tempMove)
				{
					temp = k;
					tempMove = abs(array[k].ad - place);
				}
			}
		}
		cout << array[temp].name << " ";
		sum += tempMove;
		place = array[temp].ad;
		flag[temp] = 1;
	}
	cout << "\n平均移动道数为:" << double(sum)/N <<endl;
	delete []flag;
}
void Lift(Disk *array,int N,int place)
{
	int PLACE = place;
	int temp,tempMove;
	bool *flag = new bool[N];
	for(int j = 0;j<N; j++)
		flag[j] = 0;
	int sum = 0;
	cout << "Lift访问顺序:";
	for(int i = 0; i< N; i++)
	{
		if(array[i].ad <= PLACE)
		{
			temp = 0;
			tempMove=999;
			for(int k = 0;k < N;k++)
			{
				if(!(flag[k]) && array[k].ad <= PLACE)
				{
					if(abs(array[k].ad - place) < tempMove)
					{
						temp = k;
						tempMove = abs(array[k].ad - place);
					}
				}
			}
			cout << array[temp].name << " ";
			sum += tempMove;
			place = array[temp].ad;
			flag[temp] = 1;
		}
	}
	for(i = 0; i< N; i++)
	{
		if(array[i].ad > PLACE)
		{
			temp = 0;
			tempMove=999;
			for(int k = 0;k < N;k++)
			{
				if(!(flag[k])&& array[k].ad > PLACE)
				{
					if(abs(array[k].ad - place) < tempMove)
					{
						temp = k;
						tempMove = abs(array[k].ad - place);
					}
				}
			}
			cout << array[temp].name << " ";
			sum += tempMove;
			place = array[temp].ad;
			flag[temp] = 1;
		}
	}
	cout << "\n平均移动道数为:" << double(sum)/N <<endl;
	delete []flag;
}

⌨️ 快捷键说明

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