汤园园课程的设计.docx
- 文档编号:129562
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:48
- 大小:128.28KB
汤园园课程的设计.docx
《汤园园课程的设计.docx》由会员分享,可在线阅读,更多相关《汤园园课程的设计.docx(48页珍藏版)》请在冰豆网上搜索。
操作系统课程设计报告
题 目:
文件系统模拟实验
学生姓名:
学 号:
专业班级:
同组姓名:
X
指导教师:
熊 齐
设计时间:
2012.2.13~2012.2.26
指导老师意见:
评定成绩:
签名:
日期:
一、设计目的
该实验的目的是通过学习文件系统的模拟实验使我们能够更好的了解与掌握unix系统下的文件系统的基本设计原理,及unix系统下的基本操作方法,另外,通过这次实验能够提高我们的实践动手能力,以及团队合作分工能力。
总之,该实验的主要目的是在掌握基本原理及基本方法的情况下,锻炼我们的实际操作能力。
二、设计内容
(1)概述
为LINUX设计一个简单的二级文件系统。
要求做到以下几点:
1、可以实现下列几条命令(至少4条)。
Login 用户登录
Dir 列文件目录
Create 创建文件
Delete 删除文件
Open 打开文件
Close 关闭文件
Read 读文件
Write 写文件
2、列目录时要列出文件名、物理地址、保护码和文件长度。
3、源文件可以进行读写保护。
(2)设计原理和系统总体功能框架图
设计原理:
首先本文件系统采用两级目录,其中第一级对应于用户账户,第二级对应于用户账户下的文件。
另外,为了简单本文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
另外该文件系统依据以下数据结构及主要函数而设计的。
【1】主要的一些数据结构
1)i节点
structinode
{structinode*i_forw;structinode*i_back;chari_flag;
unsignedinti_ino; /*磁盘i节点标号*/
unsignedinti_count; /*引用计数*/
unsigned short di_number; /*关联文件数,当为0时,则删除该文件*/
unsigned short di_mode; /*存取权限*/
unsigned short di_uid; /*磁盘i节点用户id*/
unsigned short di_gid; /*磁盘i节点组id*/unsigned int di_addr[NADDR]; /*物理块号*/
2)磁盘i节点
structdinode
{ unsigned short di_number; /*关联文件数*/unsigned short di_mode; /*存取权限*/
unsigned short di_uidunsigned short di_gid;
unsigned long di_size; /*文件大小*/unsigned int di_addr[NADDR]; /*物理块号*/
}
3)目录项结构structdirect
{ char d_name[DIRSIZ]; /*目录名*/unsigned int d_ino; /*目录号*/
}
4)超级块structfilsys
{ unsignedshort s_isize; /*i节点块块数*/unsignedlong s_fsize; /*数据块块数*/
unsignedint s_nfree; /*空闲块块数*/
unsignedshort s_pfree; /*空闲块指针*/unsignedint s_free[NICFREE]; /*空闲块堆栈*/unsignedint s_ninode; /*空闲i节点数*/
unsignedshort s_pinode; /*空闲i节点指针*/unsignedint s_inode[NICINOD]; /*空闲i节点数组*/unsignedint s_rinode; /*铭记i节点*/
char s_fmod; /*超级块修改标记*/
}
5)用户密码struct pwd
{ unsigned short p_uid;unsigned short p_gid;charpassword[PWOSIZ];
};
6)目录structdir
{ struct direct direct[DIRNUM];intsize;
};
7)查找内存i节点的hash表
structhinode
{ struct inode *i_forw;
};
8)系统打开表structfile
{ char f_flag; /*文件操作标志*/unsigned int f_count; /*引用计数*/
struct inode *f_inode; /*指向内存i节点*/
unsigned long f_off; /*读/写指针*/
};
9)用户打开表structuser
{ unsignedshortu_default_mode;
unsignedshortu_uid; /*用户标志*/
unsignedshortu_gid; /*用户组标志*/unsignedshortu_ofile[NOFILE]; /*用户打开表*/
};
【2】主要的一些函数
1、i节点内容获取函数iget()
2、i节点内容释放函数iput()3、目录创建函数mkdir()
4、目录搜索函数namei()
5、磁盘块分配函数balloc()6、磁盘块释放函数bfree()
7、分配i节点区函数ialloc()8、释放i节点区函数ifree()
9、搜索当前目录下文件的函数iname()10、访问控制函数access()
11、显示目录和文件用函数_dir()
12、改变当前目录用函数chdir()
13、打开文件函数open()14、创建文件函数create()15、读文件用函数read()16、写文件用函数write()17、用户登录函数login()
18、用户退出函数logout( )19、文件系统格式化函数format()
20、进入文件系统函数install()21、关闭文件系统函数close()
22、退出文件系统函数halt()23、文件删除函数delete()
login
选择操作
Dir
Chdir
Mkdir
Creat
Write
Close
Delete
Delete
logout
halt
结束
(3)详细设计及少数重要编码的说明
【1】头文件filesys.h的设计:
它包括文件系统中的数据结构,常量,全局变量等申明。
例如:
1)i节点
structinode
{structinode*i_forw;structinode*i_back;chari_flag;
unsigned int i_ino; /*磁盘i节点标号*/
unsigned int i_count; /*引用计数*/
unsigned short di_number; /*关联文件数,当为0时,则删除该文件*/
unsigned short di_mode; /*存取权限*/
unsigned short di_uid; /*磁盘i节点用户id*/
unsigned short di_gid; /*磁盘i节点组id*/unsigned int di_addr[NADDR]; /*物理块号*/
2)常量的设置:
#defineBLOCKSIZ512
#defineSYSOPENFILE40
#defineDIRNUM128
#defineDIRSIZ14
#definePWDSIZ12
#definePWDNUM32
#defineNOFILE20
#defineNADDR10
#defineNHINO128 /*mustbepowerof2*/#defineUSERNUM10
#defineDINODESIZ32
【2】主函数模块(main.c):
其中重要部分代码:
printf("begin:
\n");
printf("\nDoyouwanttoformatthedisk?
\n");if(getchar()=='y')
printf("\nFormatwillerasecontextonthedisk\nAreyousure?
\n");getchar();
if((c=getchar())=='y')
{
printf("formatstarts\n");format();iHave_formated=1;printf("formatended\n");
}
else
printf("receivedchar:
%cfromstdin\n",c);printf("step1ended\n");
install();
printf("step2ended\n");
_dir();
printf("step3ended\n");login(2118,"abcd");user_id=0;
printf("step4ended\n");
mkdir("a2118");
_dir();
printf("step5-1ended\n");chdir("a2118");
_dir();
printf("step5-2ended\n");
ab_fd1=creat(2118,"ab_file0.c",01777);
_dir();
printf("step6ended\n");
buf=(char*)malloc(BLOCKSIZ*6+5);printf("step7ended\n");write(2118,ab_fd1,buf,BLOCKSIZ*6+5);printf("step8ended\n");close(2118,ab_fd1);
【3】初始化磁盘格式模块(format.c):
其中的一下重要的算法:
/*给main()中的密码表pwd[PWDNUM]填入内容*/pwd[0].p_uid=2116;pwd[0].p_gid=03;strcpy(pwd[0].password,"dddd");pwd[1].p_uid=2117;pwd[1].p_gid=03;strcpy(pwd[1].password,"bbbb");pwd[2].p_uid=2118;pwd[2].p_gid=04;strcpy(pwd[2].password,"abcd");pwd[3].p_uid=2119;pwd[3].p_gid=04;strcpy(pwd[3].password,"cccc");pwd[4].p_uid=2220;pwd[4].p_gid=05;strcpy(pwd[4].password,"eeee");
开始
Buf是为null?
否
初始化用户登录
创建主目录和副目录
初始化超级块
结束
该模块的流程图:
是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汤园园 课程 设计