操作系统课程设计(进程管理)Word文档下载推荐.doc
《操作系统课程设计(进程管理)Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计(进程管理)Word文档下载推荐.doc(18页珍藏版)》请在冰点文库上搜索。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
5.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
6.编写课程设计报告;
设计报告和实验报告要求:
A4纸和实验报告册,详细设计部分主要叙述本人的工作内容
设计报告的格式:
(1)封面(题目、指导教师、专业、班级、姓名、学号)
(2)设计任务书
(3)目录
(4)需求分析
(5)概要设计
(6)详细设计(含主要代码)
(7)调试分析、测试结果
(8)用户使用说明
(9)附录或参考资料
四、进度安排
设计在第四学期的第1-18周(共18课时)进行,时间安排如下:
序号
内容
时间(课时)
1
系统分析
2
设计
4
3
编码、测试
10
验收
合计
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.数据结构
类:
classqueuenode
classqueue
函数:
voidenqueue(char&
item);
chardequeue();
voiddel(charitem);
voiddisplay();
intfind(charitem);
intisempty()
3.算法描述
1-1、创建进程,根据进程的顺序依次放入就绪队列。
2-1、执行进程——管理系统将就绪队列中的第一个进程调入运行队列;
2-2、将阻塞队列中进程调入就绪队列;
2-3、封锁进程——管理系统将就绪队列中的第一个进程调入阻塞队列;
2-4、结束进程——管理系统撤销所选进程;
2-5、结束程序。
4.算法流程图
输入进程信息
执行进程
将阻塞队列的进程调入就绪队列
封锁进程
结束进程
退出操作
输入要进行操作的功能选项
5
进行所选进程操作
选1且进程正在执行
Y
操作不能执行
选择#
N
选择5
开始
结束
三、详细设计
1.源程序代码
#include<
iostream.h>
{
friendclassqueue;
private:
chardata;
queuenode*link;
queuenode(chard=0,queuenode*l=NULL):
data(d),link(l){}
};
public:
queue():
rear(NULL),front(NULL){};
~queue();
voidenqueue(char&
chardequeue();
voiddel(charitem);
voiddisplay();
intfind(charitem);
intisempty(){returnfront==NULL;
}
queuenode*front,*rear;
queue:
:
~queue()
queuenode*p;
while(front!
=NULL)
{
p=front;
front=front->
link;
deletep;
}
voidqueue:
enqueue(char&
item)
if(front==NULL)front=rear=newqueuenode(item,NULL);
elserear=rear->
link=newqueuenode(item,NULL);
charqueue:
dequeue()
queuenode*p=front;
charf=p->
data;
deletep;
returnf;
display()
queuenode*p;
p=front;
while(p!
{ cout<
<
p->
data<
"
->
;
p=p->
cout<
NULL"
find(charitem)
{queuenode*w;
w=front;
M:
while(w!
if(item==w->
data)
{ return1;
break;
}
else
{ w=w->
gotoM;
if(w==NULL)return0;
del(charitem)
{queuenode*q,*b;
q=front;
while(q->
data!
=item)
{b=q;
q=q->
}
if(q==front){front=front->
deleteq;
elseif(q==rear){rear=b;
rear->
link=NULL;
deleteq;
else{b->
link=q->
deleteq;
voidmain()
intn;
chara;
\n[-----------操作系统之进程管理模拟系统(先来先服务算法)------------]\n"
endl;
queueexecute,ready,clog;
//执行,就绪,阻塞
\n[-------请用户输入进程名及其到达cpu的顺序(结束进程数请输入x)------]\n"
charr;
r='
x'
for(inti=0;
i++)
{
chare[100];
cout<
输入进程名:
"
cin>
>
e[i];
if(e[i]!
=r)
ready.enqueue(e[i]);
else
break;
A:
cout<
\n[------------请(学号)用户(姓名)选择操作------------]\n"
cout<
\n[1、执行进程……2、将阻塞队列中进程调入就绪队列………]\n"
\n[3、封锁进程…………………4、结束进程…………………]\n"
\n[5、退出程序…………………………………………………]\n选项:
cin>
n;
if(n==1)
{
if(!
execute.isempty())
{
cout<
已经有进程在执行!
此操作不能执行\n"
charw;
如果要继续请输入#;
如果要退出按其它任意键"
要选择的操作:
cin>
w;
if(w=='
#'
)gotoL;
elsegotoE;
}
else
if(!
ready.isempty())
{
a=ready.dequeue();
if(a!
execute.enqueue(a);
gotoL;
}
elsegotoL;
}
elseif(n==2)
clog.isempty())
a=clog.dequeue();
if(a!
ready.enqueue(a);
gotoL;
elsegotoL;
elseif(n==3)
execute.isempty())
a=execute.dequeue();
clog.enqueue(a);
elsegotoL;
elseif(n==4)
cout<
\n请输入要结束的进程名:
cin>
a;
if(execute.find(a)||ready.find(a)||clog.find(a))
if(execute.find(a))
{execute.del(a);
elseif(ready.find(a))
{ready.del(a);
if(clog.find(a))
{clog.del(a);
\n结束进程成功!
\n"
}
没有此进程"
gotoL;
L:
if(n==1||n==2||n==3||n==4)
执行队列"
execute.display();
就绪队列"
ready.display();
cout<
阻塞队列"
clog.display();
gotoA;
else
if(n==5);
else
cout<
\n你的输入错误!
gotoA;
E:
}
四、调试分析及测试结果
五、用户使用说明
用户通过VC++即可运行改程序。
需说明的是主函数是实现进程管理的入口,在入口处需输入进程名称,然后输入进程的状态选项,如果完毕后,则通过相应的调度算法进行进程机的调度,同时也将结果显示在屏幕上。
本次实验通过模拟多个进程的同步运行,实现了进程就绪,运行,阻塞三个状态的转换,并可以根据用户要求改变进程的状态。
六、附录及参考资料
[1]王红,《操作系统实训》,中国水利水电出版社,2005
[2]张红光,《UNIX操作系统试验教程》,机械工程出版社,2006
[3]史美林,《操作系统教程》,清华大学,2006
[4]殷兆麟,《计算机操作系统》,北京大学,2007
[5]严蔚敏,《数据结构(C语言版)》,清华大学,2007
18/18