模拟实现unix文件管理系统.docx

上传人:b****1 文档编号:14878641 上传时间:2023-06-28 格式:DOCX 页数:25 大小:220.19KB
下载 相关 举报
模拟实现unix文件管理系统.docx_第1页
第1页 / 共25页
模拟实现unix文件管理系统.docx_第2页
第2页 / 共25页
模拟实现unix文件管理系统.docx_第3页
第3页 / 共25页
模拟实现unix文件管理系统.docx_第4页
第4页 / 共25页
模拟实现unix文件管理系统.docx_第5页
第5页 / 共25页
模拟实现unix文件管理系统.docx_第6页
第6页 / 共25页
模拟实现unix文件管理系统.docx_第7页
第7页 / 共25页
模拟实现unix文件管理系统.docx_第8页
第8页 / 共25页
模拟实现unix文件管理系统.docx_第9页
第9页 / 共25页
模拟实现unix文件管理系统.docx_第10页
第10页 / 共25页
模拟实现unix文件管理系统.docx_第11页
第11页 / 共25页
模拟实现unix文件管理系统.docx_第12页
第12页 / 共25页
模拟实现unix文件管理系统.docx_第13页
第13页 / 共25页
模拟实现unix文件管理系统.docx_第14页
第14页 / 共25页
模拟实现unix文件管理系统.docx_第15页
第15页 / 共25页
模拟实现unix文件管理系统.docx_第16页
第16页 / 共25页
模拟实现unix文件管理系统.docx_第17页
第17页 / 共25页
模拟实现unix文件管理系统.docx_第18页
第18页 / 共25页
模拟实现unix文件管理系统.docx_第19页
第19页 / 共25页
模拟实现unix文件管理系统.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

模拟实现unix文件管理系统.docx

《模拟实现unix文件管理系统.docx》由会员分享,可在线阅读,更多相关《模拟实现unix文件管理系统.docx(25页珍藏版)》请在冰点文库上搜索。

模拟实现unix文件管理系统.docx

模拟实现unix文件管理系统

摘要

计算机发展到今天,从个人计算机到巨型计算机系统,毫无例外都配置一种或是多种操作系统。

操作系统管理和控制计算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并且为用户提供一个良好的工作环境和友好的接口。

在计算机操作系统的功能中,对文件存储设备的管理是一项非常重要的任务,文件在存储器上按一定的顺序有组织地存放,使得用户访问高效,操作方便。

UNIX文件系统采用SFD和BFD方式管理文件:

SFD称为符号文文件目录,存放文件名以及致使该文件说明信息表标识符ID;把存放文件说明信息和相应标识符的BFD称为i节点。

UNIX文件系统将存储设备分为引导块、超级快、i节点区、目录和数据区四个存储区。

引导块主要是为了存储引导系统启动的数据;超级块描述文件系统的状态,包括磁盘空闲块栈,空闲i结点栈;i节点区存放文件说明信息,每项32字节;目录和数据每个目录项16字节,文件名区分大小写。

在界面上我们使用MFC可视化设计,将实现的代码加载到MFC界面中,在响应鼠标消息的函数中调用实现模拟系统设计的代码,这样最后的操作是在Windows界面的操作,响应鼠标的命令。

界面美好,操作方便。

 

关键词:

操作系统,文件系统,UNIX文件系统模拟

 

摘要

目录

1.概述......................................6

2.课程设计任务及要求........................6

2.1设计任务..............................6

2.2设计要求..............................7

3.算法及数据结构............................7

3.1算法的总体思想(流程).................8

3.2i节点模块.............................8

3.2.1功能

3.2.2数据结构

3.2.3算法

3.3装入和退出系统模块.....................11

3.3.1功能

3.3.2算法

3.4用户登录注销模块.......................14

3.4.1功能

3.4.2数据结构及流程图

3.4.3算法

3.5目录管理模块..........................16

3.5.1功能

3.5.2数据结构及流程图

