操作系统课程设计实验报告_第1页
操作系统课程设计实验报告_第2页
操作系统课程设计实验报告_第3页
操作系统课程设计实验报告_第4页
操作系统课程设计实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

操作系统课程设计报告学院: 班级: 学生姓名: 学号: 指导老师: 提交日期: 一、实验目的本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。二、 实验要求在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。具体见附表三、 实验环境Windows、VC三、实验思想1、整体思路实验可分为三个大模块:文件组织结构、目录结构、磁盘空间管理。编写时,先定义重要的数据结构,整理好各个模块的思路,列出程序清单。接着编写一些对系统进行基本操作的函数,然后利用这些函数实现各种功能。2、盘块大概分布(分了128块,每块64字节)盘块0123456.....127用途 FAT表FAT表根目录目录数据数据数据......数据盘块与盘块之间的链接,是利用FAT表项,(使用数组结构),并用它记录了所有盘块的使用信息。优点:可以利用FAT信息,迅速查找、打开各个目录,进行创建、修改文件。3、目录组成为了简单,构思目录时,每个目录只有8字节,每盘存放最多8个目录。其中,目录名、文件名最多只能为3字节,如果是文件的话,类型名也最多为2字节。区分目录名和文件名的方法是:设计一个属性项(1个字节),为8时表示纯目录,为4时表示文件目录。具体分布如下图:用途目录名或文件名文件类型属性文件起始盘块文件长度大小3(字节) 2 11 1优点:属性可以区分纯目录、文件目录;文件起始盘块可以记录文件的存放位置;文件长度,,在读文件时控制指针,是否到了文件末尾。缺点:为了简单,对文件名、目录名、类型名都作了限制。最大分别为:3,3,2字节。说明:调试时,目录名、文件名、类型名一定不能超过限制,否则出现非预期的结果4、FAT、磁盘管理实验中,将磁盘分为128块,每块大小64字节。为了方便对空间管理,利用教材提到的方法,把每块的块号(指针)提取出来,形成FAT表:盘块01234567。。。下一盘块-1-149078-1若某文件的一个盘块号为i,则这个文件的下一个盘块为表中的第i项,其中0表示此盘块空闲,-1表示结束。另一个重要的表是已打开文件表,用来记录打开或建立的内容,表如下:文件路径名文件属性起始盘文件长度读指针写指针块号块内地址块号块内地址5、重要数据结构用户结构:typedefstruct//用户定义{Intuid;charname[20];charpassword[20];}user;目录结构:typedefstruct//定义目录结构{charname[3];//文件或目录名为了简单只是取3字节chartype[2];//文件类型名charattribute;//属性charaddress;//文件或目录的起始盘块号charlength;//文件长度,为了简单实验是用盘块为单位}content; //定义为目录结构打开文件的数据结构:typedefstructintdnum;//磁盘块的块号intbnum;//块内的第几个字节}pointer;//读写指针结构#definen5 〃定义打开文件的最大个数;打开文件表项结构:typedefstruct{charname[20];//模拟绝对路径charattribute;//文件属性1个字节intnumber;//文件的起始盘的块号intlength;//文件长度,字节为单位intflag;//操作类型 “0”以读方式打开 “1”以写方式打开pointerread,write;//读写指针}OFILE;//已经打开文件表项的定义struct{OFILEfile[n];//已经打开文件表intlength;//表中文件的数量;}openfile;//表的定义这里定义了一个本次实验中最为重要的结构:打开文件项结构,它记录了所有打开文件的信息,各种操作,如newfile、read_file、wirte_file等都是通过该文件项表来记录读写指针的,同时它还可以实现设计三中的对用户权限进行管理功能。6、 编写基本函数时按照上面的思想,会变得比较简单。7、 主要算法为了简单,实验时主要的算法,都是建立在数组的基础上,所以比较简单。例如:search(),查找目录时,使用到了树的结构,利用递归,遍历目录树。其他基本是使用链表的方法。8、 由于初始设计时没有考虑到界面,有些功能参数,没有模仿LINUX:copy、md、dir说明如下:dir,不带参数时表示显示当前目录,带时显示给出目录;copy,要按提示选择内部或外部复制;md,按提示选择时在当前目录创建或绝对路径创建,选择当前目录时,不能带‘/‘

