一、课程设计的内容
本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
二、课程设计的要求与数据
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

一、设计思想说明

1.1设计环境
a、编程语言:C++
b、开发环境:DEV
c、操作系统:windows 10

1.2 设计思想
1.2.1整体思路
本次课程设计是一个模拟的多用户多级目录的文件系统,可以支持多用户注册、登录、注销,支持多级目录,文件按名存取,支持文件的增删查改,使用FAT显示链接保存文件在磁盘的分配,使用位示图保存磁盘块的使用情况。
整个项目主要内容分为三个模块的开发:一是用户模块,二是文件模块,三是磁盘模块。
1.2.2 用户模块
用户模块内容主要包括初始化建立管理员账号、注册账号、登录验证、退出登录、删除账号、打印所有用户等功能。
使用账号头指针admin将所有的账号链接起来,为所有的用户创建一个同名用户文件夹,该账号下的所有文件操作都在该文件夹下执行。
用户指针保存用户名、用户密码、指向下一个用户的指针和指向账号文件夹的指针。
1.2.3 文件模块
文件模块内容主要包括创建文件(文件夹或文件)、创建文件的索引结点、进入文件夹、读文件、写文件、删除文件、删除文件夹、回退到上一个文件、打印所有目录、打印当前文件夹目录等功能。
采用树形结构目录存储文件目录,并使用孩子兄弟链表法存储表示。
定义一个账号文件夹头指针admin_folder,所有的用户文件夹都存储在该文件夹下,其是一个实际不存在的文件夹。即admin_folder->child结点指向第一个用户文件夹root,root的brother指向其他用户文件夹。
定义一个当前文件夹指针now_folder,用来指向当前所在的文件夹。
树形文件目录中保存文件名、文件类型、和索引结点,索引结点中保存文件大小、文件在磁盘中的第一个盘块号等具体文件信息。
1.2.4 磁盘模块
磁盘模块主要保存初始化磁盘、初始化FAT表、在FAT中查找空闲盘块、打印位示图等功能。
FAT表中保存当前盘块号、下一个盘块号和位示图,物理盘中保存磁盘块号、块大小和存储内容。
用一个block[block_count]数组模拟磁盘,建立一个等大的fat[block_count]数组保存FAT。

二、系统结构

2.1 结构联系
系统大体分为三层,最顶层是用户层,包含对账号的操作等功能,只有登录了之后才能进行文件层的文件操作,每个用户账号都拥有一个用户文件夹。
文件层可以进行对文件的操作,比如创建和读写删等操作,但不允许删除根目录用户文件夹,树形文件目录中仅保存文件名和索引节点。
物理层中存储磁盘的使用情况和文件内容,使用FAT显示链接将文件链接起来,通过FAT表查找到文件在磁盘的块号,在磁盘块中读出文件的内容。


三、数据结构的说明

3.1 user_management
typedef struct mfd { // 主文件目录,存储用户文件夹
string username; //用户名
string password; //用户密码
struct mfd next; //指向下一个用户的指针
TSD link; //指向该用户的文件目录指针
}MFD;
3.2 file_management
typedef struct tsd { //树形文件目录
string name;
short type; //文件类型,文件夹或者文件
struct tsd
father; //父节点指针
struct tsd
child; //孩子节点
struct tsd* brother; //兄弟节点
INDEXES* indexes; //索引结点
}TSD;

typedef struct indexes{ //索引结点
short capabilities; //访问权
int size; //占用空间
int first_block; //文件物理地址(盘块号)
}INDEXES;

3.3 disk_management
typedef struct fat { //文件分配表
bool bitmap; //位示图
int id; //当前盘块号
int next_id; //下一个盘块号
}FAT;

typedef struct block { //磁盘
int id; //物理块号||盘块号
unsigned int s_BLOCK_SIZE;
string content; //存储内容
}BLOCK;

四、算法流程图

五、主要函数列表

六、 测试与分析

1.初始界面

2. 文件夹的创建和进入文件夹

3.创建文件和对文件的读写和删除文件

  1. 返回上一层目录和删除文件夹

  2. 打印目录

  3. 打印位示图

七、 用户使用说明

本系统内置一个管理员账号root,密码root,在初始界面登录或者进行账号管理。
登录系统后可以按照提示进行文件操作
create [file name] 创建文件
read [file name] 读文件
write [file name] 写文件
delete [file name] 删除文件
mkdir [dir name] 创建子文件夹
cd [dir name] 进入子文件夹
rd [dir name] 删除文件夹
dir 打印当前目录下文件
dir_all 打印所有文件
show 打印位示图
retreat 回退到上一级文件夹
logout 退出登录
help 提示

