实验报告范文

时间:2024.3.24

磁盘调度算法设计

一. 实验目的

1 了解和掌握操作系统对磁盘如何调度管理。

2 熟悉并掌握各种磁盘调度的算法。

二. 实验设备

WindowsXP操作系统,VC6.0环境

三. 实验内容及操作步骤

1 实验内容

设计多个磁盘调度算法,分别是先来先服务算法,最短寻道时间优先算法,扫描算法。并且通过程序来计算寻道时间。 2 实验步骤

(1)

(2)

(3)

(4) 根据以下不同的算法思想编写调度程序,并装入VC 6.0中。 汇编并连接程序。 调试程序。 输入数据,验证不同磁盘调度算法的平均寻道时间,由此总

结各算法所使用的场合。

四. 算法思想

1 先来先服务

2 最短寻道时间优先

3 扫描子算法

4 扫描算法

五. 实验源程序

#include<iostream>

#include<vector>

#include <algorithm>

#define size 64//磁道序列个数最多为64个

using namespace std;

//==============================================================

void FCFS(int *sequ,int m)

{

cout<<"***先来现服务算法***"<<endl;

int j;

double sum,averay;

for(int i=0;i<m;++i)

cout<<*(sequ+i)<<" ";

for(i=0,j=1;j<m;++i,++j)

sum=abs(*(sequ+j)-*(sequ+i));

averay=sum/m;

cout<<endl<<"移动总道数:"<<sum<<"平均移动道数:"<<averay<<endl;

cout<<"***************************"<<endl;

}

//-------------------------------------------------------------

void FFTS(vector<int> sequ,int m)

{

cout<<"***最短寻道时间优先算法***"<<endl;

cout<<"请输入当前磁道号";

int now;

cin>>now;

int i=0;

double sum=0,averay;

while(sequ[i]<=now&&i<m)//找到当前磁道在磁道系列中的位置 ++i;

if(i==m)

{

for(i=m;i>=0;--i)

cout<<sequ[i]<<" ";

sum=sequ[m-1];

}

else if(i==0)

{

for(i=0;i<m;++i)

cout<<sequ[i]<<" ";

sum=sequ[m-1];

}

else

{

int tomp=now,l=i-1,h=i;

while(l>=0||h<m)

{

if(l>=0&&sequ[h]-tomp>sequ[l]-tomp) {

cout<<sequ[l]<<" ";

sum+=abs(sequ[l]-tomp);

tomp=sequ[l];

--l;

}

else if(h<m)

{

cout<<sequ[h]<<" ";

sum+=abs(sequ[h]-tomp); tomp=sequ[h];

++h;

}

}

}

averay=sum/m;

cout<<endl<<"移动总道数:"<<sum<<"平均移动道数:"<<averay<<endl;

cout<<"***************************"<<endl;

}

//-------------------------------------------------------------

void SACE(vector<int> sequ,int m)

{

cout<<"***电梯算法***"<<endl;

cout<<"请输入当前磁道号";

int now;

cin>>now;

int i=0;

double sum=0,averay;

while(sequ[i]<now&&i<m)//找到当前磁道在磁道系列中的位置 ++i;

cout<<"请选择寻道方向:L(左)、R(右)";

char chiose;

cin>>chiose;

int l=i-1,h=i;

if(chiose=='l'||chiose=='L') {

while(l>=0)

{

cout<<sequ[l]<<" "; sum+=sequ[l]; --l;

}

while(h<m)

{

cout<<sequ[h]<<" "; sum+=sequ[h]; ++h;

}

}

else

{

while(h<m)

{

cout<<sequ[h]<<" "; sum+=sequ[h]; ++h;

}

while(l>=0)

{

cout<<sequ[l]<<" ";

sum+=sequ[l];

--l;

}

}

averay=sum/m;

cout<<endl<<"移动总道数:"<<sum<<"平均移动道数:"<<averay<<endl;

cout<<"***************************"<<endl;

}

//-------------------------------------------------------------

void main()

