1 / 19
文档名称:

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

格式:pdf   大小:1,467KB   页数:19页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:1781111**** 2024/4/13 文件大小:1.43 MB

下载得到文件列表

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

相关文档

文档介绍

文档介绍:该【操作系统课程设计报告文件系统 】是由【1781111****】上传分享,文档一共【19】页,该文档可以免费在线阅读,需要了解更多关于【操作系统课程设计报告文件系统 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..课程设计资料袋计算机与通信学院学院〔系、部〕2013~2014学年第1学期课程名称计算机操作系统指导教师左新娥职称讲师学生专业班级学号题目文件系统演示成绩起止日期2013年12月9日~2013年12月15日目录清单序号材料名称资料数量备注1课程设计任务书12课程设计说明书13456课程设计任务书20132014学年第1学期学院〔系、部〕计算机与通信学院专业班级课程名称:计算机操作系统学生:设计题目:指导教师:左新娥完成期限:自2013年12月9日至2013年12月15日共1周.:..一、设计容设计一个简单的多用户文件系统。即在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和局部文件属性的功能。③能够实现并且实际演示这个文件系统。容根本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。及二、设计任务任课程设计说明书(纸质+电子版),容包括:设计容、系统分析(包括可行性分析、需求分析等)及功能分析;务系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据构造进展说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。三、,能正确运行。程序代码书写规,有充足的注释。,但建议使用C或C++;:程序运行不需安装,防止写系统和注册表;起止日期工作容进课程设计前一周召开发动大会,学生选题;度2013-12-9~2013-12-10系统分析和设计;安2013-12-11~2013-11-13熟悉软件开发工具、编码系统、系统测试以及中期辩论;排2013-12-14~2013-12-15撰写并提交课程设计说明书(含电子文档)、源程序等。主[1]罗宇、邹鹏、.:电子工业,2011要[2].:***,2007参[3].:***,2009考资[4]DaveProbert著,向群等译操作系统原理.:***出版,2006料.[5]罗宇褚瑞等等著操作系统课程设计.:***出版,2004指导教师〔签字〕:年月日系〔教研室〕主任〔签字〕:年月日.:..程设计说明书课程名称:计算机操作系统设计题目:文件系统演示专业:网络工程班级:学生:学号:指导教师:!未定义书签。.:...:..;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。。即①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和局部文件属性的功能。③实现这个文件系统。④能实际演示这个文件系统。根本上是进入一个界面〔此界面就是该文件系统的界面〕后,可以实现设计的操作要求。二课程设计实现过程在本段落中,将从程序功能需求分析,程序流程设计,程序实现来完本钱章的描述。,对软件的功能需求如下:在linux系统中用一个文件来模拟一个磁盘;可以对这个模拟磁盘进展的操作为:Create、delete、open、close、read、write等和局部文件属性的功能。使用编程语言实现这个文件管理系统,能实际演示这个文件系统。根本上是进入一个程序主界面〔此界面就是该文件系统的界面〕后,可以实现设计的操作要求。程序运行不需安装,防止写系统和注册表;.:..,初始化超级快,初始化dinode位图block位图,初始化主目录,初始化etc目录,初始化管理员admin目录,初始化用户xiao目录,初始化用户passwd文件,写入模拟硬盘文件。Login登录输入用户名否查找是否有改用户名否是输入密码密码是否正确是,,读取dinode位图block位图,读取主目录,读取etc目录,读取管理员admin目录,读取用户xiao目录,读取用户passwd文件。,在passwd文件中查找是否有此用户,核对密码。正确那么登陆成功,当前目录设定到当前用户文件夹下。.:..创立文本文件查找当前目录下是否有同名文件,是那么退出,否那么让用户输入文本文件容,以‘###’完毕。申请inode空间〔ialloc函数〕,申请硬盘block空间〔balloc函数〕,申请失败那么完毕。将文件容写入inode空间和block空间。修改当前目录的构造,修改超级快,修改inode位图,block位图,写入模拟硬盘。,没有那么退出,ess〔〕判断当前用户是否有权限,无那么退出,有那么读取该子目录的inode,将当前目录指向该目录。,没有那么退出,ess〔〕判断是否有权限,有那么判断是否为系统文件,是那么无法删除,不是那么判断是否是文件,是文件那么直接删除,不是那么判断是否文件夹,是文件夹那么判断该文件夹下是否有文件,有文件那么无法删除。提示用户是否删除,确认那么删除文件,修改当前文件夹inode,block构造,修改该文件占有的inode和block位图为0,修改超级块,写入模拟硬盘。,在输入help时候,列出系统中可以用的函数对应的命令名称。,当从键盘处承受到字符时候,判断为exit时候,那么推出程序,并且关闭文件流。.:../*————————————————————————Inode构造体————————————————————————*//*structinode{//___int1616a;structinode*i_forw;//structinode*i_back;__int16uf_id;//;//chardi_name[DIRSIZ];//unsigned__int16i_count;//计数unsigned__int16di_ino;//磁盘i节点标识unsigned__int16di_number;//关联文件数,当为0时表示删除文件unsigned__int16di_mode;//存取权限unsigned__int16di_uid;//磁盘i节点用户idunsigned__int16di_gid;//磁盘i节点组idunsigned__int32di_size;//文件大小unsigned__int32di_ctime;//Creationtimeunsigned__int32di_mtime;//Modificationtimeunsigned__int16di_block[P_N_BLOCKS];/*一组block指针};*//**********ext2block组描述构造体*******/.:..structgroup_desc{unsigned__int16bg_block_bitmap;//block指针指向blockbitmapunsigned__int16bg_inode_bitmap;//block指针指向inodebitmapunsigned__int16bg_inode_table;//block指针指向inodestableunsigned__int16bg_free_blocks_count;//空闲的blocks计数unsigned__int16bg_free_inodes_count;//空闲的inodes计数unsigned__int16bg_used_dirs_count;//目录计数};/*————————————————————————超级快数据构造的描述————————————————————————*/structsuper_block{unsignedints_inodes_count;/*inodes计数*/unsignedints_blocks_count;/*blocks计数*/unsignedints_r_blocks_count;/*保存的blocks计数*/unsignedints_free_blocks_count;//空闲的blocks计数unsignedints_free_inodes_count;/*空闲的inodes计数*/unsignedints_free_blocks_group[GROUPNUM];//新增一个数组来记录每个数据块组中的空闲数据块计数unsignedints_first_data_block;/*第一个数据block*/unsignedints_log_block_size;/*block的大小*/unsignedints_blocks_per_group;/*每blockgroup的block数量*/unsignedints_inodes_per_group;/*每blockgroup的inode数量*/};/*————————————————————————用户账号密码的数据构造描述————————————————————————*/structpwd{unsignedintp_uid;.:..unsignedintp_gid;charusername[UNAMSIZ];/*用户名新加的*/charpassword[UPWDSIZ];};/*————————————————————————磁盘i结点构造,————————————————————————*/structinode{//chardi_name[DIRSIZ];unsignedintdi_ino;/*磁盘i节点标识*/unsignedintdi_number;/*关联文件数,当为0时表示删除文件*/unsignedintdi_mode;/*存取权限*/unsignedintdi_uid;/*磁盘i节点用户id*/unsignedintdi_gid;/*磁盘i节点权限组id*/unsignedintdi_size;/*文件大小*/unsignedintdi_ctime;/*Creationtime*/unsignedintdi_mtime;/*Modificationtime*/unsignedintdi_block[P_N_BLOCKS];/*一组block指针*/};/*————————————————————————全局变量————————————————————————*///unsignedshortintdi_bitmap[DINODENUM];//硬盘inode节点位图1表示已使用0表示未使用//unsignedshortintbk_bitmap[DATABLKNUM];//数据块block位图chardi_bitmap[DINODENUM];//硬盘inode节点位图1表示已使用0表示未使用charbk_bitmap[DATABLKNUM];//数据块block位图structsuper_blockfilsys;//超级块structpwdpwd[PWDNUM];.:..//intusernum;FILE*fd;//文件指针structinode*cur_inode;//存i节点当前目录指针//structdinode*dinodef;//全局硬盘节点指针structinode*inodetemp;//存i节点指针//structinode*inodetemp2;//模拟硬盘的文件名structdirectdir_buf[BLOCKSIZ/sizeof(structdirect)];//目录数组charcmdhead[20];//cmd的头表示所在哪个文件夹、charcurdir[20];//inti_lock=0;//inode位图锁可能会多线程intb_lock=0;//block位图锁structpwd*cur_user;externintFormat();//格式化磁盘externintInstall();//启动,安装文件系统structinode*read_inode(int);//install里面读取文件dinodestructdirect*read_dir_data(int);//读取存储文件夹的物理块externvoidshowdir();//命令dirintEnterdir(char[]);//进入某个文件夹命令--cd文件名intFd_dirfile(char[]);//查找当前目录里的文件没找到返回-1找到返回inode号intIscmd(char[]);//判断是否两个字符串的命令voidtwo_cmd(char[],char[]);//两个字符串的命令intcreat(char[]);//创立文件voidchangeinode();//交换指针char*ReadFile(char[]);//读取文件intmkdir(char[]);//创立文件夹voidshowbitmap();//显示位图intdeletefd(char[]);//删除文件inteditfile(char[]);//编辑文件intrenam(char[]);//重命名voidshowhelp();//命令帮助voidlogin();ess();.:..磁盘i节点的分配与释放〔当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。〕*/intialloc();/*开辟一个空闲的i节点,返回i节点*///磁盘块分配与释放函数intballoc(int);//()//这个函数在进入程序开场时候调用,并且开场初始化虚拟磁盘{structpwdpasswd[BLOCKSIZ/PWDSIZ];inti;/*creatthefilesystemfile*/读写创立一个二进制文件*/if(fd==NULL){return0;}//=DINODENUM;/*inodes计数*/=DATABLKNUM;/*blocks计数*/=0;/*保存的blocks计数*/=DATABLKNUM-3;/*空闲的blocks计数*/[0]=50-3;//第一个blockgroup已经被用了3个for(i=1;i<GROUPNUM-1;i++){[i]=50;//后面的group全部空闲//group%d空闲个数为}[GROUPNUM-1]=12;//最后一个block组只有12个block.:..=DINODENUM-3;/*空闲的inodes计数*/=DATASTARTNO;/*第一个数据block也就是*/=BLOCKSIZ;/*block的大小*/=BLKGRUPNUM;/*每blockgroup的block数量*/=0;//每blockgroup的inode数量暂未使用fseek(fd,BLOCKSIZ,SEEK_SET);fwrite(&filsys,BLOCKSIZ,1,fd);//初始化dinode位图block位图di_bitmap[0]=1;di_bitmap[1]=1;di_bitmap[2]=1;//前三个inode分别被rootetc用户passwd文件占用bk_bitmap[0]=1;bk_bitmap[1]=1;bk_bitmap[2]=1;//前三个inode分别被rootetc用户passwd文件占用for(i=3;i<DINODENUM;i++){di_bitmap[i]=0;bk_bitmap[i]=0;}for(;i<DATABLKNUM;i++){bk_bitmap[i]=0;}fseek(fd,BLOCKSIZ*2,SEEK_SET);fwrite(di_bitmap,BLOCKSIZ,1,fd);fseek(fd,BLOCKSIZ*3,SEEK_SET);fwrite(bk_bitmap,BLOCKSIZ,1,fd);//初始化主目录structinode*ininode;ininode=(structinode*)malloc(sizeof(structinode));if(!ininode){return0;.:..}//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;/*Creationtime*/ininode->di_mtime=0;/*Modificationtime*/ininode->di_block[0]=0;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd,DINODESTART,SEEK_SET);fwrite(ininode,sizeof(structinode),1,fd);dir_buf[0].d_ino=0;//当前目录的dinode号dir_buf[1].d_ino=0;//主目录的上级目录还是自己dir_buf[2].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_block[0]=1;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd,DINODESTART+BLOCKSIZ,SEEK_SET);fwrite(ininode,sizeof(structinode),1,fd);dir_buf[0].d_ino=1;dir_buf[1].d_ino=0;.:..dir_buf[2].d_ino=2;fseek(fd,DATASTART+BLOCKSIZ,SEEK_SET);fwrite(dir_buf,BLOCKSIZ,1,fd);//用户passwd文件passwd[0].p_uid=1;passwd[0].p_gid=GRUP_0;//管理员passwd[1].p_uid=2;passwd[1].p_gid=GRUP_1;for(i=2;i<PWDNUM;i++){passwd[i].p_uid=0;passwd[i].p_gid=GRUP_4;}fseek(fd,DATASTART+BLOCKSIZ*2,SEEK_SET);fwrite(passwd,BLOCKSIZ,1,fd);ininode->di_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;/*Creationtime*/ininode->di_mtime=0;/*Modificationtime*/ininode->di_block[0]=2;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd,DINODESTART+BLOCKSIZ*2,SEEK_SET);fwrite(ininode,sizeof(structinode),1,fd);fclose(fd);free(ininode);return1;.:..()//这个函数负责登陆验证{charstr[20];inti;do{do{fflush(stdin);for(i=0;i<PWDNUM;i++){if(strcmp(pwd[i].username,str)==0){break;}{exit(0);}}if(i!=PWDNUM){break;}}while(1);fflush(stdin);.:..if(strcmp(pwd[i].password,str)==0){break;}{exit(0);}}while(1);cur_user=&pwd[i];}(){inti;for(i=0;i<cur_inode->di_number;i++){if(i==0){}elseif(i==1){}else{inodetemp=read_inode(dir_buf[i].d_ino);if((inodetemp->di_mode&DIMODE_DIR)==DIMODE_DIR){.:..}elseif((inodetemp->di_mode&DIMODE_FILE)==DIMODE_FILE){%d}else{%d}}}}。课程设计的目的,一方面使同学们更透彻地理解操作系统的根本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的时机,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够结实,不过设计终于顺利完成了,在设计中遇到了很多编程问题,最后在教师的.:..再次我表示感!同时,对给过我们帮助的所有同学和各位指导教师再次表示忠心的感!参考文献[1]袁庆龙,-P合金镀层组织形貌及显微硬度研究[J].理工大学学报,2001,32(1):51-53.[2]国钧,[M].:高等教育,1979:15-18,31.[3][C].(2).:师大学,1998:10-22..