优选VR虚拟现实操作系统原理文件虚拟管理.docx
- 文档编号:5238689
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:16
- 大小:23.22KB
优选VR虚拟现实操作系统原理文件虚拟管理.docx
《优选VR虚拟现实操作系统原理文件虚拟管理.docx》由会员分享,可在线阅读,更多相关《优选VR虚拟现实操作系统原理文件虚拟管理.docx(16页珍藏版)》请在冰豆网上搜索。
优选VR虚拟现实操作系统原理文件虚拟管理
优选(VR虚拟现实)操作系统原理文件虚拟管理
《操作系统原理》
课程设计报告
姓名:
班级:
学号:
指导老师:
年月日
一、《操作系统原理》课程设计的目的与要求
1、目标:
随着社会信息量的极大增长,要求计算机处理的信息与日俱增涉及到社会生活的各个方面。
因此,文件管理是操作系统的一个极为重要的组成部分。
学生应该运用独立的高级语言来编写一个简单和可操作的文件操作系统,模拟文件管理的工程运作。
从而对各种文件操作指令的实质内容和过程原理有比较深刻的了解,掌握他们的实施方法加深理解课堂上讲授过的知识。
我小组需要实施的文件管理是任务六,包括文件系统的:
建立,关闭以及写的功能。
2、要求:
(1)设计一个多(n)用户的文件系统,每个用户户最多保存m个文件。
(2)限制用户在一次运行中只能打开一个文件。
(3)系统应能检查打入命令的正确性,出错是要能够显示出错的原因。
(4)对文件的权限必须有保护措施,如果只能运行,允许读,允许写等。
在每次打开文件时,根据本次打开的要求,设置保护级别,即可有二级保护。
(5)对文件的操作表述中必须有以下指令:
建立:
create()
删除:
delete()
打开:
open()
关闭close()
读:
read()
写:
write()
二、简述课程设计内容、主要功能和实现环境
此次实验的基本内容就是完成一个可执行的文件系统管理的操作系统。
1、主要功能:
一个由10个用户的操作系统,每个用户最多保存10个文件,一次运行中用户可打开5个文件。
系统对相应的操作判断操作性的正确与否并进入相应的菜单运行。
为使用者提供了操作的方便,不需要敲代码来实现程序的功能。
该程序设置了用户登入,创建文件,打开文件,关闭文件,写文件以及对用户文件总体概况的结果显示。
另外,为了更加真实的反应该系统的对文件可执行程度的判断,添加了保护码控制文件的读写操作的安全性。
2、主要设计内容:
(1)本实习设计一个10个用户的文件系统,每个用户最多可保存10个文件,每个文件名都为单个字符,一次运行中用户可打开5个文件。
(2)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD)。
前者应包含文件主(即用户)及他们的目录区指针;后者应给出每个主文件占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。
另外为打开文件设置了运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。
(3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。
3、运行环境:
课程设计的实现环境是在WINXP\2000下运行MicrosoftVisualC++和在WINXP\2000下运行WORD2003。
三、任务的分析、设计、实现和讨论
1、任务的分析
(1)、整个源程序采用一维数组来定义。
用户登录采用最简单的选择型,总共设置10位用户,登陆即选择相对应的用户名。
文件目录的检索是使用了简单的线性搜索,而没有采用哈希等有效的算法。
该设计的程序的保护码形式采取简单的单字符,分为3种,其中分别是0-只可读,1-只可写,2-可读写。
另外对于文件打开与关闭的操作设置了单字节的标识符有,0-文件已关闭,1-文件未关闭。
(2)、整个程序的布局应该是有7个函数,分别为Incitialize()初始化函数,create()建立文件函数,open()对文件的打开函数,close()对文件的关闭函数,write()对文件的写函数,Show()显示概况信息的函数和main()主函数。
每个函数都是实现改程序的重要环节。
创建文件函数决定了整个程序的关键它需要准确的定义与算法。
在定义函数时定义结构体,把需要的变量定义完整,整个程序主要还是通过数组的运用来完成的。
通过数组来衔接主目录和用户目录来执行之后的操作。
(3)、主文件目录与用户目录的结构图如下图1-1:
图1-1文件系统目录结构图
(4)、打开文件目录如下图图1-2所示:
打开文件号
打开保护码
读写指针
图1-2打开文件目录图
2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明)
(1)、在编译程序实现功能的任务中,我主要负责最初的结构体定义,对关键变量的初始化以及对全程序的修改及完善。
定义结构体以及变量是程序的开头,也是关键因素之一,对程序编译时所采用的算法进行了决定性作用。
(2)、定义的结构体以一维数组的形式定义,便于组员之间相互理解与编译。
结构体定义:
a、Mfd用户目录
对象名
类型
说明
username[9]
Char型数组
用户名
Count
Int
对用户数的计数器
UfdUFD[Filenum]
文件结构体数组
文件目录数组
MfdMFD[Usernum]数组用户数的数组
b、Afd文件目录文件打开目录
对象名
类型
说明
OpenNo
Int
打开文件号
Pro
Int
保护码
AfdAFD[Opennum]数组打开文件数
c、Ufd文件目录
对象名
类型
说明
Filename
Char
文件名
Pro
int
文件保护码
Length
int
文件长度
Flag
Int
文件打开标识号
AfdAFD[Opennum]
数组
打开文件数
UfdUFD[Filenum]数组文件数量
(3)、初始化定义:
inti,j=0;两个变量分别代表MFD和UFD中所指的当前位置
MFD[i].UFD[j].filename=NULL;文件名设为空
MFD[i].UFD[j].flag=0;打开标识符为关闭
MFD[i].UFD[j].length=0;长度为0
MFD[i].UFD[j].pro=3;保护码不存在
MFD[i].UFD[j].AFD->OpenNo=0;打开目录号为0
(4)、操作模拟流程:
UFD
MFD
用户名
用户k
用户名
…
文件i
保护码
文件长度
文件名
…
打开文件号j
打开保护码
AFD
(5)、详细说明:
在设计方面,是按数组套数组的思想进行定义。
即Mfd数组中套Ufd数组,再Ufd数组中套Afd数组。
这样不需要指针的定义,也能很有效的找到用户所对的文件以及文件和所对的文件打开号。
但是这样也有缺陷,需要定义很大的数组容量,占用了很多空间,另外,因为定义的是字符型而没有定义字符型数组,导致对于文件名的定义执行和输出只能实现单字节。
(6)、总体设计概要:
a、结构体定义完成后,将定以后的变量以及数组等信息放入各个函数进行编译操作,做为最主要的开头核心函数Create()创建文件函数,编译者按照定义的结构体把要求的3位安全码改成了1位,由“0-2”三个数字实现对文件的读写操作的保护,同时用了多个循环体来对操作者可能出现的误操作做了相应合理的处理,另外,“MFD[k].UFD[i].AFD[i].OpenNo=count++;”对打开函数中打开号的处理也提前完成。
Create的返回值为“returncount;”的值要在打开函数中赋值给打开号。
Open和Close函数由另一位成员完成,其中Open()打开函数按照要求进行,一个循环体“while(i Close()关闭函数中“if(MFD[k].UFD[i].flag==1”判断标识码,“MFD[k].UFD[i].flag=0;”文件关闭后将标识码的值改为”0”。 我和另一位成员一起完成write()写文件函数的编译,“MFD[k].UFD[i].pro==1||MFD[k].UFD[i].pro==2”和“if(MFD[k].UFD[i].flag==1)”;两句判断语是否可写入和是否文件已经打开将保护码和标识码的作用发挥出来,并且写函数添加了将文件长度增加的功能“length=len+MFD[k].UFD[i].length;” Show()显示信息函数将之前保存的信息输出,以简明概要的输出该文件管理系统对文件操作后的信息,Show()函数主要需要之前函数的保存工作,之前函数编辑成员未能将内容保存在各自的函数中,在之后的修改中得以实现, Write函数中对长度的保存: “MFD[k].UFD[i].length=length;” Create函数中对文件名的保存: “MFD[k].UFD[i].filename=name;” 对保护码的保存: “MFD[k].UFD[i].pro=pro;” 对长度的保存: “MFD[k].UFD[i].length=length;” 打开码的保存: “MFD[k].UFD[i].AFD[i].OpenNo=count++;” 主函数main的编译成员,是将用户函数与主函数合并,整个程序中没有用户函数user(),并导致MDF结构体所定义的username[9]和count没有利用。 将主界面显示格式设为菜单操作,这对于思考题的要求打到了效果。 此外,其定义了9个用户并通过9个if语句判断用户名的存在性运用switch语句施行对界面的选择菜单操作。 b、程序的主要的流程结构如下所示,图1-5 图1-5文件系统的总流程图 3、操作过程和结果分析 (1)用户登录: 在操作界面中选择用户登录(0-9)以及错误操作如图1-6所示 图1-6选择用户 图1-7用户输入错误重新输入 (2)建立文件,选择1进入建立文件的界面,输入文件的名字,保护码以及长度即可,可以建立多个文件,文件b长度210保护码2;文件a长度341保护码1;文件名m长度93保护码0。 以及错误操作创建同名文件 图1-8进入用户6并建立文件b 图1-9在用户6下建立文件a 图1-9在用户6下建立文件m 图1-10文件存在 (3)打开文件,可以选择2号键来打开已经建立的文件;如果打开没有建立的文件会显示。 分别打开b、a、m和未建立的文件c。 图1-11成功打开文件b 图1-12成功打开文件a 图1-13成功打开文件m 图1-14打开不存在的文件效果图 (4)关闭文件,选择菜单3号,即可关闭已经建立并且打开的文件。 如果关闭不存在的文件就会提示该文件不存在。 分别关闭b、a、m以及未建立的文件d。 图1-15关闭文件b 图1-16关闭文件a 图1-17关闭文件m 图1-18打开没有建立的文件 (5)写文件,选择4即可写文件,在写文件的时候需输入文件名,所需写入文件信息的长度,对被关闭的文件写入和被保护不能写入的文件以及对不存在的文件写入。 分别对b文件写入长度310,总长度520;对a文件写入510,总长度810;文件m写保护不能写入。 再执行菜单3,关闭b文件,再对b文件写入。 图1-19写文件b 图1-20写文件a 图1-21写文件m 图1-22写未建立文件q 图1-23写已被关闭的文件b (6)显示文件,输入5,系统会打印出当前用户已经输入的文件信息。 图1-24显示文件信息 (7)用户更换,如果想更换用户的话,输入6即可。 图1-25用户更换 (8)退出系统,按7即可退出程序。 4、思考题的解答和讨论 对于思考题1,本次课程设计程序已经使用了菜单方式操作,每幅屏幕要为用户提供足够的选择信息,不需要打入冗长的命令。 该方式使整个操作界面简洁明了,还提高了操作效率,同时也为使用者提供了方便。 具体代码如下: printf("%s","请输入对文件的命令: \n1: 建立\n2: 打开\n3: 关闭\n4: 写\n5: 显示文件\n6: 用户切换\n7: 退出\n"); scanf("%d",&order); while(order! =7) { switch(order) { case1: count=create(use,count);break; case2: open(use);break; case3: close(use);break; case4: Write(use);break; case5: Show(use);break; case6: main(); } printf("%s","\n请输入对文件的命令: \n1: 建立\n2: 打开\n3: 关闭\n4: 写\n5: 显示文件\n6: 用户切换\n7: 退出\n"); scanf("%d",&order); } 对于思考题3,认为应该设置一个访问权值,类似该课程设计中的保护码,2是可以访问上级菜单和下级菜单,1是只可以访问下一级菜单,0是只可以访问上级菜单。 通过设置共享码来实现同一级的共享化,类似这次课程设计的flag打开标识码。 校长 教务处 科研处 校务处 一 系 十 系 教学行政科 教学研究所 研究生科 科研科 情报资料室 技术服务部 财务科 基建科 房管科 总务科 一一 一实验室 一二〇教研室 一三〇研究室 一一〇教研室 一一 三实验室 一〇二教研室 一〇三研究室 一〇一教研室 ………… 四、《操作系统》课程设计小结(收获、不足与建议) 五、附录(主要源程序和运行结果的清单) 主要函数代码: voidIncitialize()//初始化 { inti,j=0; for(i=0;i { MFD[i].UFD[j].filename=NULL; MFD[i].UFD[j].flag=0; MFD[i].UFD[j].length=0; MFD[i].UFD[j].pro=3; MFD[i].UFD[j].AFD->OpenNo=0; } } intcreate(intk,intcount) { inti=0,length,pro; charname; printf("%s","请输入文件名(单字符): "); scanf("%s",&name); //getchar(); while(i if(MFD[k].UFD[i].filename! =NULL) { if(MFD[k].UFD[i].filename==name) { printf("%s","该文件已经存在! "); returncount; } i++; } elsebreak; if(i==Filenum) { printf("%s","用户文件已满,不可再创建! "); returncount; } printf("%s","请输入文件的长度: "); scanf("%d",&length); printf("%s","请输入文件的保护码(0-只可读1-只可写2-可读写): "); scanf("%d",&pro); for(i=0;i { if(MFD[k].UFD[i].filename==NULL) { MFD[k].UFD[i].filename=name; MFD[k].UFD[i].length=length; MFD[k].UFD[i].pro=pro; MFD[k].UFD[i].AFD[i].OpenNo=count++; printf("%s","创建成功! "); break; } } returncount; } voidopen(intk) { inti=0;intpro,OpenNo; charname; printf("%s","请输入文件名: "); scanf("%s",&name); while(i if(MFD[k].UFD[i].filename==name) { printf("输入该文件保护码: "); scanf("%s",&pro); printf("该文件的打开码为: "); printf("%d\n",MFD[k].UFD[i].AFD[i].OpenNo); printf("文件已经打开! "); MFD[k].UFD[i].flag=1; return; } else i++; if(i==Filenum) printf("%s","不存在该文件! \n"); } voidclose(intk) { inti=0; charname; printf("请输入文件名: "); scanf("%s",&name); while(i if(MFD[k].UFD[i].filename==name) if(MFD[k].UFD[i].flag==1) { printf("%s","文件已经成功关闭! \n"); MFD[k].UFD[i].flag=0; return; } else { printf("文件本已处于关闭状态! \n"); return; } elsei++; if(i==Filenum) printf("%s","不存在该文件! \n"); } voidWrite(intk) { inti=0; intlen,length; charname; printf("%s","请输入文件名: "); scanf("%s",&name); while(i if(MFD[k].UFD[i].filename==name) if(MFD[k].UFD[i].pro==1||MFD[k].UFD[i].pro==2) if(MFD[k].UFD[i].flag==1) { printf("写入文件信息的长度: "); scanf("%d",&len); length=len+MFD[k].UFD[i].length; printf("文件现在长度为: "); printf("%d\n",length); printf("文件已经成功写入! \n"); MFD[k].UFD[i].length=length; return; } else { printf("%s","文件处于关闭状态! 请先执行打开命令再进行写入! \n"); return; } else { printf("%s","对该文件没有写权限! \n"); return; } elsei++; if(i==Filenum) printf("%s","不存在该文件! \n"); } voidShow(intk) { inti; cout<<"文件名"<<"\t"<<"保护码"<<"\t"<<"长度"< for(i=0;i<=9;i++) { cout< } } Main() inti,order,use; switch(order) { case1: count=create(use,count);break; case2: open(use);break; case3: close(use);break; case4: Write(use);break; case5: Show(use);break; case6: main(); } 谢谢阅读! ! ! 随心编辑,值得下载拥用! 专业│专注│精心│卓越
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优选 VR 虚拟现实 操作系统 原理 文件 虚拟 管理
![提示](https://static.bdocx.com/images/bang_tan.gif)