模拟文件系统实现与管理 - 昆明理工大学实验报告

版权申诉
0 下载量 61 浏览量 更新于2024-06-30 收藏 466KB DOCX 举报
“实验四 文件管理 昆工版.docx”是一个关于操作系统课程的实验报告,主要探讨了如何使用C或C++语言模拟实现一个简单的文件管理系统。实验目标是理解和掌握文件操作命令的本质内容和执行过程,通过设计一个多级目录结构的文件系统,实现包括创建、删除、重命名、复制、移动等基本功能,并进行存取权限控制。 实验内容分为以下几个部分: 1. 实验目的:实验旨在让学生通过编写和调试文件系统,深入理解文件管理的基本功能,例如创建、删除、重命名等操作的底层逻辑。 2. 实验原理与技术路线:实验采用了C语言来模拟文件系统,设计了一个多级目录结构,包含文件控制块的描述,以及合理的外存分配策略。此外,还实现了对文件的读取、关闭、编辑以及目录的切换等功能,并对文件设置了存取权限。 3. 功能设计:实验中包含了多个命令,如`Help`显示帮助信息,`dir`显示当前目录文件,`exit`退出系统,`create`创建文件,`cdir`创建目录,`read`读取文件,`close`关闭文件,`edit`编辑文件,`cd`切换目录,`attr`查看文件属性,`del`删除文件,`rename`重命名文件等。 4. 核心算法:实验的关键算法包括`Format`用于格式化,`install`装载虚拟硬盘数据,`login`用户登录,`showMenu`显示功能菜单,`onAction`执行用户选择的功能,以及具体针对文件操作的函数如`createFile`、`read`、`editFile`和`Delete`。 5. 数据结构:实验定义了一些常量,如`BLOCK_SIZE`表示块大小,`DATA_BLOCK_NUM`表示数据块的数量,`DINODE_START`定义了inode的起始位置,`DINODE_SIZE`指定了inode的大小。 这个实验报告详细介绍了构建一个简单文件系统所需的关键概念和技术,包括文件系统的组织结构、文件操作的实现以及必要的数据结构。通过这个实验,学生能够更好地理解操作系统中的文件管理和存储管理原理。
2023-03-11 上传
文件管理 一、实验目的: 1.了解os中文件的组织和管理。 2.熟悉文件中所用的数据结构。 二、实验要求: 1. 设计一个N个用户的文件系统,每个用户最多保存m个文件。 2. 限制用户在一次使用中只能打开L个文件。 3. 系统应能检查输入命令的正确性,出错能显示出原因。 4. 对文件必须设置保护措施,如只读、写、执行等。在每次打开时再次设置保护级别,即 可有二级保护。 5. 对文件的操作至少有以下几条命令 create:建文件 delete:删文件 open:打开文件 close:关闭文件 read:读文件 write:写文件 举例:主文件目录 mfd=record username :string[maxlen]; files :array[1..L] of ufd; ofiles :arrau[1..S] of uod end; 用户打开文件目录表: uod=record filename:string[maxlen]; attrib:attrib; len:integer; status:(open,create); rp,up:integer; end; 用户文件目录: ufd=record fielname:string[maxlen]; attribΛro,rw); len:integer; addr:integer; end; 流程图: 开始 输入用户名 在MFD中找到该用户名 显示该用户名UFD中所有文件 初始化AFD 操作 命令 CREATE DELTET OPEN CLOSE READ WRITE 保护当前文件目录 结束 二、主要数据结构 界面采用VC6 MFC环境开发 #define MAXFILE 20 //每个用户最多保存20个文件 #define MAXUSER 10 //假想文件系统最多支持的人数 #define BLOCKSIZE 32 //虚拟磁盘中物理块为每块32字节 #define DISKSIZE BLOCKSIZE*1000 //虚拟磁盘容量为1000*32=32K struct UFD //说明文件项的结构数组 { char FileName[15]; char Time[16]; //文件建立或修改时间 如2003/5/6 12:00 bool IsExist; //文件是否存在,删除时标为0 bool IsShared; //共享标记,共享文件可被其它用户所访问 bool AttrRead; //文件是否可读 bool AttrWrite; //文件是否可写 bool AttrExecute; //文件是否可执行 HTREEITEM treeNode; //用于树控件显示的结点句柄 USHORT FileLen; //文件占用字节数 USHORT BlockNum; //文件占用的物理块数 USHORT FileLink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字 节 }; struct MFD { char UserName[10]; //主目录用户名 bool IsExist; //该用户否存在 UFD ufd[MAXFILE]; //用户文件数组 USHORT nItem;//UFD个数 }; struct HEADBLOCK { BYTE pStack; //堆栈指针 SHORT pBlock[10]; //块号 pBlock[10]是下一个盘块号逻辑地址 }; struct BLOCK //虚拟磁盘的物理块数据结构 { union{ BYTE block[32];        //一块为32字节 HEADBLOCK HeadInfo; }; }; struct FAT { BLOCK SuperBlock; //超级块,指示第一个空闲块逻辑号 USHORT MaxOpen; //该用户同时可打开的最大文件数 USHORT UserNum; //最户数 MFD Mfd[MAXUSER]; //最多可支持10个用户 }; //空闲块成组链接法 bool OpenList[MAXUSER][MAXFILE]; //描述文件是否打开的布尔型数组 FAT FileFAT;           //描述文件记录项的FAT结构 CFile FATIO; //负责和VDISK.DAT打交道的文件句柄 CString CurrentUser; //当前登录的用户名 Int CurrentID; //前前登录的用户标识号 说明:本实验采用模拟文件结构的方法,把记录用户帐号,用户文件和磁盘块的信息 用当前目录下的VDISK.DAT来记录,可以把VDISK.DAT看成是一个虚拟的磁盘,其头部是 FAT结构,用来记录各个用户和文件信息,紧接着是空闲