操作系统设计一个二级文件系统报告样本.docx

上传人:b****1 文档编号:10883852 上传时间:2023-05-28 格式:DOCX 页数:19 大小:139.16KB
下载 相关 举报
操作系统设计一个二级文件系统报告样本.docx_第1页
第1页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第2页
第2页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第3页
第3页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第4页
第4页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第5页
第5页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第6页
第6页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第7页
第7页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第8页
第8页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第9页
第9页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第10页
第10页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第11页
第11页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第12页
第12页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第13页
第13页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第14页
第14页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第15页
第15页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第16页
第16页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第17页
第17页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第18页
第18页 / 共19页
操作系统设计一个二级文件系统报告样本.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统设计一个二级文件系统报告样本.docx

《操作系统设计一个二级文件系统报告样本.docx》由会员分享,可在线阅读,更多相关《操作系统设计一个二级文件系统报告样本.docx(19页珍藏版)》请在冰点文库上搜索。

操作系统设计一个二级文件系统报告样本.docx

操作系统设计一个二级文件系统报告样本

操作系统设计一个二级文件系统报告

操作系统(2014年秋季学期)

序号:

8

实验报告

 

系别:

计算机科学与技术

班级:

信安12-1班

姓名:

李勇

学号:

实验名称:

进程调度

总成绩:

评语:

 

日期:

《操作系统》实验报告

实验名称

进程调度

实验序号

1

实验日期

2014.1.2

实验人

李勇

一、实验目的、要求与环境

1.目的:

编写一个简单的二级文件系统实现程序,加深对文件系统的内部功能和内部实现的理解。

 

2.要求:

(1)用C语言(或其它语言,如Java)实现一个简单的二级文件系统设计,加深对文件系统的内部功能和内部实现的理解。

要求模拟采用二级目录结构的磁盘文件系统的文件操作,实现用户的创建、查询、登录、删除,和文件的添加、删除、打开、关闭、读、写等基本命令,用在屏幕上输入命令来模拟用户程序中调用的文件操作。

(2)为了清楚地观察文件的管理过程,程序应将每个文件操作的结果显示出来。

(3)分析程序运行的结果,谈一下自己的收获。

 

3.环境:

1.硬件设备:

PC机一台

2.软件环境:

安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。

二、相关背景知识

最基本的文件操作

(1)创建文件

在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项。

目录项中应该记录新文件的文件名及其在外存的地址等属性。

(2)删除文件

当已不再需要某文件时,可将它从文件系统中删除。

在删除时,系统应该先从目录中找到要删除的文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。

(3)读文件

在读一个文件时,须在相应的系统调用中给出文件名和应该读入的内存目标地址。

此时,系统同样要查找目录,找到制定的目录项,从中得到被读文件在外存中的位置。

在目录项中,还有一个指针用于对文件的读/写。

(4)写文件

在写一个文件时,须在相应的系统调用中给出该文件名及该文件在内存中的(源)地址。

为此,也同样须先查找目录,找到指定文件的目录项,在利用目录中的写指针进行写操作。

(5)截断文件

如果一个文件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除,再重新创建一个新文件。

但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为0,或说放弃原有的文件内容。

(6)设置文件的读/写位置

前述的文件读/写操作,都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。

设置文件读/写位置的操作,用于设置文件读/写指针的位置,以便每次读/写文件时,不是从其始端而是从所设置的位置开始操作。

也正因如此,才能改顺序存取为随机存取。

三、实验设计说明

