- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一:熟习 Linux 系统
实验目的:
自行编制模拟程序,经过形象化的状态显示, 使学生理解进度的看法、进度之间的状态变换及其所带来的 PCB内容 、组织的变化,理解进度与其 PCB间的一一对应关系。
实验要求:
设计并实现一个模拟进度状态变换及其相应 PCB组织构造变化的程序;
独立设计、编写、调试程序;
程序界面应能反应出在模拟条件下,进度之间状态变换及其对应的PCB组织的变化。
进度的状态模型(三状态、五状态、七状态或其余)可自行选择
运转
Running
Dis
Eve
Tim
patc
Wai nt
eout
h
t
就绪
Event
等候
Ready
Occurs
Blocked
基本状态间的变换
代码书写要规范,要适合地加入说明;
鼓舞在实验中加入新的看法或想法,并加以实现;
仔细进行预习,达成预习报告;
实验达成后,要仔细总结,达成实验报告。
程序流程图:
开始
初始化等候和堵塞行列
等候行列为
结束
是
空?
否
等得行列首个进度进入运转队
列
显示所有行列信息
能否堵塞?
运前进度耗费一个
运前进度能否
运前进度进入等候
否
结束
否
时间片
行列
是 是
正在执前进度
运转行列清空
进入堵塞行列
等候行列进度
数小于 4?
是
堵塞行列首个进度
进入等候行列
说明(
1)上为运转结果,
xy : x
为进度号;
y 为进度结束节余时间片。
( 2)程序中使用行列数据构造,并以构造体 process(进度)作为行列元素。
( 3) 程序自动进行时间片分派, 但每次运转一个进度前需要进行堵塞判断,
手动输入。
由操作员
4)程序在等候行列中进度小于 4 时,自动将堵塞行列中的进度开释出来。程序源代码:
#includeiostream
#includequeue
#includewindows.h
using namespace std;
struct process
{
int id;
int hp;
process(){}
process(int a,int b)
{
id=a;
hp=b;
}
};
queueprocess re,bl,ru;
int main()
{
void show(queueprocess re,queueprocess ru,queueprocess bl); process p1(1,2),p2(2,1),p3(3,1),p4(4,3),p5(5,2),p6(6,1); re.push(p1);
re.push(p2);
re.push(p3);
bl.push(p4);
bl.push(p5);
bl.push(p6);
process x;char ch;int n;
cout 初始化中 .;
Sleep(2000);
cout.;
Sleep(2000);
cout.endlendl;
show(re,ru,bl);
coutendl 开始执行! endlendl;
while(!re.empty())
{
x=re.front();
re.pop();
ru.push(x);
x=ru.front();
show(re,ru,bl);
coutendl 能否堵塞? (y/n)endl;
ch=getchar();
getchar();
if(ch==y)
{
x=ru.front();
ru.pop();
bl.push(x);
}
else if(ch==n)
{
x.hp--;
ru.front().hp=x.hp;
if(x.hp!=0)
{
x=ru.front();
ru.pop();
re.push(x);
}
else ru.pop();
}
else cout输入有误 endl;
n=re.size();
while(n4)
{
if(bl.empty())break;
x=bl.front();
bl.pop();
re.push(x);
n++;
}
}
return 0;
}
void show(queueprocess re,queueprocess ru,queueprocess bl)
{
cout 运转任务: ;
process y;
if(ru.empty())cout 空 endl;
else
{
y=ru.front();
ru.pop();
couty.id(y.hp)endl;
}
cout 行列中的任务: ;
if(!re.empty())
{
while(!re.empty())
{
y=re.front();
re.pop();
couty.id(y.hp) ;
}
}
else cout 空;
coutendl 堵塞中的任务: ;
if(!bl.empty())
{
while(!
文档评论(0)