操作系统课程设计报告-文件系统

上传人:aa****6 文档编号:29992440 上传时间:2018-01-26 格式:DOC 页数:66 大小:503.50KB
返回 下载 相关 举报
操作系统课程设计报告-文件系统_第1页
第1页 / 共66页
操作系统课程设计报告-文件系统_第2页
第2页 / 共66页
操作系统课程设计报告-文件系统_第3页
第3页 / 共66页
操作系统课程设计报告-文件系统_第4页
第4页 / 共66页
操作系统课程设计报告-文件系统_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《操作系统课程设计报告-文件系统》由会员分享,可在线阅读,更多相关《操作系统课程设计报告-文件系统(66页珍藏版)》请在金锄头文库上搜索。

1、东莞理工学院操作系统课程设计报告第 1 页 共 66 页设计时间: 2011-1-5 至 2011-1-7 专业年级:08 计科 4 班 姓名: 一.设计目的:通过操作系统内其中一个子系统的设计和实现,掌握 Linux 文件系统的基本原理、结构和实现方法,掌握 Linux 文件系统中文件的建立、打开、读/写、执行、属性等系统调用的使用,学会设计简单的文件系统并实现一组操作,以及学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握。同时,掌握操作系统设计的方法与技巧,增强系统软件设计的实际工作能力。二.设计内容:为 LINUX 设计一个简单的二级文件系统。本文件系统采用类似 DOS 系

2、统的文件管理方式,每次调用该文件系统时,首先申请一定的内存空间,然后对该内存空间进行分配。将申请到的空间划分为目录区,文件区;采用位示图进行空间管理,盘块的分配使用显示链接(FAT 表)的方式。每次调用该文件系统时自动为其分配空间,并将上次操作的结果从硬盘上调入内存;当结束调用时则将操作的结果重新存入硬盘,以便下次调用。 (每次使用都会自动搜索文件系统,以此确定是否是第一次使用;若是则格式化生成文件系统,否则读取已存在的文件系统。 )三设计过程1、 实现功能该系统具备下列功能:login 用户登录 logout 注销mkdir/md 创建目录 rmdir/rd 删除目录cd/cd . 修改目录

3、 creat 创建文件open 打开文件 dir 显示当前目录和文件write 读文件 delete 删除文件close 关闭文件2、 添加功能(1) 制作了一个“操作命令符”列表框,说明接下来如何操作,这样有利于更好地阅读、操作和运行程序,使不懂得程序代码的人也可以运行该程序,更好地理解该程序实现的功能。(2) 在命令解释层函数 cmdexp()里加了一些选择和操作功能,增加程序实现的功能,如原来程序只有显示当前目录和文件、创建目录和修改目录的功能,把它拓展到系统所要求的全部功能,并在原有的程序的基础上进行相应的修改,使程序更加完善。3、 设计思路东莞理工学院操作系统课程设计报告第 2 页

4、共 66 页(1) 要将文件存储在磁盘上,必须为之分配相应的存储空间,并对文件存储空间进行管理,为了简化对文件的访问和共享,还应设置相应的用户文件描述表及文件表。文件卷的组织UNIX 中,把每个磁盘(带)看作是一个文件卷,每个文件卷上可存放一个具有独立目录结构的文件系统。一个文件卷包含许多物理块,并按块号排列如下图:0# 1# 2# 3# K# K+1# N#其中,0#块用于系统引导或空闲,1#为超级块(superblock),存放文件卷的资源管理信息,如整个文件卷的盘块数、磁盘索引结点的盘块数、空闲盘块号栈及指针等。2#K#存放磁盘索引结点。每个索引结点 64B,第 K+1#N#存放文件数据

5、。空闲盘块的组织UNIX 采用成组链接法组织空闲盘块。它将若干个空闲盘块划归一个组,将每组中所有盘块号存放在其前一组的第一个空闲盘块中,而第一组中所有空闲盘块号放入超级块的空闲盘块号栈中。例: 超级块表109 106 103 100 95310 307 304 301空闲盘块的分配与回收内核要从文件系统中分配一盘块时,先检查超级块空闲盘块号栈是否已上锁。是则调用 sleep 睡眠,否则将超级块中空闲盘块栈栈顶盘块号分配出去。回收时,若空闲盘块号栈未满,直接将回收盘块编号记入空闲盘块号栈中。若回收时栈已满,须先将栈中的所有空闲盘块号复制到新回收的盘块中,再将新回收盘块的编号作为新栈的栈底块号进栈

6、。(2) UNIX 中,为了加速对文件目录的查找,将文件名和文件说明分开,由文件说明形成一个称为索引结点的数据结构,而相应的文件目录项则只由文件符号名和指向索引结点的指针构成。对目录的管理应包括的功能有:对索引结点的管理:每个文件都有一唯一的磁盘索引结点(di_node)。文件被打开后,还有一个内存索引结点(i_node)。创建一新文件时,就为之建立一个磁盘索引结点,以将文件的有关信息记入其中,并将用户提供的文件名和磁盘索引结点号一并组成一个新目录项,记入其父目录文件中。文件被撤消时,系统要回收该文件的磁盘索引结点,从其父目录中删除该目录项。随着文件的打开与关闭,系统还要为之分配和回收内存索引

7、结点。磁盘索引结点中,包含有关文件的下述一系列信息:文件模式 di_mode、文件所有者用户标识符 di_uid、同组用户标识符 di_gid、文件长度 di_size、文件的联接计数di_nlink、文件的物理地址 di_addr、文件的访问时间 di_atime、文件的修改时间di_mtime 和文件的建立时间 di_citime。内存索引结点:文件被打开后,系统为它在内存索引结点表区中建一内存索引结点,以方便用户和系统对文件的访问。磁盘索引结点的分配与回收211 208 205 202 东莞理工学院操作系统课程设计报告第 3 页 共 66 页分配过程 ialloc:当内核创建一新文件时,

