ImageVerifierCode 换一换
格式:DOCX , 页数:59 ,大小:125.03KB ,
资源ID:3924028      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3924028.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统文件系统实验报告后附源代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统文件系统实验报告后附源代码.docx

1、操作系统文件系统实验报告后附源代码1 课程设计简介1.1 课程设计的目的 课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。1.2 课程设计内容课程设计内容设计一个简单的多用户文件系统。即在系统中用一个文件来模拟一个磁盘;此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。实现这个文件系统。能实际演示这个文件系

2、统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。4)因系统小,文件目录的检索使用了简单的线性搜索。5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD

3、、UFD),打开文件目录(AFD)即运行文件目录,如图5.1所示。 2 数据结构的设计2.1 预定义#define BLOCKSIZ 512 /磁盘块的大小#define DATABLKNUM 512 /数据块的数目#define BLKGRUPNUM 50 /数据块组包含多少数据块#define P_N_BLOCKS 15 /inode节点中 指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 /数据块组 组数#define DINODESIZ 512 /磁盘i结点区的大小(空间32512)#define DINODENUM 32 /磁盘i结

4、点区的块数#define SYSOPENFILE 40 #define DIRNUM 32 /一个目录下的最多目录和文件的总和数#define DIRSIZ 14 /文件、目录名的长度(字节)#define UPWDSIZ 15 /密码的长度#define UNAMSIZ 15 /用户名的长度#define PWDSIZ sizeof(struct pwd) /密码结构的长度 #define PWDNUM BLOCKSIZ/PWDSIZ /密码数据空间的大小(pwd为单位)#define NOFILE 20 /一个用户最多可以打开的文件数目#define DINODESTART 4*BLOCK

5、SIZ/i结点区的开始地址-inodes table ,1引导 2超块 3block bitmap 4inode bitmap #define DATASTART (2+DINODENUM)*BLOCKSIZ /数据区的开始地址#define DATASTARTNO 36 /数据区开始指针#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#define GRUP_0 0 /管理员组#define GRUP_1 1#defi

6、ne GRUP_2 2#define GRUP_4 42.2 结构体/磁盘i结点结构,struct inode / char di_nameDIRSIZ; unsigned _int16 di_ino; /*磁盘i节点标识*/ unsigned _int16 di_number; /*关联文件数,当为0时表示删除文件*/ unsigned _int16 di_mode; /*存取权限*/ unsigned _int16 di_uid; /*磁盘i节点用户id*/ unsigned _int16 di_gid; /*磁盘i节点权限组id*/ /1管理员组 2用户组 unsigned _int32

7、 di_size; /*文件大小*/ unsigned _int32 di_ctime; /* Creation time */ unsigned _int32 di_mtime; /* Modification time */ unsigned _int16 di_blockP_N_BLOCKS; /* 一组 block 指针 */ ;/ 目录项结构struct direct char d_nameDIRSIZ; /*目录名(14字节)*/ _int16 d_ino; /*目录号*/ ;/超级快结构struct super_block unsigned _int16 s_inodes_cou

8、nt; /* inodes 计数 */ unsigned _int16 s_blocks_count; /* blocks 计数 */ unsigned _int16 s_r_blocks_count; /* 保留的 blocks 计数 */ unsigned _int16 s_free_blocks_count; / 空闲的 blocks 计数 unsigned _int16 s_free_inodes_count; /* 空闲的 inodes 计数 */ unsigned _int16 s_free_blocks_groupGROUPNUM;/新增 一个数组来记录每个数据块组中的空闲数据块

9、计数 unsigned _int16 s_first_data_block; /* 第一个数据 block */ unsigned _int16 s_log_block_size; /* block 的大小 */ unsigned _int16 s_blocks_per_group; /* 每 block group 的 block 数量 */ unsigned _int16 s_inodes_per_group; /* 每 block group 的 inode 数量 */ ;/ 用户密码struct pwd unsigned _int8 p_uid; unsigned _int8 p_gi

10、d; char usernameUNAMSIZ;/*用户名 新加的*/ char passwordUPWDSIZ; ;/ 目录结构struct dir struct direct directDIRNUM; _int16 size; ;2.3 全局变量和函数/ 全局变量unsigned _int8 di_bitmapDINODENUM; / 硬盘inode节点位图1表示已使用 0表示未使用unsigned _int8 bk_bitmapDATABLKNUM; / 数据块block位图 struct super_block filsys; /超级块struct pwd pwdPWDNUM; FI

11、LE *fd; /文件指针struct inode *cur_inode; /i节点当前目录指针struct inode *inodetemp; /i节点指针const char fsystemname20=Linux.EXT2; /模拟硬盘的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct); /目录数组char cmdhead20;/cmd 的头 表示所在哪个文件夹 、int i_lock=0;/inode位图锁 可能会多线程int b_lock=0;/block位图锁struct pwd *cur_user; /* 全局函数

12、*/extern int Format();/格式化磁盘extern int Install();/启动,安装文件系统struct inode * read_inode(int);/install里面读取文件dinodestruct direct * read_dir_data(int);/读取存储文件夹的物理块extern void showdir();/命令 dirint Enterdir(char);/进入某个文件夹 命令- cd 文件名int Fd_dirfile(char);/查找当前目录里的文件 没找到返回-1 找到返回inode号int Iscmd(char);/判断是否两个字符

13、串的命令void two_cmd(char,char);/两个字符串的命令int creat(char);/创建文件void changeinode();/交换指针char * ReadFile(char);/读取文件int mkdir(char);/创建文件夹void showbitmap();/显示位图int deletefd(char);/删除文件int editfile(char);/编辑文件int rename(char);/重命名void showhelp();/命令帮助void login();void logout();int access();/权限判断/*磁盘i节点的分配与

14、释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。)*/ int ialloc();/*开辟一个空闲的i节点,返回i节点*/磁盘块分配与释放函数int balloc(int);/申请硬盘空间结构体说明:硬盘模拟文件:每个数据块512字节,第一个数据块空闲备用,第2块是超级块,第3块是inode位图,第4块是block位图,第5块开始有32块是inode节点,然后是数据区block,512块。超级块:存放整个文件系统的基本状态,如:inode块数,block总块数,空闲的block

15、计数,空闲的inode计数,每个数据块组中的空闲块数(为block分组,便于读取),每个block的大小(512字节),每个数据块组的block块数。Inode位图:用一个数组来描述每个inode的使用状况,1表示被占用,0表示空闲。Block位图:用一个数组来描述每个数据区的block的使用状况,1表示被占用,0表示空闲。inode节点:inode记录了文件或者目录在数据区存放位置,是文件还是目录,是否系统文件,属于管理员组还是普通用户组,是由谁创建的,创建时间等。如果是目录,则还记录了里面包含多少个文件或子目录。是文件则记录了文件的大小。读取文件要先通过inode然后找到block,才能读

16、取。Block数据块:存放文件的地方,如果是目录则记录了这个目录下所有的文件和子目录的名称和所占的inode如果是文本文档,则是字节流文件。3 功能模块(或算法)描述我负责整体设计,实现底层具体设计,format格式化,install安装,login登录,ialloc申请inode空间,balloc申请block空间。3.1 format 格式化只写打开模拟文件,初始化超级快,初始化dinode位图 block位图,初始化主目录,初始化etc目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd文件,写入模拟硬盘文件。3.2 install 安装读写打开模拟文件

17、,读取dinode位图 block位图,读取主目录,读取etc目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd文件。 3.3 login 登陆用户输入用户名和密码,在passwd文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。登录流程图3.4 ialloc 申请inode空间先检测inode位图是否加锁,是则退出。加锁,检测inode空间是否还有已满,是则退出。在inode位图中顺序查找空闲的inode,找到则返回inode地址,block解锁。函数结束。流程图3.3 登录流程图 ialloc 流程图3.3 balloc流程图3

18、.4 3.5 balloc 申请block空间先检测block位图是否加锁,是则退出。加锁,检测block空间是否还有k个空闲,否则退出。在还有空闲block的组中查找是否有k个空闲,没有则去下一个block组中查找,找到则返回block地址,block解锁。函数结束。流程图3.43.5 create 创建文本文件查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以#结束。申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件内容写入inode空间和block空间。修改当前目录的结构,修改超级快,修改inode位图,bloc

19、k位图,写入模拟硬盘。流程图3.53.7 cdir 创建文件夹查找当前目录下是否有同名文件,是则退出,否则,申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件夹内容写入inode空间和block空间。修改当前目录的结构,修改超级快,修改inode位图,block位图,写入模拟硬盘。3.7 read edit 读取和追加文本文件Read-查找当前目录下是否该文件,没有则退出,否则调用access()权限判断,有权限则判断是不是文件,不是则退出,是文件则读取文件并显示。Edit-调用读取文件模块,读取成功则用户输入追加的内容,如果追加的内容大

20、于一个block则申请block空间,失败则退出,申请成功则保存文件。3.8 access(文件名) 权限判断先判断当前目录是否有该文件,在当前目录的block找到该文件,判断当前登录用户是哪个组,判断是否该用户创建,判断该文件的可见级别。如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果该文件是用户可查看文件则都具有权限。3.9 cd 进入子目录 或上级目录查找当前目录是否有该子目录,没有则退出,调用access()判断当前用户是否有权限,无则退出,有则读取该子目录的inode,将当前目录指向该目录。3.10 attr(文件名)查看文件或者文件夹的属性先查找当前目录

21、下是否有该文件或目录,有则判断文件是否系统文件,是否文本文件,是否目录,由谁创建,属于什么组,占用的block,和inode。将其全部显示出来。3.9 del 删除文件或目录查找当前目录是否有该文件名,没有则退出,有则调用access()判断是否有权限,有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删除,不是则判断是否文件夹,是文件夹则判断该文件夹下是否有文件,有文件则无法删除。提示用户是否删除,确认则删除文件,修改当前文件夹inode,block结构,修改该文件占有的inode和block位图为0,修改超级块,写入模拟硬盘。流程图3.93.8 access(文件名)

22、 权限判断先判断当前目录是否有该文件,在当前目录的block找到该文件,判断当前登录用户是哪个组,判断是否该用户创建,判断该文件的可见级别。如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果该文件是用户可查看文件则都具有权限。1格式化 和登录界面 登录后显示帮助信息 ,进入到用户文件夹下2 dir命令-显示当前目录下的文件和目录3 logout命令-注销用户普通用户无法进入admin管理员目录。操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技

23、能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,再次我表示感谢!同时,对给过我们帮助的所有同学和各位指导老师再次表示忠心的感谢!参考

24、文献1 袁庆龙,候文义Ni-P合金镀层组织形貌及显微硬度研究太原理工大学学报,2001,32(1):51-53.(连续出版物:序号 主要责任者文献题名J刊名,出版年份,卷号(期号):起止页码)2刘国钧,王连成图书馆史研究北京:高等教育出版社,1979:15-18,31(专著:序号 主要责任者文献题名出版地:出版者,出版年:起止页码)3 孙品一高校学报编辑工作现代化特征中国高等学校自然科学学报研究会科技编辑学论文集(2)北京:北京师范大学出版社,1998:10-22(论文集:序号 主要责任者文献题名主编论文集名出版地:出版者,出版年:起止页码)附:源代码#include #include #in

25、clude #include #include #include #define BLOCKSIZ 512 /磁盘块的大小#define DATABLKNUM 512 /数据块的数目#define BLKGRUPNUM 50 /数据块组包含多少数据块#define P_N_BLOCKS 15 /inode节点中 指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 /数据块组 组数#define DINODESIZ 512 /磁盘i结点区的大小(空间32512)#define DINODENUM 32 /磁盘i结点区的块数#define SYSO

26、PENFILE 40 #define DIRNUM 32 /一个目录下的最多目录和文件的总和数#define DIRSIZ 14 /文件、目录名的长度(字节)#define UPWDSIZ 15 /秘密的长度#define UNAMSIZ 15 /用户名的长度#define PWDSIZ sizeof(struct pwd) /密码结构的长度 #define PWDNUM BLOCKSIZ/PWDSIZ /密码数据空间的大小(pwd为单位)#define NOFILE 20 /一个用户最多可以打开的文件数目#define NHINO 128 #define USERNUM 10 /用户名的长度

27、#define DINODESTART 4*BLOCKSIZ /i结点区的开始地址-inodes table ,1引导 2超块 3block bitmap 4inode bitmap #define DATASTART (2+DINODENUM)*BLOCKSIZ /数据区的开始地址#define DATASTARTNO 36 /数据区开始指针/* di._mode */#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#

28、define DIMODE_SYSTEM 00040 /*系统文件*/#define DIMODE_READ 00010 /* READ 和该数与操作后得到的是可以读该文件的用户组*/#define DIMODE_WRITE 00020 /* WRITE */#define DIMODE_EXICUTE 01000 /* EXICUTE */#define DIMODE_ADMIN 00100 /*管理员权限*/#define DIMODE_SHARE 00200 /*不需要权限*/*组*/#define GRUP_0 0 /管理员组#define GRUP_1 1#define GRUP_2

29、 2#define GRUP_4 4/* 文件系统 数据结构 */* 磁盘i结点结构, */struct inode / char di_nameDIRSIZ; unsigned _int16 di_ino; /*磁盘i节点标识*/ unsigned _int16 di_number; /*关联文件数,当为0时表示删除文件*/ unsigned _int16 di_mode; /*存取权限*/ unsigned _int16 di_uid; /*磁盘i节点用户id*/ unsigned _int16 di_gid; /*磁盘i节点权限组id*/ /1管理员组 2用户组 unsigned _int32 di_size; /*文件大小*/ unsigned _int32 di_ctime; /* Creation time */ unsigned _int32 di_mtime; /* Modification time */ unsigned _int16 di_blockP_N_BLOCKS; /* 一组 block 指针 */ ;/* 目录项结构*/struct direct char d_na

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1