3.3.3算法

3.6创建删除文件模块......................19

3.6.1功能

3.6.2数据结构及流程图

3.6.3算法

3.7文件模块..............................21

3.7.1功能

3.7.2数据结构及流程图

3.7.3算法

4.程序设计与实现...........................24

4.1程序流程图

4.2程序说明

4.3实验结果

5.结论.....................................28

6.参考文献.................................29

7.收获、体会和建议.........................29

 

1.概述

UNIX文件系统采用SFD和BFD方式管理文件。

SFD称为符号文件目录,存放文件名以及致使该文件说明信息表标识符ID。

把存放文件说明信息和相应标识符的BFD称为i节点。

i节点又分为磁盘i节点和内存i节点。

目录表目中仅包含文件名和指向另一个数据块的指针-i节点号。

就可以通过这些i节点访问文件或是到另一个目录。

文件采用二级指针模块,可以存储大文件。

超级块结构采用成组块链接法,管理着磁盘的空闲块。

系统启动时的初始化是读磁盘的超级块到内存,可以操作和管理目录和文件数据,既是管理了磁盘块,同时读入根目录到内存作为当前操作目录,之后就可以访问到其他任意目录树的地方。

模拟UNIX文件系统程序设计。

首先要了解UNIX文件系统的结构和管理方法,建立数据结构,组织数据,通过概要设计出大体流程,然后细化完善每一个功能模块,先底层后表层,边写代码边测试,保证完成的每一个模块代码的无错性。

最后将完成的代码加到界面中。

 

2.课程设计任务及要求

2.1设计任务

模拟实现UNIX的文件系统,多用户、多级目录结构文件系统的设计与实现模拟实现UNIX的文件系统

2.2设计要求

1、在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;

2、设计系统的数据结构和程序结构,设计每个模块的处理流程。

要求设计合理;

3、编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果;

4、确定测试方案,选择测试用例,对系统进行测试;

5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问;

6、提交课程设计报告。

3.算法及数据结构

3.1算法的总体思想(流程)

3.1.1总体设计思想:

利用内存的一段空间模拟unix的文件系统的实现。

设计结构体数组存放用户信息。

设计文件和目录通用的结构体,用一个字段标识是文件或目录,每个文件均有一个字段对应其所占用的数据块。

创建文件时通过搜索数据块位示图查找第一个空闲的数据块供文件使用。

建立文件后对占用的数据块对应的位示图的位进行置位操作。

删除文件时要释放对应的数据块,对数据块相应的位示图进行清零操作。

对文件的内容的读写都是对该文件数据块对应的一段内存空间内容的读写。

文件卷的组织:

将文件卷分块、用位示图来管理或成组块链;块的大小可设成512字节,i节点区块数为32块;数据区块数为512块。

(如下图结构)。

引导区:

系统的引导位置,在此设计中没有设计对引导区的操作。

超级块:

描述文件系统的状态,包括磁盘空闲块栈,空闲i结点栈。

在程序设计中实质是存储一个数据结构的数据。

i节点:

存放文件说明信息,每项32字节,这个区域有32块,每块512字节,也就是可以存储512个i节点。

在UNIX系统中,索引文件或是目录都是通过先索引i节点,通过i节点找到对应的目录或是文件数据块。

目录和文件:

每个目录项16字节,文件名区分大小写。

3.1.2总体实现算法:

1)进入模拟文件系统VFS;

2)格式化。

3)启动系统。

4)用户登陆,可以多用户同时登陆及用户之间的切换使用。

5)提示用户命令按要求输入命令并执行各种操作,包括:

显示目录表,创建新目录,更改目录,创建文件,填写文件,读取文件,删除文件,更新文件。

6)用户操作完毕后,注销用户。

7)退出系统并执行退出后的保存工作。

3.2i节点模块

3.2.1功能

i节点模块是是i节点的请求和释放操作。

主要的函数有:

