操作系统-文件系统-课程设计报告后附源代码

上传人:Bod****ee 文档编号:47540596 上传时间:2018-07-02 格式:DOC 页数:43 大小:426.03KB
返回 下载 相关 举报
操作系统-文件系统-课程设计报告后附源代码_第1页
第1页 / 共43页
操作系统-文件系统-课程设计报告后附源代码_第2页
第2页 / 共43页
操作系统-文件系统-课程设计报告后附源代码_第3页
第3页 / 共43页
操作系统-文件系统-课程设计报告后附源代码_第4页
第4页 / 共43页
操作系统-文件系统-课程设计报告后附源代码_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《操作系统-文件系统-课程设计报告后附源代码》由会员分享,可在线阅读,更多相关《操作系统-文件系统-课程设计报告后附源代码(43页珍藏版)》请在金锄头文库上搜索。

1、计算机操作系统 课程设计报告设计项目名称: 文件系统设计 专 业: 网络工程 班 级: 201001 学 号: 201026340117;201026340121 姓 名: 张世波 赵流男 指 导 教 师: 张 瑞 红 目录目录1 课程设计简介.11.1 课程设计的目的 .11.2 课程设计内容 .12 数据结构的设计.22.1 预定义 .22.2 结构体 .22.3 全局变量和函数 .23 功能模块(或算法)描述.33.1 模块划分 .43.2 模块流程图 .64 程序运行结果.45 心得体会 .5参考文献.6附源代码.71 课程设计简介课程设计简介1.11.1 课程设计的目的课程设计的目的

2、课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的 了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理 论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系 统的原理及实现方法,提高综合运用各专业课知识的能力。1.21.2 课程设计内容课程设计内容课程设计内容设计一个简单的多用户文件系统。即 在系统中用一个文件来模拟一个磁盘; 此系统至少有:Create、delete、open、close、read、write 等和部分文件属性的功能。 实现这个文件系统。 能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文

3、件系统的界面)后, 可以实现设计的操作要求。 1)设计一个 10 个用户的文件系统,每次用户可保存 10 个文件,一次运行用户可以打开 5 个文件。 2)程序采用二级文件目录(即设置主目录 MFD)和用户文件目录(UFD) 。另外,为打开 文件设置了运行文件目录(AFD) 。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进 行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。 5)文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为 0,则表示不 允许读写、执行。 6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MF

4、D、UFD) ,打开文 件目录(AFD)即运行文件目录,如图 5.1 所示。 2 数据结构的设计数据结构的设计2.12.1 预定义预定义#define BLOCKSIZ 512/磁盘块的大小#define DATABLKNUM 512/数据块的数目#define BLKGRUPNUM50/数据块组包含多少数据块#define P_N_BLOCKS15/inode 节点中 指向数据块的指针个数#defineGROUPNUMDATABLKNUM/BLKGRUPNUM+1 /数据块组 组数#define DINODESIZ 512/磁盘 i 结点区的大小(空间 32512)#define DINOD

5、ENUM 32/磁盘 i 结点区的块数#define SYSOPENFILE 40#define DIRNUM 32/一个目录下的最多目录和文件的总和数#define DIRSIZ 14/文件、目录名的长度(字节)#define UPWDSIZ 15/密码的长度#define UNAMSIZ 15/用户名的长度#define PWDSIZsizeof(struct pwd) /密码结构的长度 #define PWDNUM BLOCKSIZ/PWDSIZ/密码数据空间的大小(pwd 为单位)#define NOFILE 20/一个用户最多可以打开的文件数目#define DINODESTART

6、4*BLOCKSIZ/i 结点区的开始地址-inodes table ,1 引导 2 超块 3block bitmap 4inode bitmap #define DATASTART (2+DINODENUM)*BLOCKSIZ/数据区的开始地址#defineDATASTARTNO36/数据区开始指针#define DIMODE_EMPTY00000/*可以用的空间*/#define DIMODE_FILE00001#define DIMODE_DIR 00002#define DIMODE_PASSWD00004#define GRUP_00/管理员组#define GRUP_11#defi

7、ne GRUP_22#define GRUP_442.22.2 结构体结构体/磁盘 i 结点结构,struct inode/ chardi_nameDIRSIZ;unsigned _int16 di_ino; /*磁盘 i 节点标识*/unsigned _int16 di_number;/*关联文件数,当为 0 时表示删除文件*/unsigned _int16 di_mode;/*存取权限*/unsigned _int16 di_uid; /*磁盘 i 节点用户 id*/unsigned _int16 di_gid; /*磁盘 i 节点权限组 id*/ /1 管理员组 2 用户组unsigne

8、d _int32 di_size; /*文件大小*/unsigned _int32 di_ctime; /* Creation time */unsigned _int32 di_mtime; /* Modification time */unsigned _int16 di_blockP_N_BLOCKS; /* 一组 block 指针 */;/目录项结构struct directchar d_nameDIRSIZ;/*目录名(14 字节)*/_int16 d_ino;/*目录号*/;/超级快结构struct super_blockunsigned _int16 s_inodes_count

9、; /* inodes 计数 */unsigned _int16 s_blocks_count; /* blocks 计数 */unsigned _int16 s_r_blocks_count; /* 保留的 blocks 计数 */unsigned _int16 s_free_blocks_count; / 空闲的 blocks 计数 unsigned _int16 s_free_inodes_count; /* 空闲的 inodes 计数 */unsigned _int16 s_free_blocks_groupGROUPNUM;/新增 一个数组来记录每个数据块组中的空闲数据块计数 uns

10、igned _int16 s_first_data_block; /* 第一个数据 block */unsigned _int16 s_log_block_size; /* block 的大小 */unsigned _int16 s_blocks_per_group; /* 每 block group 的 block 数量 */unsigned _int16 s_inodes_per_group; /* 每 block group 的 inode 数量 */;/用户密码struct pwdunsigned _int8 p_uid;unsigned _int8 p_gid;char userna

11、meUNAMSIZ;/*用户名 新加的*/ char passwordUPWDSIZ;/目录结构struct dirstruct direct directDIRNUM;_int16 size;2.32.3 全局变量和函数全局变量和函数/全局变量unsigned _int8 di_bitmapDINODENUM;/ 硬盘 inode 节点位图 1 表示已使用 0 表示未使用unsigned _int8 bk_bitmapDATABLKNUM;/ 数据块 block 位图 struct super_block filsys;/超级块struct pwd pwdPWDNUM;FILE *fd;/文

12、件指针struct inode *cur_inode;/i 节点当前目录指针struct inode *inodetemp;/i 节点指针const char fsystemname20=“Linux.EXT2“;/模拟硬盘的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct);/目录数组char cmdhead20;/cmd 的头 表示所在哪个文件夹、int i_lock=0;/inode 位图锁 可能会多线程int b_lock=0;/block 位图锁struct pwd *cur_user;/*全局函数*/extern int

13、Format();/格式化磁盘extern intInstall();/启动,安装文件系统struct inode * read_inode(int);/install 里面读取文件 dinodestruct direct * read_dir_data(int);/读取存储文件夹的物理块extern void showdir();/命令 dirint Enterdir(char);/进入某个文件夹 命令- cd 文件名int Fd_dirfile(char);/查找当前目录里的文件 没找到返回-1 找到返回 inode 号int Iscmd(char);/判断是否两个字符串的命令void two_cmd(char,char);/两个字符串的命令int cr

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号