1、摘要.2一、 目的及意义2二、 理论基础2三、 设计思想及设计功能说明3四、 核心数据结构说明4五、 核心算法流程及功能说明61.login()用户登录模块62.initiate()系统初始化模块.93.create()文件创建模块.114. open()文件打开模块135read()文件读模块.146.write()文件写模块.157.delete()删除文件模块178close()文件关闭模块.199.mkdir()创建目录模块.2110.cd()改变当前目录模块.2211.dir()列出文件目录模块.2312Is()查看文件信息模块.2513. adduser()增加用户模块.2514.
2、deleteuser()删减用户模块.2615.printuser()显示用户模块.2616.logout()退出模拟文件系统模块. 26六、开发调试及运行环境25七、功能说明及测试数据分析.25八、存在问题及改进28九、心得体会.29十、参考文献.29Linux文件系统的仿真实现 计科101班 庞婷 指导老师 姜海燕摘要: 文件系统是现代操作系统中的重要组成部分之一。该报告论述了linux文件系统,主要模拟了对文件和目录进行一些基本操作,对于用户:用户登录、创建新用户login,增加用户adduser,删减用户deleteuser,显示用户printuser。对于文件:创建文件create,
3、删除文件delete,打开文件open,关闭文件close,读文件read,写文件write。对于目录:创建目录mkdir,改变当前目录cd。 该模拟文件系统基于操作系统中文件系统的各项理论而设计,实现了用户管理和文件的基本操作,Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录及文件保护信息等都存储在其中。使用了六个数据结构fat、文件控制块结构fcb、用户文件目录结构ufd、主文件目录结构mfd、用户打开文件表结构afd写出了模拟文件系统的数据结构设计和整体框架和系统实现各功能模块的函数。关键字:Linu
4、x文件系统,模拟,功能模块一、目的及意义1、目的:利用操作系统所学到的知识,结合自己课外学习的理论,设计一个模拟的多用户多级目录的文件系统。并实现对文件和目录等基本操作。2、意义:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的了解。增强我们的思维能力、搭建架构的能力和动手编程的能力。 二、理论基础1、Linux整个文件系统以树根为起点,所有的文件和外部设备都以文件的形式挂接在这个文件树上。文件系统可分为四个区,引导块、超级块、索引节点区和数据区。2、文件的类型分为两种:常规文件和目录。目录可以进入,并且还可以在其下面继续创建文件,而常
5、规文件则不允许,它们只能作为整个文件系统树的叶子。每个文件以树中结点的形式存在于文件系统中,而在程序里则用结构体来加以定义,各个结构体之间再用指针相互串联从而构成一棵文件系统树。3、文件系统通常采用分层结构实现,大致分为三层:文件管理、目录管理和磁盘主存映射管理。4、文件系统给每个文件建立唯一的管理数据结构,成为文件控制块(FCB),一个文件由两部分组成:FCB和文件体,FCB一般包括文件属性信息有文件标识和控制信息、文件逻辑结构信息、文件物理结构信息、文件使用信息和文件管理信息。5、为了加快文件的查找速度。通常把文件控制块集中起来进行管理,组成文件目录。与普通文件不同的是,目录文件永远不会空
6、,它至少包含两个目录项:当前目录项“.”和父目录项“.”。6、当文件尚未存在时,需要对其创建,或者文件原来已经存在,有时需要重新创建。文件打开是指当文件已经存在,需要使用时先执行打开操作,以便建立应用进程与文件之间的联系,相应的,不再需要文件时,可以删除之,以便节省存储空间。7、每个块组都有一个块组描述符,记录此块组的以下信息,其中数据块位示图,表示数据块位示图占用的块号,此位示图反映块组中数据块的分配情况,在分配或释放数据块时需要使用数据块位示图。varhomeetclibusrdev/fei3 getty passwdtty00 tty01 Fei5fei4fei2fei1 bin lib
7、 man tmp testfile.c linux目录层次结构图 三、 设计思想及设计功能说明首先模拟了一个100个空间物理块(BNUM=100),给系统和文件分配空间,用fat表管理这些空间的物理块,物理块中分成两个部分,一个是用位示图标志的物理块占用情况,useflag为物理块为空,否则被占用,创建文件时,搜索fat表中未被占用的物理块并从位示图为0的物理块开始为文件分配空间大小;另一个部分则是指向下一个物理块的地址指针。用文件控制块fcb管理文件的信息,文件的第一个和最后一个物理块号,文件所占用的物理块数还有文件的属性信息(attribute为0只读,为1可读写,为2可执行)。其次,为了
8、进一步管理文件信息,在用户文件目录结构中设置了三个指针分别指向文件的兄弟结点,父母结点和孩子结点。对文件进行操作必须先打开对应的文件,为此设计了一个用户打开的文件表结构。该模拟系统要进行初始化,并等待用户注册登录使用文件系统,用户登录系统时,系统对用户的用户名和密码进行验证,如果用户登录成功,则系统进入命令提示符状态,等用户输入指令后,用户按照程序指定方式进行各个功能的实现,用户退出后,系统转入登录模块,等待下一位用户的登录。设计功能: login 用户登录 initiate 初始化 is 查看系统信息 mkdir 建立子目录 create 创建文件 open 打开文件 read 读文件 wr
9、ite 写文件 dir 查看当前目录文件列表 close 关闭文件 delete 删除文件 cd 改变当前目录 help 显示帮助命令 adduser 增加用户 deleteuser 删减用户 printuser 显示用户 format 格式化 logout 退出当前用户程 序 入 口程序初始化程序结束退出Logout()运行命令command()注册或登陆用户,系统用户为user1user8,密码同用户四核心数据结构说明1.Fat表结构 typedef struct fat1 int nextblock; /下一个物理块的地址,创建文件时从第一个物理块的位置开始遍历,知道找到空闲物理块的地址
10、,从空闲物理块地址处为文件分配空间 int useflag; /位示图 useflag0 物理块为空,useflag1 物理块不空 FAT; FAT fatBNUM; / 假设物理块有100个nextblockflagFat表用来管理空闲物理块的使用情况,首先模拟100个空闲物理块,每个物理块由两部分组成,第一个是用位示图法标志的物理块占用信息,当useflag为0表示物理块未被占用,为1时表示该物理块已被占用。第二部分为指向下一个物理块地址的指针,当创建文件时,从物理块开始位置搜索空闲物理块的位置,并从该处空闲物理块的地方为文件分配所需的大小。2.Fcb(文件控制块)表结构 typedef
11、struct fcb1 int firstblock; /占用的第一个物理块号 int lastblock; /最后一个物理块号 int blocknum; /物理块数 int attribute; /0只读;1读写;2可执行FCB;文件控制块是文件系统给每个文件建立的唯一管理数据结构,一个文件由两部分组成:FCB和文件体。其中定义了文件占用物理块的第一个物理块号、最后一个物理块号还有文件所需占用的所有物理块数。并用一个变量attribute指示文件的属性。为0只读、为1可读写、为2可执行。3.用户文件目录结构 struct ufd1 char name20; /文件或文件夹名 FCB *fcb; struct ufd1 * brother;/指向兄弟结点 struct ufd1 * parent; /指向父母结点 struct ufd1 * child; /指向孩子结点 int kind; /0文件夹;1文件 ;我在用户文件目录中用整型变量kind来区分文件和文件夹,kind为0表示为文件夹,为1则表示为文件。并设置了三个指针,分别指向兄弟结点、父母结点和孩子结点。以便于文件和文件夹的操作。4.主文件目录结构 struct mfd1 char username20; UFD *ufd; struct mfd1 *next;/指向下一个用户的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1