{

int Buffer[size];

FILE *fp;

if((fp=fopen("磁道系列文件.txt","r"))==NULL)

{

cout<<"磁道系列文件.txt打开失败"<<endl;

exit(0);

}

int i;

for(i=0;i<size&&!feof(fp);++i)

fscanf(fp,"%d",&Buffer[i]);

Buffer[i]='\0';//将当前Buffer中的字符制空

cout<<"************磁盘调度算法************"<<endl; cout<<"从文件读入的磁道号系列为:";

for(int j=0;j<i;++j)

cout<<Buffer[j]<<" ";

cout<<endl;

vector<int> Sequ_vec(Buffer,Buffer+i);//将Buffer中的序列拷贝到Sequ_vec向量中

sort(Sequ_vec.begin(),Sequ_vec.end());//对Sequ_vec排序方便FFTS和SCAN算法的应用

while(1)

{

cout<<"1、先来先服务; 2、最短寻道时间优先; 3、电梯(SACE)算法; 4、退出"<<endl;

cout<<"请选择:";

int a;

cin>>a;

switch(a)

{

case 1:FCFS(Buffer,i);break;

case 2:FFTS(Sequ_vec,i);break;

case 3:SACE(Sequ_vec,i);break;

case 4:exit(0);

}

}

}

六. 实验测试及结果分析

和手算的结果一致。

七. 实验小结

(1) 通过输入不同的磁道号,可知先来先服务算法仅适用于请

求磁盘I/O的进程数目较少的场合,而SSTF算法的平均寻找时间明显低于先来先服务算法,因此它具有跟好的性能。

(2) 通过本次实验,深刻的理解了各个调度算法的特点,以及

其编程思想,从而掌握了如何提高磁盘I/O速度的途径。


第二篇:c++实验报告范文


实验() 预习报告(上实验课之前完成)

一、    实验目的:

1.   了解C语言开发环境的组成;

2.   学习C语言开发环境的使用方法;

3.   掌握C语言程序从编辑、编译、连接到运行并得到运行结果的过程。

二、    实验内容:

1.   从键盘输入两个整数,将其平方和输出(用函数求平方和)

EX701_11.C程序清单:

#include<stdio.h>

int main( )

   int a,b,c;

   clrscr();                                           //清除屏幕上的所有信息

   printf("\n Input a=");                         //数据输入前的提示信息

   scanf("%d",&a);

   printf("Input b=");

   scanf("%d",&b);

   c=SumSqr(a,b);                             //a, b的平方和

   printf("\nResult=%d", c);

   return 0;

}

int SumSqr(x,y)                                 //定义函数求a, b的平方和

int x,y;

{

     return x*x+y*y;

}

2.   从键盘输入三个整数,将其最大值输出(用函数求最大值)

EX701_12.C程序清单:

#include<stdio.h>

int main( )

   int a,b,c,d;

   printf("\n Input a=");

   scanf("%d",&a);

   printf("\n Input b=");

   scanf("%d",&b);

   printf("\n Input c=");

   scanf("%d",&c);

   d=max(a,b,c);                                       //a, b, c中的最大值

   printf("\nMax=%d", d);

   return 0;

}

int max(x,y,z)                                           /定义函数/

int x,y,z;

{

   int t;

t=x>y?x:y;

return z>t?z:t;

}

3.   输入三角形三边的长度,将其面积输出(用函数求面积)

#include<math.h>

#include<stdio.h>

float area(x,y,z)                                    //求三角形面积

float x,y,z;

{

   float p,s;

   p=(x+y+z)/2.0;

   s=p*(p-x)*(p-y)*(p-z);

   if(s>0)s=sqrt(s);                              //可以构成三角形

   return s;

}

void main( )

{

   float a,b,c,d;

   printf("\nInput a=");

   scanf("%f",&a);

   printf("\nInput b=");

   scanf("%f",&b);

   printf("\nInput c=");

   scanf("%f",&c);

   d=area(a,b,c);

   if(d<=0)printf("\Data error!");           //不能构成三角形

   else printf("\nArea=%f", d);

}

实验() 实验报告(上实验课时完成)

三、    运行结果及分析:

1.   EX701_11.C程序运行结果:

输入:Input a=1 <CR>

Input b=2 <CR>

输出:Result=5

分析:(基本操作步骤[仅用于实验一])

    (1) 双击桌面上的TC图标;

    (2) 点窗口左上角,设置属性将窗口最大化;

(3) 新建文件:快捷键“Alt+F”,然后选“N;

(4) 保存文件:按热键“F2”;

(5) 代码录入;

(6) 编译-连接-运行:按热键“Ctrl+F9”;

(7) 观看结果:按热键“Alt+F5

(程序调试过程中出现以下错误)

    (1) Size of ‘main’ is unknown or zero

       main后掉了圆括号;

    (2) Unterminated string or character constant

