操作系统课程设计-模拟文件系统_第1页
操作系统课程设计-模拟文件系统_第2页
操作系统课程设计-模拟文件系统_第3页
操作系统课程设计-模拟文件系统_第4页
操作系统课程设计-模拟文件系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录

第1章需求分析........................................1

第2章概要设计........................................1

2.1系统的主要功能..................................1

2.2系统模块功能结构................................1

2.3运行环境要求....................................2

2.4数据结构设计....................................2

第3章详细设计.......................................3

3.1模块设计........................................3

3.2算法流程图......................................3

第4章系统源代码.....................................4

第5章系统测试及调试.................................4

5.1运行结果及分析..................................4

5.2系统测试结论....................................5

第6章总结与体会......................................6

第7章参考文献.......................................6

附录...................................................7

第1章需求分析

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深

对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统

的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实

现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系

统的发展动向和趋势。

模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,

模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。

第2章概要设计

2.1系统的主要功能

1)系统运行时根据输入的用户数目创建主目录

2)能够实现下列命令:

Login用户登录

Create建立文件

Read读取文件

Write写入文件

Delete删除文件

Mkdir建立目录

Cd切换目录

Logout退出登录

2.2系统模块功能结构

2.3运行环境要求

操作系统windowsxp,开发工具vc++6.0

2.4数据结构设计

用户结构:账号与密码结构

typcdcfstructusers

(

charname[8];

charpwd[l()];

}users;

本系统有8个默认的用户名,前面是用户名,后面为密码用户登陆时只要输入

正确便可进入系统,否则提示失败要求重新输入。

usersusrarray[8J=

(

"usrr'/'usrl",

"usr2","usr2n,

"usr3"Jusr3”,

"usr4n,"usr4",

"usr5","usr5",

"usr6"/'usr6",

nusr7","usr7n,

"usr8"/'usr8",

};

(3)数据结构说明

a)文件结构链表

structfnode

(

charfilename[FILENAME_LENGTH];

intisdir;

intisopen;

charconlent[255J;

fnode*parent;

fnode*child;

fnode*prcv;

fnode*next;

);

b)函数介绍

fnode*inilfile(charfilename口,intisdir);//初始化文件或目录

voidcreateroot。;//建立系统根目录

intrun();系统运行

intfindpara(char*topara);对参数进行处理

boolchklogin(char*users,char*pwd);检查账号与口令

voidhelp();命令列表

intmkdir();建立目录

intcreate。;建立文件

intread。;读取文件

intwrite。;写入文件

intdel();删除文件

intcd();切换目录

intdir();文件与目录列表

第3章详细设计

3.1模块设计

此课程设计把文木作为研究对象来模拟操作系统的文件系统工作过程.所以

用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。

所有用户构成一个数组,每个数组元素是一个结构体,每个结构体包括三部

分,用户的用户名、用户密码和文件链表(由于模拟文件系统的文件数量不多,

故文件表采用线性链表来存储。线性表每个结点放置一个文件的FCB,其中存

储一个文件的信息,文件名、长度、类型、创建时间等);

磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信

息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空

间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,

并置占用位为0。当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果

该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前

一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个

新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟

磁盘的线性分配。

3.2算法流程图

第4章系统源代码

见附录

第5章系统测试及调试

5.1运行结果及分析

|回—

■'D:\Debug\Cppi.exe"

模拟Lin件系统

账号:usrl-usr8密码:usrl-usr8

你只有三次机会来试验账号

Login:

■'D:\Debug\Cppl.exe"

模拟LinuxR件系统

账号:usrl-usr8也码:usrl-usr8

你只有三次机会来试验账号

Login:usrl

Passusri令

-

文,

:取0

create,

件0

:人

read文

写#

:-

write文

除#

:瞿0

del目

:立0

nkdir目

:畲。

cd登

logout:。

linux:/>

命令一览

立文4

create:Uo

:戈UO

read持多

线程

M*

:除

write文L

:0

del目

:立0

mkdir目

录0

:电

d登

录0

logout:

linux:/>create

文件建立成功,

linux:/>reada

aa

linux:/>

linux:/>createaaa

文件建立成功?

linux:/>reada

aa

linux:/>writeabb

x件写入成功,

linux:/>reada

bb

linux:/>

linux:/>dela

文件已删除?

linux:/>reada

R?件不存在?

linux:/>_

令一览

立文4

:b

createF文

i-cad:M

^rite:M:支持多线程

文L

de1:目

V录

nkdir目

cd:

logout:

linux:/>mkdirh

linux:/>cdh

linux:/h>

linux:/>nkdirh

linux:/>cdh

linux:/h>logout

Pressanykeytocontinue

5.2系统测试结论

