操作系统设计一个二级文件系统报告样本.docx
- 文档编号:24500955
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:19
- 大小:139.16KB
操作系统设计一个二级文件系统报告样本.docx
《操作系统设计一个二级文件系统报告样本.docx》由会员分享,可在线阅读,更多相关《操作系统设计一个二级文件系统报告样本.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统设计一个二级文件系统报告样本
操作系统设计一个二级文件系统报告
操作系统(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<<"输入用户名出错"< } } 五、编译过程截图 (下面是一个例子,换上你自己的图) 六、测试用例 (下面是一个例子,换上你自己的) 文字叙述一下测试过程的实例。 如先创建用户***、再产
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 设计 一个 二级 文件系统 报告 样本