structinode*ialloc()从磁盘上申请一个i节点:

当需要建立一个目录或是建立一个文件的时候需要新的i节点。

一般会在这个时候调用。

Voidifree(structinode*pinode)从磁盘上释放一个i节点:

当从文件系统中删除某个文件或是目录的时候,应首先删除它的磁盘i节点项。

structinode*iget(unsigned__int16dinodeid)从磁盘上读i节点到内存。

voidiput(structinode*pinode)从内存中释放掉i节点,不影响磁盘的i节点。

3.2.2数据结构

/*内存i节点*/

structinode{

structinode*i_forw;

structinode*i_back;

chari_flag;

unsignedinti_ino;/*磁盘i节点标号*/

unsignedinti_count;/*引用计数*/

unsignedshortdi_number;/*关联文件,当为0时,则删除该文件*/

unsignedshortdi_mode;/*存取权限*/

unsignedshortdi_uid;/*磁盘i节点用户id*/

unsignedshortdi_gid;/*磁盘i节点组id*/

unsignedshortdi_size;/*文件大小*/

unsignedintdi_addr[NADDR];/*物理块号*/

};

/*磁盘i节点*/

structdinode{

unsignedshortdi_number;/*关联文件数*/

unsignedshortdi_mode;/*存取权限*/

unsignedshortdi_uid;

unsignedshortdi_gid;

unsignedlongdi_size;/*文件大小*/

unsignedintdi_addr[NADDR];/*物理块号*/

};

/*超级块*/

structfilsys{

unsignedshorts_isize;/*i节点块块数*/

unsignedlongs_fsize;/*数据块块数*/

unsignedints_nfree;/*空闲块块数*/

unsignedshorts_pfree;/*空闲块指针*/

unsignedints_free[NICFREE];/*空闲块堆栈*/

unsignedints_ninode;/*空闲i节点数*/

unsignedshorts_pinode;/*空闲i节点指针*/

unsignedints_inode[NICINOD];/*空闲i节点数组*/

unsignedints_rinode;/*铭记i节点*/

chars_fmod;/*超级块修改标记*/

};

3.2.3算法

函数名:

ialloc

功能:

申请磁盘i节点

算法:

通过超级块的i节点管理数组,查找一个没有被占用的i节点,放回i节点id。

函数名:

ifree

功能:

释放磁盘i节点

算法:

修改超级块的i节点记录数据,释放相应的内存i节点。

函数名:

iget

功能:

获得磁盘i节点到内存

算法:

通过i节点的id从磁盘上读i节点数据到内存。

通过id号找到这个i节点的磁盘地址,之后读出i节点大小的数据到内存。

函数名:

iput

功能:

释放内存i节点

算法:

根据内存中这个i节点的信息做处理,若i节点只被引用一次,没有被修改过则从内存中释放,否则存储到磁盘覆盖原来的磁盘i节点,若引用次数大于1则引用次数自减一。

3.3装入和退出系统模块

3.3.1功能

是读磁盘的相关数据到内存,为了用户可以对文件系统的操作。

实现函数:

voidinstall()启动,安装文件系统

voidhalt()关闭系统。

3.3.2数据结构及流程图

系统装载

关闭系统

3.3.3算法

函数名:

install

功能:

装载系统数据

算法:

先将超级块数据读到内存,然后初始化系统打开文本表(SOF),读根目录的i节点到内存,读根目录到内存,设置为当前目录。

函数名:

halt

功能:

关闭系统

算法:

将当前目录写入覆盖到磁盘目录的数据,关闭所有系统打开文件表中的文件。

退出文件系统。

3.4用户登录注销模块

3.4.1功能

此模块处理用户登陆系统和推出系统的管理,涉及到的操作函数主要有login()和logout().

3.4.2数据结构及流程图

数据结构:

/*用户打开表*/