从运行结果截图中可以看到,程序分别执行了它所包含的7个功能,并且每

个功能都能正确的执行。若程序执行开始,三次都未输入正确的帐号和密码,程

序会退出不再执行。

第6章总结与体会

虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,

接到题目要求时,设计大体的框架,考虑好所使月的数据结构,然后用高级编程

语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要

求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后

把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差不多都

一样,但是每次都会有不同的体会。

通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和

知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。在设

计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。在对

自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统

的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们

的编程变的更简单,可以使我们的直错与纠错变的更方便。总的来说通过这次的

设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设

计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相

信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉

煌的发展和提高。

第7章参考文献

《操作系统原理实验教程》,清华大学出版社胡峰松主编

《操作系统实验教程》,清华大学出版社张丽芬等编著

《计算机操作系统实验教程》,清华大学出版社颜彬等编著

附录

系统的主要源代码

#include"stdio.h"

#include"iostream.h"

#include"string.h"

#include"iomanip.h1'

#defineFILENAME_LENGTH10//文件名称长度

#defineCOMMAND_LENGTH10//命令行长度

#definePARA_LENGTH30〃参数长度

〃账号结构

lypedefstructusers

(

charnamef81;

charpwd[10j;

}users;

〃文件结构

structfnode

(

charfilename[FILENAME_LENGTH];

intisdir;

intisopcn;

charcontent[255];

fnode'parent;

fnode*child;

fnode*prev;

fnode*next;

);

〃账号

usersusrarray[8]=

(

'•usrl'V'usrr',

nusr2'V,usr2,',

"usr3";'usr3H,

"usr4',,"usr4M,

,,usr5',,"usr5,',

"usr6";'usr6",

,,usr7n,nusr7,',

“usr8",“usr8”,

};

fnode*initfile(charfilename[],intisdir);

voidcreateroot();

intrun();

intfindpara(char*topara);

boolchklogin(char*users,char*pwd);

voidhelp();

intmkdir();

intcreate();

intread();

intwrite();

intdel();

intcd();

intdir();

fnode*root,*recent,*temp,*ttemp;

char

para[PARA_LENGTH],command[COMMAND_LENGTH],lemppara[PARA_LENG

TH],recentpara[PARA_LENGTH];

〃创建文件与目条结点

fnode*initfilc(charfilename」,intisdir)

(

fnode*node=newfnode;

strcpy(node->filename,filename);

node->isdir=isdir;

node->isopen=();

node->parent=NULL;

nodc->child=NULL;

node->prev=NULL;

node->next=NULL;

returnnode;

)

〃创建文件存储结点

voidcreateroot()

(

recent=root=initfile(V",1);

root->parent=NULL;

root->chi!d=NULL;

root->prev=root->next=NULL;

strcpy(para,,7");

)

intmkdir()

(

temp=initfileC,M);

cin»temp->filename;

if(recent->child==NULL)

(

tcmp->parent=recent;

temp->child=NULL;

rcccnt->child=tcmp;

temp->prev=temp->next=NULL;

)

else

(

ttemp=recent->child;

while(ttcmp->next)

(

ttemp=ttemp->next;

if(strcinp(ttemp->filename,temp->filename)==()&&ttemp->isdir==l)

{

printf("对不起,目录已存在!)

return1;

)

)

ttemp->next=temp;

temp->parent=NLJLL;

lemp->child=NULL;

temp->prev=ttemp;

temp->next=NULL;

)

return1;

)

intcreate()

(

temp=initfileC,",0);

cin»tcmp->filcnamc;

cin»temp->content;

if(reccnt->child==NULL)

(

temp->parent=recent;

temp->child=NULL;

recent->child=temp;

temp->prev=temp->next=NULL;

coutvv”文件建立成功!Nvendl;

else

ttemp=recent->child;

while(ttemp->next)

(

ttemp=ttemp->next;

if(strcmp(ttcmp->filcnamc,tcmp->filcnamc)==O&&ttcmp->isdir==O)

(

prinlf("对不起,文件已存在!)

return1;

1

1

ttemp->next=temp;

tcmp->parent=NULL;

temp->child=NULL;

temp->prev=ttemp;

temp->next=NULL;

coui<<”文件建立成功!”《endl;

I

return1;

)

intdir()

(

inti=Oj=O;

temp二newfnode;

temp=recent;

if(temp!=root)

{cout«°\<DIR>,,«H..,,«endl;i++;)

if(temp->chiId==NULL)

(

cout«nTotal:"<<"directors"«i«"filesn«j«endl;

return1;

1

temp=temp->child;

whilc(tcmp)

(

if(temp->isdir)

{cout«"<DIR>\n«teinp->filename«endl;i+4-;}

else

{cout«"<FILE>"«temp->filename«endl;j+4-;j

temp=temp->next;

)

cout«MTotal:"«"directors*'<<i<<"files,'«j«endl;

intread()

charfilename[FILENAME_LENGTH];

cin»filenamc;

if(recent->child==NULL)

(

coutcv"文件不存在!H«endl;

return1;

)

if(strcmp(recent->child->filename,fiiename)==O)

(

cout«recent->child->content«endl;

return1;

)

else

(

lemp=recent->child;

while(temp->next)

(

if(strcmp(tcmp->ncxt->filcname,filcnamc)==O)

{cout«temp->next->content«endl;

return1;)

}

cout«n文件不存在!n«endl;

intwrite()

(

charfilename[FILENAME_LENGTH];

cin»filename;

if(recent->child==NULL)

(

cout<v"文件不存在!"《cndl;

return1;

)

if(strcinp(recent->child->filename,fiIename)==O)

(

recent->child->isopen=l;〃设置文件标记为打开

cin»recent->child->content;

recent->child->isopen=0;〃设置文件标记为关闭

coutvv”文件写入成功!”vvendl;

return1;

else

temp=recent->child;

while(temp->next)

(

if(strcmp(tcmp->ncxt->filcnamc,filcnamc)==O)

(

recent->chikl->isopen=l;〃设置文件标记为打开

cin»temp->next->content;

recenl->child->isopen=0;〃设置文件标记为关闭

coutvv”文件写入成功!”vvendl;

return1;}

)

cout<<"文件不存在!"<<endl;

)

}

intcd()

{chartopara[PARA_LENGTH];

cin»topara;

if(strcmp(topara,H")==0)

(

inti;

while(recent->prev)

recent=recent->prev;

if(recent->parent)

(

rcccnt=rcccnt->parcnt;

)

i=strlen(para);

while(para[i]]=7'&&i>0)i-;

if(i!=0)

para[i]='\0';

else

para[i+lJ='\O';

)

else

(

findpara(topara);

)

return1;

I

intfindpara(char*topara)

(

inti=0;

intsign=l;

if(strcmp(topara,'7")==0)

(

recent=root;

strcpy(para,'7n);

return1;

)

temp二recent;

strepy(temppara,para);

if(topara[0]=='/')

(

recent=root->child;

i++;

strcpy(para/7");

)

else

{

if(recent!=NULL&&recent!=root)

strcaUpara,"/1');

if(rcccnt&&rcccnt->child)

(

if(recent->isdir)

recent=recent->child;

else

(

prinlf("路径错误!\nn);

return1;

)

)

)

while(i<=strlen(topara)&&recent)

(

intj=O;

if(topara[i]==7'&&rcccnt->child)

(

i++;

if(recent->isdir)

recent=recent->child;

else

地足1出'路径错误5");

return0;

)

strcat(para,,7u);

while(topara[i]!=7,&&i<=strlen(topara))

recentpara|j]=topara[i];

i++;j++;

)

rcccntpara[j]=,\O';

while((strcmp(recent->filename,recentpara)!=O||(recent->isdir!=l))&&

recent->nexl!=NULL)

(

recent=recent->next;

)

if(strcmp(recent->filename,recentpara)==O)

(

if(recent->isdir==O)

{strcpy(para,temppara);

recent=temp;

primf("是文件不是目录。\n");

return0;

)

strcat(para,rcccnt->filcnamc);

)

if(strcmp(recent->filename,recentpara)!=O||recent==NULL)

(

strcpy(para,temppara);

recent=temp;

primf("输入路径错误\n");

return0;

)

)

return1;

)

intdel()

(

charfilcnamc[FlLENAME_LENGTHJ;

cin»filename;

temp=newfnode;

if(recent->child)

(

temp=recent->child;

while(temp->next&&(strcmp(temp->filename,filename)!=0||temp->isdir!=0))

temp=temp->next;

if(strcmp(temp->filename,filename)!=O)

(

coutvv”不存在该文件!"«endl;

return0;

else

cout<<"不存在该文件IM«endl;

return0;

)

if(temp->parent==NULL)

(

temp->prev->next=temp->next;

if(temp->next)

tcmp->next->prev=temp->prev;

temp->prev=temp->next=NULL;

)

else

{

if(temp->next)

temp->next->parent=temp->parent;

temp->parent->child=temp->next;

)

deletetemp;

coutvv"文件已删除!"《endl;

)

boolchklogin(char*users,char*pwd)

(

inti;

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

(

if((strcmp(users,usrarray[i].name)==O)&&(strcmp(pwd,usrarray[i].pwd)==O))

returntrue;

1

returnfalse;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论