- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                操作系统实验报告—磁盘调度算法
                    
操作系统实验报告
实验3   磁盘调度算法
报告日期:2016-6-17
姓    名:
学    号:
班    级:
任课教师:
实验3   磁盘调度算法
一、实验内容
?  模拟电梯调度算法,实现对磁盘的驱动调度。?
二、实验目的
磁盘是一种高速、大量旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫驱动调度,使用的算法称驱动调度算法。驱动调度能降低为若干个输入输出请求服务所须的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。
三、实验原理
模拟电梯调度算法,对磁盘调度。
磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。
    假设磁盘有200个磁道,用C语言随机函数随机生成一个磁道请求序列(不少于15个)放入模拟的磁盘请求队列中,假定当前磁头在100号磁道上,并向磁道号增加的方向上移动。请给出按电梯调度算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。
四、实验过程
1.画出算法流程图。
2.源代码
#includestdio.h
#includestdlib.h
#includetime.h
int *Init(int arr[])
{
	int i = 0;
	
	srand((unsigned int)time(0));
	for (i = 0; i  15; i++)
	{
		arr[i] = rand() % 200 + 1;
		printf(%d , arr[i]);
	}
	printf(\n);
	return arr;
}
void two_part(int arr[])
{
	int i = 0;
	int j = 0;
	int k = 0;
	int sum = 0;
	int a[15];
	int b[15];
	int num = 100;      //当前磁头在100号磁道上
	a[0] = 100;
	b[0] = 100;
	for (i = 0; i  15; i++)
	{
		for (j = 1; j  15 - i; j++)
		{
			if (arr[j]  arr[j - 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j - 1];
				arr[j - 1] = tmp;
			}
		}
	}
	i = 0;
	j = 0;
	for (i = 0; i  15; i++)
	{
		if (arr[i] = num)
		{
			a[j+1] = arr[i];
			j++;
		}
		else
		{
			b[k+1] = arr[i];
			k++;
		}
	}
	printf(访问序列:\n);
	for (i = 1; i = j; i++)
	{
		printf(%d , a[i]);
	}
	for (i = k; i 0; i--)
	{
		printf(%d , b[i]);
	}
	sum = ((a[j]-100)*2+(100- b[1]))/15;
	printf(平均寻道长度:%d, sum);
}
int main()
{
	int arr[15] = { 0 };
	int *ret=Init(arr); 
	two_part(ret);
	getchar();
	return 0;
}
4运行结果:
五、实验小结
通过本次实验,我对scan算法更加深入理解,用C语言模拟电梯调度算法,实现对磁盘的驱动调度,这个相比前两个实验实现起来相对简单,理解了算法实现起来尤为简单,程序敲出来之后没有错误,可直接运行,结果验证也无误。实验总能让我对理论知识理解的更加透彻。
                
原创力文档
                        

文档评论(0)