人人范文网 范文大全

操作系统课程设计报告

发布时间:2020-03-03 01:16:03 来源:范文大全 收藏本文 下载本文 手机版

操作系统课程设计报告

专 业:计算机科学与技术 学 号: 姓 名: 提交日期:

操作系统课程设计报告

【设计目的】

(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(\"\\n\\nC:\\%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=%d\\n\",i,k);

///test// printf(\"openmode=%d\\n\",ifopen[k][i].openmode);

printf(\"Open file succefully!\\n\");

break; //打开文件则跳出循环

4 itoa(ufd[k]->ufdfile[i].fpaddr,str,10); //itoa函数,把数字转换成字符串

strcpy(str1,\"file\"); strcat(str1,str); strcpy(str,\"c:\\osfile\\file\"); 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 first\\n\"); 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:\\osfile\\file\");

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 read\\n\",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

操作系统课程设计报告

操作系统课程设计报告

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

嵌入式操作系统程课程设计报告

重邮操作系统课程设计报告

操作系统课程设计报告
《操作系统课程设计报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档