在账号管理时,可以按照提示输入对应的数字来选择操作

八、附录

操作系统课设--多用户多级目录的文件系统相关推荐

  1. 广工操作系统课设--多用户多级目录的文件系统

    广东工业大学课程设计任务书 一.课程设计的内容 本课程设计要求设计一个模拟的多用户多级目录的文件系统.通过具体的文件存储空间的管理.文件的物理结构.目录结构和文件操作的实现,加深对文件系统内部功能和实 ...

  2. 操作系统课设--具有二级索引的文件系统

    山东大学操作系统课设lab5 实验五 具有二级索引的文件系统(lab5) 实验目的 实验环境 实验思路 调试记录 实验五 具有二级索引的文件系统(lab5) 实验目的 Nachos系统原有的文件系统只 ...

  3. 多级文件系统(操作系统课设)

    FileManagementSystem 这个项目来自于广东工业大学的操作系统课程设计题目(多级文件系统-2)的实现 Github仓库地址 -> 传送门 介绍 以下是该课设的题目要求: 题目 多 ...

  4. 操作系统课设--扩展文件系统

    山东大学操作系统课设lab4 实验四 扩展文件系统(lab4) 概念欠缺 实验目的 实验环境: 实验思路: 关键源代码注释以及程序说明: 调试记录: 实验四 扩展文件系统(lab4) 概念欠缺 ifd ...

  5. Android模拟请求调页-广工操作系统课设

    Android模拟请求调页-广工操作系统课设 GitHub地址 目录 Android模拟请求调页-广工操作系统课设 背景 架构 页面展示 下载体验 使用的开源库

  6. 华南农业大学操作系统课设(模拟磁盘文件系统实现)(JavaFX)(单人课设)

    文章目录 展示效果的视频 题目要求+代码+报告+展示视频的下载地址 实验报告 一.需求分析 (1)输入的形式和输入值的范围: 1.输入的形式 2.输入值的范围 (2)输出的形式: (3)程序所能达到的 ...

  7. 操作系统课设--系统调用

    山东大学操作系统课设lab6 实验六 系统调用(lab6) 实验目的 实验环境 实验思路 调试记录 实验六 系统调用(lab6) 实验目的 扩展现有的class AddrSpace的实现,使得Nach ...

  8. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  9. 操作系统课设(ljh老师版)

    操作系统课设 完成一个文件模拟系统,做一个记录 #include<iostream> #include<string> #include<stdio.h> #inc ...

最新文章

  1. 针对Oracle的10G版本提升SCOTT为DBA脚本!
  2. 零宽断言java_正则表达之零宽断言(零宽度正预测先行断言)
  3. Redis 是单线程凭什么能支撑高并发
  4. 电子商务应用课程知识整理 第二章-电子商务相关知识与技术
  5. 读字库遇到坑爹的问题
  6. Springboot(2.0.0.RELEASE)+spark(2.1.0)框架整合到jar包成功发布(原创)!!!
  7. flex上传文件代码
  8. 作者:熊森林(1988-),男,中国科学院国家空间科学中心助理研究员
  9. filebeat 解析日志 并发送到Elasticsearch
  10. Leetcode: Excel Sheet Column Title
  11. Android学习之路十三:BroadCast
  12. BZOJ 1030 [JSOI2007]文本生成器(ac自动机+dp)
  13. 江苏省发布我国首个公路行业BIM省地方标准
  14. 技术笔试面试题(下)
  15. 向量个数,向量维数,向量空间维数
  16. 未来的计算机绘画图片,电脑绘画——为想象力插上科技的翅膀 二十中附校科技社团电脑绘画作品展...
  17. 双节将至,XMind给你最好的礼遇
  18. php把搜索的结果导出,excel表格查找数据之后导出-如何将Excel查找全部后得到的内容Copy出来...
  19. 5g理论速度_5g速度有多快
  20. 攻防世界 真是阳间题

热门文章

  1. 空间基础信息实体分类与编码
  2. r语言变量长度不一致怎么办_基础方法 | 数据管理:Stata与R语言的应用
  3. html颜色代码暗黑模式,html如何实现暗黑模式
  4. 人工智能正在向经济学领域渗透
  5. ArcScene---修改图层字段
  6. 实测 (三)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图
  7. 斗智斗勇之springmybatis
  8. jsp登录注册代码(增删改查+网页+数据库)
  9. 开发者所需要知道的iOS7 SDK新特性
  10. 理解BN(Batch Normalization)