没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统-文件系统-课程设计报告
操作系统-文件系统-课程设计报告
4星 · 超过85%的资源 需积分: 10 29 下载量 60 浏览量
更新于2023-03-16
评论 2
收藏 492KB DOC 举报
课程设计内容设计一个简单的多用户文件系统。即 ①在系统中用一个文件来模拟一个磁盘; ②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。 ④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。 1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。
资源详情
资源评论
资源推荐
计算机操作系统
课程设计说明书
Linux-ext2 文件系统
起止日期: 2009 年 12 月 30 日 至 2010 年 1 月 8 日
姓 名
班 级
学 号
成 绩
指 导 教 师 ( 签 字 )
计通学院(部)
年 月 日
目录
1 课程设计简介..................................................................................................................................1
1.1 课程设计的目的...................................................................................................................1
1.2 课程设计内容.......................................................................................................................1
2 数据结构的设计..............................................................................................................................2
2.1 预定义...................................................................................................................................2
..
1
2.2 结构体...................................................................................................................................2
//磁盘 i 结点结构,....................................................................................................................2
struct inode{................................................................................................................................2
// char di_name[DIRSIZ];..........................................................................................................2
unsigned __int16 di_ino; /*磁盘 i 节点标识*/..........................................................................3
unsigned __int16 di_number; /*关联文件数,当为 0 时表示删除文件*/.............................3
unsigned __int16 di_mode; /*存取权限*/.................................................................................3
unsigned __int16 di_uid; /*磁盘 i 节点用户 id*/......................................................................3
unsigned __int16 di_gid; /*磁盘 i 节点权限组 id*/ //1 管理员组 2 用户组...........................3
unsigned __int32 di_size; /*文件大小*/...................................................................................3
unsigned __int32 di_ctime; /* Creation time */.........................................................................3
unsigned __int32 di_mtime; /* Modification time */................................................................3
unsigned __int16 di_block[P_N_BLOCKS]; /* 一组 block 指针 */.......................................3
};.................................................................................................................................................3
// 目录项结构..............................................................................................................................3
struct direct{................................................................................................................................3
char d_name[DIRSIZ]; /*目录名(14 字节)*/......................................................................3
__int16 d_ino; /*目录号*/.........................................................................................................3
};.................................................................................................................................................3
//超级快结构...............................................................................................................................3
struct super_block{.....................................................................................................................3
unsigned __int16 s_inodes_count; /* inodes 计数 */................................................................3
unsigned __int16 s_blocks_count; /* blocks 计数 */................................................................3
unsigned __int16 s_r_blocks_count; /* 保留的 blocks 计数 */...............................................3
unsigned __int16 s_free_blocks_count; // 空闲的 blocks 计数...............................................3
unsigned __int16 s_free_inodes_count; /* 空闲的 inodes 计数 */..........................................3
unsigned __int16 s_free_blocks_group[GROUPNUM];//新增 一个数组来记录每个数据块
组中的空闲数据块计数.............................................................................................................3
unsigned __int16 s_first_data_block; /* 第一个数据 block */.................................................3
unsigned __int16 s_log_block_size; /* block 的大小 */..........................................................3
unsigned __int16 s_blocks_per_group; /* 每 block group 的 block 数量 */...........................3
unsigned __int16 s_inodes_per_group; /* 每 block group 的 inode 数量 */...........................3
};.................................................................................................................................................3
// 用户密码..................................................................................................................................3
struct pwd{..................................................................................................................................3
unsigned __int8 p_uid;...............................................................................................................3
unsigned __int8 p_gid;...............................................................................................................3
char username[UNAMSIZ];/*用户名 新加的*/.......................................................................3
char password[UPWDSIZ];.......................................................................................................3
};.................................................................................................................................................3
// 目录结构..................................................................................................................................3
struct dir{.....................................................................................................................................3
struct direct direct[DIRNUM];...................................................................................................3
__int16 size;...............................................................................................................................3
..
2
};.................................................................................................................................................3
2.3 全局变量和函数...................................................................................................................4
// 全局变量..................................................................................................................................4
unsigned __int8 di_bitmap[DINODENUM]; // 硬盘 inode 节点位图 1 表示已使用 0 表示未
使用.............................................................................................................................................4
unsigned __int8 bk_bitmap[DATABLKNUM]; // 数据块 block 位图......................................4
struct super_block filsys; //超级块.............................................................................................4
struct pwd pwd[PWDNUM];......................................................................................................4
FILE *fd; //文件指针..................................................................................................................4
struct inode *cur_inode; //i 节点当前目录指针........................................................................4
struct inode *inodetemp; //i 节点指针........................................................................................4
const char fsystemname[20]="Linux.EXT2"; //模拟硬盘的文件名.........................................4
struct direct dir_buf[BLOCKSIZ / sizeof(struct direct)]; //目录数组.......................................4
char cmdhead[20];//cmd 的头 表示所在哪个文件夹 、..........................................................4
int i_lock=0;//inode 位图锁 可能会多线程...............................................................................4
int b_lock=0;//block 位图锁.......................................................................................................4
struct pwd *cur_user;..................................................................................................................4
/* 全局函数 */............................................................................................................................4
extern int Format();//格式化磁盘...............................................................................................4
extern int Install();//启动,安装文件系统................................................................................4
struct inode * read_inode(int);//install 里面读取文件 dinode...................................................4
struct direct * read_dir_data(int);//读取存储文件夹的物理块.................................................4
extern void showdir();//命令 dir.................................................................................................4
int Enterdir(char[]);//进入某个文件夹 命令-- cd 文件名.........................................................4
int Fd_dirfile(char[]);//查找当前目录里的文件 没找到返回-1 找到返回 inode 号...............4
int Iscmd(char[]);//判断是否两个字符串的命令......................................................................4
void two_cmd(char[],char[]);//两个字符串的命令...................................................................4
int creat(char[]);//创建文件........................................................................................................4
void changeinode();//交换指针..................................................................................................4
char * ReadFile(char[]);//读取文件............................................................................................4
int mkdir(char[]);//创建文件夹..................................................................................................4
void showbitmap();//显示位图...................................................................................................4
int deletefd(char[]);//删除文件...................................................................................................4
int editfile(char[]);//编辑文件.....................................................................................................4
int rename(char[]);//重命名........................................................................................................4
void showhelp();//命令帮助.......................................................................................................4
void login();.................................................................................................................................4
void logout();...............................................................................................................................4
int access();//权限判断...............................................................................................................4
/*磁盘 i 节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区
之前,.........................................................................................................................................4
应为该文件分配存放该文件说明信息的磁盘 i 节点,当从文件系统中删除某个文件时
.....................................................................................................................................................4
应首先删除它的磁盘 i 节点项。)*/.......................................................................................4
..
3
int ialloc();/*开辟一个空闲的 i 节点,返回 i 节点*///磁盘块分配与释放函数....................4
int balloc(int);//申请硬盘空间...................................................................................................4
结构体说明:.............................................................................................................................5
3 功能模块(或算法)描述..............................................................................................................5
3.1 format 格式化.......................................................................................................................5
只写打开模拟文件,初始化超级快,初始化 dinode 位图 block 位图,初始化主目录,
初始化 etc 目录,初始化管理员 admin 目录,初始化用户 xiao 目录,初始化 用户
passwd 文件,写入模拟硬盘文件。........................................................................................5
3.2 install 安装............................................................................................................................5
读写打开模拟文件,读取 dinode 位图 block 位图,读取主目录,读取 etc 目录,读取管
理员 admin 目录,读取用户 xiao 目录,读取 用户 passwd 文件。.....................................5
3.3 login 登陆..............................................................................................................................5
用户输入用户名和密码,在 passwd 文件中查找是否有此用户,核对密码。正确则登陆
成功,当前目录设定到当前用户文件夹下。登录流程图....................................................5
3.4 ialloc 申请 inode 空间..........................................................................................................5
先检测 inode 位图是否加锁,是则退出。加锁,检测 inode 空间是否还有已满,是则退
出。在 inode 位图中顺序查找空闲的 inode,找到则返回 inode 地址,block 解锁。函数
结束。流程图 3.3.......................................................................................................................5
.....................................................................................................................................................6
登录流程图 ialloc 流程图 3.3 balloc 流程图 3.4.....................................................................6
3.5 balloc 申请 block 空间.........................................................................................................6
先检测 block 位图是否加锁,是则退出。加锁,检测 block 空间是否还有 k 个空闲,否
则退出。在还有空闲 block 的组中查找是否有 k 个空闲,没有则去下一个 block 组中查
找,找到则返回 block 地址,block 解锁。函数结束。流程图 3.4......................................6
3.5 create 创建文本文件............................................................................................................6
查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以‘ ###’
结束。申请 inode 空间(ialloc 函数),申请硬盘 block 空间(balloc 函数),申请失败
则结束。将文件内容写入 inode 空间和 block 空间。修改当前目录的结构,修改超级快,
修改 inode 位图,block 位图,写入模拟硬盘。流程图 3.5..................................................6
3.7 cdir 创建文件夹....................................................................................................................6
查找当前目录下是否有同名文件,是则退出,否则,申请 inode 空间(ialloc 函数),申请
硬盘 block 空间(balloc 函数),申请失败则结束。将文件夹内容写入 inode 空间和
block 空间。修改当前目录的结构,修改超级快,修改 inode 位图,block 位图,写入模
拟硬盘。.....................................................................................................................................6
3.7 read edit –读取和追加文本文件..........................................................................................6
Read----查找当前目录下是否该文件,没有则退出,否则调用 access()权限判断,有
权限则判断是不是文件,不是则退出,是文件则读取文件并显示。................................6
Edit----调用读取文件模块,读取成功则用户输入追加的内容,如果追加的内容大于一
个 block 则申请 block 空间,失败则退出,申请成功则保存文件。...................................6
3.8 access(文件名) 权限判断...............................................................................................6
先判断当前目录是否有该文件,在当前目录的 block 找到该文件,判断当前登录用户
是哪个组,判断是否该用户创建,判断该文件的可见级别。............................................6
如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果
该文件是用户可查看文件则都具有权限。............................................................................6
..
4
3.9 cd –进入子目录 或上级目录...............................................................................................7
查找当前目录是否有该子目录,没有则退出,调用 access()判断当前用户是否有权
限,无则退出,有则读取该子目录的 inode,将当前目录指向该目录。..........................7
3.10 attr(文件名)查看文件或者文件夹的属性...................................................................7
先查找当前目录下是否有该文件或目录,有则判断文件是否系统文件,是否文本文件,
是否目录,由谁创建,属于什么组,占用的 block,和 inode。将其全部显示出来。....7
3.9 del 删除文件或目录.............................................................................................................7
查找当前目录是否有该文件名,没有则退出,有则调用 access()判断是否有权限,
有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删
除,不是则判断是否文件夹,是文件夹则判断该文件夹下是否有文件,有文件则无法
删除。提示用户是否删除,确认则删除文件,修改当前文件夹 inode,block 结构,修
改该文件占有的 inode 和 block 位图为 0,修改超级块,写入模拟硬盘。流程图 3.9......7
3.8 access(文件名) 权限判断...............................................................................................7
先判断当前目录是否有该文件,在当前目录的 block 找到该文件,判断当前登录用户
是哪个组,判断是否该用户创建,判断该文件的可见级别。............................................7
如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果
该文件是用户可查看文件则都具有权限。............................................................................7
4 程序运行结果..................................................................................................................................8
参考文献...........................................................................................................................................10
附:源代码.......................................................................................................................................11
..
5
剩余51页未读,继续阅读
Robin_xunyicao
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1