OS课设:实现二级文件目录系统

本文详细介绍了实现二级文件目录系统的过程,包括文件系统的结构、设计思想和关键函数分析,如Create、Delete等。文章指出在实现过程中遇到的空间分配、空间合并等问题及解决方案,并强调了空间管理的重要性。同时,提到了其他函数的实现细节,以及对课程设计的反思和收获。
摘要由CSDN通过智能技术生成

先从头才是撤,写到现在真的感觉是令人肝疼的一份课设。2019年6月27日19:16:09

老师就不说了,在站内可以直接搜到,所以还是悄悄地抱怨,WOC XiaoZhao


废话不多讲了,开始这份分析报告把,希望能帮上我的读者。

本人的底层实现来自于这位大哥的好心链接,给我了很多指导性的启发,不过他也有致命的错误,也是我为什么这么肝疼的原因了(设计实现一个文件系统,既然要以链表的形式实现连续式存储文件系统,为什么不做存储空间的回收)

附带大哥链接:https://blog.csdn.net/huangqiang1363/article/details/50592633

本人在实现:1空间分配,2空间合并,3优先排序方面真的下了很大的功夫,毕竟单链表实现连续性,实现起来确实可能不如同学使用的索引节点好用。本人的拙见……


课设题目:操作系统之实现二级文件目录系统

时间,,,乌拉乌拉

其实,刚拿到这个题目时,我真的没有思路,随后我就对着老师的课设指导书进行研究,对二级文件系统的演示这个课题的每个要求进行分析,总算是有了思路。下面给出我的分析。
文件系统演示
一、课程设计目的
使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。
//既然是基于控制台的,我们可以更改颜色玩玩
二、课程设计内容
设计一个简单的多用户文件系统。即 //和后面一样,用结构体数组实现
①在系统中用一个文件来模拟一个磁盘; //switch语句或者if-else语句实现,既然这里说到了 用一个文件去模拟一个磁盘,换句话说,在你的课设里,必须要有磁盘空间分配的思路在里面,不然就不是模拟磁盘了。
②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。 //文件系统要实现
④能实际演示这个文件系统。//cmd演示即可
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。

三、课程设计指导
1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 //三个数组的大小分别为 10、10、5
//一次运行用户最多可以打开5个文件如何实现? 在用户文件里面加变量判断,用户每打开一个就+1,
//每次用户最多可保存10个文件如何实现? 很明显,同时保存我们是无法做到的,无论是谁,都无法做到,也就是说还是一个个保存的,那么同样可以设置变量判断。如果保存的较多,那么只好请用户单独关闭某些指定的文件。

2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。 //存放各个用户目录的文件夹、用户目录
//是说运行的所有文件用一个目录层次表示吗
3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 //整型的变量判断是否读写完成了 下面的pointer
4)因系统小,文件目录的检索使用了简单的线性搜索。 //链表的顺序查找
5)文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 //标记变量即可实现
6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录,如图5.1所示。//主要的结构体设计

还有MFD、UFD、AFD最好全部存到文件里面去,不然每次都要输入,十分麻烦,而且不能通过看文件 查看到自己的实验现象,着实不便。
参考的数据结构设计如下
struct TYPE_UFD //用户文件目录
{
string File_Name; //文件名
bool Read; //读保护码,true为可读
bool Write; //写保护码,true为可写
bool Execute; //执行保护码,true为可执行
int Length_File; //文件长度
}; //用户文件目录和用户打开的文件目录是不是都各有自己的属性
struct TYPE_MFD //主文件目录
{
string User_Name; //用户名
TYPE_UFD *Pointer; //用户文件目录指针
};
//很明显,第三个结构体没有指针域,但我们是需要指针域的,还有下面红色部分可以合在一个整型变量里面的
struct TYPE_AFD //打开文件目录
{
int File_ID; //打开的文件号
boolRead;//读保护码,true为可读
boolWrite;//写保护码,true为可写
boolExecute;//执行保护码,true为可执行
int Pointer; //读写指针
};
7)文件系统结构如图5.2所示
//很明显,这里要用到的数据结构是 链表
    
8)文件系统算法的流程图如图5.3所示。
                             
