




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 操作系统原理课程设计实践报告全套设计加扣 3012250582题 目:Linux 文件管理系统仿真姓 名:学 院:信息科技学院专 业:计算机科学技术系班 级:计科121、计科122学 号:1指导教师:2015年3月 18 日Linux文件管理系统仿真摘要:计算机发展到今天,无论是移动平台,还是PC/MAC平台,亦或是巨型计算机系统,毫无例外都配置一种或多种操作系统,操作系统管理和控制计算机系统中的所有硬,软件资源,合理的组织计算机工作流程,并且为用户提供一个良好的工作环境和友好的接口。在计算机操作系统的功能中,对文件存储设备的管理是一项非常重要的任务,文件在存储器上按一定的顺序有组织的存放,
2、使得用户访问高效,操作方便。Linux系统采用的SFD和BFD方式管理文件,SFD称为符号文件目录,存放文件名以及致使该文件说明信息表标识符ID;把存放文件说明信息和相应的标识符的BFD称为 i节点。Linux系统的文件系统将存储设别分为引导块,超级快,i节点区,目录和数据区四个存储区。引导块主要是为了存储引导系统启动的数据。关键词:Linux,文件管理系统,仿真Linux File Management System SimulationAbstract:Computer development today, whether it is a mobile platform, or PC /
3、MAC platforms, or by a giant computer system, without exception, are equipped with one or more operating systems, operating system management and control computer system, all hardware and software resources reasonable organizational computer workflow, and provide a good working environment and frien
4、dly interface for users. In the computer operating system functions for file storage device management is a very important task, files on the memory according to a certain order of organized storage, enabling users to access and efficient, easy to operate. BFD SFD and manage file system using Linux,
5、 SFD called symbol file directory, file name and store instructions cause the file information table identifier ID; to store the file description BFD information and the corresponding identifiers called i-node. Linux systems file system will not be divided into the boot block storage devices, super
6、fast, i node area, directories and data area four storage areas. Mainly boot block for storing boot data system startup.Key words: Linux, File Management System, Simulation理论基础:通常把文件与管理信息资源的管理程序的集合成为文件系统,它是操作系统中负责存取和管理信息资源的模块,采用统一方法管理用户信息和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套行之有效的文件使用及操作方法。“文件”这一术语不但反映用户概念中
7、的逻辑结构,而且同存放在它的外存的存储结构紧密相关,所以必须从逻辑文件和物理文件两个侧面来观察文件。对于用户而言,可按照需要并遵循文件系统的规则来定义文件信息的逻辑结构,由文件系统提供按名存取方式来实现对文件信息的存储和检索;对于系统而言,必须采用特定数据结构和有效的算法实现文件的逻辑结构到存储结构的映射,实现对文件存储空间和文件信息的管理,提供多种存取方法。例如,用户希望与具体的存储硬件无关,使用路径名、文件名、文件内位移就可执行数据的读、写、修改和删除操作;而作为实现这些功能的文件系统来说,其工作与存储硬件紧密相关、是将用户的文件操作请求转化为对磁盘上的信息按照所在物理位置进行寻址、读写和
8、控制。所以,文件系统的功能就是在逻辑文件与物理文件、逻辑地址与物理地址、逻辑结构与物理结构之实现转换、使得存取速度快、存储空间利用率高、数据可共享、安全可靠性好。文件系统的主要功能有文件的按名存取,实现从逻辑文件到物理文件的转化;文件目录的建立和维护;文件的查找和定位;文件存储空间的分配和管理;提供文件的存取方法和文件存储结构;实现文件共享、保护和保密;提供一组易用的文件操作和命令;提供与设备管理交互的统一接口。目的及意义:本次课程设计的最大的目的就是使自己可以进一步掌握对Linux文件管理系统的认知,加深对Linux下的文件系统特点的认识,如便于用户使用,文件安全可靠,有效的利用存储空间,提
9、供共享功能等等功能,更加深刻的掌握文件的命名方式,文件类型,文件属性,文件的存取方法,更深的理解文件目录结构,文件的组织与数据存储,文件的共享,文件的空间管理,进一步了解文件内存映射机制,文件系统的性能和可靠性。目的是能够巩固以上文件系统的知识,并且能自己模拟一个虚拟文件系统。设计思想:首先系统要完成初始化的任务,建立起整个系统,在初始化的过程中,将保存在.txt文件中的数据(包括位示图,索引,磁盘块上的文件数据等)读取到内存的相应数据结构当中,然后等待用户登录使用文件系统,用户登录模块,对用户的用户名和密码进行验证(允许用户用限次的尝试),如果用户登录成功,则系统进入等待用户输入的状态,用户
10、输入指令后,系统按照即定方式处理用户请求,用户退出前,将当前系统的状态以及所有数据保存到.txt文件当中,之后系统转入登录模块,等待下一位用户的登录。功能说明:1、系统初始化:系统的初始化要完成文件系统的建立,包括以下几部分:请求内存、设置位示图、初始化文件索引、初始化文本块链表、初始化系统的当前状态、创建一个根目录做为系统的根,并且将.txt文件中的数据读入到相应的数据结构当中。2、用户登录模块内置一些用户名和密码,用来验证登录用户的身份,用户登录成功后会初始化当前用户等一系列的系统当前信息,默认用户的类型为普通用户,如果用户未能通过身份验证,提示用户登录失败,退出整个系统。3、创建文件功能
11、只支持在当前目录创建文件,根据位示图找到一个未使用的文件块用来存放用户的文件信息,根据系统当前状态来构建一个文件系统元素放入到找到的文件块中,新创建的文件状态为关闭,同时更新位示图和文件索引,并且根据文件空间管理中的文件块列表法修改磁盘块链表。4、文件打开功能只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为打开。5、文件读取功能只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。通过类似的查找方式,找到文件的数据部分,将数据显示到界面。6、文件写入功能只支持在当前目录进行操作,前提是用户已
12、执行文件打开的命令,否则会提示用户先打开文件。命令成功后,会等待用户的输入,用户输入完毕,使用CTRL+D,结束输入,系统会读入用户的输入内容,保存到相应的文件块(注意,如果用户的输入太多,会出现越界或截取用户输入一部分的现象)。7、文件的关闭功能只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为关闭。8、删除文件功能只支持在当前目录进行操作,通过检测用户指定的名字检测时文件还是文件夹,若是文件,则直接删除(这里有一个细节:即若当前要删除的文件正在被共享,则只删除其对应的索引项,并且执行i_nlink的操作,知道i_nli
13、nk为0才彻底释放文件所占的磁盘块并且更新位示图),并且更新相应的索引,位示图以及磁盘块链表,若是文件夹,则将其与其级联的所有子文件夹和子文件全部删除并且更新相应的索引,位示图以及释放磁盘块9、创建子目录功能只支持在当前目录创建文件,与创建文件有点类似,只是文件夹在文件元素结构中的数据部分为空。同样会更新位示图和文件索引,并且根据文件空间管理中的文件块列表法修改磁盘块链表。10、改变当前目录功能只支持进入下一层的一个文件夹和回到父目录,实现方式为通过系统的当前状态,获取一个指向目标文件夹的指针做为当前的父节点,改变当前的路径为目标路径,改变用户当前所在层。11、列出文件目录功能只支持在当前目录
14、进行操作,根据文件元素的名称文件元素所在层父节点可以唯一的标识一个文件元素的关系在文件索引中搜索出当前层的所有文件元素。并且列出所有元素的文件名,创建时间,最后修改时间,内容,被多少个目录所共享(若为文件夹是没有此项),文件类型,可供操作权限,文件当前状态以及文件大小。12、拷贝文件内容只支持在当前目录进行操作,根据文件元素的名称文件元素所在层父节点+有效位可以唯一的找到指定要复制的文件元素,将文件名和文件内容复制到剪切板(一个文件数据类型)。13、粘贴文件内容只支持在当前目录下进行操作,进入想要粘贴到的目录下,根据剪切板中的文件名和文件内容复制到剪切板,然后依据文件名和文件内容创建一个新的文
15、件(修改相应的位示图,索引,物理块),以完成粘贴文件的操作。14、重命名文件名与拷贝文件的操作相类似,将要改名的文件的inode号和文件名保存在一个缓冲区中,然后根据文件元素的名称文件元素所在层父节点+有效位找到该文件,并且修改文件名,同时修改索引当中的文件名。15、文件共享目前只完成到可以进行静态共享,静态共享只可以共享文件不能共享文件夹,根据文件元素的名称文件元素所在层父节点+有效位找到该文件inode号,然后将该文件信息保存到缓冲区,然后转到想要共享的目录下,工具要链接的文件的文件名,inode号,当前文件层次,当前父节点新建一个索引,表示根据索引在该目录下也能检索到该被共享的文件。16
16、、退出功能用户请求退出时,保存当前系统状态,所有数据,包括位示图,索引以及文件块链表,跳出命令处理,提示用户退出系统,转入到登录模块等待下一个用户的登录。核心数据结构说明:结构体说明1、文件元素可供操作性权限,在创建文件或者文件夹时候默认将文件或者文件夹的操作权限置为protecttypedef enum pub,/任何人可做任何操作protect,/非创建者或ADMIN,只可以察看pri/非创建者或ADMIN,不可以做任何操作 FEAccess;2、文件元素类型,分为文件和文件夹typedef enumfile,/文件dir/文件夹 FEType;3、用户类型,分为管理者和一般用户typed
17、ef enumadmin,/管理者,拥用所有权限comm/一般用户 UserType;4、文件状态,有关闭、打开、读取、写入四种状态typedef enumclosed,opened,reading,writing FileStatus;5、一个文件索引结构,包括文件元素索引编号,文件元素名,父亲节点名,文件元素所在物理块号,文件元素所在层次以及有效位typedef struct unsigned Index;/文件元素索引编号char FileNameMAXFILENAMELEN;/文件元素名char ParentNameMAXFILENAMELEN;/父节点名unsigned FileBl
18、ockId;/文件元素所在物理块编号unsigned FileLevel;/文件元素所在层次,层文件元素名为一个文件元素的逻辑位置unsigned effect;/是否有效,0-无效,1-有效 FileIndexElement;6、文件索引结构,文件索引的数据结构是一个数组,每个数组元素代表一个文件,限定了文件索引的最大长度以及索引的数量typedef structFileIndexElement *FIStart;/文件系统中的文件索引起始位置unsigned FILen;/文件索引的最大长度unsigned FICount;/文件索引数量 FileIndex;索引的结构如图表1所示:图表
19、17、文件块的结构,整个文件块的物理结构为单链表的结构,其中每个文件块中包括有自己的编号,容量和地址(自己的地址和下一个文件块的地址)typedef struct fbunsigned FileBlockId;/文件块编号unsigned FileBlockCap;/文件块的容量char *FileBlockAddr;/文件块地址struct fb *next;/下一个文件块的地址 FileBlock;8、文件系统的位示图结构,为一个定长的一维数组,每个数组元素对应一个文件块,用来表示该文件块中是否有数据typedef struct unsigned BitMapLen;/文件位示图长度cha
20、r *BMStart;/位示图的起始指针 BitMap;9、文件系统结构,包括整个文件系统的其实地址,文件系统的容量,位示图,文件系统中文件块的数量,文件块的收地址,文件索引typedef struct char *FSStart;/文件系统的起始地址unsigned FileSystemCap;/文件系统的容量BitMap bm;/文件系统中的位示图unsigned FileBlockCou;/文件系统中文件块的数量FileBlock *head;/文件系统中文件块首地址FileIndex FI;/文件系统中的文件索引 FileSystem;系统结构如图表2:图表 210、文件系统中的元素结
21、构,包括文件和文件夹,这个结构体用来表示一个文件的所有属性,包括父亲节点,所在层次,文件元素名,所在物理块编号,文件元素的长度,文件元素的类型,可供操作的权限,用户名称,用户类型,创建时间,最后一次修改时间,文件的数据开始地址,当前状态和inode的连接计数typedef struct fsestruct fse *parent;/指向自己的父亲节点unsigned FileLevel;/文件元素所在层次,层文件元素名为一个文件元素的逻辑位置char FileNameMAXFILENAMELEN;/文件元素名unsigned FileBlockId;/文件元素所在物理块编号unsigned F
22、ileElemLen;/文件元素的长度FEType Type;/文件元素类型FEAccess Access;/文件元素可供操作的权限char *UserName;/用户名称UserType ut;/用户类型char CreateTime18;/创建时间,日期格式:MM/DD/YY HH:MI:SSchar LastModTime18;/最后一次修改时间char *FileData;/一个文件的数据开始地址,文件夹时该值为NULLFileStatus fileStu;/如果是一个文件表示文件当前的状态int i_nlink;/静态连接中node的连接计数 FSElement;11、系统当前状态,
23、程序包括了用户名,用户类型,所在文件系统层,当前层的父节点,当前路径,其中几乎所有功能都离不开这个结构体,一切操作都基于当前系统状态typedef structchar *UserName;/用户名称UserType ut;/用户类型int FileLevel;/用户所在文件系统层FSElement *CurrParent;/当前层的父节点char *CurrentPath;/当前路径 CurrentStatus;核心算法流程1、创建文件功能流程void Create(char *filename)for (int i = 0; i FileName, filename) = 0 & fs-p
24、arent-FileName = CS.CurrParent-FileName)printf(对不起,当前目录已有同名文件,请重新输入。n);flag = 1;printf(%s %sn$, CS.UserName, CS.CurrentPath);break;if (flag=0)if (strcmp(filename, ) = 0)Break;elseCreateFileElement(protect, filename, file, NULL, CS.CurrParent);printf(%s %sn$, CS.UserName, CS.CurrentPath);FSElement *
25、CreateFileElement(FEAccess acc, char *filename, FEType type, char *filecontent, FSElement *parent)/acc 文件元素可操作权限,filename 文件元素名称,/type 文件元素类型,filecontent 文件内容/查找第一个空白文件块IDunsigned blankFileBlockId = FindBlankFileBlockId();if (blankFileBlockId = FILEBLOCKCOU)printf(未找到一个文件块的idn);return NULL;/查找第一个空白块
26、的地址char *blank = FindBlankFileBlock(blankFileBlockId);if (blank = NULL)printf(未找到一个文件块的地址n);return NULL;FSElement *fs = (FSElement *)blank;/*文件块赋值*/if (type = dir)fs-i_nlink = 0;elsefs-i_nlink = 1;/更新索引if (parent = NULL)AddFileIndex(blankFileBlockId, CS.FileLevel, filename, NULL);elseAddFileIndex(bl
27、ankFileBlockId, CS.FileLevel, filename, parent-FileName);/更新BITMAPUpdateBitMap(blankFileBlockId);return fs;如图所示:2、改变当前目录功能void Cd(char *path)int splitDisplayCou = 0;/分割符出现的次数char display100 = ;if(strcmp(path, .) = 0)if (CS.FileLevel 0)/*改变Currentstatus中CurrentPath的值*/elsefor (i = 0; i FileName) = 0
28、& FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);if(fselem-Type=0)/如果path路径指向一个文件break;/*改变Currentstatus的值*/break;printf(n%sn, display);printf(%s %sn$, CS.U
29、serName, CS.CurrentPath);流程如图所示:3、 命令分拣函数根据用户输入的命令确定需要调用的功能函数以及函数所需要的参数,并进行下一步操作重要代码如下:void CommandTrans()char commandCOMMANDMAXLEN;gets(command);char key10;char pathCOMMANDMAXLEN - 10;while (true)memset(key, 0, 10);memset(path, 0, COMMANDMAXLEN - 10);FindCommKey(command, key, path); unsigned i;for
30、(i = 0; i PROSETCOMMCOU; i+)if (strcmp(key, PROSETCOMMi) = 0)break;switch (i)case 0:Create(path);break;case 1:Open(path);break;case 2:Read(path);break;case 3:Write(path);break;/*略去部分case*/default:printf(n命令错误。n);printf(%s %sn$, CS.UserName, CS.CurrentPath);void FindCommKey(char *command, char *key,
31、char *path)for (unsigned i = 0; i strlen(command); i+)if (commandi = )i+;if (i strlen(command)strcpy(path, command + i);break;if (i = 9)keyi = commandi;elsefor (unsigned j = i; j strlen(command); j+)if (commandj != )strcpy(path, command + j);break;break;strlwr(key);strlwr(path);4、 删除功能实现流程图为主要代码:voi
32、d Delete(char *path)char display100 = ;for (unsigned i = 0; i FileName) = 0 & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fs = (FSElement*)(FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);if (fs-i_nlink1)DeleteFileIndex(FS.
33、FI.FIStarti.FileBlockId, FS.FI.FIStarti.FileLevel, FS.FI.FIStarti.FileName, FS.FI.FIStarti.ParentName, fs-Type);fs-i_nlink-;elseDeleteBitMap(FS.FI.FIStarti.FileBlockId);DeleteFileIndex(FS.FI.FIStarti.FileBlockId, FS.FI.FIStarti.FileLevel, FS.FI.FIStarti.FileName, FS.FI.FIStarti.ParentName, fs-Type);
34、if (fs-Type = file)fs-FileData = NULL;DeleteBlankBlock(FS.head,(FileBlock*)fs);strcpy(display, 文件已删除。n);break;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要删除的文件。n);printf(n%sn, display);printf(%s %sn$, CS.UserName, CS.CurrentPath);/* 函数介绍:更新位示图(置为0)* 输入参数:fileblockid 文件块ID*/void DeleteBitMap(u
35、nsigned fileblockid)/计复所在位示图的位置int dirInBitmap = (int)(fileblockid / 8);int dirInChar = fileblockid % 8;char *c = &(FS.bm.BMStartdirInBitmap);char xor;switch (dirInChar)case 0:xor = 0x7F;break;case 1:xor = 0xBF;break;case 2:xor = 0xDF;break;case 3:xor = 0xEF;break;case 4:xor = 0xF7;break;case 5:xor
36、= 0xFB;break;case 6:xor = 0xFD;break;case 7:xor = 0xFE;break;*c = *c & xor;/* 函数介绍:删除文件索引* 输入参数:fileblockid 文件块ID*/void DeleteFileIndex(unsigned fileblockid, unsigned filelevel, char *filename, char *parentname, FEType Type)if (Type=file)DeleteFileIndex_File(fileblockid,filelevel,filename,parentname
37、,Type);else if (Type=dir)DeleteFileIndex_Dir(fileblockid,filelevel,filename,parentname,Type);DeleteFileIndex_File(fileblockid, filelevel, filename, parentname, Type);void DeleteFileIndex_Dir(unsigned fileblockid, unsigned filelevel, char *filename, char *parentname, FEType Type)int m;for (m = 0; m T
38、ype = file)DeleteFileIndex_File(fileblockid, filelevel, filename, parentname, Type);else if (fs-Type = dir)DeleteFileIndex_Dir(fs-FileBlockId, fs-FileLevel, fs-FileName, FS.FI.FIStartm.ParentName, fs-Type);DeleteFileIndex_File(fileblockid,filelevel,filename,parentname,Type);else;void DeleteFileIndex
39、_File(unsigned fileblockid, unsigned filelevel, char *filename, char *parentname, FEType Type)int j;int flag = FS.FI.FICount;for (int i = 0; i flag; i+)if (FS.FI.FIStarti.FileBlockId = fileblockid)j = i;for (int temp = j; temp FS.FI.FICount-1; temp+)FS.FI.FIStarttemp = FS.FI.FIStarttemp+1;if (parentname != NULL)memset(FS.FI.FIStartFS.FI.FICount.ParentName, 0, MAXFILENAMELEN);if (filename != NULL)memset(FS.FI.FIStartFS.FI.FICount.FileName, 0, MAXFILENAMELEN);else;FS.FI.FIStartFS.FI.FICount.FileLevel = NULL;FS.FI.FIStartFS.FI.F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版场项目投标失败后人力资源配置调整合同
- 2025版办事处环保设施建设及运营管理协议
- 二零二五版范文范本:高科技产业研发合作协议
- 宝宝饮食健康课件
- 2025版智能办公区使用权租赁合作合同
- 二零二五年度环保绿色能源项目租赁服务协议
- 二零二五年财务主管在职期间保密义务及违约责任合同
- 2025版笔译服务与翻译服务标准化合同
- 2025年度越野车抵押租赁经营合同
- 二零二五年度材料运输合同范本(含应急预案)
- 行政审批业务知识讲堂
- CNAS-CC11:2018 多场所组织的管理体系审核与认证
- 紧急信息报送
- 2025年度大型活动消防安保服务合同范本
- 《电阻基础知识简介》课件
- 《儿歌运用于幼儿园教育问题研究的文献综述》8600字
- DB21T 3353-2020 高延性混凝土加固技术规程
- 土地平整工程施工技术方案
- 消防主机接入合同模板
- 机加产品类销售合同(2篇)
- 三公经费培训
评论
0/150
提交评论