操作系统课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“操作系统课程设计完整”。
操作系统课程设计报告
专 业:计算机科学与技术 学 号: 姓 名: 提交日期:
操作系统课程设计报告
【设计目的】
(1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
(2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
(3)通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力 【设计内容】
为Linux系统设计一个简单的二级文件系统。要求做到以下几点: 1.可以实现下列几条命令:
login 用户登录
dir 列目录
create 创建文件
delete 删除文件
open 打开文件
close 关闭文件
read 读文件
write 写文件
cd 进出目录
2.列目录时要列出文件名,物理地址,保护码和文件长度 3.源文件可以进行读写保护 【实验环境】 Windows xp/7 C++/VC++
【相关知识综述】
1、文件系统
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
2、位示图
位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已经分配。有的系统把“0”作为盘块已分配的标记,把“1”作为空闲标志。(它们的本质上是相同的,都是用一位的两种状态标志空闲和已分配两种情况。)磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。
操作系统课程设计报告
【设计思路】
本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2„并以编号作为物理地址,在目录中进行登记。
【程序主要流程图】
否
验证是否成功?
是
目录
右键进行选择 操作
新建目录新建文件打开文件
结束
开始登录删除属性 2
操作系统课程设计报告
【源程序清单】
typedef struct
//文件结构体 /*the structure of OSFILE*/ { int fpaddr;
/*file physical addre*/
int flength;
/*file length*/
int fmode;
/*file mode:0-Read Only;1-Write Only;2-Read and Write;3-Protect;*/
char fname[MAXNAME];
/*file name*/ } OSFILE;
typedef struct
//用户文件目录结构体 user file directory /*the structure of OSUFD*/ { char ufdname[MAXNAME];
/*ufd name*/ OSFILE ufdfile[MAXCHILD];
/*ufd own file*/ }OSUFD;
typedef struct
//登陆
/*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME];
/*ufd name*/
char ufdpword[8];
/*ufd paword*/ } OSUFD_LOGIN;
typedef struct
//文件打开模式 /*file open mode*/ { int ifopen;
/*ifopen:0-close,1-open*/
int openmode;
/*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE;
void DeleteF()/*Delete File*/ { int i,j,k=0;char str[255],str1[255];char fname[MAXNAME];k=ExistD(dirname);//获取用户的序号
printf(“Please input filename:”);gets(fname);//获得需要打开的文件名fname
for(i=0;i
if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)
{
操作系统课程设计报告
}
}
void OpenF()/*Open File*/ { int i,k=0;char fname[MAXNAME];//printf(“nnC:%s>”,strupr(dirname));k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//获得需要打开的文件名fname
for(i=0;i
if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)
{
ifopen[k][i].ifopen=1;//打开文件
ifopen[k][i].openmode=ufd[k]->ufdfile[i].fmode;//将读写属性赋值
//test// printf(“i=%d,k=%dn”,i,k);
///test// printf(“openmode=%dn”,ifopen[k][i].openmode);
printf(“Open file succefully!n”);
break;//打开文件则跳出循环 itoa(ufd[k]->ufdfile[i].fpaddr,str,10);//itoa函数,把数字转换成字符串
strcpy(str1,“file”);strcat(str1,str);strcpy(str,“c:osfilefile”);strcat(str,str1);strcat(str,“.txt”);//str为文件的物理路径
if(remove(str)==0)
//调用remove函数删除 第k个用户的第i个文件ufd[k]->ufdfile[i]
{
fpaddrno[ufd[k]->ufdfile[i].fpaddr] = 0;//位示图置为0,表示没被占用
for(j = i;j
ufd[k]->ufdfile[j] = ufd[k]->ufdfile[j+1];
fcount[k] = fcount[k]-1;//文件数-1
printf(“Delete file succefully!n”);
//除了删除原文件,还要 删除dir中的东西
} else
printf(“Delete file fail!n”);break;}
操作系统课程设计报告
}
} }
void CloseF()/*Close File*/ {
int i,k=0;char fname[MAXNAME];
k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//获得需要关闭的文件名fname
for(i=0;i
if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)
{
ifopen[k][i].ifopen=0;//关闭文件
ifopen[k][i].openmode=4;//fmode改为初始值4
printf(“Close file succefully!n”);
break;
}
} }
void WriteF()/*Write File*/ { int i,k,n=0;char fname[MAXNAME];char str[255],str1[255];int flag=1;
if(strcmp(strupr(ltrim(rtrim(dirname))),“”)==0)
{
printf(“nError.Please convert to ufd dir before read.n”);
wgetchar=1;
return;} printf(“nCaution:Open file firstn”);printf(“Opened File(s)List:n”);k=ExistD(dirname);
操作系统课程设计报告
for(i=0;i
//文件属性为只写或者是读写才能write
{
printf(“%15s”,ufd[k]->ufdfile[i].fname);
n++;} if((n%4==0)&&(n!=0))printf(“n”);
} printf(“n%d files openned.n”,n);
if(n==0)wgetchar=1;if(n!=0){ printf(“nPlease input FileName:”);gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){
if(ifopen[k][i].ifopen==1)
{
if((ifopen[k][i].openmode==1)||(ifopen[k][i].openmode==2))
{
itoa(ufd[k]->ufdfile[i].fpaddr,str,10);
strcpy(str1,“file”);
strcat(str1,str);
strcpy(str,“c:osfilefile”);
strcat(str,str1);
strcat(str,“.txt”);//物理路径
int length=0;
char c;
printf(“Please input text('#' stands for end):n”);
fp_file=fopen(str,“ab+”);//在文件末尾加 add bit
while((c=getchar())!='#')//以#为结尾
{
fputc(c,fp_file);
if(c!='n')length++;
}
//fprintf(fp_file,“n”);
操作系统课程设计报告
fclose(fp_file);
ufd[k]->ufdfile[fcount[i]-1].flength += length;//原长度加输入长度
printf(“n'%s' has been written succefully!n”,fname);
}
else
{
printf(“nError.'%s' has been opened with WRITE ONLY mode.It isn't read.n”,fname);
wgetchar=1;
}
}
else
{
printf(“nError.'%s' is in closing status.Please open it before readn”,fname);
wgetchar=1;
}
}
else
{
printf(“nError.'%s' does not exist.n”,fname);
wgetchar=1;
} } }
操作系统课程设计报告
【测试结果】
1、创建用户
2、创建文件,并且打开读取文件
操作系统课程设计报告
3、写文件
4、删除文件
操作系统课程设计报告
【设计总结】
这两周的课程设计时间非常短,从中学到了很多知识,也为我们的学习提供了良好的实践平台。首先,通过老师的细心指导和同学们的相互帮助,让我对题目【二级文件系统】有了进一步了解。接下来,主要是研究老师所给的大部分代码,参考他的基本思路,并且思考每一个结构体在代码中的具体作用。这期间和一些同学交流了各自的思路,在交流中,大家渐渐的明确了这个程序的思路、框架结构等。我们所做的主要是补充了删除文件,打开文件,关闭文件,写文件这几个部分。
代码编写完了之后,实现了题目所要求的基本功能,但是在测试的过程中,还发现了这个程序存在各种各样的bug。不断的测试修改后,得到完善。
这次课设最大的收获在于:学会交流以及相互帮助。在大家的交流沟通之中,我们解决了一个又一个难题。
在这次课设中,我还意识到,要把这门课真真正正地学好,不单单只是为了能够应付考试,平时还要多加学习,多加努力才对。
【参考文献】
【1】C语言程序设计(第三版)谭浩强
【2】计算机操作系统教程(第三版).张尧学 史美林 张高
【3】计算机操作系统,西安电子科技大学出版社,方敏主编,2004.8
操 作 系 统课程设计实验报告学院:计算机科学与技术学院班级:计112学号:1113022032姓名:一、实验名称:用C++实现驱动调度算法、页面替换算法、银行家算法、处理器调度算法二、实......
课程设计报告题 目: 模拟请求页式管理 课程名称: 计算机操作系统 学 院: 信息工程学院专 业: 计算机科学与技术班 级: 14计本(1) 学生姓名: * * * 学 号: 201403031** 指导教师:......
操作系统课程设计注意事项:0.请每位同学必须按时提交课程设计报告(包括电子版和纸质版),算入期末成绩1.在三个题目中选择一个2.如果选择题目(一)进程调度算法,要求实现其中2个以上(......
1 引言操作系统是计算机科学与技术专业的主要专业基础课和主干课。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到......
长春理工大学 软件学院 0813111班 27号姓名:丁为胜 一. 概述1、课程设计目的及任务课程设计地点及要求每个学生一台微机,需要安装windows98或windows2000操作系统,配备VC、VB、j......