(写你实验相关的设计,别写这么少,多写点。

本次实验采用C语言模拟二级文件系统,可以在多用户环境下实现用户的创建、查询、登录、删除,和文件的添加、删除、打开、关闭、读、写等基本操作,很好地模拟了操作系统对文件的管理过程。

四、实验设计的流程图

(写你实验相关的设计流程图,下面的流图是有问题的。

四、程序代码

(换上你自己的程序代码,下面的程序代码是有问题的。

#include"stdlib.h"

#include

#defineNULL0

intcount=0;

structfile{

charname[10];

intcode;//保护码

intsize;

charpwrite;//读写指针

};

structuser{

charname[10];

structfile*list;//目录指针

};

/////////////////////////////////////////////////////////////

structfileone[10]={{"a1",0,10,0},{"a2",2,10,0},{"a3",1,10,0},

{"a4",2,10,0},{"a5",2,10,0},{"a6",2,10,0},{"a7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfiletwo[10]={{"b1",0,10,0},{"b2",2,10,0},{"b3",1,10,0},

{"b4",2,10,0},{"b5",2,10,0},{"b6",2,10,0},{"b7",2,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfilethree[10]={{"c1",0,10,0},{"c2",2,10,0},{"c3",1,10,0},

{"c4",2,10,0},{"c5",2,10,0},{"c6",2,10,0},{"c7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfilefour[10]={{"d1",0,10,0},{"d2",2,10,0},{"d3",1,10,0},

{"d4",2,10,0},{"d5",2,10,0},{"d6",2,10,0},{"d7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfilefine[10]={{"e1",0,10,0},{"e2",2,10,0},{"e3",1,10,0},

{"e4",2,10,0},{"e5",2,10,0},{"e6",2,10,0},{"e7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfilesix[10]={{"f1",0,10,0},{"f2",2,10,0},{"f3",1,10,0},

{"f4",2,10,0},{"f5",2,10,0},{"f6",2,10,0},{"f7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfileseven[10]={{"g1",0,10,0},{"g2",2,10,0},{"g3",1,10,0},

{"g4",2,10,0},{"g5",2,10,0},{"g6",2,10,0},{"g7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfileeight[10]={{"h1",0,10,0},{"h2",2,10,0},{"h3",1,10,0},

{"h4",2,10,0},{"h5",2,10,0},{"h6",2,10,0},{"h7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfilenine[10]={{"j1",0,10,0},{"j2",2,10,0},{"j3",1,10,0},

{"j4",2,10,0},{"j5",2,10,0},{"j6",2,10,0},{"j7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfileten[10]={{"k1",0,10,0},{"k2",2,10,0},{"k3",1,10,0},

{"k4",2,10,0},{"k5",2,10,0},{"k6",2,10,0},{"k7",1,10,0},{"0",0,0,0},

{"0",0,0,0},{"0",0,0,0}};

structfileUFD[10];

structfileAFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};

///////////////////////////////////////////////////////////////

structuseruse[10]={{"number1",one},{"number2",two},{"number3",three},{"number4",four},

{"number5",fine},{"number6",six},{"number7",seven},{"number8",eight},{"number9",nine},

{"number10",ten}};

structuserMFD[1]={{"0",0}};

///////////////////////////////////////////////////////////////////

voidrunning();

voiddelet();

voidwrite();;

voidopen();

voidclose();

voidbye();

voidread();

voidcreate();

voidinput();

///////////////////////////////////////////////////////////////////

usingnamespacestd;

voidmain()

{input();

running();

cout<<"操作己结束"<

}

 

/////////////////////////////////////////////////////////////

voidrunning()

{charorder;

inti;

cout<

cout<<"用户的所有文件如下:

"<

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

{

cout<

}

cout<

cout<<"请选择操作命令(输入代号):

"<

cout<<"c-created-deleteo-opens-closer-readw-writeb-byet.exit(重选用户)"<

cout<

cout<<"请输入命令:

"<

cin>>order;

switch(order)

{case'c':

create();break;

case'd':

delet();break;

case'o':

open();break;

case's':

close();break;

case'r':

read();break;

case'w':

write();break;

case'b':

bye();break;

case't':

input();break;

default:

cout<<"输入命令出错,请重输"<

}

 

}

///////////////////////////////////////////////////////////////

voiddelet()

{charname[10];

inti,flag;

do

{cout<<"请输入文件名:

"<

cin>>name;

flag=0;

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

{if(strcmp(UFD[i].name,name))//如果没有这个文件

{

flag=1;

//break;

}

else

{flag=0;

strcpy(UFD[i].name,"0");//清空文件

UFD[i].code=0;

UFD[i].pwrite=0;

UFD[i].size=0;

cout<<"该文件己被删除"<

break;

}

}

if(flag==1)

cout<<"无此文件,请重新输入"<

}while(flag==1);

cout<

running();

}

///////////////////////////////////////////////

voidopen()

{charname[10];

inti,j,flag;

if(count==5)

{cout<<"运行文件队列己满"<

running();

}

else

{do

{cout<<"请输入文件名:

"<

cin>>name;

flag=0;

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

{if(strcmp(UFD[i].name,name))//如果没有这个文件

{

flag=1;

//break;

}

else

{flag=0;

break;

}

}

if(flag==1)

cout<<"无此文件,请重新输入"<

}while(flag==1);

for(j=0;j<5;j++)

{if(strcmp(AFD[j].name,name))//如果没有这个文件

flag=1;

else

{flag=0;

break;

}

}

if(flag==1)

for(j=0;j<5;j++)

{if(!

strcmp(AFD[j].name,"0"))

{AFD[j]=UFD[i];

cout<<"文件己打开"<

count++;

break;

}

}

elsecout<<"该文件己经在打开队列中"<

cout<

running();

 

}

}

////////////////////////////////////////////////

voidclose()

{charname[10];

intj,flag;

cout<<"请输入文件名:

"<

cin>>name;

flag=0;

for(j=0;j<5;j++)

{if(strcmp(AFD[j].name,name))//如果没有这个文件

{

flag=1;

//break;

}

else

{flag=0;

strcpy(AFD[j].name,"0");//清空文件

AFD[j].code=0;

AFD[j].pwrite=0;

AFD[j].size=0;

cout<<"运行队列中的该文件己被关闭"<

break;

}

}

if(flag==1)

cout<<"运行队列中无此打开的文件,请重新操作"<

cout<

running();

 

}

//////////////////////////////////////////////

voidbye()

{inti,j;

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

{for(j=0;j<10;j++)

{if(!

strcmp(AFD[i].name,UFD[j].name))

{UFD[i]=AFD[i];

break;

}

}

}

cout<<"文件目录己保存"<

cout<

}

//////////////////////////////////////////

voidread()

{charname[10];

intj,flag=0;

cout<<"请输入文件名:

"<

cin>>name;

for(j=0;j<5;j++)

{

if(!

strcmp(AFD[j].name,name))//如果AFD有这个文件

{flag=1;break;

}

}

if(flag==1)

if(AFD[j].code==0||AFD[j].code==2)

{AFD[j].pwrite='R';

cout<<"文件的状态是正在读"<

}

elsecout<<"无权限写此文件"<

else

{cout<<"运行队列中无此文件,请先打开文件"<

}

cout<

running();

 

}

////////////////////////////////////////////////////////

voidwrite()

{charname[10];

intj,flag=0;

cout<<"请输入文件名:

"<

cin>>name;

for(j=0;j<5;j++)

{

if(!

strcmp(AFD[j].name,name))//如果AFD有这个文件

{flag=1;break;

}

}

if(flag==1)

if(AFD[j].code==1||AFD[j].code==2)

{AFD[j].pwrite='W';

cout<<"文件的状态是正在写"<

}

elsecout<<"无权限写此文件"<

else

{cout<<"运行队列中无此文件,请先打开文件"<

}

cout<

running();

}

/////////////////////////////////////////////

voidcreate()

{charname[10];

inti,j=0,flag;

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

{if(!

strcmp(UFD[i].name,"0"))

j++;

}

if(j>9)

{cout<<"文件夹己满,请先删除"<

running();

}

else

{

do

{cout<<"请输入文件名:

"<

cin>>name;

flag=0;

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

{if(!

strcmp(UFD[i].name,name))//如果有重名的文件

{cout<<"文件名重复,请重新输入"<

flag=1;break;

}

}

}while(flag==1);

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

{if(!

strcmp(UFD[i].name,"0"))//找到第一个空的文件

{strcpy(UFD[i].name,name);

do

{

cout<<"请输入保护码(选择-2,0-可读,-可写,-可读写):

"<

cin>>UFD[i].code;

if(UFD[i].code!

=0&&UFD[i].code!

=1&&UFD[i].code!

=2)

cout<<"输入错误,重新输入保护码"<

}while(UFD[i].code!

=0&&UFD[i].code!

=1&&UFD[i].code!

=2);

cout<<"请输入文件长度(选择数字):

"<

cin>>UFD[i].size;

cout<<"己建立文件"<

break;

}

}

running();

}

}

////////////////////////////////////////////////////////////////////////////////////////////

voidinput()

{charname;

inti;

cout<

cout<<"请选择以下用户名(输入数字):

"<

cout<<"1.one2.two3.three4.four5.fine6.six7.seven8.eigh9.nine0.ten"<

cout<<"*******************************************************************************"<

cout<<"请输入用户名:

";

cin>>name;

switch(name)

{case'1':

for(i=0;i<10;i++)UFD[i]=one[i];MFD[0]=use[1];running();break;

case'2':

for(i=0;i<10;i++)UFD[i]=two[i];MFD[0]=use[1];running();break;

case'3':

for(i=0;i<10;i++)UFD[i]=three[i];MFD[0]=use[2];running();break;

case'4':

for(i=0;i<10;i++)UFD[i]=four[i];MFD[0]=use[3];running();break;

case'5':

for(i=0;i<10;i++)UFD[i]=fine[i];MFD[0]=use[4];running();break;

case'6':

for(i=0;i<10;i++)UFD[i]=six[i];MFD[0]=use[5];running();break;

case'7':

for(i=0;i<10;i++)UFD[i]=seven[i];MFD[0]=use[6];running();break;

case'8':

for(i=0;i<10;i++)UFD[i]=eight[i];MFD[0]=use[7];running();break;

case'9':

for(i=0;i<10;i++)UFD[i]=nine[i];MFD[0]=use[8];running();break;

case'0':

for(i=0;i<10;i++)UFD[i]=ten[i];MFD[0]=use[9];running();break;

default:

cout<<"输入用户名出错"<

}

}

五、编译过程截图

(下面是一个例子,换上你自己的图)

六、测试用例

(下面是一个例子,换上你自己的)

文字叙述一下测试过程的实例。

如先创建用户***、再产

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2