新操作系统课程设计.docx
- 文档编号:27655500
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:22
- 大小:191.82KB
新操作系统课程设计.docx
《新操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《新操作系统课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
新操作系统课程设计
江苏大学京江学院
JIANGSUUNIVERSITY
操作系统课程设计
文件管理系统
学院名称:
京江学院
专业班级:
J计算机1401
学号:
4141110020
学生姓名:
潘庆
指导教师:
林琳
2017年1月
1、课设目的
操作系统是计算机专业的一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都还很难理解进程、内存管理等一些概念和原理,操作系统课程设计的目的就是通过设计的实验,让同学们真正理解进程的实现,内存管理的机制,达到理解概念,了解实现原理。
同时也进一步巩固程序设计与数据结构的实践技能,实现整个大学阶段实践技能不断线的目的。
2、课设题目
实现一个简单的文件管理系统
(1)具有文件目录(一级或者多级)
(2)对指定大小的磁盘(设共1GB,每个块为1MB),建立位示图进行管理
(3)文件操作,包括新建、查看属性、删除
新建文件:
给出文件名、大小、建立时间等信息,系统为其分配硬盘空间,并记录在文件目录中
查看属性:
给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。
删除文件:
给出文件名,实现文件的删除
(4)文件系统操作:
显示文件列表、显示磁盘空间剩余大小、输出位示图。
三、系统功能结构
4、主要数据结构
创建文件:
creatfile<文件名>,即创建一个指定名字的新文件,在目录中增加一项,不考虑文件的内容,对于重名文件,给出错误信息。
删除文件:
deltefile<文件名>,即删除一个指定名字的已创建文件,若文件不存在则给出错误信息。
输出文件列表:
disp(),即显示指定目录下的全部文件和第一级子目录,若无指定目录,则显示当前目录下的相应内容。
输出文件属性:
disp2(),即给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。
输出位示图:
bit_map(),即输出当前状态下磁盘盘块的使用情况。
5、系统使用说明
文件管理系统主菜单界面(通过输入对应数字进入相应功能子菜单)
“新建文件”功能(需要输入文件名、文件大小和创建时间)
“查看属性”功能(输入文件名后,会显示其大小,所占盘块数,所占盘块号和创建时间)
“显示文件列表”功能
“显示磁盘空间剩余大小”功能
“输出位示图”功能
“删除文件”功能(输入文件名即可将其删除)
6、课程设计中遇到的问题及解决方法
刚开始做这个实验时,考虑的因素并没有很周全,比如创建文件和删除文件均没有考虑例外因素,都是在后期检查时发现的疏漏,另外,将文件管理的理论用C++来实现也需要自己从巩固书本概念做起,虽然书上并没有给出完整的算法,但是通过类比及网上查阅相关算法,自己也便可以写出以C++实现的各个功能模块,然后将其整合到文件类和文件库类两个大类中,使整个程序的结构更清晰,主函数用来实现界面和选择功能,用简单的switch-case语句便可以实现,值得注意的是,这边很容易会忽视清屏,导致输出结果很繁杂,用简单的system("cls")命令即可实现清屏。
这次课程设计不仅是对自己掌握的操作系统知识的检验,更是对实践能力的检验,在这次课程设计过程中,我发现了许多课堂上或考试中并没有留意的知识点,通过翻阅书本,查阅网络才将它们重拾,这充分说明了我在学习这门课时还是偏向了课堂上的要点,但毕竟课堂上老师不可能强调所有知识点,自己还是要注意课后的复习以及动手实践,才能更好地巩固知识点,而且我也意识到自己并不能仅仅拘泥于课本上的知识,很多学科前沿的知识也要去了解,这样对以后的就业才有帮助。
七、带注释的代码
#include
#include
#include
usingnamespacestd;
inti=0,j=0,sum=0,tt=0,ii,ss;//i,j是位视图行列,sum是位视图存储到的盘块数,tt是文件已占用块数,ii是文件编号,ss是磁盘剩余块数
inta[32][32];
//*****************************************************************************************************
classfile//文件类
{
private:
stringname;//文件名
public:
inttag_delete;//删除标记1:
已删0:
未删
intlength;//文件大小
intblocknum;//盘块数
intblocksum1;//所占盘块号的起点
intblocksum2;//所占盘块号的终点
stringtime;//文件建立时间
file(){}
stringgetname(){returnname;}//获取文件名
intgettag_delete(){returntag_delete;}//获取删除标记
intgetblocksum1()//磁盘块号的起点
{
returnblocksum1;
}
intgetblocksum2()//磁盘块号的终点
{
returnblocksum2;
}
voidcreatfile(stringna,intlength,stringtime)//创建文件
{
tag_delete=0;
name=na;
this->time=time;
blocknum=length;//盘块数=文件大小/盘块大小
if((j+blocknum)<=32)//所有盘块数只占用一行,直接赋值位视图赋值
{
for(;j<(sum+blocknum);j++)
{
a[i][j]=1;
}
sum=sum+blocknum;//再进行下面文件的盘块数累加
}
else
{//占用多行,先赋值整行
for(;j<32;j++)
{
a[i][j]=1;
}
:
:
i=i=i+1;
for(j=0;j<(sum+blocknum)-32*i;j++)//再进行剩余项赋值
{
a[i][j]=1;
}
:
:
sum=sum=sum+blocknum;
}
:
:
tt=tt=tt+blocknum;//输出文件已占用的盘块号
blocksum1=sum-blocknum;
blocksum2=sum-1;
}
voiddisp()//输出文件列表
{
cout< } voiddisp2()//输出文件属性 { cout< } }; //***************************************************************************************************** classfdatabase//文件库类 { private: filef[50]; public: fdatabase()//构造函数 { } intsearch(stringfname)//按文件名查找判断是否存在 { for(inti=0;i<50;i++) { if((f[i].getname()==fname)&&(f[i].tag_delete==0))//文件名一样而且未删 { return0; } } return1; } intcreatfile(stringna,intlength,stringtime) { intp; p=search(na);//创建文件时先查找是否存在 if(p==1) { f[ii].creatfile(na,length,time);//创建文件 : : ii++; return1; } else { cout<<"\n! ! ! 该文件已存在,不能创建! ! ! \n\n"; return0; } } intdeltefile(stringna)//删除文件 { intx=0,n1,n2,q1,q2,k; for(inti=0;i<50;i++) { if(getname(i)==na) {//进行删除文件赋值 f[i].tag_delete=1; tt=tt-f[i].blocknum; if(i==0)//位视图中删除文件从第一盘块开始 { for(k=0;k { a[x][k]=0; } } else//位视图中删除文件从其它盘快开始 { n1=(f[i-1].blocksum2+1)/32;//被查找的文件之前文件所占用的盘块数/32,//n1表示位视图开始操作的行 n2=(f[i].blocksum2+1)/32;//所有文件所占用的盘块数/32,//大于0表示跨行//n2表示位视图结束操作的行 q1=f[i].blocksum1%32;//位视图开始的列 q2=f[i].blocksum2%32;//位视图结束的列 if(n1==n2)//若n2与n1相等,表明当前所有被占用盘块在同一行 { for(k=q1;k { a[n1][k]=0; } } else { for(;n1 { for(intl=0;l<32;l++)//循环进行整行赋值 { a[n1][l]=0; } } for(k=0;k { a[n2][k]=0; } } } return1; } } return0; } voiddisp()//输出所有文件列表 { for(inti=0;i<=ii;i++) { if(f[i].tag_delete==0) { f[i].disp(); } } } voiddisp2(filef)//输出文件属性 { f.disp2(); } stringgetname(intn) { returnf[n].getname(); } fileFile(intn) { returnf[n]; } }; //***************************************************************************************************** voidbit_map()//位视图 { ints=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计