}
int main()
{
int y=1;
int s;
Inith();
while(y)
{
cout<<"请选择寻道方式:
1--FCFS; 2--SSTF; 3--SCAN;4--CSCSN:
";
cin>>s;
switch(s)
{
case 1:
FCFS();Count();Show();break;
case 2:
SSTF();Count();Show();break;
case 3:
SCAN();Count();Show();break;
case 4:
CSCAN();Count();Show();break;
}
cout<<"是否继续选择寻道算法?
1--是;0--否:
";
int p;
cin>>p;
y=p;
}
exit;
return 0;
}
实验结果:
实验心得:
十几天的课设时间很快就过去了,
其中既有欢乐又有痛苦。
通过这次的课程
设计,
我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本
知识学好,
还要不断进行实践,
将所学的跟实践操作结合起来才能更好地巩固所
学,才能提高自己实践能力
.
通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,
实践能力与理论知识同样重要。
这次试验的理
论难度并不大,
但是若要深入发掘其中的东西,
并且实际去编程实现,
就遇到了
相当大的难度。
我们的编程能力并不是特别突出,
又要在很短的时间内给出算法
的实现,
非常困难。
因此我们不仅要在课上认真试验,
课后还要查资料、
做实验,
终于经过不懈的努力,
我们克服了以上的种种困难,
按时完成了课设的任务,
再
次感谢帮助我们的老师和同学。
成绩评定:
该生对待本次实验的态度□认真□良好□一般□比较差。
本次实验的过程情况□很好□较好□一般□比较差
对实验结果的分析□很好□良好□一般□比较差
文档书写符合规范程度□很好□良好□一般□比较差
综合意见:
成绩
指导教师签名
沈超
日期
12.22
《操作系统》课程实验第二次实验报告
实验内容及基本要求:
一、实验目的与基本要求
1、了解操作系统中文件系统的结构和管理过程。
2、掌握经典的算法:
混合索引与成组链接法等方法。
二、实验仪器与设备
硬件:
微型计算机。
中央处理器PentiumIV以上;显示器256色VGA以上;内存使用128兆;硬盘300M以上。
软件:
学生可以采用任何一种自己熟悉的编程语言完成算法的程序设计,如C/C++、Delphi、VB、VC、C#等。
三、实验内容:
编程模拟实现混合索引和成组链接法算法。
实验结果:
实验代码:
#include
int MA[4]; /*空闲块数组*/
int A[9][4]={{3,1,2,3},{3,4,5,6},{0,0,0,0},{0,0,0,0},{3,0,7,8},
{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; /*磁盘空间*/
int mark[9]; /*存放已分配的块*/
int No=0; /*已分配的块数*/
void display1()
{ int i,j,temp,count;
No=0;
if(MA[1]!
=0)
{ i=MA[0];
printf("\ngroup1:
");
for(j=1;j<=i;j++)
{ printf("%d ",MA[j]);
mark[++No]=MA[j];
}
temp=MA[1];
count=2;
while(A[temp][1]!
=0)
{ printf("\ngroup%d:
",count);
i=A[temp][0];
for(j=1;j<=i;j++)
{ printf("%d ",A[temp][j]);
mark[++No]=A[temp][j];
}
count++;
temp=A[temp][1]; }
printf("\ngroup%d:
",count);
i=A[temp][0];
for(j=2;j<=i+1;j++)
if(A[temp][j]>0)
{ printf("%d ",A[temp][j]);
mark[++No]=A[temp][j]; } }
else
{ i=MA[0];
if(i==1)
printf("\nThe blocks are all assigned");
else
{ printf("\ngroup1:
");
for(j=2;j<=i;j++)
{ printf("%d ",MA[j]);
mark[++No]=MA[j]; } } }
void display() /*显示分组情况*/
{ int i,j;
if(MA[0]!
=0)
display1();
else
{ i=MA[1];
for(j=0;j<=3;j++)
MA[j]=A[i][j];
display1(); } }
void assign() /*分配空闲块*/
{ int s,i;
if(MA[0]>1) /*若该组不止一个空闲块*/
{ i=MA[0];
s=MA[i];
MA[0]--;
printf("number of the block:
%d",s); }
else if(MA[0]==1) /*只剩一个空闲块*/
{ if(MA[1]!
=0) /*还有其它空闲块组*/
{ s=MA[1];
for(i=0;i<=3;i++)
A[0][i]=A[s][i];
MA[0]--;
printf("number of the block:
%d",s); }
else /*没有其它空闲块组*/
{ printf("There isn't any space");
return; } }
else /*当前组已分配完*/
{ for(i=0;i<=3;i++)
MA[i]=A[0][i];
assign(); }
display(); /*显示分组情况*/ }
void callback() /*回收空闲块*/
{ int i,j,temp;
printf("input the No. of the block you want to callback:
");
scanf("%d",&j);
getchar(); /*得到待回收的空闲块号*/
for(temp=1;temp<=No;temp++)
{ if(mark[temp]==j)
break; }
if(temp { printf("\nThe block is in the disk");
return;
}
if(MA[0]<3) /*当前组不满3块*/
{ i=MA[0];
MA[i+1]=j;
MA[0]++; }
else /*已有3块*/
{ for(i=0;i<=3;i++)
A[j][i]=MA[i];
MA[0]=1;
MA[1]=j; }
display(); /*显示*/ }
void menu() /*功能选择函数*/
{ int choice;
char judge;
printf("\ninput your choice:
(1--assign,2--callback):
");
scanf("%d",&choice);
getchar();
if(choice==1)
assign();
else if(choice==2)
callback();
else
printf("\ninvalid command!
");
printf("\ncontinue or not?
(y--Yes,n--Not):
");
scanf("%c",&judge);
getchar();
if(judge=='y')
menu();
else
{ printf("Now the graph is:
");
display();
printf("\npress any key to quit");
getch(); } }
main()
{ int i;
for(i=0;i<=3;i++)
MA[i]=A[0][i];
display();
menu(); }
实验心得:
我们每天都在用文件系统,已经习惯了有文件路径寻找的方便,每次找文
件时,感觉好容易,可实际去设计这个程序时,却很难。
用树形结构图去设计,
要有较好的全局思想,
而且一些节点的分配。
在设计此系统时,
发觉自己对文件
系统理解得不够透彻。
不知道如何来具体设计这个实验,
后来耐心回到本学期学
习的课本内容上,
再次翻看了大二第一学期所学的数据结构的书,
才觉悟对文件
系统的理解,
总而言之,
操作系统的设计,
不仅提升了自己的程序设计及编写技
巧,更大大地加深了对操作系统的文件管理的了解。
在本学期的操作系统课程设计的实验中,完成了进程控制,请求分页管理,设备
管理,文件管理和进程调度等一系列实验项目,收获颇丰。
在该门课程中通过实验的
方法,模拟了当今操作系统的部分子系统的实现,进一步加深了对操作系统的理解。
掌握了与操作系统相关的重要算法,相信这些内容会牢牢记在我的脑海中,并在以后
的学习生活中派上用场。
成绩评定:
该生对待本次实验的态度□认真□良好□一般□比较差。
本次实验的过程情况□很好□较好□一般□比较差
对实验结果的分析□很好□良好□一般□比较差
文档书写符合规范程度□很好□良好□一般□比较差
综合意见:
成绩
指导教师签名
沈超
日期
12.22