操作系统上机实验2Word格式.docx
- 文档编号:994996
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:25
- 大小:101.31KB
操作系统上机实验2Word格式.docx
《操作系统上机实验2Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验2Word格式.docx(25页珍藏版)》请在冰点文库上搜索。
结束
果。
J=P[K]
J
输出“OUT
输出“IN
P[K]=L
修改页表
程序:
#include<
stdio.h>
#include<
iostream.h>
string.h>
math.H>
#defineSIZE7
#defineM4
structpagetable_type
{
intpgno;
intflag;
intmemblockno;
intmodiflag;
intdiskplace;
};
structopefile_type
charopera;
intpgno;
intpgaddr;
charflname[20];
voidsave()
FILE*fps;
inti=0;
structopefile_typeope;
if((fps=fopen(flname,"
wb"
))==NULL)
printf("
canotopenfile\n"
);
return;
}
请输入命令(cdd),输入空格为结束.\n"
cin>
>
ope.opera>
ope.pgno>
ope.pgaddr;
// scanf("
%c%d%d\n"
&
ope.opera,&
ope.pgaddr,&
ope.pgno);
printf("
ope.opera,ope.pgno,ope.pgaddr);
while((ope.opera!
='
e'
)&
&
(ope.opera!
E'
))
if(fwrite(&
ope,sizeof(opefile_type),1,fps)!
=1)printf("
filewriteerror\n"
请输入命令(cdd),输入e/E为结束.\n"
命令输入结束.\n"
fclose(fps);
voidreadm()
FILE*fpm;
structopefile_typeopem;
if((fpm=fopen(flname,"
rb"
文件打开错!
"
//exit(0);
if(fread(&
opem,sizeof(structopefile_type),1,fpm)!
=1)
if(feof(fpm))
// printf("
\nendoffile!
\n"
fclose(fpm);
return;
文件读错误."
while(!
(feof(fpm)))
opem.opera,opem.pgno,opem.pgaddr);
endoffile"
voidmain()
charcff;
structpagetable_typepgt[SIZE];
inttemp,l,k,j,counter=0;
intp[M];
命令文件是否存在?
Y/N?
cff=getchar();
请输入文件名:
scanf("
%s"
flname);
if((cff=='
n'
)||(cff=='
N'
文件不存在建立文件!
save();
readm();
for(temp=0;
temp<
SIZE;
temp+=1)
%s%d%s"
"
请输入页表的第"
temp,"
项的值(ddddd):
scanf("
%d%d%d%d%d"
pgt[temp].pgno,&
pgt[temp].flag,&
pgt[temp].memblockno,&
pgt[temp].modiflag,&
pgt[temp].diskplace);
if((fpm=fopen(flname,"
if(feof(fpm)){printf("
文件读错误.\n"
for(temp=0;
M;
temp++)p[temp]=temp;
k=0;
运行结果显示:
while(!
l=opem.pgno;
sb:
if(pgt[l].flag==1)
else
temp=pgt[l].memblockno*1024+opem.pgaddr;
if((opem.opera=='
s'
)||(opem.opera=='
S'
))pgt[l].modiflag=1;
第%d指令访问的绝对地址为%d\n"
counter+1,temp);
counter++;
%d%s\n"
l,"
页号"
j=p[k];
%d\n"
pgt[j].modiflag==1);
if(pgt[j].modiflag==1)
%s%d\n"
OUT:
j);
IN:
l);
p[k]=l;
pgt[j].flag=0;
pgt[l].flag=1;
pgt[l].memblockno=pgt[j].memblockno;
pgt[j].memblockno='
'
;
k=(++k==M?
0:
k);
gotosb;
fclose(fpm);
实验四 文件系统实验
本实验的目的是通过建立一个简单的多用户二级文件系统的设计,加深理解文件系统的内部功能和实现方式。
(1)掌握文件系统的管理。
(2)了解文件系统的功能
实现一个简单的多用户二级文件系统。
要求该文件系统具有以下功能:
① 用户登录
② 列文件目录
③ 创建文件
④ 删除文件
⑤ 打开文件
⑥ 关闭文件
⑦ 读文件
⑧ 写文件
命令格式
① 列文件目录格式
list
②创建文件命令格式
create(文件名,记录长度,文件属性)
③删除文件命令格式
delete(文件名)
④打开文件命令格式
open(文件名,打开方式)
⑤关闭文件命令格式
close(文件名)
⑥读文件命令格式
read(文件名,记录号)
⑦ 写文件命令格式
write(文件名,记录号)
使用的数据结构
一级目录(主目录MFD)
用户名
用户文件目
字符型
(20 整数型
录地址
二级目录(用户文件目录UFD)
文件名 文件属性
记录长度
文件地址
字符型(20)
字符型(10)
整数型
已打开文件名表(UOF)
文件名
文件属性 记录
状态(打开/ 读指针写指针
字符型(20 字符型(10整数型
整数型(1
整数型整数型
初始化目录表(
初始化已打开文件表(UOF输入用户名
是合法用户?
(在MFD
输入命令
分析命令
leteli
他
无此用户
调用
误
序 错
程
用
用 调
调用调
调用 调
nd 其
e
st
itede
readwr
lose
en c
reateop
c
主程序算法描述
“建立文件”算法描述
查该用户的UFD
无
在UFD
在UOF
有
UFD
找一磁盘空闲
块
空闲块的块号记为i
显示:
有同名文件,
显示
:
磁
“
打开文件算法描述
有 UFD 无
查用户的UOF
示:
UOF
无 有
文件属性与操作
是 否
该文件为建立
显
显
写指针=UOF
示
查该用户的UOF
该文件为建立状态
文件属性为“
顺序修改是
写到“
取出
记录文件连接字,修改“
写入找到的磁盘块中(用显示磁盘块号来模拟)
把记录信息
修改
找一空闲块
找出存放
写文件算法描述
有 无
从“
出送给用户(用显
按读长度把记录信息读
修改“
读文件算法描述
示磁盘块号来模拟)
文件为“
置文件
消除该文件在UOF
关闭文件算法描述
结束标志
删除文件算法描述
查该用户目录UFD
UFD
查该用户目录UOF
置文件结束标志
归还该文件所占的存储空间
消除该文件在UFD
显示“
列文件目录算法描述
对
输
实验用参考数据
主文件目录:
(最多10项)
uname(用户名)
uaddr(首地址)
user1
20
user2
60
user3
100
user4
140
user5
180
user6
220
user7
260
user8
300
user9
340
380
user10
用户文件目录:
(每个用户最多10个文件)
所属用户
fname
fattr
Record1
addrf
u1fi
r
10
22
u1f2
rw
24
u1f3
30
26
u2f1
25
62
u2f2
35
64
u3f1
15
102
u3f2
5
104
u5f1
40
142
u5f2
45
144
用户打开文件名表:
(每个用户最多6个)
record1
fstatue
readp
writep
1
70
50
80
#defineN10
#defineL10
#defineS6structmfd_type
char uname[20];
intuaddr;
structufd_type
charfname[20];
charfattr[10];
int recordl;
intaddrf;
structuof_type
intrecordl;
charfstatue;
//1:
建立0:
打开intreadp;
intwritep;
intfdph[N*L];
//存放文件在磁盘上的第一个空间编号intfdpt[N*L];
//存放文件在磁盘上的最末一个空间编号intdisk[400];
//存放磁盘空闲块号
intdiskt,diskh;
//空闲块的尾、首指针最末structmfd_typemfd[N];
structufd_typeufd[N*L];
structuof_typeuof[N*S];
inttemp,mi,ni,uno,ucounter;
voidcreate(charcfname[20],intcrecordl,charcfattr[10])
intcltemp1=uno*L,cltemp2=(uno+1)*L,frd;
while((cltemp1<
cltemp2)&
(strcmp(ufd[cltemp1].fname,cfname)!
=0))cltemp1++;
if(strcmp(ufd[cltemp1].fname,cfname)!
=0)
cltemp1=uno*L;
(strcmp(ufd[cltemp1].fname,"
)!
if(strcmp(ufd[cltemp1].fname,"
)==0)
frd=cltemp1;
cltemp1=uno*S;
cltemp2=(uno+1)*S;
(strcmp(uof[cltemp1].fname,"
if(strcmp(uof[cltemp1].fname,"
if(disk[diskh]!
=-1)
strcpy(uof[cltemp1].fname,cfname);
strcpy(uof[cltemp1].fattr,cfattr);
uof[cltemp1].recordl=crecordl;
uof[cltemp1].fstatue=1;
uof[cltemp1].readp=disk[diskh];
uof[cltemp1].writep=disk[diskh];
fdph[frd]=disk[diskh];
fdpt[frd]=disk[diskh];
strcpy(ufd[frd].fname,cfname);
strcpy(ufd[frd].fattr,cfattr);
ufd[frd].recordl=crecordl;
ufd[frd].addrf=disk[diskh];
diskh=disk[diskh];
%s\n"
文件建立成功!
elseprintf("
磁盘没有空间,不能建文件!
没有空的登记拦1,不能建文件"
没有空的登记拦2,不能建文件"
同名文件不能建立!
voidopen(charpfname[20],charooptype[10])
intcltemp1=uno*L,cltemp2=(uno+1)*L;
intcltemp3=uno*S,cltemp4=(uno+1)*S;
(strcmp(ufd[cltemp1].fname,pfname)!
if(strcmp(ufd[cltemp1].fname,pfname)==0)
while((cltemp3<
cltemp4)&
(strcmp(uof[cltemp3].fname,pfname)!
=0))cltemp3++;
if(strcmp(uof[cltemp3].fname,pfname)==0)//有文件
if(uof[cltemp3].fstatue==0)printf("
文件已打开!
elseprintf("
此文件正在建立,不能打开!
else//无文件
打开!
if(strcmp(ufd[cltemp1].fattr,ooptype)!
=0)printf("
操作不合法,不能
cltemp3++;
cltemp3=uno*S;
while ((cltemp3<
(strcmp(uof[cltemp3].fname,"
=0))
if(strcmp(uof[cltemp3].fname,"
在已开表中没有空拦,不能打开文件!
else
strcpy(uof[cltemp3].fname,pfname);
uof[cltemp3].recordl=ufd[cltemp1].recordl;
strcpy(uof[cltemp3].fattr,ufd[cltemp1].fattr);
uof[cltemp3].readp=ufd[cltemp1].addrf;
uof[cltemp3].writep=ufd[cltemp1].addrf;
uof[cltemp3].fstatue=0;
打开文件成功!
此文件已不存在,不能打开!
voidwrite(charwfname[20],intwrecordno)
(strcmp(uof[cltemp3].fname,wfname)!
if(strcmp(uof[cltemp3].fname,wfname))printf("
文件没有建立或打开,不能写"
//在已开
文件中没有次文件,不能写
else//文件建立或打开
if(uof[cltemp3].fst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 上机 实验