操作系统技术交底大全报告进程管理.docx
《操作系统技术交底大全报告进程管理.docx》由会员分享,可在线阅读,更多相关《操作系统技术交底大全报告进程管理.docx(14页珍藏版)》请在冰豆网上搜索。
操作系统技术交底大全报告进程管理
操作系统
课程设计报告
题目:
进程管理
专业:
班级:
姓名:
学号:
指导老师:
年月日
《操作系统》课程设计任务书
一、课程设计题目(任选一个题目)
1.模拟进程管理
2.模拟处理机调度
3.模拟存储器管理
4.模拟文件系统
5.模拟磁盘调度
二、设计目的和要求
1.设计目的
《操作系统原理》课程设计是计算机科学与技术专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。
其目的在于加深对操作系统的理论、法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
2.基本要求:
(1)选择课程设计题目中的一个课题,独立完成。
(2)良好的沟通和合作能力
(3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识
(4)充分运用调试和排错技术
(5)简单测试驱动模块和桩模块的编写
(6)查阅相关资料,自学具体课题中涉及到的新知识。
(7)课题完成后必须按要求提交课程设计报告,格式规,容详实。
三、设计容及步骤
1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。
2.根据实现的功能,划分出合理的模块,明确模块间的关系。
3.编程实现所设计的模块。
4.程序调试与测试。
采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
5.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
6.编写课程设计报告;
设计报告和实验报告要求:
A4纸和实验报告册,详细设计部分主要叙述本人的工作容
设计报告的格式:
(1)封面(题目、指导教师、专业、班级、姓名、学号)
(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.数据结构
类:
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.算法流程图
输入进程信息
执行进程
将阻塞队列的进程调入就绪队列
封锁进程
结束进程
退出操作
输入要进行操作的功能选项
1
2
3
4
5
进行所选进程操作
选1且进程正在执行
Y
操作不能执行
选择#
N
N
N
选择5
Y
Y
开始
结束
三、详细设计
1.源程序代码
#include
classqueuenode
{
friendclassqueue;
private:
chardata;
queuenode*link;
queuenode(chard=0,queuenode*l=NULL):
data(d),link(l){}
};
classqueue
{
public:
queue():
rear(NULL),front(NULL){};
~queue();
voidenqueue(char&item);
chardequeue();
voiddel(charitem);
voiddisplay();
intfind(charitem);
intisempty(){returnfront==NULL;}
private:
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;front=front->link;
deletep;
returnf;
}
voidqueue:
:
display()
{
queuenode*p;
p=front;
while(p!
=NULL)
{cout<data<<"->";
p=p->link;
}
cout<<"NULL";
}
queue:
:
find(charitem)
{queuenode*w;
w=front;
M:
while(w!
=NULL)
{
if(item==w->data)
{return1;break;
}
else
{w=w->link;
gotoM;
}
}
if(w==NULL)return0;
}
voidqueue:
:
del(charitem)
{queuenode*q,*b;
q=front;
while(q->data!
=item)
{b=q;
q=q->link;
}
if(q==front){front=front->link;deleteq;}
elseif(q==rear){rear=b;rear->link=NULL;deleteq;}
else{b->link=q->link;deleteq;}
}
voidmain()
{
intn;
chara;
cout<<"\n[-----------操作系统之进程管理模拟系统(先来先服务算法)------------]\n"<queueexecute,ready,clog;//执行,就绪,阻塞
cout<<"\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";
cout<<"\n[3、封锁进程…………………4、结束进程…………………]\n";
cout<<"\n[5、退出程序…………………………………………………]\n选项:
";
cin>>n;
if(n==1)
{
if(!
execute.isempty())
{
cout<<"已经有进程在执行!
此操作不能执行\n";
charw;
cout<cout<<"如果要继续请输入#;如果要退出按其它任意键"<cout<<"要选择的操作:
";
cin>>w;
if(w=='#')gotoL;
elsegotoE;
}
else
{
if(!
ready.isempty())
{
a=ready.dequeue();
if(a!
=r)
execute.enqueue(a);
gotoL;
}
elsegotoL;
}
}
elseif(n==2)
{
if(!
clog.isempty())
{
a=clog.dequeue();
if(a!
=r)
ready.enqueue(a);
gotoL;
}
elsegotoL;
}
elseif(n==3)
{
if(!
execute.isempty())
{
a=execute.dequeue();
if(a!
=r)
clog.enqueue(a);
gotoL;
}
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);}
cout<<"\n结束进程成功!
\n"<gotoL;
}
else
cout<<"没有此进程"<gotoL;
L:
if(n==1||n==2||n==3||n==4)
{
cout<<"执行队列"<execute.display();
cout<cout<<"就绪队列"<ready.display();cout<cout<<"阻塞队列"<clog.display();cout<gotoA;
}
else
if(n==5);
else
{
cout<<"\n你的输入错误!
\n";
gotoA;
}
}
E:
;}
四、调试分析及测试结果
五、用户使用说明
用户通过VC++即可运行改程序。
需说明的是主函数是实现进程管理的入口,在入口处需输入进程名称,然后输入进程的状态选项,如果完毕后,则通过相应的调度算法进行进程机的调度,同时也将结果显示在屏幕上。
本次实验通过模拟多个进程的同步运行,实现了进程就绪,运行,阻塞三个状态的转换,并可以根据用户要求改变进程的状态。
六、附录及参考资料
[1]红,《操作系统实训》,中国水利水电出版社,2005
[2]红光,《UNIX操作系统试验教程》,机械工程出版社,2006
[3]史美林,《操作系统教程》,清华大学,2006
[4]殷兆麟,《计算机操作系统》,北京大学,2007
[5]蔚敏,《数据结构(C语言版)》,清华大学,2007