字符串少了双引号;

    (3) Statement missing ;

语句后少了分号;

    (4) Unable to open include ifle ‘STDIO.H’

不能打开stdio.h文件:要么文件不存在

要么Option菜单中的Directories设置有误;

    (5) Undefined symbol ‘a’

没有定义变量a

        (6) Undefined symbol _main in dodule c0.asm

           没有主函数main;

2.   EX701_12.C程序运行结果:

输入:Input a=1 <CR>

Input b=2 <CR>

Input c=3 <CR>

输出:Max=3

分析:(程序调试过程中出现以下错误)

    (1) 输出结果不正确:

max函数中的if~else结构不对;

    (2) 输出结果总为0

        max中的return 语句有误

3.   EX701_13.C程序运行结果:

输入:Input a=3 <CR>

Input b=4 <CR>

Input c=5 <CR>

输出:Area=6.000000

分析:(程序调试过程中出现以下错误)

    (1) 边长若定义为int型,计算结果出错;

    (2) float point error : Domain

没判断是否能组成一个三角形, sqrt中的参数为负(超出范围)

特别提示:

1.     每个实验包括实验目的、实验内容、实验结果及分析三大内容;

2.     实验内容中,必须抄题且按序(1234)标明题号,

3.     实验结果及分析中,主要说明程序的运行结果,输入是什么(输入数据前的提示信息用下划线标出),输出是什么,同时记录下调试程序过程中出现的错误及解决方法。

更多相关推荐:
实验报告 范本

研究生实验报告范本实验课程实验名称实验地点学生姓名学号指导教师范本实验时间年月日一实验目的熟悉电阻型气体传感器结构及工作原理进行基于聚苯胺敏感薄膜的气体传感器的结构设计材料制作材料表征探测单元制作与测试实验结果...

实验报告范本

学生实验报告书实验课程名称开课学院指导教师姓名学生姓名学生专业班级200200学年第学期实验教学管理基本规范实验是培养学生动手能力分析解决问题能力的重要环节实验报告是反映实验教学水平与质量的重要依据为加强实验过...

实验报告要求及范文

滁州市政府组织退耕还林(黑体,小二,1.5倍行距,段前段后0.5行)——5060451007范雪花(学号,TimesNewRoman,四号)(姓名,宋体,四号,单倍行距)一、实验目的(宋体,四号,单倍行距,段前…

有关实验报告的书写格式

有关实验报告的书写格式江苏省泗阳县李口中学沈正中一、完整实验报告的书写完整的一份实验报告一般包括以下项目:实验名称:实验目的:实验器材:实验原理:实验步骤:实验数据记录(表格)及处理:实验结论(结果推导):实验…

实验报告范本

学生实验报告书实验课程名称开课学院指导教师姓名学生姓名学生专业班级200200学年第学期实验教学管理基本规范实验是培养学生动手能力分析解决问题能力的重要环节实验报告是反映实验教学水平与质量的重要依据为加强实验过...

实验报告范本

实验报告范本,内容附图。

实验报告范文

实验报告范文,内容附图。

叠加原理_实验报告范文(含数据处理)

叠加原理一实验目的验证线性电路叠加原理的正确性加深对线性电路的叠加性和齐次性的认识和理解二原理说明叠加原理指出在有多个独立源共同作用下的线性电路中通过每一个元件的电流或其两端的电压可以看成是由每一个独立源单独作...

2FSK实验报告范本

实验课程名称通信原理学生实验报告书实验课程名称开课学院指导教师姓名学生姓名学生专业班级200200学年第学期实验教学管理基本规范实验是培养学生动手能力分析解决问题能力的重要环节实验报告是反映实验教学水平与质量的...

实验报告格式

实验报告一

稳定性试验报告样本

含过氧化物凝胶稳定性试验报告1、摘要:本实验考察研究含过氧化物的美白凝胶在温度、光线的影响下随时间变化的规律,为其生产、包装、贮存、运输条件和有效期的确定提供科学依据。本实验采用高温、光照等试验方法,通过硫代硫…

实验报告1

大型主机操作系统与JCL实验报告1学号姓名时间成绩实验1在TSOREADY界面的命令11实现功能列出用户id等信息关键代码PROFILE实验截图执行结果prefix的值是用户的Id12实现功能设置是否采用默认的...

实验报告范文(46篇)