操作系统实验五文件系统设计

2018-12-19 23:12

南昌航空大学实验报告

课程名称:操作系统 实验名称: 文件系统设计 班 级:090451 学生姓名: 杨望 学号:09045131 指导教师评定: 签 名:

一、实验目的

通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

二、实验内容

为linux系统设计一个简单的二级文件系统。要求做到以下几点:

(1)可以实现下列几条命令(至少4条); login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件

(2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

三、实验提示

(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目

录和子目录都以文件的形式存放于磁盘,这样便于查找和修改;

(2)用户创建的文件,可以编号存储于磁盘上。如file0,file1,file2...并以编号作为物理地址,在目录中进行登记。

四、实验源代码设计

<程序设计> (1)设计思想

本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。对这些内容感兴趣的读者,可以在本系统的程序基础上进行扩充。 (2)主要数据结构

a) I节点

struct inode{

struct inode *i_forw; struct inode *i_back; char I_flag;

1

unsigned int i_into; /*磁盘i节点标号*/ unsigned int i_count; /*引用计数*/

unsigned short di_number; /*关联文件书,当为0时,则删除该文件*/ unsigned short di_mode; /*存取权限*/

unsigned short di_uid; /*磁盘i节点用户*/ unsigned short di_gid; /*磁盘i节点组*/ Unsigned int di_addr[NADDR]; /*物理块号*/

b) 磁盘i结点 Struct dinode

{

unsigned short di_number; /* unsigned short di_mode; /* unsigned short di_uid; unsigned short di_gid;

unsigned long di_size; /*unsigned int di_addr[NADDR]; /*c)目录项结构 Struct direct

{

char d_name[DIRSIZ]; /* unsigned int d_ino; /*}

d)超级块 Struct filsys

{

unsigned short s_isize; /*i unsigned long s_fsize; /* unsigned int s_nfree; /* unsigned short s_pfree; /* unsigned int s_free[NICFREE]; /* unsigned int s_ninode; /* unsigned short s_pinode; /* unsigned int s_inode[NICINOD]; /* unsigned int s_rinode; /* char s_fmod; /*};

e)用户密码 Struct pwd

{

unsigned short P_uid; unsigned short P_gid; char passward[PWOSIZ]; }

f) 目录

关联文件数*/ 存取权限*/ 文件大小*/ 物理块号*/ 目录名*/ 目录号*/ 节点块块数*/ 数据块块数*/ 空闲块块数*/ 空闲块指针*/ 空闲块堆栈*/ 空闲i节点数*/ 空闲i节点指针*/ 空闲i节点数组*/ 铭记i节点*/ 超级块修改标志*/ 2

Struct dir {

strut direct direct[DIRNUM]; int size; }

g).查找i内存节点的hash表 Struct hinode {

strut inode *iforw; }

h).系统打开表 Struct file {

char f_flag; /*文件操作标志*/

unsigned int f_count; /*引用计数*/

struct inode *f_inode; /*指向内存节点*/ unsigned long f_off; /*读/写指针*/ }

i)用户打开表 Struct user {

unsigned short u_default_mode; unsigned short u_uid; /*用户标志*/ unsigned short u_gid; /*用户组标志*/

unsigned short u_ofile[NOFILE]; /*用户打开表*/ }

3.主要函数

(1)i节点内容获取函数iget()(详细描述略)。 (2)节点内容释放函数iput()(详细描述略)。 (3)目录创建函数mkdir()(详细描述略)。

(4)目录搜索函数namei()(详细描述略)。 (5)磁盘块分配函数balloc()(详细描述略)。 (6)磁盘块释放函数bfree()(详细描述略)。 (7)分配i节点区函数ialloc()(详细描述略)。 (8)解释结点区函数ifree( )(详细描述略)。 (9)搜索当前目录下文件的函数iname( )(详细描述略)。 (10)访问控制函数access( )(详细描述略)。 (11)显示目录和文件函数_dir( )(详细描述略)。 (12)改变当前目录用函数chdir( )(详细描述略)。 (13)打开文件函数open( )(详细描述略)。 (14)创建文件函数create( )(详细描述略)。 (15)读文件用函数read( )(详细描述略)。 (16)读文件用函数write( )(详细描述略)。

(17)用户登陆函数login( )(详细描述略)。

3

(18)用户退出函数logout( )(详细描述略)。 (19)文件系统格式化函数format( )(详细描述略)。 (20)进入文件系统函数install( )(详细描述略)。 (21)关闭文件函数close( )(详细描述略)。 (22)退出文件系统函数halt( )(详细描述略)。 (23)文件删除函数delecte( )(详细描述略)。 4.主程序说明

begin

Step1 对磁盘进行格式化 Step2 调用install(),进入文件系统 Step3 调用_dir(),显示当前目录 Step4 调用login(),用户注册

Step5 调用mkdir()和chdir()创建目录 Step6 调用create(),创建文件0 Step7 分配缓冲区 Step8 写文件0

Step9 关闭文件0和释放缓冲

Step10 调用mkdir()和chdir()创建子目录 Step11 调用create(),创建文件1 Step12 分配缓冲区 Step13 写文件1

Step14 关闭文件1和释放缓冲

Step15 调用chdir将当前目录移到上一级 Step16 调用create(),创建文件2 Step17 分配缓冲区 Step18 调用write(),写文件2 Step19 关闭文件1和释放缓冲 Step20 调用delecte(),删除文件0 Step21 调用create(),创建文件1

Step22 为文件3分配缓冲区 Step23 调用write(),写文件2 Step24 关闭文件3并释放缓冲区 Step25 调用open(),打开文件2 Step26 为文件2分配缓冲 Step27 写文件3后关闭文件3 Step28 释放缓冲

Step29 用户退出(logout) Step30 关闭(halt) End

由上述的描述过程可知,该文件系统实际是为用户提供一个解释执行相关命令的环境。主程序中的大部分语句都被用来执行相应的命令。 <程序>

编写管理文件makefile

本文件系统程序用编写makefile管理工具进行管理。其内容如下:

4

makefile

filsys:main.o iallfre.o ballfre.o name.o access.o log.o close.o creat.o delete.o dir.o

open.o rdwt.o format.o install.o halt.o cc-o filsys main.o iallfre.o ballfre.o

name.o access.o log.o close.o creat.o delete.o dir.o open.o format.o install.o halt.o

main.o:main.c filesys.h

cc-c main.c

igetput.o: igetput.c filesys.h cc-c igetput.c

iallfre.o: iallfre.c filesys.h

cc-c iallfre.c

ballfre.o: ballfre.c filesys.h cc-c ballfre.c name.o:name.c filesys.h

cc-c name.c

access.o:access.c filesys.h cc-c access.c log.o:log.c filesys.h

cc-c log.c

close.o:close.c filesys.h

cc-c close.c

creat.c:creat.c filesys.h cc-c creat.c

delete.o:delete.c filesys.h cc-c delete.c dir.o:dir.c filesys.h cc-c dir.c

open.o:open.c filesys.h cc-c open.c

rdwt.o:rdwt.c filesys.h cc-c rdwt.c

format.o:format.c filesys.h cc-c format.c

install.o: install.c filesys.h

cc-c install.c halt.o:halt.c cc-c halt.c 四、实验小结

通过实验了解了多用户文件系统的组成与结构,加深理解了文件系统的内部功能及内部实现。

5


操作系统实验五文件系统设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《国际金融》远程模拟试题-2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: