资源描述
《操作系统原理》
课程设计报告
姓 名:
班 级:
学 号:
指导老师:
年 月 日
22
目录
一、《操作系统原理》课程设计的目的与要求 1
1、目标: 1
2、要求: 1
二、简述课程设计内容、主要功能和实现环境 2
1、主要功能: 2
2、主要设计内容: 2
3、运行环境: 2
三、任务的分析、设计、实现和讨论 3
1、任务的分析 3
2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明) 4
3、操作过程和结果分析 7
4、思考题的解答和讨论 11
四、《操作系统》课程设计小结(收获、不足与建议) 12
五、附录(主要源程序和运行结果的清单) 13
一、《操作系统原理》课程设计的目的与要求
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下运行Microsoft Visual C++和在WINXP\2000下运行WORD2003。
三、任务的分析、设计、实现和讨论
1、任务的分析
(1)、整个源程序采用一维数组来定义。用户登录采用最简单的选择型,总共设置10位用户,登陆即选择相对应的用户名。文件目录的检索是使用了简单的线性搜索,而没有采用哈希等有效的算法。该设计的程序的保护码形式采取简单的单字符,分为3种,其中分别是0-只可读,1-只可写,2-可读写。另外对于文件打开与关闭的操作设置了单字节的标识符有,0-文件已关闭,1-文件未关闭。
(2)、整个程序的布局应该是有7个函数,分别为Incitialize()初始化函数,create()建立文件函数,open()对文件的打开函数,close()对文件的关闭函数,write()对文件的写函数,Show()显示概况信息的函数和main()主函数。每个函数都是实现改程序的重要环节。创建文件函数决定了整个程序的关键它需要准确的定义与算法。在定义函数时定义结构体,把需要的变量定义完整,整个程序主要还是通过数组的运用来完成的。通过数组来衔接主目录和用户目录来执行之后的操作。
(3)、主文件目录与用户目录的结构图如下图1-1:
UFD
MFD
用户名
文件目录指针
用户名
文件目录指针
用户名
文件目录指针
…
文件名
保护码
文件长度
文件名
…
文件名
保护码
文件长度
文件名
…
图1-1 文件系统目录结构图
(4)、打开文件目录如下图图1-2所示:
打开文件号
打开保护码
读写指针
图1-2 打开文件目录图
2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明)
(1)、在编译程序实现功能的任务中,我主要负责最初的结构体定义,对关键变量的初始化以及对全程序的修改及完善。定义结构体以及变量是程序的开头,也是关键因素之一,对程序编译时所采用的算法进行了决定性作用。
(2)、定义的结构体以一维数组的形式定义,便于组员之间相互理解与编译。
结构体定义:
a、Mfd用户目录
对象名
类型
说明
username[9]
Char型数组
用户名
Count
Int
对用户数的计数器
Ufd UFD[Filenum]
文件结构体数组
文件目录数组
Mfd MFD[Usernum] 数组 用户数的数组
b、Afd 文件目录文件打开目录
对象名
类型
说明
OpenNo
Int
打开文件号
Pro
Int
保护码
Afd AFD[Opennum] 数组 打开文件数
c、Ufd 文件目录
对象名
类型
说明
Filename
Char
文件名
Pro
int
文件保护码
Length
int
文件长度
Flag
Int
文件打开标识号
Afd AFD[Opennum]
数组
打开文件数
Ufd UFD[Filenum] 数组 文件数量
(3)、初始化定义:
int i,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)、操作模拟流程:
打开文件号j
打开保护码
AFD
UFD
MFD
用户名
用户k
用户名
…
文件i
保护码
文件长度
文件名
…
(5)、详细说明:
在设计方面,是按数组套数组的思想进行定义。即Mfd数组中套Ufd数组,再Ufd数组中套Afd数组。这样不需要指针的定义,也能很有效的找到用户所对的文件以及文件和所对的文件打开号。但是这样也有缺陷,需要定义很大的数组容量,占用了很多空间,另外,因为定义的是字符型而没有定义字符型数组,导致对于文件名的定义执行和输出只能实现单字节。
(6)、总体设计概要:
a、结构体定义完成后,将定以后的变量以及数组等信息放入各个函数进行编译操作,做为最主要的开头核心函数Create()创建文件函数,编译者按照定义的结构体把要求的3位安全码改成了1位,由“0-2”三个数字实现对文件的读写操作的保护,同时用了多个循环体来对操作者可能出现的误操作做了相应合理的处理,另外,“MFD[k].UFD[i].AFD[i].OpenNo=count++;”对打开函数中打开号的处理也提前完成。Create的返回值为“return count;”的值要在打开函数中赋值给打开号。
Open和Close函数由另一位成员完成,其中Open()打开函数按照要求进行,一个循环体“while(i<Filenum)”打开文件“MFD[k].UFD[i].flag=1;”为标识码的设置,初始为0现在打开后改为1。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
Close()
Write()
Create()
否
选择用户名
是否存在该用户
报告无此用户重新选择
初始化运行文件表AFD
输入菜单号
是什么命令
关闭程序
open()
退出
Show()
建立文件
写程序
显示当前目录
保存当前文件目录
打开文件
开始
图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)
{
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();
}
printf("%s","\n请输入对文件的命令:\n1:建立\n2:打开\n3:关闭\n4:写\n5:显示文件\n6:用户切换\n7:退出\n");
scanf("%d",&order);
}
对于思考题3,认为应该设置一个访问权值,类似该课程设计中的保护码,2是可以访问上级菜单和下级菜单,1是只可以访问下一级菜单,0是只可以访问上级菜单。通过设置共享码来实现同一级的共享化,类似这次课程设计的flag打开标识码。
校长
教务处
科研处
校务处
一
系
十
系
教学行政科
教学研究所
研究生科
科研科
情报资料室
技术服务部
财务科
基建科
房管科
总务科
一一
一实验室
一二〇教研室
一三〇研究室
一一〇教研室
一一
三实验室
一〇二教研室
一〇三研究室
一〇一教研室
…………
四、《操作系统》课程设计小结(收获、不足与建议)
五、附录(主要源程序和运行结果的清单)
主要函数代码:
void Incitialize()//初始化
{
int i,j=0;
for(i=0;i<Usernum;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;
}
}
int create(int k,int count)
{
int i=0,length,pro;
char name;
printf("%s","请输入文件名(单字符):");
scanf("%s",&name);
//getchar();
while(i<Filenum)
if(MFD[k].UFD[i].filename!=NULL)
{
if(MFD[k].UFD[i].filename==name)
{
printf("%s","该文件已经存在!");
return count;
}
i++;
}
else break;
if(i==Filenum)
{
printf("%s","用户文件已满,不可再创建!");
return count;
}
printf("%s","请输入文件的长度:");
scanf("%d",&length);
printf("%s","请输入文件的保护码(0-只可读 1-只可写 2-可读写):");
scanf("%d",&pro);
for(i=0;i<Filenum;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;
}
}
return count;
}
void open(int k)
{
int i=0;int pro,OpenNo;
char name;
printf("%s","请输入文件名:");
scanf("%s",&name);
while(i<Filenum)
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");
}
void close(int k)
{
int i=0;
char name;
printf("请输入文件名:");
scanf("%s",&name);
while(i<Filenum)
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;
}
else i++;
if(i==Filenum)
printf("%s","不存在该文件!\n");
}
void Write(int k)
{
int i=0;
int len,length;
char name;
printf("%s","请输入文件名:");
scanf("%s",&name);
while(i<Filenum)
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;
}
else i++;
if(i==Filenum)
printf("%s","不存在该文件!\n");
}
void Show(int k)
{
int i;
cout<<"文件名"<<"\t"<<"保护码"<<"\t"<<"长度"<<endl;
for (i=0;i<=9;i++)
{
cout<<MFD[k].UFD[i].filename<<"\t"<<MFD[k].UFD[i].pro<<"\t"<<MFD[k].UFD[i].length<<endl;
}
}
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();
}
附录资料:不需要的可以自行删除
VIW虚拟因特网教室
概述
( )因特网教室,是一个在局域网环境中模拟因特网的教学系统,它采用多种先进的网络技术,把因特网带进校园,让学校的师生在校园网中即可模拟上因特网,无须拨号,也不必通过代理服务器,只要在任一浏览器中敲入所需网址,就可完成恰似在因特网上才能实现的全部功能,从而实现信息的交换、发布与检索。这样,学生和老师在花费极少的校园网环境中就可遨游乐趣无穷的:搜索浏览自己感兴趣的网站,查询收集与课题相关的信息以辅助教学或学习,使用电子邮件进行交流与沟通,在上贴帖子,对某些问题发表自己独特的见解,在谈天说地中畅所欲言,大侃特侃,在下载专区中下载各种软件,在留言板中提出你的意见等等,让师生们在校园局域网中充分过把上瘾。
提供了包罗万象的网站和功能强大的系统管理程序。此网站中的因特网基础知识一栏,为学生们进入上好第一堂入门课。为紧密配合教学,还集成了十多个与教学有关的网站,使你几乎在瞬间便可浏览众多网站。同时,在下载专区里提供了一系列流行的常用软件工具,让你快速下载到本地计算机上。另外, 还展示了五花八门的网页特技, 让你耳目一新,跃跃欲试。在基于操作系统的服务器上,增加了系统管理主程序(该程序还可在「网站管理」频道中直接调用),包括用户管理与网站管理,规定了有哪些用户创建,维护哪些站点等等,师生们可以在这里创建与维护各年级、各教研室、各班级、甚至个人的网站,从而把校园的信息发布到中去,达到资源共享,二次开发的目的。
系统要求
硬件配置
. 服务器
最低配置
标准配置
最佳配置
以上
以上
Ⅲ以上
内存
以上
以上
以上
硬盘
以上剩余空间
以上剩余空间
以上剩余空间
网卡
以上带宽
以上带宽
以上带宽
. 工作站
最低配置
标准配置
最佳配置
以上
以上
以上
内存
以上
以上
以上
显示卡
以上显存
以上显存
以上显存
网卡
以上带宽
以上带宽
以上带宽
声卡
全双工声卡(可选)
全双工声卡(可选)
全双工声卡
软件配置
. 服务器
服务器系统, 服务器软件,因特网教室软件。
.工作站
、 、 或 ,通讯协议,浏览器(推荐使用以上的浏览器)。
产品功能
因特网基础知识的学习
电子邮件的收发
网站搜索
资料的下载
网上留言
网上聊天
网上公告
网上资料库的管理
因特网网页制作特技
网站的管理
产品特色
因特网教室具有以下特点:
安装简便,由于采用性能优越的架构,服务器端仅需装网络操作系统与「因特网教室系统管理」主程序,客户端安装任意类型的浏览器即可 。
稳定性强,由于服务器端基于大型网络应用平台,该平台具有强大的技术后盾,可靠性强、安全性高。
经济实惠,由于在局域网中操作,没有电话费,也没有上网费,极大减少了教学成本。
兼容性强,客户端支持 , 和 操作系统和任意类型的浏览器。
操作简易,模拟上网极其简单,无须拨号,也不必通过代理服务器,只要在校园网任一浏览器中敲入所要网址即可。
效率高,由于网站实际是在本地服务器上,所以上网相当于全部在宽频网络上高速运行,你尽可瞬时一览无遗。
功能全,浓缩了的全部功能,只要互联网有的,这里都可以找到。
中还集成了十多个与教学有关的网站,使你呆在校园里便知天下事。同时,还可以把其它网站的信息下载到本地服务器中,由网站系统管理员经过筛选来进行统一管理,达到减少上网次数与资源共享的目的。
中增加的教学示范,比如‘因特网基础知识’、‘电子邮件’、‘网页特技’、 ‘资料库管理示范’等,让学生们边学习、边实践,是一本不可多得的百科全书。
在中的用户管理与网站管理程序,让师生们积极创建与维护各个站点,完全调动了他们的主动性,激发了他们的创造力, 从而让校园在大舞台上充分展示自己的风采。
适应范围
校园网
培训教室
多媒体教室
企业内局域网
产品安装和设置
产品包含:蓝点系统盘、 主程序光盘、范例网站光盘;
产品使用手册一本;
网卡一块;
安装与启动
因特网教室采用性能优越的架构,服务器端必须在功能强大的网络操作系统下运行,而客户端(仅需安装浏览器)可任意在、、 、 操作系统上执行,且支持所有类型的浏览器。
安装服务器端
服务器端必须安装网络操作系统(含服务器)、「因特网教室」。
安装网络操作系统
关于安装网络操作系统, 请参阅的安装手册。在安装过程中,选择定制安装后,出现待安装软件列表,建议安装该列表中的全部软件。
安装完后,在服务器上用命令来设置网络,出现「网络设定」窗口,进行一些配置:
在「客户端工作」区域里,用上下箭头键选择「主机基本资料」选项,然后按回车键,进入「这部主机的基本设定」窗口。在「主机名」文本框中,输入 服务器名称,然后用上下箭头把光标移到「网卡」一栏,应特别注意,在「主要名称及网域」文本框中输入的内容必须与「主机名」文本框中的一致。
安装「因特网教室」
首先进入光盘的目录,若您的网卡为网卡,请先在的命令行上敲入程序,然后用 进行主机基本网络设定,并重启机器。
网卡安装成功后,再进入光盘的目录,在的命令行上敲入,再按回车键,系统便会把「因特网教室」安装到服务器上的目录上(文件夹是系统自动生成的默认目的文件夹),当然用户也可以自己定义目的文件夹,只需在 后加上目的文件夹的路径。安装结束后,系统会提示重启机器。
重新启动机器后,用帐号登录,便可进入「因特网教室系统管理」的主界面了,如图所示。
图
安装客户端
客户端可任意在、、 、 操作系统上执行,且支持所有类型的浏览器(推荐使用以上的浏览器)。关于安装上述操作系统与浏览器,请参阅相关的安装手册,此处不必赘述:
客户端安装完以后,需要加入域名服务器(以为例),具体做法是:
打开控制面板,双击「网络」图标或在「网上邻居」图标上右键单击「属性」选项,打开「网络」对话框,从网络组件中单击‘’, 如图所示。
图
单击「属性」按钮, 进入图。
图
在图中,单击「配置」选项卡,选中‘启用 ()’,输入主机、域名与校园网域名服务器地址(此地址即为服务器的地址),比如,按「添加()」按钮,进入图。
图
在图上,刚才添加的域名服务器地址已移到下面的空白框中去了,这时按「确定」按钮,结束此项设置。
(注:本次发行的版本,在使用范例网站时,版主名为,密码为)
七、产品适用范围
展开阅读全文