操作系统实验一.docx
《操作系统实验一.docx》由会员分享,可在线阅读,更多相关《操作系统实验一.docx(13页珍藏版)》请在冰豆网上搜索。
![操作系统实验一.docx](https://file1.bdocx.com/fileroot1/2023-2/23/655631e3-7bed-4985-be3e-caf82424f7e2/655631e3-7bed-4985-be3e-caf82424f7e21.gif)
操作系统实验一
黑龙江大学
实验报告
课程名称
计算机操作系统
实验项目名称
进程控制
实验时间
(日期及节次)
2016年3月28日8-10节
专业
软件工程
学生所在学院
软件学院
年级
2014
学号
姓名
指导教师
实验室名称
实验成绩
预习情况
操作技术
实验报告
附加:
综合创新能力
实验
综合成绩
教师签字
黑龙江大学教务处
实验名称:
进程控制
实验目的
为配合《计算机操作系统》(第三版)课程的教学,通过在WINDOWS环境下,利用高级语言模拟操作系统的实现。
模拟操作系统原理的实现进程控制,能更深刻地领会操作系统工作原理和操作系统实现方法,并提高程序设计能力。
1、利用简单的结构和控制方法模拟进程结构、进程状态和进程控制,掌握作为操作系统分配资源的基本单位的进程相关的概念。
定义PCB(可以采用静态结构或动态结构),在实验中只需建立PCB,用它代表完整的进程。
2、定义进程状态转换方式:
进程的状态转换是由进程内部操作或操作系统的控制引起,由于无法实现这些功能,可以采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。
随机方法指产生1-6的随机数,分别代表创建进程、结束进程、进程阻塞、激活进程、调度进程、时间片到等事件;键盘模拟方法指定义6种按键代表以上6种事件。
实验类型
计算机操作系统课程设计
实验环境
编程环境:
VisualC++6.0
运行环境:
WindowsXP
主要数据结构及说明
利用数据结构的线性表链式存储结构,C++语言描述数据结构算法,先声明个头指针,头结点,利用C++语言函数定义节点,指针来控制变量,利用C++语言函数来,控制每个方法的执行,用数组模拟内存,用数组的地址模拟内存地址,用数组的大小模拟内存进程大小。
主要设计思想与算法(流程)
通过学习《计算机操作系统》(第三版)课程,通过在WINDOWS环境下,本次课程设计的主要思想就是利用高级语言C++模拟操作系统的实现。
模拟操作系统原理的实现进程控制,能更深刻地领会操作系统工作原理和操作系统实现方法,系统流程图如图所示:
代码:
#include
usingnamespacestd;
typedefstructLink
{
intdata;
Link*next;
}*Linklist;
voidshow(Linklistl)
{
Linklistll=l;
while(ll->next)
{
cout<next->data<<"";
ll=ll->next;
}
}
voiddatashow(intm)
{
if(m==0)cout<<"无"<elsecout<}
voidtail(Linklistl,intt)
{
Linklistll=l;
Linklists=newLink;
s->data=t;
s->next=NULL;
if(ll->next==NULL)
{
ll->next=s;
}
else
{
while(ll->next!
=NULL)
{
ll=ll->next;
}
ll->next=s;
}
}
voidprint()
{
cout<<"请选择执行的操作:
"<cout<<"1.创建进程"<cout<<"2.时间片到"<cout<<"3.进程阻塞"<cout<<"4.唤醒进程"<cout<<"5.结束进程"<}
voidshowall(Linklistl1,Linklistl2,intm)
{
cout<cout<<"就绪态为:
";
show(l1);
cout<cout<<"执行态为:
";
datashow(m);
cout<<"阻塞态为:
";
show(l2);
cout<cout<}
voidmain()
{
intn,t,q,c,nn,m=0,j=0;
Linklistl1=newLink;
l1->next=NULL;
Linklistl2=newLink;
l2->next=NULL;
Linklistl11=l1;
Linklistla=l2;
Linklistlll1=l1;
Linklistlll2=l2;
showall(l1,l2,m);
print();
cin>>n;
while(true)
{
switch(n)
{
case1:
{
cout<<"请输入进程名(用数字1~9表示):
";
cin>>t;
tail(l1,t);
if(m==0)
{
if(l1->next!
=NULL)
{
nn=l1->next->data;
l1->next=l1->next->next;
m=nn;
}
showall(l1,l2,m);
}
else
{
showall(l1,l2,m);
}
break;
}
case2:
{
if(m!
=0)
{
tail(l1,m);
m=0;
if(l1->next!
=NULL)
{
nn=l1->next->data;
l1->next=l1->next->next;
m=nn;
}
showall(l1,l2,m);
}
else
{
cout<<"没有正在进行的进程"<}
break;
}
case3:
{
if(m==0)
{
cout<<"没有正在进行的进程"<}
else
{
tail(l2,m);
m=0;
if(l1->next!
=NULL)
{
nn=l1->next->data;
l1->next=l1->next->next;
m=nn;
}
showall(l1,l2,m);
}
break;
}
case4:
{
if(la->next==NULL)cout<<"没有正在阻塞的进程"<else
{
cout<<"请输入要唤醒的进程";
cin>>c;
while(la->next->data!
=c)
la=la->next;
tail(l1,la->next->data);
la->next=la->next->next;
}
if(m==0)
{
if(l1->next!
=NULL)
{
nn=l1->next->data;
l1->next=l1->next->next;
m=nn;
}
showall(l1,l2,m);
}
elseshowall(l1,l2,m);
break;
}
case5:
{
cout<<"请输入要结束的进程号";
cin>>q;
while(lll1->next!
=NULL)
{
if(lll1->next->data==q)
{
lll1->next=lll1->next->next;
showall(l1,l2,m);
break;
}
elselll1=lll1->next;
}
while(lll2->next!
=NULL)
{
if(lll2->next->data==q)
{
lll2->next=lll2->next->next;
showall(l1,l2,m);
break;
}
elselll2=lll2->next;
}
if(m==q)
{
m=0;
if(l1->next!
=NULL)
{
nn=l1->next->data;
l1->next=l1->next->next;
m=nn;
}
showall(l1,l2,m);
}
}
}
cin>>n;
}
}
4、利用函数
C++标准输入输出iostream.h头文件、cin>>标准输入、cout<<标准输出。
实验结果(测试用例、实验结果)
实验总结
掌握并进一步熟悉操作系统进程的各种状态以及转换。
掌握利用高级语言模拟进程的执行,提高了编程设计能力。
学会使用最基本C++函数