资源描述
. .
操作系统
课程设计报告
题 目:
专 业:
班 级:
姓 名:
学 号:
指导教师:
年 月 日
?操作系统?课程设计任务书
一、课程设计题目〔任选一个题目〕
1.模拟进程管理
2.模拟处理机调度
3.模拟存储器管理
4.模拟文件系统
5.模拟磁盘调度
二、设计目的和要求
1.设计目的
?操作系统原理?课程设计是计算机科学与技术专业实践性环节之一,是学习完?操作系统原理?课程后进展的一次较全面的综合练习。其目的在于加深对操作系统的理论、法和根底知识的理解,掌握操作系统构造、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的开展动向和趋势。
2.根本要求:
(1)选择课程设计题目中的一个课题,独立完成。
(2)良好的沟通和合作能力
(3)充分运用前序课所学的软件工程、程序设计、数据构造等相关知识
(4)充分运用调试和排错技术
(5)简单测试驱动模块和桩模块的编写
(6)查阅相关资料,自学具体课题中涉及到的新知识。
(7)课题完成后必须按要求提交课程设计报告,格式规,容详实。
三、设计容及步骤
1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。
2.根据实现的功能,划分出合理的模块,明确模块间的关系。
3.编程实现所设计的模块。
4.程序调试与测试。采用自底向上,分模块进展,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
6.编写课程设计报告;
设计报告和实验报告要求:A4纸和实验报告册,详细设计局部主要表达本人的工作容
设计报告的格式:
(1)封面〔题目、指导教师、专业、班级、XX、学号〕
(2)设计任务书
(3)目录
(4)需求分析
(5)概要设计
(6)详细设计〔含主要代码〕
(7)调试分析、测试结果
(8)用户使用说明
(9)附录或参考资料
四、进度安排
设计在第四学期的第1-18〔共18课时〕进展,时间安排如下:
序号
容
时间〔课时〕
1
系统分析
2
2
设计
4
3
编码、测试
10
4
验收
2
合计
18
五、成绩评定方法
成绩分为优〔A〕、良〔B〕、中〔C〕、及格〔D〕、不及格〔E〕五个等级。其中设计表现占30%,验收40%,设计报告占30%。
1.设计表现:教师可依据学生使用实验环境的能力、观察和分析实验现象的能力、实验结果和数据的正确性以及学生的课堂纪律、实验态度、保持实验室卫生等面的表现进展综合考核。
2.验收:要求学生演示设计的程序,讲解设计思路、法、解决的主要问题,教师根据具体情况向每个学生提问2至3个问题。
3.设计报告:学生设计后应按时完成设计报告和实验报告。要求:容充实、写作规、工程填写正确完整、书面整洁等。
目录
一、 需求分析………………………………………………6
1.进一步理解进程的根本概念…………………………6
2.加强进程管理的设计及算法 …………………………6
3.观察和管理进程………………………………………6
二、 概要设计………………………………………………6
1.实验原理………………………………………………6
2.数据构造………………………………………………6
3.算法描述………………………………………………6
4.算法流程图……………………………………………7
三、 详细设计………………………………………………8
1.源程序代码……………………………………………8
四、调试分析及测试结果………………………………15
五、用户及用说明………………………………………17
六、附录或参考资料……………………………………17
一、需求分析
1.进一步理解进程的根本概念。
2.加强进程管理中主要数据构造的设计及进程调度算法。
3.观察和管理进程——系统在运行过程中可显示或打印各进程的状态及有关参数的变化情况。
二、概要设计
1.实验原理
定义PCB的数据构造,用链表的形式管理进程,采用多级反响队列调度的算法模拟进程的控制,最终完成有创立、撤销、调度、阻塞、唤醒进程等功能。
2.数据构造
类:
class queuenode
class queue
函数:
void enqueue( char &item);
char dequeue();
void del(char item);
void display();
int find(char item);
int isempty()
3.算法描述
1-1、创立进程,根据进程的顺序依次放入就绪队列。
2-1、执行进程——管理系统将就绪队列中的第一个进程调入运行队列;
2-2、将阻塞队列中进程调入就绪队列;
2-3、封锁进程——管理系统将就绪队列中的第一个进程调入阻塞队列;
2-4、完毕进程——管理系统撤销所选进程;
2-5、完毕程序。
4.算法流程图
输入进程信息
执行进程
将阻塞队列的进程调入就绪队列
封锁进程
完毕进程
退出操作
输入要进展操作的功能选项
1
2
3
4
5
进展所选进程操作
选1且进程正在执行
Y
操作不能执行
选择#
N
N
N
选择5
Y
Y
开场
完毕
三、详细设计
1.源程序代码
#include<iostream.h>
class queuenode
{
friend class queue;
private:
char data;
queuenode * link;
queuenode (char d=0,queuenode * l=NULL): data(d),link(l){}
};
class queue
{
public:
queue():rear(NULL),front(NULL){};
~queue();
void enqueue( char &item);
char dequeue();
void del(char item);
void display();
int find(char item);
int isempty(){return front==NULL;}
private:
queuenode *front,*rear;
};
queue::~queue()
{
queuenode * p;
while(front!=NULL)
{
p=front;front=front->link;delete p;
}
}
void queue::enqueue(char &item)
{
if(front==NULL)front=rear=new queuenode(item,NULL);
else rear=rear->link=new queuenode(item,NULL);
}
char queue::dequeue()
{
queuenode *p=front;
char f=p->data;front=front->link;
delete p;
return f;
}
void queue::display()
{
queuenode *p;
p=front;
while(p!=NULL)
{ cout<<p->data<<"->";
p=p->link;
}
cout<<"NULL";
}
queue::find(char item)
{ queuenode *w;
w=front;
M:while(w!=NULL)
{
if(item==w->data)
{ return 1;break;
}
else
{ w=w->link;
goto M;
}
}
if(w==NULL) return 0;
}
void queue::del( char item)
{ queuenode *q,*b;
q=front;
while(q->data!=item)
{b=q;
q=q->link;
}
if(q==front) {front=front->link; delete q;}
else if(q==rear) {rear=b;rear->link=NULL;delete q;}
else {b->link=q->link; delete q;}
}
void main()
{
int n;
char a;
cout<<"\n[-----------操作系统之进程管理模拟系统〔先来先效劳算法〕------------]\n"<<endl;
queue execute,ready,clog; //执行,就绪,阻塞
cout<<"\n[-------请用户输入进程名及其到达cpu的顺序〔完毕进程数请输入x〕------]\n"<<endl;
char r;
r='x';
for(int i=0;;i++)
{
char e[100];
cout<<"输入进程名:"<<" ";
cin>>e[i];
if(e[i]!=r)
ready.enqueue(e[i]);
else
break;
}
A: cout<<"\n [------------请〔学号〕用户〔XX〕选择操作------------]\n";
cout<<"\n [1、执行进程……2、将阻塞队列中进程调入就绪队列………]\n";
cout<<"\n [3、封锁进程…………………4、完毕进程 …………………]\n";
cout<<"\n [5、退出程序………………………………………………… ]\n选项: ";
cin>>n;
if(n==1)
{
if(!execute.isempty ())
{
cout<<"已经有进程在执行!,此操作不能执行\n";
char w;
cout<<endl;
cout<<"如果要继续请输入#;如果要退出按其它任意键"<<endl;
cout<<"要选择的操作:";
cin>>w;
if(w=='#')goto L;
else goto E;
}
else
{
if(!ready.isempty())
{
a=ready.dequeue();
if(a!=r)
execute.enqueue(a);
goto L;
}
else goto L;
}
}
else if(n==2)
{
if(!clog.isempty())
{
a=clog.dequeue ();
if(a!=r)
ready.enqueue(a);
goto L;
}
else goto L;
}
else if(n==3)
{
if(!execute.isempty())
{
a=execute.dequeue ();
if(a!=r)
clog.enqueue(a);
goto L;
}
else goto L;
}
else if(n==4)
{
cout<<"\n请输入要完毕的进程名: ";
cin>>a;
if(execute.find (a)||ready.find (a)||clog.find (a))
{
if(execute.find(a))
{execute.del(a);}
else if(ready.find(a))
{ready.del(a);}
if(clog.find(a))
{clog.del(a);}
cout<<"\n完毕进程成功!\n"<<endl;
goto L;
}
else
cout<<"没有此进程"<<endl;
goto L;
L:
if(n==1||n==2||n==3||n==4)
{
cout<<"执行队列"<<endl;
execute.display();
cout<<endl;
cout<<"就绪队列"<<endl;
ready.display();cout<<endl;
cout<<"阻塞队列"<<endl;
clog.display();cout<<endl;
goto A;
}
else
if(n==5);
else
{
cout<<"\n你的输入错误!\n";
goto A;
}
}
E:;}
四、调试分析及测试结果
五、用户使用说明
用户通过VC++即可运行改程序。需说明的是主函数是实现进程管理的入口,在入口处需输入进程名称,然后输入进程的状态选项,如果完毕后,那么通过相应的调度算法进展进程机的调度,同时也将结果显示在屏幕上。
本次实验通过模拟多个进程的同步运行,实现了进程就绪,运行,阻塞三个状态的转换,并可以根据用户要求改变进程的状态。
六、附录及参考资料
[1]红 ,?操作系统实训?,中国水利水电,2005
[2]红光,?UNIX操作系统试验教程?,机械工程,2006
[3]史美林,?操作系统教程?,清华大学,2006
[4]殷兆麟,?计算机操作系统?,大学,2007
[5]蔚敏,?数据构造〔C语言版〕?,清华大学,2007
. .word.zl.
展开阅读全文