8、要为之分配一空闲磁盘 i 结点。如分配成功,便再分配一内存 i 结点。其过程如下:检查超级块上锁否。由于超级块是临界资源,诸进程必须互斥地访问它,故在进入 ialloc 后,要先检查它是否已上锁,若是则睡眠等待;检查 i 结点栈空否。若 i 结点栈中已无空闲结点编号,则应从盘中再调入一批 i 结点号进栈。若盘中已无空闲 i 结点,则出错处理,返回;从空闲 i 结点编号栈中分配一 i 结点,并对它初始化、填写有关文件的属性;分配内存 i 结点;将磁盘 i 结点总数-1,置超级块修改标志,返回。回收过程 ifree:当删除文件时,应回收其所占用的盘块及相应的磁盘 i 结点。具体有:检查超级块上锁否

9、。若是,直接返回,即不把本次回收的 i 结点号记入空闲 i 结点编号栈中;检查 i 结点编号栈满否。若已满,无法再装入新回收的 i 结点号,立即返回,若未满,便将回收的 i 结点编号进栈,并使当前空闲结点数+1;置超级块修改标志,返回。内存索引结点的分配与回收分配过程 iget:虽然 iget 用在打开文件时为之分配 i 结点,但由于允许文件被共享,因此,如果一文件已被其他用户打开并有了内存 i 结点,则此时只需将 i 结点中的引用计数+1。如果文件尚未被任何用户(进程)打开,则由 iget 过程为该文件分配一内存 i 结点,并调用 bread 过程将其磁盘 i 结点的内容拷贝到内存 i 结点

10、中并进行初始化。回收过程 iput:进程要关闭某文件时,须调用 iput 过程,先对该文件内存 i 结点中的引用计数-1。若结果为 0,便回收该内存 i 结点,再对该文件的磁盘 i 结点中的连接计数减 1,若其结果也为 0,便删除此文件,并回收分配给该文件的盘块和磁盘 i 结点。(3)主要文件操作的处理过程打开文件 open:检索目录,内核调用 namei 从根目录或从当前目录,沿目录树查找指定的索引结点。若未找到或该文件不允许存取,则出错处理返回 NULL,否则转入下一步;分配内存索引结点,如果该文件已被其它用户打开,只需对上一步中所找到的 i 结点引用计数+1,否则应为被打开文件分配一内存

11、 i 结点,并调用磁盘读过程将磁盘 i 结点的内容拷贝到内存 i 结点中,并设置 i.count=1;分配文件表项,为已打开的文件分配一文件表项,使表项中的 f.inode 指向内存索引结点;分配用户文件描述表项。创建文件 creat:核心调用 namei,从根目录或当前目录开始,逐级向下查找指定的索引结点。此时有以下二种情况:重写文件,namei 找到了指定 i 结点,调用 free 释放原有文件的磁盘块。此时内核忽略用户指定的许可权方式和所有者,而保持原有文件的存取权限方式和文件主。最后打开。新建,namei 未找到。调用 ialloc,为新创建的文件分配一磁盘索引结点,并将新文件名及所分

12、配到的 i 结点编号,写入其父目录中,建立一新目录项。利用与 open 相同的方式,把新文件打开。关闭文件 close:根据用户文件描述符 fd,从相应的用户文件描述符表项中,获得指向文件表项的指针 fp,再对该文件表项中的 f.count-1。4、 算法和流程图(1)部分主要的算法:主函数:#include #include filsys.hstruct hinode hinodeNHINO; /* 查找内存 i 节点的 hash 表 */struct filsys filsys; /* 超级块数据结构 */struct inode * cur_path_inode; /* 文件系统(内存

13、i 节点)数据结构 */东莞理工学院操作系统课程设计报告第 4 页 共 66 页struct user userUSERNUM; /* 用户打开表数据结构 */struct file sys_ofileSYSOPENFILE; /* 系统打开表数据结构 */struct direct cur_directNOFILE; /* 目录数据结构路径 */unsigned short cur_dir_id; /* 当前目录指针 */char cur_path_nameDIRSIZ;FILE *fd; /* 本系统的所有文件指针 */void main()char reg_or_log; / 注册/ 登

14、录变量名char buf50,buf250,buf350;int i;cur_dir_id = 0;printf( nttWelcome to this system!n );printf( initializing.n );fd = fopen( filesystem.dat, r+b );if( fd != NULL ) /* 文件已经存在,不用格式化 */printf( installing.n );init(); /* 读取磁盘数据 */else /* 文件已经存在,要进行格式化 */if( format() = 0 ) /* 格式化 */return; /* 格式化不成功 */pri

15、ntf( installing.n );init(); /* 读取磁盘数据 */AGAIN:printf( nDo you want to register or login? (R/L) );while( 1 )reg_or_log = getch();/* 注册新用户 */if( reg_or_log = r ) | ( reg_or_log = R )printf( %cn, reg_or_log );reg();goto AGAIN;/* 登陆已有用户 */else if( reg_or_log = l ) | ( reg_or_log = L )printf( %cn, reg_or_log );东莞理工学院操作系统课程设计报告第 5 页 共 66 页if( login() = 0) /* 登陆不成功 */goto AGAIN;break;strcpy( cur_directcur_dir_id.d_name, / );cur_directcur_dir_id.d_ino = ROOTDIR;strcpy( cur_path_name, / );printf(n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号