计算机操作系统课程设计实践报告-Read
《计算机操作系统》课程设计实践报告
班级:计科31班第二组 组长:吕岭 小组成员:邢自成、叶林、张鹰
【问题描述】
模拟二级以上的多级文件目录管理,设计一个支持n个用户的文件系统,每个用户可拥有多个文件;并有如下:建立文件、创建目录、查询目录、查询文件、打开文件、关闭文件、针对不同的用户设置共享的功能,应提供良好的用户界面。(难度:★★★★)
【实验目的】
通过模拟操作系统中的文件管理系统,更好的理解掌握常用OS的重要部分:文件管理。归纳学习方法和思考方法,做到理论联系实际,培养分析问题、解决问题和具备较强的软件设计能力和较严密的思维能力
【人员安排】
吕岭:搭建程序框架,编写主要数据结构,整合程序。
叶林:编写部分数据结构,调试完善程序。
邢自成:编写部分函数,调试完善程序。
张鹰:编写部分函数,调试完善程序。
【进度安排】
星期一:小组成员集中讨论实验路线,核心技术,实现功能
星期二:做幻灯片汇报,明确实验流程,小组成员分工
星期三:各成员完成各自任务,并分别调试
星期四:各模块组合,调试,完善程序
星期五:组间测试,写实验报告,汇报
【基本功能】
(1)多用户
(2)多级目录:可有多级子目录;
(3)用户登录
(4)系统初始化(建文件卷、提供登录模块)
(5)文件的创建,打开,读,写,关闭,删 除。
(11)创建目录(建立子目录)
(12)改变当前目录
(13)列出文件目录
(14)共享目录,文件
(15)退出
【技术路线】
本程序主要是虚拟文件系统,不涉及实际磁盘操作
用内存模拟磁盘
初始化用户(3个)
用户可以创建删除查找目录,文件
可以设置共享文件
用户可以对文件进行读写修改等操作
用位视图法管理内存模拟的磁盘块
用一个二维数组模拟磁盘块
用树型结构保存目录文件
用单级索引分配法为文件分配磁盘空间
目录的保存与读取:把目录树转化为二叉树,并将这个二叉树保存到磁盘,下次从磁盘读出并还原成目录树的结构。
文件查找:从目录树的根结点开始深度优先遍历这棵树,直到找到文件。
文件共享:用符号链实现多用户间的文件共享。
【数据结构】
程序对多级目录结构的模拟采用树型目录结构。
树型结构具有多种存储结构,如:双亲表示法、孩子表示法、孩子兄弟表示法等,本程序用孩子兄弟表示法来作为树型结构的存储结构。
即以二叉链表作为树的存储结构链表中的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstChild域和nextSibling域。
文件控制块
typedef struct FCB {
stringname;//文件名
int type;//标致:0表示目录,1表示文件
int size;//如果是文件则表示文件大小
structFCB *firstchild;//指向第一个孩子结点
struct FCB *nextsibling;//指向下一个兄弟结点
struct FCB *parent;//指向父结点
}FCB, *FCBnode;
用户当前数据结构
typedef struct USER {
stringusername;//用户名
FCBnodeworkdir;//当前工作目录或文件指针
stringpath;//当前路径
}USER, *USERnode;
将目录树保存到文件
void SaveTree(FCBnode root,FILE *fp) {
if (root) {
fwrite(root,sizeof(struct FCB),1,fp);
SaveTree(root->firstchild,fp);
SaveTree(root->nextsibling,fp);
}
}
void Save(FCB *root) {
FILE *fp;
if((fp=fopen("user","wb+"))==NULL) {
cout<
}
SaveTree(root,fp);
fclose(fp);
}
将目录树从文件中读出来
void LoadTree(FCBnode p,FILE *fp) {
FCB q;
if (p->firstchild) {
fread(&q,sizeof(struct FCB),1,fp);
p->firstchild=&q;
LoadTree(&q,fp);
}
if (p->nextsibling) {
fread(&q,sizeof(struct FCB),1,fp);
p->nextsibling=&q;
LoadTree(&q,fp)