《2022年操作系统实验_文件I节点实现 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验_文件I节点实现 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 实验 5 指导 实验内容 为 Linux 系统设计一个简单的二级文件系统。要求做到以下几点:1. 可以实现下列几条命令:login用户登录dir 列目录create创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护 (1) 设计思想本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。对这些内容感兴趣的读者,可以在本系统的程序基础上进行扩充。(2) 主要数据
2、结构a)I 节点struct inode struct inode *i_forw; struct inode *i_back; char I_flag; unsigned int i_into; /*磁盘 i 节点标号 */ unsigned int i_count; /*引用计数 */ unsigned short di_number; /*关联文件书,当为0 时,则删除该文件*/ unsigned short di_mode; /*存取权限 */ unsigned short di_uid; /*磁盘 i 节点用户 */ unsigned short di_gid; /*磁盘 i 节点组
3、 */ Unsigned int di_addrNADDR; /*物理块号 */ b) 磁盘 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_addrNADDR; /*物理块号 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
4、 - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 2 c) 目录项结构Struct direct char d_nameDIRSIZ; /*目录名 */ unsigned int d_ino; /*目录号 */ d) 超级块Struct filsys unsigned short s_isize; /*i节点块块数 */ unsigned long s_fsize; /*数据块块数 */ unsigned int s_nfree; /*空闲块块数 */ unsigned short s_pfree; /*空闲块指针 */ u
5、nsigned int s_freeNICFREE; /*空闲块堆栈 */ unsigned int s_ninode; /*空闲 i 节点数 */ unsigned short s_pinode; /*空闲 i 节点指针 */ unsigned int s_inodeNICINOD; /*空闲 i 节点数组 */ unsigned int s_rinode; /*铭记 i 节点 */ char s_fmod; /*超级块修改标志*/ ; e) 用户密码Struct pwd unsigned short P_uid; unsigned short P_gid; char passwardPWO
6、SIZ; f) 目录Struct dir strut direct directDIRNUM; int size; g). 查找 i 内存节点的hash 表Struct hinode strut inode *iforw; h). 系统打开表Struct file char f_flag; /*文件操作标志 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 3 unsigned int f_count; /*引用计数 */
7、struct inode *f_inode; /*指向内存节点 */ unsigned long f_off; /*读/ 写指针 */ i) 用户打开表Struct user unsigned short u_default_mode; unsigned short u_uid; /*用户标志 */ unsigned short u_gid; /*用户组标志 */ unsigned short u_ofileNOFILE; /*用户打开表 */ 3. 主要函数(1)i 节点内容获取函数iget()(详细描述略) 。(2)节点内容释放函数iput()(详细描述略) 。(3)目录创建函数mkdir
8、()(详细描述略) 。(4)目录搜索函数namei() (详细描述略) 。(5)磁盘块分配函数balloc()(详细描述略) 。(6)磁盘块释放函数bfree()(详细描述略) 。(7)分配 i 节点区函数ialloc()(详细描述略) 。(8)解释结点区函数ifree( ) (详细描述略) 。(9)搜索当前目录下文件的函数iname( ) (详细描述略) 。(10)访问控制函数access ( ) (详细描述略) 。(11)显示目录和文件函数_dir ( ) (详细描述略) 。(12)改变当前目录用函数chdir ( ) (详细描述略) 。(13)打开文件函数open( ) (详细描述略)
9、。(14)创建文件函数create ( ) (详细描述略) 。(15)读文件用函数read( ) (详细描述略) 。(16)读文件用函数write ( ) (详细描述略) 。(17)用户登陆函数login ( ) (详细描述略) 。(18)用户退出函数logout ( ) (详细描述略) 。(19)文件系统格式化函数format ( ) (详细描述略) 。(20)进入文件系统函数install( ) (详细描述略) 。(21)关闭文件函数close ( ) (详细描述略) 。(22)退出文件系统函数halt ( ) (详细描述略) 。(23)文件删除函数delecte ( ) (详细描述略)
10、。4主程序说明begin Step1 对磁盘进行格式化 Step2 调用 install() ,进入文件系统 Step3 调用 _dir () ,显示当前目录 Step4 调用 login () ,用户注册 Step5 调用 mkdir ()和 chdir ()创建目录 Step6 调用 create () ,创建文件0 Step7 分配缓冲区 Step8 写文件 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 4 Step
11、9 关闭文件0 和释放缓冲 Step10 调用 mkdir ()和 chdir ()创建子目录 Step11 调用 create () ,创建文件1 Step12 分配缓冲区 Step13 写文件 1 Step14 关闭文件1 和释放缓冲 Step15 调用 chdir将当前目录移到上一级 Step16 调用 create () ,创建文件2 Step17 分配缓冲区 Step18 调用 write () ,写文件 2 Step19 关闭文件1 和释放缓冲 Step20 调用 delecte () ,删除文件0 Step21 调用 create () ,创建文件1 Step22 为文件 3 分
12、配缓冲区Step23 调用 write () ,写文件2 Step24 关闭文件3 并释放缓冲区Step25 调用 open() ,打开文件2 Step26 为文件 2 分配缓冲Step27 写文件 3 后关闭文件3 Step28 释放缓冲Step29 用户退出( logout )Step30 关闭( halt )End 由上述的描述过乘可知,该文件系统实际是为用户提供一个解释执行相关命令的环境。主程序中的大部分语句都被用来执行相应的命令。下面我们给出每个过程的相关C语言程序。读者也可以使用这些子过程,编写一个用Shell控制的文件系统界面。 1. 编写管理文件makefile 本文件系统程序
13、用编写makefile管理工具进行管理。其内容如下:*/ /* makefile */ filsys:main.o iallfre.o ballfre.o name.o access.o log.o close.o creat.o delete.o dir.o open.o rdwt.o format.o install.o halt.o cc-o filsys main.o iallfre.o ballfre.o name.o access.o log.o close.o creat.o delete.o dir.o open.o format.o install.o halt.o main
14、.o:main.c filesys.h cc-c main.c igetput.o: igetput.c filesys.h cc-c igetput.c iallfre.o: iallfre.c filesys.h cc-c iallfre.c ballfre.o: ballfre.c filesys.h cc-c ballfre.c 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 5 name.o:name.c filesy
15、s.h cc-c name.c access.o:access.c filesys.h cc-c access.c log.o:log.c filesys.h cc-c log.c close.o:close.c filesys.h cc-c close.c creat.c:creat.c filesys.h cc-c creat.c delete.o:delete.c filesys.h cc-c delete.c dir.o:dir.c filesys.h cc-c dir.c open.o:open.c filesys.h cc-c open.c rdwt.o:rdwt.c filesys.h cc-c rdwt.c format.o:format.c filesys.h cc-c format.c install.o: install.c filesys.h cc-c install.c halt.o:halt.c cc-c halt.c 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -