1、操作系统课程设计 一个多用户多级目录结构文件系统设计与实现一个多用户多级目录结构文件系统设计与实现 姓名 学号 班级 户头名 net15002 电话 电子邮件地址 QQ号 源程序所在路径名 ./filesystem/ 编译环境 Linux 运行环境 Linux 超级用户口令 iczj:iczj(用户名:密码) 编译方法 g+ -o filesystem.out filesystem.cpp 一一、设计思想说明、设计思想说明 1 设计环境 课程设计的环境是Linux 操作系统。 设计时可利用Linux 提供的文件管理的功能调 用,建立一个模拟的文件系统。基本思想是,在Linux 系统中创建一个较
2、大容量的文件,作 为所设计的文件系统的“文件卷”,并利用Linux 系统的功能调用,编写各程序模块。 2、文件卷的组织 以 1M 的存储器空间作为文件空间,空间“分块”,编号为 0#(BLKMAX-1)# 。“分 块”就是规定对文件卷的读/写以块为单位,每次读/写的起点为块大小的整倍数。分块主要 体现在文件卷的读/写模块上。 # define BSIZE 512 /* 512bytes/块 */ # define BLKMAX 2048 /* 共2048 块 */ 0#块的作用: 0# 块是专用块(超级块)。前半部用于存放文件卷空间的位示图 (bitmap),位状态=0表示对应块空闲,状态=1
3、表示已分配。后半部的最后32 个字节用 于存放根目录的目录结构。0#块不参与文件空间的动态分配。1#(BLKMAX-1)#块用于存放 文件(普通文件和子目录文件)的信息。 二二、系统结构的说明、系统结构的说明 本文件管理系统分为五层,上层调用下层,下层为上层服务。以下为各层(由低到高) 的简要说明: 1、块管理层,通过TBlock类实现 设下列主要函数: balloc()-块分配函数 brelse()-块释放函数 bread()读一块函数 bwrite()写一块函数 2、FCB管理层,通过TFcb类实现 功能涉及到FCB结构的操作,定义了一些与FCB操作相关的函数 3、打开文件管理层,通过TO
4、File类实现 功能为涉及ofile结构的操作。 4、命令解释层,通过TEnter类和TOrder类实现 功能为接受来自用户的命令,并解释、执行用户提出的文件访问操作。按系统的的功能 要求,可以Open(),Close(),Read(),Write();等函数。 三三、数据结构的说明、数据结构的说明 用户信息的存储结构: struct UserNode/注册用户信息 char d_flag; /标识该用户信息是否有效,超级用户为用户数目,1 表示无效 char d_uid; /*用户标识,为 0 时表示是超级*/ char d_gid; /*同组用户标识*/ char d_name8;/*用户
5、名,但不超过八个字节,超过八位自动截取*/ char password8;/*用户密码但不超过八位,超过八位自动截取*/ ; 目录文件结点信息存储结构: struct dir unsigned short d_mode; /文件属性及访问权限,=2048|tempbuf=NULL) return false; int byte,bit; bit=bno%DN; byte=(bno-bit)/DN; if(bit_on(bitmapbyte,bit)=false) return false; else fseek(pf,bno*BLOCK,SEEK_SET); fwrite(tempbuf,si
6、zeof(char),BLOCK,pf); return true; void TBlock:CheckFirst()/检查存在操作文件,即模拟磁盘空间的文件,以判断是否是第一 次启动系统 if(pf=fopen(“storage“,“r“)=NULL) TBlock:first=true; else fclose(pf); void TBlock:CreateFile(USERINFO info)/创建模拟磁盘的文件 if(pf=fopen(“storage“,“w+“)=NULL) coutd_gid=tempdir.d_gid; tdir-d_uid=tempdir.d_uid; tdir-d_mode=tempdir.d_mode; int na; for(na=0;nad_namena=tempdir.d_namena; for(i=0;id_addi=tempdir.d_addi; tdir-d_add0=0; for(i