俞文杰-李昊文-孙俊雄课程设计报告多用户文件系统模拟1.课程设计目的及意义课程设计目的是熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。同时通过编程实现这些算法更好地掌握操作系统的原理及实现方法提高综合运用各专业课知识的能力。2.课程设计要求1).在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2).文件物理结构可采用显式链接或其他方法。3).磁盘空闲空间的管理可选择位示图或其他方法。4).文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。5).设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login(用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建:create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout3.理论分析本系统为简单多用户文件管理系统,用户可根据对应的用户名登录来对文件或是文件夹进行操作。多用户功能可以满足不同的用户不同的需求,同时也起到了很好的保密作用。文件系统为用户提供了按名存取的功能以使得用户能透明的存储访问文件。为了实现按名存取文件需要对文件存储设备进行合理的组织分配对存储在文件存储设备上的文件进行保护保密和提供共享的手段。模拟一个文件管理系统要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开,新建删除文件或文件夹,文件的创建、读写、关闭等功能。可视化的界面能够让用户很方便的操作,登陆之后便可进行相应的操作。本实验中的文件系统是多用户多级目录的文件系统,目录结构采用多级目录结构4.核心技术及技术路线1.本系统采用面向对象的方法完成系统的设计;2.设计的过程中建立有清晰的层次关系;3.采用面向对象的机制;4.开发环境eclipse;5.编程语言JAVA6.数据处理方法:(1)文件系统的数据结构:用户登录、主目录、子目录、活动文件等;(2)用户创建的文件可以编号存储于磁盘上,并以编号作为物理地址在目录中进行登记。5.详细设计5.1数据结构publicclassPCB{Stringname=newString();PCBnext=null;inttime=0;intpriority=0;charstatus='R';}publicclassSystemUnit{Stringname=;intowner=1;intsize=0;intstart=0;}5.2模块设计1.界面设计模块包含:publicclassFileIconextendsJLabel、classNoticeextendsFrame、classOwnerPopextendsFrame三个类。2.框架字体风格模块包含publicclassFrameFont一个类。3.登录模块设计包含:publicclassLoginextendsFrame一个类。4.主框架模块设计:publicclassMainFrameextendsFrame、classBitViewextendsFrame等类。5.新建文件模块设计包含:publicclassNewFileextendsFrame一个类6.新建文件夹模块设计包含:publicclassNewFolderextendsFrame一个类7.管理员框架模块设计包含:publicclassRootFrameextendsMainFrame一个类8.系统单元模块设计包含:publicclassSystemUnit、classSystemFileextendsSystemUnit两个类。9.进程控制块设计包含:publicclassPCB一个类10.整体框架模块设计包含:publicclassWholeFrameextendsFrame一个类。5.3功能介绍根据课程设计要求列出本系统核心功能函数包含如下:1.Login()//登录函数2.privatevoidinit()//初始化函数3.publicvoidread()//读文件函数4.publicvoidwrite()//写文件函数5.publicvoiddeleteFile(Filefile)//删除文件函数6.NewFile()//创建文件函数7.NewFolder()//创建文件夹函数8.publicBitView()//位示图函数6.调试分析1.首先进入登陆界面2.系统为多用户文件系统,故设置了账号abc和xyz等等,密码为对应的用户名。输入对应的用户名和密码进入主界面如下:点击新建文件弹出对话框如下:输入name为aa,size为1可创建一个文件如下:点击新建文件夹弹出对话框如下:输入文件夹名和size则主界面变化如下:点击位示图可显示如下位示图:单机鼠标右键可弹出选项框,可选择对文件夹或文件的打开删除和查看文件是哪个用户的。7.总结本次课程设计是利用JAVA程序语言编写的,由于对JAVA的掌握不够深,导致在调试与编译时出现了很大的困难,但在有关JAVA实践指导书的帮助下,许多问题都逐步得到了解决。文件系统的要求的功能很多,程序很长。但此次实验无疑是对我JAVA知识的一次磨练,使得我深深体会到它在实现对象操作和相关数据封闭操作的好处。在设计此系统时,方发觉自己对文件系统理解得不够透彻。例如在考虑如何实现多用户多目录时,差点就走进了如何在二级目录里实现的死胡同。后来,耐心回到学习的课本内容上,才醒悟要利用树形结构。不然,是无法实现多用户情况下的多目录多文件层层嵌套。如何保证在子目录里进行文件操作(数据文件的创建、删除)时造成的当前目录空间大小变化同步更新到先辈目录的空间大小,这困扰了我很久。但在几位队友共同努力下,经过几番讨论查资料终于使得问题得以解决。总而言之,操作系统的课程设计,不仅提升了自己的程序设计及编写技巧,更大大地加深了对操作系统的文件管理的了解,也让我深深感受到团队合作的重要性。8.参考文献【1】计算机操作系统(第三版),汤小丹等,西安电子科技大学出版社【2】数据结构(C语言版),严蔚敏等,清华大学出版社【3】JAVA程序设计实用教程,耿祥义等,人民邮电出版社【4】eclipse开发技术详解,赵真等,化学工业出版社读者—写者问题的模拟与实现课程设计目的1.通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。2.提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力。3.提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。4.加深对线程、进程及同步概念的理解,通过研究经典的进程同步问题,实现对读者-写者问题的并发控制,掌握运用信号量解决“同步进程多次访问,而不同进程互斥访问资源”的控制问题。课程设计内容与要求创建一个控制进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分别实现读者优先和写者优先问题。运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。在深入理解操作系统基本原理的基础上,设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果。概要设计读者优先算法:设置两个互斥信号量:wmutex用于写者与其他读者/写者互斥的访问共享数据rmutex用于读者互斥的访问读者计数器readcountsemaphorewmutex=1,rmutex=1;intreadcount=0;readeri//读者进程i=1,2,do{P(rmutex);//读者互斥readcount++;//读者数加1if(readcount==1)P(wmutex);//读者写者互斥V(rmutex);读者读数据;P(rmutex);readcount--;if(readcount==0)V(wmutex);V(rmutex);}while(true);writerj//写者进程j=1,2,do{P(wmutex);写文件;V(wmutext);}while(true);写者优先算法:设置三个互斥信号量:wmutex用于写者与其他读者/写者互斥的访问共享数据rmutex用于读者互斥的访问读者计数器readcountnmutex用于写者等待已进入读者退出,所有读者退出前互斥写操作semaphorerwmutex=1,rmutex=1,nmutex=1;intreadcount=0;readeri//读者进程i=1,2,do{P(wmutex);P(rmutex);readcount++;if(readcount==1)P(nmutex);V(rmutex);V(wmutex);读数据;P(rmutex);reacount--;if(readcount==0)V(nmutex);V(rmutex);}while(true);writerj//写者进程j=1,2,do{P(wmutex);P(nmutex);写更新;V(nmutex);V(wmutex);}详细设计程序运行环境和编程语言:Eclipse集成开发环境,java语言,界面设计:窗口标题为:“读者写者问题”一个单选框,用以选择“读者优先”还是“写者优先”左边一个文本域用于,显示运行的结果;右边的文本域用以显示读者写者的信息。一个“运行”按钮。图1程序主界面当用户没有选择“读者优先”或者“写者优先”而直接点击运行时,会弹出一个提示对话框。图2提示对话框程序简单示意图创建线程运行RunThread读者写者信息Resours读者优先OR写者优先…..…程序所用到的类:用户手册:程序名:读者写者问题.jar在有jre的机器上双击运行测试数据文件路径:C:\\sample.txt测试数据及结果测试的数据:测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括4个字符,各个字段间用空格分隔。第一个字段为一个字符,表示线程序号读线程1写线程1读线程2读线程n写线程n写线程2结束第二个字段表示相应线程角色,R表示读者,W表示写者第三个字段为一个正数,表示读写操作的开始时间:线程发送读写申请第四个地段为一个正数,表示读写的持续时间。测试的结果:程序开始运行:读者线程1发送读申请读者线程1开始读操作读者线程2发送读申请读者线程2开始读操作读者线程2结束读操作读者线程1结束读操作写者线程3发送写申请写者线程3开始写操作写者线程3结束写操作写者线程4发送写申请写者线程4开始写操作写者线程4结束写操作读者线程5发送读申请读者线程5开始读操作读者线程5结束读操作读者线程6发送读申请读者线程6开始读操作写者线程7发送写申请读者线程6结束读操作写者线程7开始写操作写者线程7结束写操作程序运行结束!!谢谢使用!!程序开始运行:读者线程1发送读申请读者线程1开始读操作读者线程2发送读申请读者线程2开始读操作读者线程2结束读操作读者线程1结束读操作写者线程3发送写申请写者线程3开始写操作写者线程3结束写操作写者线程4发送写申请写者线程4开始写操作写者线程4结束写操作读者线程5发送读申请读者线程5开始读操作读者线程5结束读操作读者线程6发送读申请读者线程6开始读操作写者线程7发送写申请写者线程7开始写操作读者线程6结束读操作写者线程7结束写操作程序运行结束!!谢谢使用!!设计总结课程设计是培养学生综合运用所学知识,发现