《操作系统》实践教学大纲1.docx
《《操作系统》实践教学大纲1.docx》由会员分享,可在线阅读,更多相关《《操作系统》实践教学大纲1.docx(29页珍藏版)》请在冰豆网上搜索。
《操作系统》实践教学大纲1
自考《操作系统》实验环节实施方案
根据《操作系统》课程教学要求,实验环节应要求完成五个实验项目。
考虑到自考课程教学实际情况,结合我院实验室的条件,经任课教师、实验指导教师、教研室主任和我院学术委员会认真讨论,确定开设三个实验项目。
实验项目、内容及要求详见我院编制的《操作系统》课程实验大纲。
一、实验环境
目前,我院根据编制的《操作系统》课程实验大纲,实验环境基本能满足开设的实验项目。
实验环境主要设备为:
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
硬件:
一台能正常启动的计算机
软件:
VisualC++6.0,Windows2003等
二、实验报告要求与成绩评定
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
学生每完成一个实验项目,要求独立认真的填写实验报告。
实验指导教师将根据学生完成实验的态度和表现,结合填写的实验报告评定实验成绩。
成绩的评定按百分制评分。
三、实验考试
学生在完成所有实验项目后,再进行一次综合性考试。
教师可以根据学生完成的实验项目,综合出3套与实验相似的考试题,由学生任选一套独立完成。
教师给出学生实验考试成绩作为最终实验成绩上报。
四、附件
附件1
《操作系统》课程实验大纲
附件2
实验报告册样式
以上对
《计操作系统》课程实验的实施方案,妥否,请贵校批示。
重庆科创职业学院
2009年3月20日
附件1《操作系统》课程实验教学大纲
实验课程负责人:
赵志斌实验类别:
专业基础课程实验要求:
必修
课程总学时:
12学时
开课学期:
第四学期实验类型:
应用性实验
适用专业:
通信工程
课程总学分:
1分
《操作系统》课程实验项目及学时分配
序号
实验项目
实验内容及要求
学时
实验类型
备注
实验一:
页式内存管理系统模拟程序
1
页式存储管理方案
模拟页式存储管理,页面的分配与回收,能显示位视图和页表
4
应用型实验
文件管理模拟程序
2
实验二
文件管理
模拟操作系统中的建立文件、打开文件、读文件、写文件、关闭文件、删除文件、建立目录、显示目录内容、显示文件内容、改变文件属性等操作。
8
应用型实验
3
实验三
操作系统基础操作应用
操作系统基础应用操作
2
基础应用实验
实验一页式存储管理
一、实验目的
掌握页面存储管理的内存分配方法,位视图的表示。
二、实验内容
1、运行程序,由检查教师给出文件名,该文件中存有内存目前状况的位示图的数据(0和1的文件)。
(程序应做提示,界面友好)。
2、你所编制的程序应读入数据,存放在相应的数据结构中。
3、显示友好的用户界面,由检查教师输入内存申请(总块数)。
4、根据申请和位示图状态,为用户分配内存,并建立页表。
5、输出位示图和页表。
三、实验环境
1、一台能正常启动的P41.5GHZ以上个人计算机
2、安装有VisualC++6.0软件
四、实验原理与方法
内存被划分成2048块(页)。
用32位字长的字存放位示图,为0的位表示该块尚未分配,为
1的位表示该块已分配。
五、实验步骤
1启动VisualC++6.0,创建一个新的C++源程序
2、输入相应的代码。
3、保存程序
4、运行程序主要的程序代码如下:
#include
#include
#include
constintPAGES=256;//定义总块数
constintWORD=32;//定义字长
仅供个人参考
constintWORDNUM=PAGES/WORD;//定义总字数typedefstructnode{
charjobname[20];
intnum;
intnums[PAGES];
structnode*next;
}jobs;
inttable[WORDNUM][WORD];
intfreenum=0;
jobs*head;
//初始化函数
voidinitial(){}
//读入位示图初始数据
voidreadData()
{}
//新加入作业函数
voidadd()
{}
//完成作业函数
voidfinish()
{
}
//显示当前位示图函数
voidview_table()
{
}
//显示所有页表函数
voidview_pages()
{
}
//显示版权信息函数
voidversion()
{
}
voidmain()
{
intt=1,chioce;
version();
initial();
readData();
while(t==1){cout<显示所有作业页表0.
cout<<"1.加入新作业2.完成作业3.显示当前内存位示图4.退出"<cout<<"请选择:
";
cin>>chioce;
switch(chioce){
case1:
add();
break;
case2:
finish();
break;
case3:
view_table();
break;
case4:
view_pages();
break;
case0:
t=0;
break;
default:
cout<<"选择错误"<}
}
}
六、思考题
1.页面的分配和回收是如何操作的.
仅供个人参考
七、实验报告要求
认真填写试验报告,程序代码清单要完整,准确。
实验二文件管理
一、实验目的
掌握操作系统文件管理的基本方法。
二、实验内容
编写程序代码,模拟操作系统对文件的操作。
1、运行程序,由检查教师给出文件名,该文件中存有相应的若干命令。
(程序应做提示,界面
友好)。
2、要求实现两个命令:
mkdir目录名(目录已存在,应给出错误信息。
)
cd目录名(目录不存在,应给出错误信息。
)
3、你所编制的程序应读入文件,并执行其中的每一条命令。
4、在屏幕上显示文件目录的结构。
(界面自己设计,但要清晰明了。
)
三、实验环境(宋体小四加粗)
1、一台能正常启动的P41.5GHZ以上个人计算机
2、安装有VisualC++6.0软件
四、实验原理与方法模拟一个文件系统,包括目录文件,普通文件,并实现对它们的一些基本操作。
假定每个目录文件最多只能占用一个块;一个目录项包括文件名(下一级目录名),文件类型,文件长度,指向文件内容(下一级目录)的指针内容。
普通文件可以只用目录项(FCB代表。
(详细的数据结构见后面的说明)程序功能方面的要求:
需要实现一个命令行操作界面,包含如下命令:
1改变目录
格式:
CD〈目录名〉
功能:
工作目录转移到指定的目录下,只要求完成改变到当前目录的某一个子目录下的功能,不要求实现相对目录以及绝对目录。
2创建文件
格式:
CREAT〈E文件名〉〈文件长度〉功能:
创立一个指定名字的新文件,即在目录中增加一项,不考虑文件内容,但必须能输入文件长度。
3删除文件
格式:
DEL〈希望删除的文件名〉
功能:
删除指定的文件
4显示目录
格式:
LSALL
功能:
显示全部目录以及文件,输出时要求先输出接近根的目录,再输出子目录。
图示如图。
5创建目录
格式:
MD〈目录名〉
功能:
在当前路径下创建指定的目录
6删除目录
格式:
RD〈目录名〉
功能:
删除当前目录下的指定目录,如果该目录为空,则可删除,否则应提示是否作删除,删除操作将该目录下的全部文件和子目录都删除。
对于上述功能要求,完成1-4为及格,完成1-5为良,完成1-6为优。
程序实现方面的要求:
1对于重名(创建时),文件不存在(删除时),目录不存在(改变目录时)等错误*作情况,程序应该作出相应处理并给出错误信息,但是程序不得因此而退出。
2界面友好,程序强壮。
3界面的提示符为#,提示的命令以及调试的方法应和前面的要求一致。
不要自己设计命令或者附加不要求的功能。
4在考卷的说明部分(背面)有一段程序的源代码以及对源代码的说明,考试的编码应在这个程序的基础上修改而成。
这段源代码中规定了文件系统使用的数据结构和需要实现的函数框架,请将你的实现代码填写到合适的位置中去,可以自己添加辅助数据结构、变量、常量以及函数,但是不得改变已有的代码(如数据结构的定义以及函数的名称以及参数说明)。
5考试提交的源程序请命名为filesys.c。
6程序设计环境使用TC2.0,在DOS操作系统下完成全部程序代码。
本程序包括实现:
1改变目录
格式:
CD〈目录名〉
功能:
工作目录转移到指定的目录下,只要求完成改变到当前目录的某一个子目录
下的功能,不要求实现相对目录以及绝对目录。
2创建文件
格式:
CREAT〈E文件名〉〈文件长度〉
功能:
创立一个指定名字的新文件,即在目录中增加一项,不考虑文件内容,但必须能输入文件长度。
3删除文件
格式:
DEL〈希望删除的文件名〉
功能:
删除指定的文件
4显示目录
格式:
LSALL
功能:
显示全部目录以及文件,输出时要求先输出接近根的目录,再输出子目录。
图示如图。
5创建目录
格式:
MD〈目录名〉
功能:
在当前路径下创建指定的目录
6删除目录
格式:
RD〈目录名〉
五、实验步骤
1启动VisualC++6.0,创建一个新的C++程序
2、输入相应的代码。
3、保存程序
4、运行程序
主要的代码如下:
include
#include#include#include#include#include
//******************
目录和文件的结构定义******
typedefstructnode{
charname[50];/*目录或文件的名字*/
inttype;/*0
代表目录,1代表普通文件*/
structnode*next;/*
指向下一个兄弟结点的指针*/
structnode*sub;/*
指向第一个子结点的指针*/
structnode*father;/*
指向父结点的指针*/
intsize;/*
如果是文件则表示文件的大小*/
}dirNode;
dirNode*workDir;//定义当前工作目录
dirNoderoot;//定义根目录
charpath[100];//定义路径信息
//初始化函数
voidinitial()
{
strcpy(root.name,"root");
root.type=0;
root.next=NULL;
root.sub=NULL;
root.father=NULL;
root.size=0;
workDir=&root;
strcpy(path,"root");
}
//初始化新结点函数
dirNode*init()
{
dirNode*p;
p=newdirNode;
strcpy(root.name,"");root.type=0;root.next=NULL;root.sub=NULL;root.father=NULL;root.size=0;
returnp;
}
//1改变目录
voidCD(chardirName[]){
dirNode*p;
intflag=0;
p=workDir->sub;
if(p==NULL){
cout<<"错误,\""<}
else{
while(p){
if(p->type==0){
if(!
strcmp(p->name,dirName)){
flag=1;
break;
}
}p=p->next;
}
if(flag==1){
workDir=p;
strcat(path,"\\");
strcat(path,p->name);
cout<<"工作目录已进入\""<}
else{
cout<<"错误,\""<}
}
}
//2创建文件
voidCREATE(charfileName[],intfileSize)
{
intflag;
dirNode*p,*q;
q=newdirNode;
strcpy(q->name,fileName);
q->sub=NULL;
q->type=1;
q->next=NULL;
q->father=workDir;
q->size=fileSize;
p=workDir->sub;
if(p==NULL){
workDir->sub=q;
cout<<"\""<}
else{
flag=0;
while(p){
if(p->type==1){
if(!
strcmp(p->name,fileName)){
flag=1;
cout<<"错误,\""<}
}p=p->next;
}
if(flag==0){
p=workDir->sub;
while(p->next){
p=p->next;
}
p->next=q;
cout<<"\""<}
}
//3删除文件
voidDEL(charfileName[])
{
dirNode*p,*q;
intflag=0;
p=workDir->sub;
if(p==NULL){
cout<<"错误,\""<else{
while(p){
if(p->type==1){
if(!
strcmp(p->name,fileName)){
flag=1;
break;
}
}
p=p->next;
}
if(flag==1){
if(p==workDir->sub){
workDir->sub=p->next;
}
else{
q=workDir->sub;
while(q->next!
=p){
q=q->next;
}
q->next=p->next;
deletep;
}
cout<<"\""<}
else{
cout<<"错误,\""<}
}
}
//4显示所有目录
//显示本目录下所有兄弟目录和文件
voiddir(dirNode*p)
{
while(p){
if(p->type==0){
cout.setf
(2);
cout<name<"<}
else{
cout.setf
(2);
cout<name<"<size<p=p->next;
}
}
//
voiddirs(dirNode*p,charstr[])
{
charnewstr[100];
dirNode*q;
cout<"<dir(p);
q=p;
if(q->sub){
strcpy(newstr,"");
strcat(newstr,str);
strcat(newstr,"\\");
strcat(newstr,q->name);
dirs(q->sub,newstr);
}
q=p;
while(q->next){
if(q->next->sub){
strcpy(newstr,"");
strcat(newstr,str);
strcat(newstr,"\\");
strcat(newstr,q->next->name);
dirs(q->next->sub,newstr);
}
q=q->next;
}
}
//显示所有目录
voidLSALL()
{
dirNode*p;
cout<<"显示所有目录结构"<p=root.sub;
dirs(p,"root");
}
//5创建目录
voidMD(chardirName[])
{
intflag;
dirNode*p,*q;
q=newdirNode;strcpy(q->name,dirName);q->sub=NULL;
q->type=0;
q->next=NULL;
q->father=workDir;
q->size=0;
p=workDir->sub;
if(p==NULL){
workDir->sub=q;
cout<<"\""<}
else{
flag=0;
while(p){
if(p->type==0){
if(!
strcmp(p->name,dirName)){
flag=1;
cout<<"错误,\""<}
}p=p->next;
}
if(flag==0){
p=workDir->sub;
while(p->next){
p=p->next;
}
p->next=q;
cout<<"\""<}
}
}
//6删除目录
voidRD(chardirName[])
{
/*
删除当前目录下的指定目录,如果该目录为空,则可删除,否则应提示是否作删除,删除操作将该目录下的全部文件和子目录都删除
*/
dirNode*p,*q;
intflag=0;
p=workDir->sub;
if(p==NULL){
cout<<"错误,\""<else{
while(p){
if(p->type==0){
if(!
strcmp(p->name,dirName)){
flag=1;
break;
}
}
p=p->next;
}
if(flag==1){
if(p==workDir->sub){
workDir->sub=p->next;
}
else{
q=workDir->sub;
while(q->next!
=p){q=q->next;
}
q->next=p->next;
deletep;
}
cout<<"\""<}
else{
cout<<"错误,\""<}
}
}
//显示版权信息函数voidversion()
{cout<cout<<"|1"<cout<<"|模拟文件管理模拟系统I"<cout<<"|1"<cout<<"|重庆科创职业学院|"<"<cout<<"|
cout<<"|2009年3月19日|"<cout<<"11"<cout<}
voidmain()
{
intlen,fileSize,flag,comm;
charstring[50];
charcommand[10];
charname[40];
char*s,*s1;
version();
initial();
flag=1;
while(flag){
cout<显示目录
cout<MD创建目录RD删除目录"<cout<printf("%s:
>#",path);
gets(string);
len=strlen(string);
if(len==0){
strcpy(command,"errer");
}
else{
//获得命令
s=NULL;
s=strchr(string,'');
if(s!
=NULL){
*s='\0';
}
strcpy(command,string);
//测试命令类型if((!
strcmp(command,"CD"))||!
strcmp(command,"cd")){comm=1;
}
else{
if((!
strcmp(command,"CREATE"))||!
strcmp(command,"create")){comm=2;
}
else{
if((!
strcmp(command,"DEL"))||!
strcmp(command,"del")){comm=3;
}
else{
if((!
strcmp(command,"LSALL"))||!
strcmp(command,"lsall")){comm=4;
}
else{
if((!
strcmp(command,"MD"))||!
strcmp(command,"md")){
comm=5;
}
else{
if((!
strcmp(command,"RD"))||!
strcmp(command,"