《2022年操作系统原理文件虚拟管理 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统原理文件虚拟管理 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - 一、 操作系统原理课程设计的目的与要求. 11、目标: . 12、要求: . 1二、简述课程设计内容、主要功能和实现环境. 21、主要功能: . 22、主要设计内容:. 23、运行环境: . 2三、任务的分析、设计、实现和讨论. 31、任务的分析 . 32、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明) . 43、操作过程和结果分析. 74、思考题的解
2、答和讨论. 11 四、 操作系统课程设计小结(收获、不足与建议). 12 五、附录 (主要源程序和运行结果的清单) . 13 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 1 1、目标:随着社会信息量的极大增长,要求计算机处理的信息与日俱增涉及到社会生活的各个方面。因此, 文件管理是操作系统的一个极为重要的组成部分。学生应该运用独立的高级语言来编写一个简单和可操作的文件操作系统,模拟文件管理的工程运作。从而对各种文件操作指令
3、的实质内容和过程原理有比较深刻的了解,掌握他们的实施方法加深理解课堂上讲授过的知识。我小组需要实施的文件管理是任务六,包括文件系统的:建立,关闭以及写的功能。2、要求:(1)设计一个多(n)用户的文件系统,每个用户户最多保存m 个文件。(2)限制用户在一次运行中只能打开一个文件。(3)系统应能检查打入命令的正确性,出错是要能够显示出错的原因。(4)对文件的权限必须有保护措施,如果只能运行,允许读,允许写等。在每次打开文件时,根据本次打开的要求,设置保护级别,即可有二级保护。(5)对文件的操作表述中必须有以下指令:建立: create() 删除: delete() 打开: open() 关闭 c
4、lose() 读read()写:write()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 2 此次实验的基本内容就是完成一个可执行的文件系统管理的操作系统。1、主要功能:一个由 10 个用户的操作系统,每个用户最多保存10 个文件,一次运行中用户可打开 5 个文件。系统对相应的操作判断操作性的正确与否并进入相应的菜单运行。为使用者提供了操作的方便,不需要敲代码来实现程序的功能。该程序设置了用户登入,创建文件,打开文件,关闭
5、文件,写文件以及对用户文件总体概况的结果显示。另外,为了更加真实的反应该系统的对文件可执行程度的判断,添加了保护码控制文件的读写操作的安全性。2、主要设计内容:(1)本实习设计一个10 个用户的文件系统,每个用户最多可保存10 个文件,每个文件名都为单个字符,一次运行中用户可打开5 个文件。(2) 程序采用二级文件目录,即设置了主文件目录 (MFD ) 和用户文件目录 (UFD ) 。前者应包含文件主 (即用户) 及他们的目录区指针;后者应给出每个主文件占有的文件目录,即文件名,保护码, 文件长度以及他们存放的位置等。另外为打开文件设置了运行文件目录(AFD ) ,在文件打开时应填入打开文件号
6、,本次打开保护码和读写指针等。(3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。3、运行环境:课程设计的实现环境是在WINXP2000下运行 Microsoft Visual C+和在 WINXP2000下运行 WORD2003 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - 3 三、任务的分析、设计、实现和讨论1、任务的分析1整个源程序采用一维数组来定义。用户登录采用最
7、简单的选择型,总共设置10位用户, 登陆即选择相对应的用户名。文件目录的检索是使用了简单的线性搜索,而没有采用哈希等有效的算法。该设计的程序的保护码形式采取简单的单字符,分为 3 种,其中分别是 0- 只可读, 1-只可写, 2- 可读写。另外对于文件打开与关闭的操作设置了单字节的标识符有, 0- 文件已关闭, 1- 文件未关闭。2整个程序的布局应该是有7 个函数,分别为 Incitialize()初始化函数, create()建立文件函数, open() 对文件的打开函数,close()对文件的关闭函数,write()对文件的写函数, Show()显示概况信息的函数和main() 主函数。每
8、个函数都是实现改程序的重要环节。创建文件函数决定了整个程序的关键它需要准确的定义与算法。在定义函数时定义结构体,把需要的变量定义完整,整个程序主要还是通过数组的运用来完成的。通过数组来衔接主目录和用户目录来执行之后的操作。3主文件目录与用户目录的结构图如下图1-1:4打开文件目录如下图图1-2 所示:打开文件号打开保护码读写指针UFD MFD 用户名文件目录指针用户名文件目录指针用户名文件目录指针文件名保护码文件长度文件名文件名保护码文件长度文件名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
9、- - 第 5 页,共 19 页 - - - - - - - - - 4 2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明)(1)在编译程序实现功能的任务中,我主要负责最初的结构体定义,对关键变量的初始化以及对全程序的修改及完善。定义结构体以及变量是程序的开头,也是关键因素之一,对程序编译时所采用的算法进行了决定性作用。(2)定义的结构体以一维数组的形式定义,便于组员之间相互理解与编译。结构体定义:aMfd对象名类型说明username9 Char 型数组用户名Count Int 对用户数的计数器Ufd UFDFilenum 文件结构体数组文件目录数组Mfd MFDUse
10、rnum 数组用户数的数组bAfd 对象名类型说明OpenNo Int 打开文件号Pro Int 保护码Afd AFDOpennum 数组打开文件数cUfd 对象名类型说明Filename Char 文件名Pro int 文件保护码Length int 文件长度Flag Int 文件打开标识号Afd AFDOpennum 数组打开文件数Ufd UFDFilenum 数组文件数量(3)初始化定义:int i,j=0; 两个变量分别代表MFD 和 UFD 中所指的当前位置MFDi.UFDj.filename=NULL;文件名设为空MFDi.UFDj.flag=0;打开标识符为关闭MFDi.UFDj
11、.length=0;长度为 0 MFDi.UFDj.pro=3;保护码不存在MFDi.UFDj.AFD-OpenNo=0;打开目录号为0 (4)操作模拟流程:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - 5 (5)详细说明:在设计方面,是按数组套数组的思想进行定义。即Mfd 数组中套Ufd 数组,再Ufd 数组中套Afd数组。这样不需要指针的定义,也能很有效的找到用户所对的文件以及文件和所对的文件打开号。但是这样也有缺陷,需
12、要定义很大的数组容量,占用了很多空间, 另外,因为定义的是字符型而没有定义字符型数组,导致对于文件名的定义执行和输出只能实现单字节。(6)总体设计概要:a结构体定义完成后,将定以后的变量以及数组等信息放入各个函数进行编译操作,做为最主要的开头核心函数Create ()创建文件函数,编译者按照定义的结构体把要求的 3 位安全码改成了1 位,由“ 0-2”三个数字实现对文件的读写操作的保护,同时用了多个 循 环 体 来 对 操 作 者 可 能 出 现 的 误 操 作 做 了 相 应 合 理 的 处 理 , 另 外 ,“MFDk.UFDi.AFDi.OpenNo=count+;” 对打开函数中打开号
13、的处理也提前完成。Create的返回值为“ return count;”的值要在打开函数中赋值给打开号。Open 和 Close 函数由另一位成员完成,其中Open()打开函数按照要求进行,一个循环体“ while(iFilenum) ”打开文件“ MFDk.UFDi.flag=1;”为标识码的设置,初始为0 现在 打 开 后 改 为1。 Close( ) 关 闭 函 数 中 “ if(MFDk.UFDi.flag=1” 判 断 标 识 码 ,“MFDk.UFDi.flag=0; ”文件关闭后将标识码的值改为” 0” 。我和另一位成员一起完成write() 写 文 件 函 数 的 编 译 ,“
14、 MFDk.UFDi.pro=1|MFDk.UFDi.pro=2” 和“if(MFDk.UFDi.flag=1)” ;两句判断语是否可写入和是否文件已经打开将保护码和标识码 的 作 用 发 挥 出 来 , 并 且 写 函 数 添 加 了 将 文 件 长 度 增 加 的 功 能“length=len+MFDk.UFDi.length;”Show()显示信息函数将之前保存的信息输出,以简明概要的输出该文件管理系统对文件操作后的信息,Show()函数主要需要之前函数的保存工作,之前函数编辑成员未能将内容保存在各自的函数中,在之后的修改中得以实现,Write 函数中对长度的保存: “MFDk.UFDi
15、.length=length;”Create函数中对文件名的保存: “MFDk.UFDi.filename=name;”对保护码的保存: “MFDk.UFDi.pro=pro;”对长度的保存: “MFDk.UFDi.length=length;”打开码的保存: “MFDk.UFDi.AFDi.OpenNo=count+;”主函数 main 的编译成员,是将用户函数与主函数合并,整个程序中没有用户函数user() ,并导致MDF 结构体所定义的username9和 count 没有利用。将主界面显示格式设为菜单操作,这对于思考题的要求打到了效果。此外,其定义了9 个用户并通过9 个 if 语句判
16、断用户名的存在性运用switch 语句施行对界面的选择菜单操作。UFD MFD 用户名用户 k 用户名文件 i 保护码文件长度文件名打开文件号j 打开保护码AFD 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - 6 b程序的主要的流程结构如下所示,图1-5 Close() Write() Create() 否选择用户名是否存在该用户报告无此用户重新选择初始化运行文件表AFD 输入菜单号是什么命令关闭程序open() 退出Sho
17、w() 建立文件写程序显示当前目录保存当前文件目录打开文件开始名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - 7 3、操作过程和结果分析(1)用户登录:在操作界面中选择用户登录(0-9 )以及错误操作如图1-6 所示(2)建立文件,选择1进入建立文件的界面,输入文件的名字,保护码以及长度即可,可以建立多个文件,文件b 长度 210 保护码 2 ;文件 a 长度 341 保护码 1;文件名m 长度93 保护码 0。以及错误操作创
18、建同名文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - 8 m (3)打开文件,可以选择2 号键来打开已经建立的文件;如果打开没有建立的文件会显示。分别打开b、a、m 和未建立的文件c。m(4)关闭文件,选择菜单3 号,即可关闭已经建立并且打开的文件。如果关闭不存在的文件就会提示该文件不存在。分别关闭b、a、m 以及未建立的文件d。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
19、- - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 9 m (5)写文件,选择4 即可写文件,在写文件的时候需输入文件名,所需写入文件信息的长度,对被关闭的文件写入和被保护不能写入的文件以及对不存在的文件写入。分别对 b 文件写入长度310,总长度520;对 a 文件写入510,总长度810;文件 m 写保护不能写入。再执行菜单3,关闭 b 文件,再对b 文件写入。m 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
20、 第 11 页,共 19 页 - - - - - - - - - 10 (6) 显示文件,输入5,系统会打印出当前用户已经输入的文件信息。(7)用户更换,如果想更换用户的话,输入6 即可。(8)退出系统,按7 即可退出程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - 11 4、思考题的解答和讨论对于思考题 1,本次课程设计程序已经使用了菜单方式操作,每幅屏幕要为用户提供足够的选择信息,不需要打入冗长的命令。该方式使整个操
21、作界面简洁明了,还提高了操作效率,同时也为使用者提供了方便。具体代码如下:printf(%s, 请输入对文件的命令:n1:建立 n2:打开 n3:关闭n4:写n5:显示文件n6:用户切换 n7:退出 n); scanf(%d,&order); while(order!=7) switch(order) case 1: count=create(use,count);break; case 2: open(use);break; case 3: close(use);break; case 4: Write(use);break; case 5: Show(use);break; case 6:
22、 main(); printf(%s,n 请输入对文件的命令:n1:建立n2:打开 n3:关闭 n4:写n5:显示文件 n6:用户切换 n7:退出 n); scanf(%d,&order); 对于思考题 3,认为应该设置一个访问权值,类似该课程设计中的保护码,2是可以访问上级菜单和下级菜单,1是只可以访问下一级菜单,0是只可以访问上级菜单。通过设置共享码来实现同一级的共享化,类似这次课程设计的flag打开标识码。校长教务处科研处校务处一系十系教学行政科教学研究所研究生科科研科情报资料室技术服务部财务科基建科房管科总务科一一一实验室一二教研室一三研究室一一教研室一一三实验室一二教研室一三研究室一
23、一教研室,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - 12 四、 操作系统 课程设计小结 (收获、不足与建议)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 13 五、附录 (主要源程序和运行结果的清单) 主要函数代码:void Incitialize
24、()/ 初始化 int i,j=0; for(i=0;iOpenNo=0; int create(int k,int count) int i=0,length,pro; char name; printf(%s, 请输入文件名 (单字符 ):); scanf(%s,&name); /getchar(); while(iFilenum) if(MFDk.UFDi.filename!=NULL) if(MFDk.UFDi.filename=name) printf(%s, 该文件已经存在!); return count; i+; else break; if(i=Filenum) printf(
25、%s, 用户文件已满 ,不可再创建 !); return count; printf(%s, 请输入文件的长度:); scanf(%d,&length); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - 14 printf(%s, 请输入文件的保护码(0-只可读1-只可写2-可读写 ):); scanf(%d,&pro); for(i=0;iFilenum;i+) if(MFDk.UFDi.filename=NULL) MF
26、Dk.UFDi.filename=name; MFDk.UFDi.length=length; MFDk.UFDi.pro=pro; MFDk.UFDi.AFDi.OpenNo=count+; printf(%s, 创建成功 !); break; return count; void open(int k) int i=0;int pro,OpenNo; char name; printf(%s, 请输入文件名 :); scanf(%s,&name); while(iFilenum) if(MFDk.UFDi.filename=name) printf( 输入该文件保护码:); scanf(%
27、s,&pro); printf( 该文件的打开码为:); printf(%dn,MFDk.UFDi.AFDi.OpenNo); printf( 文件已经打开 !); MFDk.UFDi.flag=1; return; else i+; if(i=Filenum) printf(%s, 不存在该文件 !n); void close(int k) int i=0; char name; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - -
28、 - 15 printf( 请输入文件名 :); scanf(%s,&name); while(iFilenum) if(MFDk.UFDi.filename=name) if(MFDk.UFDi.flag=1) printf(%s, 文件已经成功关闭!n); MFDk.UFDi.flag=0; return; else printf( 文件本已处于关闭状态!n); return; else i+; if(i=Filenum) printf(%s, 不存在该文件 !n); void Write(int k) int i=0; int len,length; char name; printf(
29、%s, 请输入文件名 :); scanf(%s,&name); while(iFilenum) if(MFDk.UFDi.filename=name) if(MFDk.UFDi.pro=1|MFDk.UFDi.pro=2) if(MFDk.UFDi.flag=1) printf( 写入文件信息的长度:); scanf(%d,&len); length=len+MFDk.UFDi.length; printf( 文件现在长度为:); printf(%dn,length); printf( 文件已经成功写入!n); MFDk.UFDi.length=length; return; else 名师资
30、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - 16 printf(%s, 文件处于关闭状态!请先执行打开命令再进行写入!n); return; else printf(%s, 对该文件没有写权限!n); return; else i+; if(i=Filenum) printf(%s, 不存在该文件 !n); void Show(int k) int i; cout文件名 t 保护码 t 长度 endl; for (i=0;i=
31、9;i+) coutMFDk.UFDi.filenametMFDk.UFDi.protMFDk.UFDi.lengthendl; Main ()int i,order,use; switch(order) case 1: count=create(use,count);break; case 2: open(use);break; case 3: close(use);break; case 4: Write(use);break; case 5: Show(use);break; case 6: main(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - 17 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -