广东工业大学课程设计任务书
一、课程设计的内容
本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
二、课程设计的要求与数据
1. 在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2. 文件物理结构可采用显式链接或其他方法。
3. 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4. 文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。
5. 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:
(1)具有login (用户登录)
(2)系统初始化(建文件卷、提供登录模块)
(3)文件的创建: create
(4)文件的打开:open
(5)文件的读:read
(6)文件的写:write
(7)文件关闭:close
(8)删除文件:delete
(9)创建目录(建立子目录):mkdir
(10)改变当前目录:cd
(11)列出文件目录:dir
(12)退出:logout
6. 系统必须可实际演示,选用程序设计语言:C++、C等。
三、课程设计应完成的工作
1.充分理解设计的任务,完成设计的基本要求。然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。
\2. 独立独立完成系统的分析、设计、编码、测试工作。
3.完成设计报告的撰写。
4.以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交“课程设计报告”的书面和电子两种版本。
四、课程设计进程安排
| 序号 | 设计各阶段内容 | 地点 | 起止日期 |
|---|---|---|---|
| 1 | 查阅资料、分析题目、概要设计 | 分散 | 周一 |
| 2 | 详细设计、编码 | 分散 | 周二 |
| 3 | 调试 | 实验室 | 周三 |
| 4 | 撰写设计报告 | 分散 | 周四 |
| 5 | 运行、验收 | 实验室 | 周五 |
五、应收集的资料及主要参考文献
[1] 计算机操作系统, 汤小丹等 ,西安电子科技大学出版社
[2] 操作系统实验指导书,傅秀芬,广东工业大学(自编)
[3] 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社
[4] 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社
一、 设计思想说明
1.1 设计环境
a) 编程语言:Java
b) 开发环境:IntelliJ IDEA 2021.1.1
c) 操作系统:windows 11
1.2 设计思想
1.2.1 整体思想
本课设要求开发一个模拟的多用户多级目录的文件系统,要求实现多用户注册、登录与退出,文件的增删改查打开关闭以及目录的创建切换与显示。本人开发过程中基于Linux系统的文件目录操作思想以及输出格式进行开发,文件的物理结构采用显示链接法,磁盘空间的管理选择位示图,同时将位示图合并到FAT表中,目录项增加了索引结点的方式进行封装,大量节省目录的空间,加快访问速率。在100%完成任务书要求之余,我还基于linux文件权限简化设计了涉及文件创建者及其他用户的文件权限保护,并且,系统界面针对不同的文件格式可显示不同的颜色进行明显区分。整个系统分为四大模块的开发:用户管理模块,文件操作模块,目录操作模块,数据存储模块。
1.2.2 用户管理模块
用户管理包括用户注册、登录以及退出功能。
(1) 系统设置userMap<String username , User user>充当用户数据库,在磁盘上分配以磁盘块专门存放用户数据,系统运行之后就读入内存。
(2) 登录(login)进行用户名密码校验,登录后可显示用户上一次登录时间(这一点是仿造linux进行的添加),登录后默认进入每个用户的同名专属文件夹,设置内存curUser为当前用户。用户可以使用cd命令切换到其他有权限目录。
(3) 注册时进行用户名重名检测,将用户名、密码添加到用户数据库,注册成功后为用户添加一个同名用户文件夹,设置权限为(rwx—)只允许用户自己访问,同时加入根目录下。
(4) 用户退出时系统会自动进行数据持久化保存,保证数据不丢失。
Login、register操作只可以在未登录状态下进行,而logout操作只允许在登录状态下进行。
1.2.3 文件操作模块
文件操作包括创建(create)文件、打开(open)文件、关闭(close)文件、显示打开的文件(show_open)、读取(read)文件内容、覆盖写入或追加写入(write)文件、删除(delete)文件、文件重命名(rename)等操作。本系统的所有文件操作实现了跨目录操作,只要有权限以及文件存在便可以进行操作,而不是只能操作当前目录文件。
(1) create:用户输入create + 文件名,系统进行文件名判空和重名检测 如无重名文件即进行创建。创建过程包括创建文件索引结点和文件控制块FCB,文件大小为空文件,将FCB存入磁盘,修改父目录的文件项,加入到父目录的儿子集合。
(2) open: 用于打开文件,用于在对文件进行操作前需要先打开文件,这样可以方便操作系统分配资源使用权比如外设的管理。打开文件包括解析文件路径是否存在,解析是否是普通文件,判断用户权限,判断是否重复打开,然后封装为openFile加入到openFileList中。系统可选择打开多个文件。
(3) close:用于关闭文件,只有关闭文件才可以释放资源使用权,别的进程才可以进行使用该资源,用于在进行logout操作之前需要先确保关闭了打开的文件,否则无法正常退出。关闭过程包括:解析文件路径是否存在,解析是否是普通文件,判断是否在openFileList中。
(4) show_open:用于用户查看打开了什么文件,方便用于进行正常关闭操作。
(5) read:读取文件内容并显示出来给用户看。读取包括解析文件路径是否存在,解析是否是普通文件,判断用户权限,判断是否打开,必须先打开才能进行读取,随后进从文件的FCB中读取到第一块存放的位置,然后使用FAT表到磁盘进行一一读取。
(6) write:用于用户对文件写入内容。写入有两种模式:覆盖写与追加写,新文件默认是覆盖写。写入过程包括:解析文件路径是否存在,解析是否是普通文件,判断用户权限,判断是否打开,必须先打开才能进行写入。如果是覆盖写入,则先清除文件的旧FAT表分配关系,再进行分配,将用户输入内容分块写入磁盘,修改FAT表及位示图,修改父目录文件项及递归修改父目录的文件大小;如果是追加写入,则找到FAT中指定的最后一块,在此基础上继续分配。
(7) delete:删除文件,允许用户删除文件及空目录。删除过程包括:解析文件路径是否存在,解析是否有权限,删除文件需要有rw权限,删除文件夹还需要执行权限。判断是否打开,如果打开则要先关闭才能删除,随后修改父目录大小及文件项,修改FAT表及位示图
(8) rename:文件重命名操作。过程包括解析文件路径是否存在,解析是否是普通文件,判断用户权限,判断是否打开,判断文件名是否重复,随后修改文件的FCB中的名称字段。
1.2.4 目录操作模块
目录操作包括显示(dir)目录文件项详细信息、创建(mkdir)目录、切换(cd)目录、解析(pathReslove)路径、更新目录(updateSize)大小、显示目录(ls)文件名、显示(pwd)全路径、显示当前(showPath)目录、显示位示图(bitmap)。本系统的所有目录操作实现了全路径操作,只要有权限及文件存在即可进行操作。
(1) dir: dir操作与linux的ll指令实现效果基本一致,可以显示目录下文件的文件类型、目录权限、创建者、文件大小、修改时间、文件名。例如:drwx— 4 root 32 2022.10.1 a.txt 同时,对于不同后缀文件格式,也仿照linux进行不同颜色显示,白色表示普通文件、绿色表示可执行文件、红色表示压缩文件、蓝色表示目录文件。
(2) mkdir:默认在当前目录下创建新目录项。创建过程包括目录名判空,目录名判断重复,创建索引结点,创建FCB,存入磁盘,修改父目录文件项,加入到父目录儿子集合。
(3) cd:切换目录操作,可切换到用户指定的有权限目录。cd … cd …/表示切换到上级目录。切换目录包括解析目录路径,判空,判断是否是目录文件,判断权限,如果都正常即切换目录并更新内存指定的当前目录。
(4) pathReslove:用于所有需要路径解析的功能,解析指定路径是否存在,存在则返回文件或目录的FCB。路径解析包括判断是否是当前目录,在指定目录寻找,或从根目录往下逐层寻找。
(5) updateSize:作用于文件大小有变化,逐级往上递归修改父目录的文件大小。其过程包括逐级往上遍历,判断增加还是减少,直到遍历到根目录。
(6) ls:用于显示当前目录的文件名。过程包括获得内存指定的当前目录FCB,遍历输出儿子集合目录项。
(7) pwd:模仿linux操作,指令输入时不直接显示当前相对于根目录的全路径,而是显示当前目录名而已,使用pwd操作才可以获得全路径。过程包括逐层往上遍历直到根目录。
(8) showPath:用于输入命令时显示当前目录及当前登录的用户。
(9) bitmap:用于显示磁盘的使用情况,由于位示图嵌入FAT表,因此遍历FAT表可得到所有磁盘的使用情况。
1.2.5 数据存储模块
数据存储模块即磁盘操作,本系统实现了数据存储功能,用户所有的操作都是永久性的,当用户logout后,系统就会自动将用户数据和磁盘数据序列化存储到“system.data”中包括系统磁盘和FAT表初始化(init),从虚拟存储文件中加载磁盘数据(loadData),存储数据到虚拟磁盘文件(saveData),释放文件的磁盘空间(freeFile),写入数据到磁盘(writeToDisk),从磁盘中寻找空闲块(find_empty)。
(1) in

本文介绍了一种模拟的多用户多级目录文件系统的设计与实现,涵盖了用户管理、文件操作、目录操作等功能,并实现了文件权限保护及不同文件类型的可视化显示。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