structuser{

unsignedshortu_default_mode;

unsignedshortu_uid;/*用户标志*/

unsignedshortu_gid;/*用户组标志*/

unsignedshortu_ofile[NOFILE];/*用户打开表*/

};

/*用户密码*/

structpwd{

unsignedshortp_uid;

unsignedshortp_gid;

charpassword[PWDSIZ];

};

 

用户登录

用户退出

3.4.3算法

函数名:

login

功能:

用户登录文件系统

算法:

根据用的输入用户名和密码,从passsword文件中判断是否正确,假如正确则将该用户加入到登录的用户表中,初始化此用户的打开文件表。

返回用户的id。

3.5目录管理模块

3.5.1功能

在系统中通过目录树来管理和操作文件,在目录管理模块中主要是创建目录、删除目录、改变当前目录、为目录重命名:

 

3.5.2数据结构及流程图

文件目录结构

/*目录项结构*/

structdirect{

chard_name[DIRSIZ];/*目录名*/

unsignedintd_ino;/*目录数*/

};

/*目录*/

structdir{

structdirectdirect[DIRNUM];

intsize;

};

3.5.3算法

mkdir()函数:

首先判断目录名大小是否合法,不合法则给出提示信息,合法则判断是否存在重名的目录,存在则给出提示信息,否则初始化目录结构,并分配i节点,初始化i节点,将目录结构写入其存储空间,将目录名和i节点号写入用户目录。

chdir()函数:

判断要改变的目录是否为当前目录,是则不改变,判断要改变的目录是否为根目录,若是判断当前目录是否为根目录,是则返回,不是则查找根目录存放地址,取得根目录i节点号,释放当前目录。

_dir()函数:

每个目录分配12个目录项,分别读出每个目录项地址到缓冲区,分别列出每个目录项下面的目录或文件名。

3.6创建删除文件模块

3.6.1功能

创建文件:

在当前目录下创建文件,为其申请i节点。

删除文件:

根据文件名删除文件,释放其i节点和文件数据的磁盘块。

3.6.2数据结构及流程图

系统打开文件表

structfile{

charf_mode;

__int16f_count;//计数器

structinode*f_inode;

__int32f_off;

};

3.6.3算法

函数名:

create

功能:

创建文件

算法:

先判断当前操作用户是否有权限创建文件,有权限之后申请一个i节点,之后在系统打开文件表(SOF)和用户打开文件表(UOF)中查找空区域,将新文件的信息写入SOF和UOF,返回在UOF中的地址。

函数名:

adelete

功能:

删除文件

算法:

先判断当前用户是否有权限删除文件,当有权限之后,释放该文件的磁盘空间,之后删除它的i节点,在其父目录中删除删除该目录名。

3.7文件模块

3.7.1功能描述

负责文件的创建,删除,复制,剪切,粘贴和读写。

3.7.2数据结构

/*系统打开表*/

structfile{

charf_flag;/*文件操作标志*/

unsignedintf_count;/*引用计数*/

structinode*f_inode;/*指向内存i节点*/

unsignedlongf_off;/*读/写指针*/

};

3.7.3算法

creat()函数:

首先判断所要创建的文件名是否合法,不合法则给出错误提示,否则,判断在当前目录下是否存在相同的文件名,有则给出重名提示,否则初始化文件参数,为文件分配块并创建i节点。

delete()函数:

根据当前路径查找是否存在该文件,不存在则给出提示信息,存在则判断文件是否关闭,若未关闭则提示用户关闭文件,否则判断该用户是否是高级用户或该文件的创建用户,两者都不是则该用户无权删除该文件,释放该文件所占的块,释放i节点,并修改父目录结构,查找该文件的目录并删除。

aopen()函数:

首先,到磁盘找到文件名对应的磁盘i节点号

然后判断,系统文件打开表是否可以再打开文件,可以则添加系统文件打开表并初始化,否则给出不能打开的提示信息。

再判断,用户文件打开表,是否可以打开,如可以则初始化之(将其指向系统打开文件表中对应的表项)。