四、重要函数流程图和思路(包括优缺点)1、allocate。2、search(char*name,intflag,int*dnum,int*bnum)查找路径名为name的文件或目录,返回该目录的起始盘的块号,该函数是各种操作时用于检查路径是否存在,是否重复,还可以通过dnum,bnum返回查找路径的盘块和盘块内的地址,从而可以打开其所在的目录,进行读写操作。流程图如下:查找绝对路径名name

3、建立文件首先,根据文件路径名查找,如果父目录不存在,建立文件失败;如果存在,查看是否重名,如果有,给出提示,建立失败;否则,为文件建立文件目录,分配盘块,填写目录和表项。流程图:44、main()流程图:登陆 T 信息正确?Y5、同理,其他的函数只要理清思路,画出流程图,写起来就比较简单了。结束初始化5、同理,其他的函数只要理清思路,画出流程图,写起来就比较简单了。结束五、各功能调试说明和运行结果说明:注意测试时文件名、目录名最大为3字节,类型名最多2字节(设计时规定),否则出错;同时,刚登陆时文件目录为空。1、登陆默认帐号:2006pwd:123456或者2007123456界面如下:gfilesysucleone-succeed.loginaidpiM=123456eimd-isk<liost>■帐号信息错误时重新登陆2、info功能:显示整个系统信息,只显示FAT表和目录内容结果FfiT:冒堪: Q1 234567下一埃号:-1-1-109e09目录:名祢扩展名花始思义长度/21<none>siridislc^Chmst■■ 3、md在指定路径或当前路径下创建指定目录。重名时给出错信息。输入路径时,系统会提示是当前目录下还是在绝对路径下建立目录两种情况分别运行如下:

simdisk<host>Zjia《1一currentcontent.2-griuepath〉?2simdisk<host>:ndjia(1—currentcontent.2—giuepath〉?i经存在Isimdisk<liost>=.说明:当在当前目录建立目录时,不用加‘/’。第二次建立“jia”时提示“目录已经存在”是因为第一次md/jia时已经建立了该目录。<host>:dii*起始玺块长度1<host>:dii*起始玺块长度10minidiskM称/Ljiapimdisk说明刚才创建成功!4、rd删除指定目录测试时删除刚才创建的目录eindis^Sliest>:rd/*jiaeindis^Sliest>:dir临称扩展名起始盘堤长度/ 《无》 2 1knone>bindish<host>:再运行dir时目录为空。5、 dir带参数时为显示给出的绝对路径不带参数显示为当前路径。测试如上6、 newfile建立新文件,同时可以写文件运行:imdi®kOiost>:neuf±LeZjiaappttribute<9-jusCread,3-peadfofsystem,4-readand^rlte>=?4pits:ianastudentimdisk<host>:cat/jia.wamastudent:TOC\o"1-5"\h\zimclisk :dii*勺称扩展名色始煮块勺裳/ 2 1i_a pp 4 1测试时,写入Iamastudent检查时运行cat/jia.pp 显示刚创建的文件内容还可以运行dir来检查目录

7、del删除指定路径的文件删除刚才建立的文件simdisk<host>:del/jia.ppsimdisk<host>:cat/jia.pp忤件不存在!!simdisl;《host〉再运行cat/jia.pp时,文件已经不存在,说明删除成功!8、 Copy拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝先运行insidecopyeimdisk<host>:new£ileZjiaBkk<0—JustI'ccid,3~rcadfor^^rst^rri.4-rertdand s?4write:iloveyousimdisk<host>:copy<1-insidecopy,2-outsidecopy?>1<ccpyfpnm?/Jia-kl<copytoFiiB^path.ereatnewfile.…易制成功?!Eimdisk<host>:cat/liu.kkilove9(mhimdisk>=首先建立新文件/jia.kk然后复制到/liu.kk再运行cat/liu.kk检查是否复制成功feindis^<hast>:cop^feindis^<hast>:cop^<1-insidecopy,2—outsidecopy?>2copyfrom?test.txtcopyto?/uei.kk复制成珈Icindisk<hast>:catZijei.kKiloueyoupindisk<hQst>d其中测试外部文件已经放在当前路径test.txt中说明:实验时为了简单,只考虑目标文件为新文件的情况,其他情况并未考虑。9、cd改变当前目录gindisk<host>:checl^checkinc(...finish.gindisk<host>:.11、退出simdisk<host>:exit(joodbise»..See(Jeunexttime.pleaseturnofftheswitchPressankeytocontinueH设计二1、 基本思路设计二是在设计一的基础上,设计shell主进程,接到命令时,创建后台进程,处理命令。为了看到测试结果,创建后台进程时会出现其窗口,这时,shell进程可以继续接受命令,然后再创建新的进程。2、 设计时没有考虑子进程向shell进程回传数据,只是一个简单的shell。3、 流程图| ►主进程N 是否有新命令4、本设计时主要时利用了内存映射文件来实现shell进程与后台模拟文件系统进程之间的通信,其中映射由shell进程来建立。主要函数:CreateFileMapping()、建立映射OpenFileMapping()打开映射,把共享内存映射到自己进程地址中来MapViewOfFile()映射对象的一个视图UnmapViewOfFile()解除映射5、运行结果:此时shell还可以继续接受新的命令c<C:documentsand5ettings\Administrator\^面、设计此时shell还可以继续接受新的命令c<C:documentsand5ettings\Administrator\^面、设计1设计ZL\[jebug\system.exeTiixsisthebdickprocess.waitinjtheconmand...receivedconma.ndTiixsisthebdickprocess.waitinjtheconmand...receivedconma.nd:info<=T展无-扩<号T坦二灵称Fft<=T展无-扩<号T坦二灵称Fft盘下日名/-1-i起始盘快23 4 5 6?9 Q 0 & @长度1Fimsh.6、缺点:未考虑数据的回传。设计三1、2、3、1、2、3、4、按键结束第一个进程,第二个进程开始运行函Design3hisisthebackprocess.waitingthecomriEincl...receiuedcommand:dir昏弟扩展名 起始盘块长度z <X> 2 1kncne>思路在模拟文件系统中建立一个临界区,然后对其操作即可。为了体现“共享读,互斥写”要求,主进程连续创建了三个子进程对模拟文件系统进行访问,当一个进程对共享区访问时,其他进程等待,按提示结束该进程后,另外一个进程进入共享区。所有到的主要函数CRITICAL_SECTIONg;//建立临界区对象InitializeCriticalSection(&g);//初始化对象EnterCriticalSection(&g)//进入临界区LeaveCriticalSection(&g)//退出临界区DeleteCriticalSection(&g)//删除临界区测试结果数据主要在主进程的界面显示。运行结果:第一个进程运行kinish.fenteranychaptDexit.主进程信息如下:实验小结附表:具体实验要求操作系统课程设计课程设计目的本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。课程设计要求(1) 对进行认真分析,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据。(2) 以完整的作业包的形式提交原始代码、设计文档和可运行程序。提交的光盘应当包括:设计题目,程序清单,运行结果分析,所选取的算法及其优缺点,以及通过上机取得了哪些经验。程序清单要求格式规范,注意加注释(包含关键字、方法、变量等,)在每个模块前加注释,注释不得少于20%。课程设计要求同时上交打印文档,设计报告包括设计题目,算法分析,关键代码及其数据结构说明,运行结果分析以及上机实践的经验总结。设计一:设计任务:模拟Linux文件系统在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。编写一管理程序simdisk对此空间进行管理,以模拟Linux文件系统,要求:盘块大小1k空闲盘块的管理:Linux位图法结构:超级块,i结点区,根目录区该simdisk管理程序的功能要求如下:⑴info:显示整个系统信息(参考Linux文件系统的系统信息),文件可以根据用户进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。cd…:改变目录:改变当前工作目录,目录不存在时给出出错信息。dir…:显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。md…:创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。rd..•:删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。newfile...:建立文件。(content)cat...:打开文件。(content)copy..•:拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝,host文件系统的文件命名

温馨提示

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

评论

0/150

提交评论