模拟实现unix文件管理系统
- 格式:doc
- 大小:270.00 KB
- 文档页数:28
模拟UNIX文件系统的设计及实现操作系统大作业UNIX文件系统是一种常见的操作系统文件系统,它提供了一种以层次结构组织文件和目录的方式来管理存储设备上的数据。
为了完成这个大作业,我们需要设计并实现一个简化版的UNIX文件系统,包括文件和目录的管理、文件的读写操作、文件权限的管理等。
首先,我们需要设计文件系统的存储结构。
文件系统可以在硬盘上以一个分区的形式存在,我们可以使用一个整数数组来表示硬盘,每个数组元素表示硬盘上的一个块。
我们还可以使用一个超级块来记录文件系统的信息,例如文件系统的状态、块的总数、块的使用情况等。
此外,我们还需要设计并实现一个索引节点表,用于保存文件或目录的元数据信息,例如文件的大小、权限、创建时间等。
接下来,我们需要实现文件和目录的管理功能。
文件和目录可以通过其在索引节点表中的索引来标识。
我们可以使用一个数组来表示目录,数组的每个元素都是一个目录项,记录了文件或子目录的名字和索引节点的索引。
我们还可以使用一个栈来保存当前目录的路径,方便用户在不同目录之间切换。
为了支持目录的嵌套,我们可以在目录项中添加一个指向父目录的索引。
在文件和目录的管理基础上,我们还需要实现文件的读写操作。
文件可以通过其索引节点的索引来标识。
当用户要读取文件时,我们需要根据文件的索引节点找到文件的块地址列表,然后将列表中的块读取到内存中。
当用户要写入文件时,我们需要找到文件的块地址列表中最后一个块,如果该块已满,则需要申请一个新的块,并将新块的地址添加到块地址列表中。
同时,我们还需要更新文件的大小和修改时间等元数据信息。
最后,我们还需要实现文件权限的管理功能。
文件的权限信息可以通过文件的索引节点来保存。
我们可以使用一个整数来表示文件的权限,例如八进制数,每一位代表一个权限,例如读取权限、写入权限和执行权限等。
当用户要访问文件时,我们需要根据用户的权限和文件的权限来判断用户是否具有相应的权限。
总结起来,要完成这个大作业,我们需要设计并实现一个模拟UNIX文件系统,包括文件和目录的管理、文件的读写操作、文件权限的管理等。
unix系统中文件的多级索引结构-回复Unix系统中的文件系统采用了多级索引结构来管理文件。
在多级索引结构中,文件被组织成块的集合,每个块都有唯一的地址。
通过使用多级索引结构,Unix系统能够高效地存储和检索文件,提高系统的性能和可靠性。
下面我们将一步一步地回答和讨论关于Unix系统中文件的多级索引结构的内容。
第一步:什么是多级索引结构?多级索引结构是一种用于管理大量数据的数据结构。
在Unix系统中,文件系统使用多级索引结构来管理文件的存储和检索。
这种索引结构由多个级别的索引组成,每个级别都用于指示下一个级别的索引。
通过这种方式,Unix系统能够快速访问和操作大型文件,提高文件系统的效率。
第二步:Unix系统中多级索引结构的组成Unix系统中的多级索引结构由三个主要组件组成:直接索引块、一次间接索引块和二次间接索引块。
直接索引块用于存储文件的数据块地址,一次间接索引块用于存储直接索引块的地址,而二次间接索引块用于存储一次间接索引块的地址。
通过这种层次结构,Unix系统能够管理大量数据块,并提供快速的文件访问。
第三步:直接索引块的作用和结构直接索引块是多级索引结构中的最底层,用于存储文件的数据块地址。
每个直接索引块都包含一定数量的文件数据块地址。
这些地址可以直接指向文件存储在磁盘上的数据块。
通过直接索引块,Unix系统可以快速访问和检索文件的数据。
第四步:一次间接索引块的作用和结构一次间接索引块用于存储直接索引块的地址。
每个一次间接索引块都包含一定数量的直接索引块地址。
通过一次间接索引块,Unix系统可以间接地访问和检索文件的数据。
当直接索引块的数量不足以存储文件的所有数据块地址时,一次间接索引块就发挥了作用。
第五步:二次间接索引块的作用和结构二次间接索引块用于存储一次间接索引块的地址。
每个二次间接索引块都包含一定数量的一次间接索引块地址。
通过二次间接索引块,Unix系统可以间接地访问和检索文件的数据。
如何实现一个文件系统本文作者:康华:计算机硕士,主要从事Linux操作系统内核、Linux技术标准、计算机安全、软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室。
如果需要可以联系通过kanghua151@联系他。
摘要:本文目的是分析在Linux系统中如何实现新的文件系统。
在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出了文件系统概念模型。
熟悉文件系统的内涵后,我们再近一步讨论Linux系统中和文件系统的特殊风格和具体文件系统在Linux中组成结构,为读者勾画出Linux中文件系统工作的全景图。
最后,我们再通过Linux中最简单的Romfs 作实例分析实现文件系统的普遍步骤。
(我们假定读者已经对Linux文件系统初步了解)什么是文件系统首先要谈的概念就是什么是文件系统,它的作用到底是什么。
文件系统的概念虽然许多人都认为是再清晰不过的了,但其实我们往往在谈论中或多或少地夸大或片缩小了它的实际概念(至少我时常混淆),或者说,有时借用了其它概念,有时说的又不够全面。
比如在操作系统中,文件系统这个术语往往既被用来描述磁盘中的物理布局,比如有时我们说磁盘中的“文件系统”是EXT2或说把磁盘格式化成FAT32格式的“文件系统”等——这时所说的“文件系统”是指磁盘数据的物理布局格式;另外,文件系统也被用来描述内核中的逻辑文件结构,比如有时说的“文件系统”的接口或内核支持Ext2等“文件系统”——这时所说的文件系统都是内存中的数据组织结构而并非磁盘物理布局。
还有些时候说“文件系统”负责管理用户读写文件——这时所说的“文件系统”往往描述操作系统中的“文件管理系统”,也就是文件子系统。
虽然上面我们列举了混用文件系统的概念的几种情形,但是却也不能说上述说法就是错误的,因为文件系统概念本身就囊括众多概念,几乎可以说在操作系统中自内存管理、系统调度到I/O系统、设备驱动等各个部分都和文件系统联系密切,有些部分和文件系统甚至未必能明确划分——所以不能只知道文件系统是系统中数据的存储结构,一定要全面认识文件系统在操作系统中的角色,才能具备自己开发新文件系统的能力。
全国自考操作系统(存储管理)模拟试卷2(题后含答案及解析) 题型有:1. 单项选择题 3. 填空题 4. 简答题 5. 综合题 6. 判断题单项选择题1.源程序经过编译或者汇编生成的机器指令集合,称为_______。
A.源程序B.目标程序C.可执行程序D.非执行程序正确答案:B解析:源程序经过编译或者汇编生成的机器指令集合不一定是可执行程序,如C编译用-c选项对不包括全部的模块的C程序编译生成的.o代码是目标程序,但不是可执行程序。
知识模块:存储管理2.动态重定位是在程序的_______中进行的。
A.编译过程B.连接过程C.装入过程D.执行过程正确答案:D 涉及知识点:存储管理3.下面几条中,_______是动态重定位的特点。
A.需要一个复杂的重定位装入程序B.存储管理算法比较简单C.不需地址变换硬件机构的支持D.在执行时将逻辑地址变换成内存地址正确答案:D 涉及知识点:存储管理4.固定分区存储管理一般采用_______进行主存空间的分配。
A.首次适应分配算法B.循环首次适应分配算法C.最优适应分配算法D.顺序分配算法正确答案:C解析:为了节省内存,减少内部碎片,固定分区存储管理一般不采用首次适应分配算法,而采用相对来说较费时的最优适应分配算法。
知识模块:存储管理5.在可变分区管理方式下,在释放和回收空闲区,若已判定“空闲区表第j栏中的始址=释放的分区始址+长度”,则表示_______。
A.归还区有上邻空闲区B.归还区有下邻空闲区C.归还区有上下邻空闲区D.归还区无相邻空闲区正确答案:B解析:说明回收的分区尾地址与空闲区表该项登记的空闲区始址相邻。
知识模块:存储管理6.采用单一连续区存储管理时,若作业地址空间大于空闲内存空间,可采用_______把不会同时工作的程序段轮流装入主存区执行。
A.对换技术B.可变分区技术C.虚拟存储技术D.覆盖技术正确答案:D 涉及知识点:存储管理7.将作业部分或全部移到外存,以调入其他的作业的技术称为_______。
摘要计算机发展到今天,从个人计算机到巨型计算机系统,毫无例外都配置一种或是多种操作系统。
操作系统管理和控制计算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并且为用户提供一个良好的工作环境和友好的接口。
在计算机操作系统的功能中,对文件存储设备的管理是一项非常重要的任务,文件在存储器上按一定的顺序有组织地存放,使得用户访问高效,操作方便。
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.2 i节点模块 (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.2 i节点模块3.2.1功能i节点模块是是i节点的请求和释放操作。
主要的函数有:struct inode * ialloc()从磁盘上申请一个i节点:当需要建立一个目录或是建立一个文件的时候需要新的i节点。
一般会在这个时候调用。
Void ifree(struct inode* pinode)从磁盘上释放一个i节点:当从文件系统中删除某个文件或是目录的时候,应首先删除它的磁盘i节点项。
struct inode * iget (unsigned __int16 dinodeid)从磁盘上读i节点到内存。
void iput(struct inode * pinode)从内存中释放掉i节点,不影响磁盘的i节点。
3.2.2 数据结构/*内存i节点*/struct inode{struct inode *i_forw;struct inode *i_back;char i_flag;unsigned int i_ino; /*磁盘i节点标号*/unsigned int i_count; /*引用计数*/unsigned short di_number;/*关联文件,当为0时,则删除该文件*/unsigned short di_mode; /*存取权限*/unsigned short di_uid; /*磁盘i节点用户id*/unsigned short di_gid; /*磁盘i节点组id*/unsigned short di_size; /*文件大小*/unsigned int di_addr[NADDR]; /*物理块号*/};/*磁盘i节点*/struct dinode{unsigned short di_number; /*关联文件数*/unsigned short di_mode; /*存取权限*/unsigned short di_uid;unsigned short di_gid;unsigned long di_size; /*文件大小*/unsigned int di_addr[NADDR]; /*物理块号*/};/*超级块*/struct filsys{unsigned short s_isize; /*i节点块块数*/unsigned long s_fsize; /*数据块块数*/unsigned int s_nfree; /*空闲块块数*/unsigned short s_pfree; /*空闲块指针*/unsigned int s_free[NICFREE]; /*空闲块堆栈*/unsigned int s_ninode; /*空闲i节点数*/unsigned short s_pinode; /*空闲i节点指针*/unsigned int s_inode[NICINOD];/*空闲i节点数组*/unsigned int s_rinode; /*铭记i节点*/char s_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功能是读磁盘的相关数据到内存,为了用户可以对文件系统的操作。
实现函数:void install()启动,安装文件系统void halt()关闭系统。
3.3.2 数据结构及流程图系统装载关闭系统3.3.3算法函数名:install功能:装载系统数据算法:先将超级块数据读到内存,然后初始化系统打开文本表(SOF),读根目录的i节点到内存,读根目录到内存,设置为当前目录。
函数名:halt功能:关闭系统算法:将当前目录写入覆盖到磁盘目录的数据,关闭所有系统打开文件表中的文件。
退出文件系统。
3.4用户登录注销模块3.4.1功能此模块处理用户登陆系统和推出系统的管理,涉及到的操作函数主要有login()和logout().3.4.2 数据结构及流程图数据结构:/*用户打开表*/struct user{unsigned short u_default_mode;unsigned short u_uid; /*用户标志*/unsigned short u_gid; /*用户组标志*/unsigned short u_ofile[NOFILE]; /*用户打开表*/};/*用户密码*/struct pwd{unsigned short p_uid;unsigned short p_gid;char password[PWDSIZ];};用户登录用户退出3.4.3算法函数名:login功能:用户登录文件系统算法:根据用的输入用户名和密码,从passsword文件中判断是否正确,假如正确则将该用户加入到登录的用户表中,初始化此用户的打开文件表。