close()函数:

关闭文件。

read()函数:

形参为文件名和读文件的字节数,首先判断所读文件字节参数是否为数字,不是则给出提示信息并返回,否则,判断多读字节是否超出文件大小,超出则读出所有文件内容。

查找文件并取得i节点,若不存在则给出提示信息,存在则判断文件是否已经打开,未打开或不是当前用户打开的文件则给出提示信息,要求用户打开文件,否则显示要读的信息。

write()函数:

先查找文件并取得i节点,判断文件是否存在,不存在则给出提示信息,否则判断文件是否被当前用户打开,不是当前用户打开则提示用户先打开文件,是则判断打开方式是否为写打开,是则将用户要写的内容写入。

cut()函数:

首先根据输入的文件名打开相应的文件,根据该文件的大小分配适当的缓冲区,把此文件中的内容写入缓冲区中

paste()函数:

首先创建要粘贴到文件,并创建改文件。

根据cut函数中得到缓冲区大小分配一个相同大小的缓冲区,最后把此缓冲区中的内容写入新创建的文件中

copy()函数:

根据要复制的文件大小创建相应的缓冲区,再把此缓冲区的内容写入你要复制到的文件当中

 

4.程序设计与实现

4.1程序流程图

 

4.2程序说明

4.3实验结果

1、用命令format格式化磁盘运行界面图4-3-1:

图4-3-1

2、用命令enroll()让用户123注册运行界面如图4-3-2:

图4-3-2

3、用命令login使用户123登陆系统并在当前目录创建文件pro,其运行界面如图4-3-3:

 

系统提示用户输入写的内容:

输入字母q结束,用read命令查看刚才写入的内容,可以看见刚才写入的内容(Thisisatest):

 

图4-3-3

4、用命令mkdir创建目录dir,并显示当前已存在目录,其运行界面图4-3-4:

图4-3-4

5、用命令cd更改为dirtest目录并创建文件test,运行界面如图4-3-5:

用dir命令查看此目录下的信息(可以看见当前新创建的文件test):

图4-3-5

6、用delete命令删除文件test,运行界面如图4-3-6:

图4-3-6

7、用命令cd..返回主目录,并用read命令读取文件test中的内容如图4-3-7:

图4-3-7

8、运用命令copy将test文件内容拷贝到文件bb中运行如图4-3-8:

用read命令查看文件bb中的内容,可以看见其内容为刚写入到test中的内容:

图4-3-8

9、运用cut与paste命令实现剪切粘贴功能,运行如图4-3-9

把文件bb剪切粘贴到文件cc中

查看文件cc中的内容:

图4-3-9

10、运用logout命令注销用户2004,运行如图4-3-9

图4-3-10

5.结论

刚得到这个课程设计要求,觉得脑海里一片空白,因为根本就不知道UNIX文件系统的组织结构,经过几天努力,了解了UNIX文件系统的组织形式和管理方式,于是心中就有思路,不过心中还是有些顾虑,觉得有的理论上很合理,但在实践中就不知道了,经过两个星期我们小组4个人的奋战,终于理论联系实践,完成了课程实践,同时也证明了UNIX文件系统的牢固性。

在课程设计完成之后参加了Linux基础学习,之后才了解到此文件系统的强大和实用性,一切管理都是交给管理员。

6、参考文献

1.徐虹等编著.操作系统实验指导——基于Linux内核.北京:

清华大学出版社.2004.

2.陈向群等编著.Windows内核实验教程.北京:

机械工业出版社.2002.

3.周苏等编著.操作系统原理实验.北京:

科学出版社.2003.

4.张尧学编著.计算机操作系统教程习题解答与实验指导.北京:

清华大学出版社.2000.

7.收获、体会和建议

操作系统课程设计是本课程重要的实践教学环节。

课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。

与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。

在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了,最后,对给过我们帮助的所有同学和各位指导老师再次表示忠心的感谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2