实验一进程创建与撤消

2019-08-31 20:55

200600814112 石强 计科071

实验一:进程创建与撤消

一.实验目的

(1) 加深对进程概念的理解和进程创建与撤消算法; (2) 进一步认识并发执行的实质。

二.实验属性

该实验为设计性实验。

三.实验仪器设备及器材

普通PC386以上微机

四.实验要求

本实验要求2学时完成。

本实验要求完成如下任务:

(1)进程管理认识:通过windows “任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)进程创建与撤销:通过编程实现进程的创建与撤销功能,并在屏幕上观察进程活动的结果。

实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告;实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。 五.实验步骤:

步骤一:了解进程的创建与撤销过程.

步骤二:对PCB的数据结构了解,并设计出PCB的数据结构. 步骤三:设计主体代码. 步骤四:运行验证.

六.主要代码

struct pcb //定义进程控制块pcb的结构 {

int id;//进程id

char name[10];//进程名称 int priority;//进程的优先级

struct pcb *status;//状态指针(运行,就绪,等待) struct pcb *next;//进程当前队列指针

1

200600814112 石强 计科071

struct pcb *all_q_next;//总链指针 int flag;//进程控制块的分配标志

};

struct pcb pcba[10];//结构体数组,用来模拟pcb资源池 struct pcb *all_q_head;//总链队列头指针 struct pcb *ready_head;//就绪队列头指针 void creat() //创建进程

{

int m;//用来循环给pcb块的标志位置零 int i;//用来输入第一个进程的id int j;//用来寻找空闲pcb块

//进程控制块分配标志置零 for(m=0;m<=9;m++) pcba[m].flag=0; //初始化总链队列

p1=p2=p3=all_q_head=&pcba[0]; all_q_head->id=0;

all_q_head->next=NULL; all_q_head->all_q_next=NULL; all_q_head->flag=1;

//初始化就绪队列

q1=q2=q4=q5=ready_head=&pcba[1]; ready_head->id=0;

ready_head->next=NULL;

ready_head->all_q_next=NULL; ready_head->flag=1;

//判断有没有同名进程

cout<<\开始创建第一个进程:\ //

p3->all_q_next=NULL;

for(;;) {

cout<<\请输入进程id(id是整型数)\

cin>>i;

while(p3!=NULL)

2

200600814112 石强 计科071

{

if(p3->id==i)

{

cout<<\有同名进程,创建出现错误!\

p4=p5=all_q_head->all_q_next; return; }//if

else

p3=p3->all_q_next; }//while

if(p3==NULL) {

cout<<\没有同名进程,可以以此进程id创建进程\ p3=all_q_head;//t- pcb中内容赋值

} else

{

cout<<\池中没有空闲pcb块,不能申请pcb结构来创建进程

\ }

//if break;

for(j=0;j<=9;j++) //判断pcb池中有没有空闲的pcb块 {

if(pcba[j].flag==1&&j!=9) continue;

cout<<\池中有空闲pcb块,可以申请pcb结构来创建进程

\ t=&pcba[j];//获得空间, 在没有同名进程和有空闲pcb块的情况下,开始创建进程

t->id=i;//进程的id可以直接赋值;

break; }

if(j>9)

{

cout<<\池中没有空闲pcb块,不能申请pcb结构来创建进程

\

3

200600814112 石强 计科071

}

cout<<\请依次输入所创进程的名称,优先级\ // scanf(\

cin>>t->name; //进程的名称,它是不超过10个字符的字符串 cin>>t->priority;//进程的优先级,它是整型数 t->status=ready_head;//进程的状态置为就绪状态 t->flag=1;

//新进程的pcb入总链队列 p2->all_q_next=t;

t->all_q_next=NULL; p2=t;

//新进程的pcb入就绪队列

q2->next=t; t->next=NULL; q2=t;

//输出总链队列的内容

cout<<\进程创建后总链队列的内容如下(进程id,进程名,优先级):\ p1=p1->all_q_next; while(p1!=NULL)

{

cout<id<<\ \ \ p1=p1->all_q_next; }//while

p1=all_q_head;

//输出就绪队列的内容

cout<<\进程创建后就绪队列的内容如下(进程id,进程名,优先级):\ q1=q1->next; while(q1!=NULL) {

cout<id<<\ \ \

4

200600814112 石强 计科071

q1=q1->next;

}//while

q1=ready_head; char k;

cout<<\继续创建进程吗?(y/n):\ cin>>k; if(k=='y'||k=='Y')

continue;

else if(k=='n'||k=='N')

{ cout<<\进程创建完毕!\ }

p4=p5=all_q_head->all_q_next; break; } else

{ p4=p5=all_q_head->all_q_next; }

return; }

p4=p5=all_q_head->all_q_next;

void kill() //***************************************************** 撤销进程 { for(;;)

{

//cout<<\输入有误,请继续输入:\ if(p5==NULL)

{ cout<<\没有可以撤销的进程了!\ return;

}

cout<<\请输入想要撤销的进程的id号:\ int n;

cin>>n;

q1=q2=q3=ready_head->next;

while(p5->id!=n&&p5->all_q_next!=NULL)//寻找id号为n的节点 { p4=p5;

p5=p5->all_q_next; }

if(p5->id==n)//找到

5


实验一进程创建与撤消.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高血压介绍

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: