操作系统课程设计文件系统.doc_第1页
操作系统课程设计文件系统.doc_第2页
操作系统课程设计文件系统.doc_第3页
操作系统课程设计文件系统.doc_第4页
操作系统课程设计文件系统.doc_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品湖南工业大学课 程 设 计资 料 袋 计算机与通信学院 学院(系、部) 2013 2014 学年第 1 学期 课程名称 计算机操作系统 指导教师 左新娥 职称 讲师 学生姓名 专业班级 学号 题 目 文件系统演示 成 绩 起止日期 2013 年 12 月 9 日 2013 年 12 月 15 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书13456课程设计任务书2013 2014学年第 1 学期学院(系、部) 计算机与通信学院 专业 班级 课程名称: 计算机操作系统 学生姓名: 设计题目: 指导教师: 左新娥 完成期限:自 2013 年 12 月 9 日至 2013 年 12 月 15 日 共 1 周内容及任务一、设计内容设计一个简单的多用户文件系统。即在系统中用一个文件来模拟一个磁盘;此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 能够实现并且实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。二、设计任务课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。三、设计要求1. 按功能要求开发系统,能正确运行。程序代码书写规范,有充足的注释。2. 课程设计所使用的编程语言任选,但建议使用C或C+;3. 绿色软件:程序运行不需安装,避免写系统和注册表;进度安排起止日期工作内容课程设计前一周召开动员大会,学生选题;2013-12-92013-12-10系统分析和设计;2013-12-112013-11-13熟悉软件开发工具、编码系统、系统测试以及中期答辩;2013-12-142013-12-15撰写并提交课程设计说明书 (含电子文档)、源程序等。主要参考资料1罗宇、邹鹏、邓胜兰等著操作系统M北京:电子工业出版社,20112 Andrew S.Tanenbaum 著陈向群等译现代操作系统M北京:机械工业出版社,20073 邓胜兰编著操作系统基础M北京:机械工业出版社,20094 Dave Probert著,陈向群等译Windows操作系统原理M北京:机械工业出版 ,20065 罗宇 褚瑞等等著操作系统课程设计M北京:机械工业出版,2004指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日感谢下载载精品课程设计说明书 课程名称: 计算机操作系统 设计题目: 文件系统演示 专 业: 网络工程 班级: 学生姓名: 学 号: 指导教师: 左新娥 2013 年 4 月 日目录一 课程设计简介61.1 课程设计的目的61.2 课程设计内容6二 课程设计实现过程72.1程序功能需求分析72.2程序功能模块分析72.2.1 format 格式化72.2.2 install 安装72.2.3 login 登陆82.2.4 create 创建文本文件82.2.5 cd 进入子目录或者上级目录82.2.6 del 删除文件或目录92.2.7 help 显示帮助92.2.8 exit 退出系统92.3程序实现过程102.3.1 相关结构体描述102.3.2 相关全局变量132.3.2 主要功能函数代码152.4程序测试截图223设计总结24参考文献25感谢下载载一 课程设计简介1.1 课程设计的目的课程设计目的使同学们熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。1.2 课程设计内容课程设计内容设计一个简单的多用户文件系统。即在系统中用一个文件来模拟一个磁盘;此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。实现这个文件系统。能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。二 课程设计实现过程在本段落中,将从程序功能需求分析,程序流程设计,程序实现来完成本章的描述。2.1程序功能需求分析本次课程设计内容是设计一个简单的多用户文件系统,对软件的功能需求如下:在linux系统中用一个文件来模拟一个磁盘;可以对这个模拟磁盘进行的操作为:Create、delete、open、close、read、write等和部分文件属性的功能。使用编程语言实现这个文件管理系统,能实际演示这个文件系统。基本上是进入一个程序主界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。程序运行不需安装,避免写系统和注册表;2.2程序功能模块分析2.2.1 format 格式化只写打开模拟文件,初始化超级快,初始化dinode位图 block位图,初始化主目录,初始化etc目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd文件,写入模拟硬盘文件。2.2.2 install 安装读写打开模拟文件,读取dinode位图 block位图,读取主目录,读取etc目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd文件。 2.2.3 login 登陆用户输入用户名和密码,在passwd文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。2.2.4 create 创建文本文件查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以#结束。申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件内容写入inode空间和block空间。修改当前目录的结构,修改超级快,修改inode位图,block位图,写入模拟硬盘。2.2.5 cd 进入子目录或者上级目录查找当前目录是否有该子目录,没有则退出,调用access()判断当前用户是否有权限,无则退出,有则读取该子目录的inode,将当前目录指向该目录。2.2.6 del 删除文件或目录查找当前目录是否有该文件名,没有则退出,有则调用access()判断是否有权限,有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删除,不是则判断是否文件夹,是文件夹则判断该文件夹下是否有文件,有文件则无法删除。提示用户是否删除,确认则删除文件,修改当前文件夹inode,block结构,修改该文件占有的inode和block位图为0,修改超级块,写入模拟硬盘。2.2.7 help 显示帮助在命令模式在输入help可以显示本程序所有的的命令和对应的解释,在输入help时候,列出系统中可以用的函数对应的命令名称。2.2.8 exit 退出系统在文件模拟系统中输入exit可以退出程序,当从键盘处接受到字符时候,判断为exit时候,则推出程序,并且关闭文件流。2.3程序实现过程2.3.1 相关结构体描述1 Inode节点结构/*Inode结构体*/*struct inode/ _int1616 a; struct inode *i_forw;/ struct inode *i_back; _int16 uf_id; /该节点在user.f_ofile中的下标 _int8i_flag;/ chardi_nameDIRSIZ; / unsigned _int16 i_count;/计数 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 unsigned _int32 di_size;/文件大小 unsigned _int32 di_ctime; /Creation time unsigned _int32 di_mtime; / Modification time unsigned _int16 di_blockP_N_BLOCKS; /* 一组 block 指针 ;*/2 Block组描述/*ext2 block组描述结构体*/struct group_desc unsigned _int16 bg_block_bitmap; /block 指针指向 block bitmap unsigned _int16 bg_inode_bitmap; / block 指针指向 inode bitmap unsigned _int16 bg_inode_table; / block 指针指向 inodes table unsigned _int16 bg_free_blocks_count; / 空闲的 blocks 计数 unsigned _int16 bg_free_inodes_count; / 空闲的 inodes 计数 unsigned _int16 bg_used_dirs_count; / 目录计数 ;3 超级块描述部分/*超级快数据结构的描述*/struct super_blockunsigned int s_inodes_count; /* inodes 计数 */unsigned int s_blocks_count; /* blocks 计数 */unsigned int s_r_blocks_count; /* 保留的 blocks 计数 */unsigned int s_free_blocks_count; / 空闲的 blocks 计数 unsigned int s_free_inodes_count; /* 空闲的 inodes 计数 */unsigned int s_free_blocks_groupGROUPNUM;/新增 一个数组来记录每个数据块组中的空闲数据块计数 unsigned int s_first_data_block; /* 第一个数据 block */unsigned int s_log_block_size; /* block 的大小 */unsigned int s_blocks_per_group; /* 每 block group 的 block 数量 */unsigned int s_inodes_per_group; /* 每 block group 的 inode 数量 */;4 用户账号密码/*用户账号密码的数据结构描述*/struct pwdunsigned int p_uid;unsigned int p_gid;char usernameUNAMSIZ;/*用户名 新加的*/ char passwordUPWDSIZ;5. 磁盘中i结点结构/*磁盘i结点结构,*/struct inode/ chardi_nameDIRSIZ; unsigned int di_ino;/*磁盘i节点标识*/ unsigned int di_number;/*关联文件数,当为0时表示删除文件*/ unsigned int di_mode;/*存取权限*/ unsigned int di_uid;/*磁盘i节点用户id*/ unsigned int di_gid;/*磁盘i节点权限组id*/ unsigned int di_size;/*文件大小*/ unsigned int di_ctime; /* Creation time */ unsigned int di_mtime; /* Modification time */ unsigned int di_blockP_N_BLOCKS; /* 一组 block 指针 */ ;2.3.2 相关全局变量/*全局变量*/unsigned short int di_bitmapDINODENUM;/ 硬盘inode节点位图 1表示已使用 0表示未使用/unsigned short int bk_bitmapDATABLKNUM;/ 数据块block位图 char di_bitmapDINODENUM;/ 硬盘inode节点位图 1表示已使用 0表示未使用char bk_bitmapDATABLKNUM;/ 数据块block位图struct super_block filsys;/超级块struct pwd pwdPWDNUM;/struct user userUSERNUM;/int usernum;FILE *fd;/文件指针struct inode *cur_inode;/内存i节点当前目录指针/struct dinode *dinodef;/全局硬盘节点指针struct inode *inodetemp;/内存i节点指针/struct inode *inodetemp2;const char fsystemname20=Linux.EXT2;/模拟硬盘的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct);/目录数组char cmdhead20;/cmd 的头 表示所在哪个文件夹、char curdir20;/int i_lock=0;/inode位图锁 可能会多线程int b_lock=0;/block位图锁struct pwd *cur_user;extern intFormat();/格式化磁盘extern intInstall();/启动,安装文件系统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);/判断是否两个字符串的命令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 renam(char);/重命名void showhelp();/命令帮助void login();int access();/*磁盘i节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。)*/ intialloc();/*开辟一个空闲的i节点,返回i节点*/磁盘块分配与释放函数intballoc(int);/申请硬盘空间2.3.2 主要功能函数代码一. Format函数实现代码int Format()/这个函数在进入程序开始时候调用,并且开始初始化虚拟磁盘struct pwd passwd BLOCKSIZ/PWDSIZ;int i;/*creat the file system file */fd = fopen (fsystemname, wb);/*读写创建一个二进制文件*/if(fd=NULL)printf(file create defeat !n);return 0;/超级块filsys.s_inodes_count=DINODENUM ; /* inodes 计数 */filsys.s_blocks_count=DATABLKNUM; /* blocks 计数 */filsys. s_r_blocks_count=0; /* 保留的 blocks 计数 */filsys. s_free_blocks_count=DATABLKNUM-3; /* 空闲的 blocks 计数 */filsys.s_free_blocks_group0=50-3;/第一个block group 已经被用了3个for(i=1;iGROUPNUM-1;i+)filsys.s_free_blocks_groupi=50; /后面的group 全部空闲/printf(block group %d 空闲个数为%dn,i,filsys.s_free_blocks_groupi);filsys.s_free_blocks_groupGROUPNUM-1=12;/最后一个block组 只有12个blockfilsys. s_free_inodes_count=DINODENUM-3; /* 空闲的 inodes 计数 */filsys. s_first_data_block=DATASTARTNO; /* 第一个数据 block 也就是*/filsys.s_log_block_size=BLOCKSIZ; /* block 的大小 */filsys.s_blocks_per_group=BLKGRUPNUM; /* 每 block group 的 block 数量 */filsys. s_inodes_per_group=0; /每 block group 的 inode 数量 暂未使用fseek(fd, BLOCKSIZ, SEEK_SET);fwrite (&filsys,BLOCKSIZ, 1,fd);/初始化dinode位图 block位图di_bitmap0=1;di_bitmap1=1;di_bitmap2=1;/前三个inode 分别被 root etc 用户passwd文件占用bk_bitmap0=1;bk_bitmap1=1;bk_bitmap2=1;/前三个inode 分别被 root etc 用户passwd文件占用for(i=3;iDINODENUM;i+)di_bitmapi=0;bk_bitmapi=0;for(;idi_name,/);ininode-di_ino=0;/i节点标志ininode-di_number=3;/关联3个文件夹ininode-di_mode=DIMODE_DIR;/0为目录ininode-di_uid=1;/用户id 第一个用户ininode-di_gid=1;/组id 管理员组ininode-di_size=0;ininode-di_ctime=0; /* Creation time */ininode-di_mtime=0; /* Modification time */ininode-di_block0=0;/所占物理块号 后3块分别是 一级指针,二级指针,3级指针fseek(fd,DINODESTART, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy(dir_buf0.d_name, .);dir_buf0.d_ino= 0;/当前目录的dinode号strcpy(dir_buf1.d_name,.);dir_buf1.d_ino= 0;/主目录的上级目录还是自己strcpy(dir_buf2.d_name, etc);dir_buf2.d_ino = 1;/etc目录fseek(fd, DATASTART, SEEK_SET);fwrite(dir_buf, BLOCKSIZ, 1, fd);/etc目录ininode-di_ino=1;/i节点标志ininode-di_number=3;/ininode-di_block0=1;/所占物理块号 后3块分别是 一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy (dir_buf0.d_name, .);dir_buf0.d_ino = 1;strcpy(dir_buf1.d_name, .);dir_buf1.d_ino = 0; strcpy(dir_buf2.d_name, passwd); dir_buf2.d_ino = 2;fseek(fd, DATASTART+BLOCKSIZ, SEEK_SET);fwrite (dir_buf, BLOCKSIZ,1,fd);/用户passwd文件passwd0.p_uid= 1; passwd0.p_gid = GRUP_0; /管理员strcpy(passwd0.username, xiao);strcpy(passwd0.password, 001);passwd1.p_uid= 2; passwd1.p_gid = GRUP_1;strcpy(passwd1.username, duan);strcpy(passwd1.password, 002);for (i=2; idi_ino=2;/i节点标志ininode-di_number=2;/ininode-di_mode=DIMODE_PASSWD;/ininode-di_uid=1;/用户id 第一个用户ininode-di_gid=1;/组id 管理员组ininode-di_size=BLOCKSIZ;/大小ininode-di_ctime=0; /* Creation time */ininode-di_mtime=0; /* Modification time */ininode-di_block0=2;/所占物理块号 后3块分别是 一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ*2, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);fclose(fd);free(ininode);return 1;二Login 函数实现代码void login()/这个函数负责登陆验证char str20;int i;dodoprintf(user name:);fflush(stdin);scanf(%s,str);for(i=0;iPWDNUM ;i+)/printf(%s,pwdi.username);if(strcmp(pwdi.username,str)=0)break;if(strcmp(exit,str)=0)exit(0);if(i!=PWDNUM)break;while(1);printf(passwd:);fflush(stdin);scanf(%s,str);if(strcmp(pwdi.password,str)=0)break;if(strcmp(exit,str)=0)exit(0);while(1);cur_user=&pwdi;printf(login success!n);三显示当前目录函数实现代码void showdir()int i;for(i=0;idi_number;i+)if(i=0)printf(t.ttttinode %dn,dir_buf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论