图5.3文件系统算法的流程图
//这里告诉了你 main函数的主要调用的函数顺序 
9)注意对于物理块的访问(包括访问指针,空闲位)需要经过输入输出,相当于通过定位对文件进行读写。打开文件目录(AFD)是在内存中,由打开文件时创建。
好了,分析完了,就要开始编写代码了,下面附上我小小的代码,还有很多需要修改的地方,做的不好的地方,大神就请原谅,也希望多多指点我。
--------------------- 
作者:o0非诚勿扰0o 
来源:CSDN 
原文:https://blog.csdn.net/huangqiang1363/article/details/50592633 


代码实现Code

下面是我实现整体结构的文件·

1 OSHead.h头文件

#ifndef OSHEAD_H_INCLUDED
#define OSHEAD_H_INCLUDED

#include<cmath>
#include<ctime>
#include<string>
#include<conio.h>
#include<fstream>
#include<cstdlib>
#include<iostream>
#include<windows.h>
using namespace std;

typedef struct UFD
{
	string File_name;         //文件名
	int Start;                //文件在磁盘存储空间的起始地址
	int Protect;              //文件的属性
	int File_length;           //文件的长度
	int Max_File_length;         //文件的最大长度
	struct UFD *next;
	int i=0;
}UFD,*UFD_ptr;

typedef struct MFD
{
	string User_name;
	string User_passwd;
	UFD *Ufd_next;
	int End;
	struct MFD *next;
}MFD,*MFD_ptr;




typedef struct AFD
{
	string File_name;
	int File_length;
	int Start;
	int Protect;
	int Pointer;    //根据这个指针的值去完成用户的要求  读写指针
	int Max_File_length;
	struct AFD *next;
}AFD,*AFD_ptr;

#endif // OSHEAD_H_INCLUDED

2.Main.cpp文件
 

#include"OSHead.h"

#define MaxDisk 512*1024   //一个扇区512字节,假设有1024个扇区,模拟磁盘的大小
int Max_User=10;
int Max_Open=5;
int Max_End=0;
UFD_ptr pufd=NULL;
MFD_ptr pmfd=NULL;
AFD_ptr pafd=NULL;
char User_name[30];   //存放当前用户的用户名
char flag='n';
char Disk_Size[MaxDisk];    //最后在打印输出的时候,用RWX表示即可

int zone[10][2];
int x,y;

typedef struct Disk_Table
{
	int Max_length;      //最大长度
	int Start;          //开始位置
}Disk_Node;
Disk_Node Disk_Head;

void clean();
void sort();

void Init_Disk()
{
	Disk_Head.Max_length=MaxDisk;
	Disk_
设计内容: (1) 设计一个10个用户的文件系统。每个用户最多可以保存10个文件,一次运行用户可打开多个文件。 (2) 程序采用二级文件目录。(即设置目录(MFD)和用户文件目录UFD))。另外,可打开文件设置指针。 (3) 为了方便实现,对文件的读写作了简化。在执行读写命令时,只需改读写指针。并不进行实际的读写操作。 (4) 实现的基本功能要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等。 要求: 考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如 ex it,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。
操作系统课程设计 【设计题目】 二级文件系统设计 【开发语言及实现平台或实验环境】 C++/VC++ 【设计目的】 (1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 (2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。 (3)通过分对实际问题的分析、设计、编程实现,提高学生实际用、编程的能力 【设计要求】 理解二级目录的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对用户账号,第二级用户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。要求: 1、 对程序的每一部分要有详细的设计分析说明 2、 程序执行的每个步骤要有具体的提示内容或输出 3、 源代码格式规范,注释不少于四分之一 4、 设计合适的测试用例,对得到的运行结果要有分析, 5、 设计中遇到的问题,设计的心得体会 6、 提交完整程序代码、课程设计报告及相关文档 【设计原理】 对采用二级文件目录的文件系统工作的机理了如指掌,对文件系统的相关操作要掌握。 【设计内容】 一、 任务 为Linux系统设计一个简单的二级文件系统。要求做到以下几点: 1.可以实现下列几条命令: login 用户登录 dir 列目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 cd 进出目录 2.列目录时要列出文件名,物理地址,保护码和文件长度 3.源文件可以进行读写保护 二、 程序设计 1. 设计思想 本文件系统采用两级目录,其中第一级对用户账号,第二级用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 首先确定文件系统的数据结构:目录、子目录及活动文件等。目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。 2. 要数据结构和部分代码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值