一个多用户多级目录结构文件系统设计与实现。
课程设计的环境是linux 操作系统。 设计时可利用linux 提供的文件管理的功能调用,建立一个模拟的文件系统。基本思想是,在linux 系统中创建一个较大容量的文件,作为所设计的文件系统的“文件卷”,并利用linux 系统的功能调用,编写各程序模块。
以 1m 的存储器空间作为文件空间,空间“分块”,编号为 0#~(blkmax-1)# 。“分块”就是规定对文件卷的读/写以块为单位,每次读/写的起点为块大小的整倍数。分块主要体现在文件卷的读/写模块上。
# define bsize 512 /*512bytes/块 */
# define blkmax 2048 /*共2048 块 */
#块的作用: 0# 块是专用块(超级块)。前半部用于存放文件卷空间的位示图(bitmap),位状态='0'表示对应块空闲,状态='1'表示已分配。
后半部的最后32 个字节用于存放根目录的目录结构。0#块不参与文件空间的动态分配。1#~(blkmax-1)#块用于存放文件(普通文件和子目录文件)的信息。
本文件管理系统分为五层,上层调用下层,下层为上层服务。以下为各层(由低到高)的简要说明:
1、块管理层,通过tblock类实现。
设下列主要函数:
balloc()-块分配函数。
brelse()-块释放函数。
bread()—读一块函数。
bwrite()—写一块函数。
2、fcb管理层,通过tfcb类实现。
功能涉及到fcb结构的操作,定义了一些与fcb操作相关的函数。
3、打开文件管理层,通过tofile类实现。
功能为涉及ofile结构的操作。
4、命令解释层,通过tenter类和torder类实现。
功能为接受来自用户的命令,并解释、执行用户提出的文件访问操作。按系统的的功能要求,可以open(),close(),read(),write();等函数。
用户信息的存储结构:
struct usernode//注册用户信息。
char d_flag; /标识该用户信息是否有效,超级用户为用户数目,-1表示无效。
char d_uid; /用户标识,为0时表示是超级*/
char d_gid; /同组用户标识*/
char d_name[8];/用户名,但不超过八个字节,超过八位自动截取*/
char password[8];/用户密码但不超过八位,超过八位自动截取*/
目录文件结点信息存储结构:
struct dir
unsigned short d_mode; /文件属性及访问权限,<=0时为空结构。
char d_uid文件主标识。
char d_gid文件主同组用户标识。
int d_fsize文件大小(字节),作为目录结构时为该目录下文件个数。
char d_name[8文件名。
int d_add[10存放文件信息的空间地址(块号)
fcb在内存中的结构:
struct sfcb
char f_count; /文件访问计数*/
char f_flag; /标志字*/
int f_blkno; /存放本文件目录结构的块号*/
int f_number; /文件目录结构所在块内偏移序号*/
unsigned short f_mode; /文件属性*/
*以下各项信息在文件打开时从struct dir获取*/
char f_uid;
char f_gid;
int f_fsize;
char f_name[8];
int f_add[10];
文件目录存储位置存储结构:
struct hfcb//用于namei函数,返回文件目录结构存储位置。
int blkno存放本文件目录结构的块号。
int offset文件目录结构所在块内偏移序号。
打开文件结构:
struct hofile
char o_flag标志字。
int o_count访问计数。
struct sfcb* o_fcbp对就打开文件fcb结构指针。
int o_offset文件当前读/写指针。
内存中的用户结点结构:
struct tuser
char u_name[8]; 用户名,登录时使用。
char u_uid用户标识,文件创建时的文件主。
char u_gid同组用户标识。
struct sfcb *u_cdir; /现行工作目录标识。
int u_error执行文件管理函数时返回的错误**,创建文件时被用来存储文件设置。
char*u_base读/写文件时信息存储区始址。
int u_count读/写文件时信息字节数。
int u_offset读/写文件的相对位移量。
char u_obuf[8文件路径名分量暂存区(查找文件时用)
struct sfcb* u_pdir; /新文件父目录fcb指针(文件创建时用)
struct hofile *u_ofile[5];/本用户打开文件表。
1、 以下为的内容:
#include
#include<>
#include
#include<>
#include
#include
using namespace std;
#define block 512
#define blocknum 2048
#define dn 8
#define usernum 10 //最大用户数。
#define filenum 9每个块能存储的文件目录结构数量。
*fcb标志字(f_flag)的各种标志定义为:*/
#define flock 01 /*fcb访问互斥标志*/
#define fupd 02 /*本fcb代表的文件已修改*/
#define fchg 04 /*本fcb结构中某些信息已被修改*/
#define fcbflag 05 //本fcb结构未被使用。
#define fcbuse 07 //本fcb结构已被使用。
#define offlag 06 //本hofile结构未被使用。
#define ofuse 03 //本hofile结构已被使用。
/文件属性及文件访问权限(即d_mode和f_mode)定义:
#define root 111
#define ifroot 011子目录中存储父目录的结构。
#define ifmt 0070000 //文件类型屏蔽字。
#define ifdir 0010000 //子目录文件。
#define ifreg 0020000 //普通文件。
#define iread 0400文件主”读"权限。
#define iwrite 0200文件主“写”权限。
#define iexec 0100文件主“执行”权限。
#define gread 040同组用户“读”权限。
#define gwrite 020同组用户“写”权限。
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....