• 大小: 40KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: 进程控制  算法  

资源简介

1、程序中有创建、撤消、阻塞、唤醒、挂起、激活、改变优先数(K0)、改变状态(STATE)、查看PCB功能模块,为每个模块建立一个程序。 2、PCB(进程控制块)可采用数组数据结构,每个数组元素即PCB块可包含N0(外部名),K0(优先数),CHA(状态)三项。

资源截图

代码片段和文件信息

#include“stdio.h“
#include“stdlib.h“

struct pcb 
{
int name;  
int KO;
int state;
};
typedef struct pcb PCB;
PCB a[10];


void create() //  创建进程
{
static int pi=1;
int kl=0m;


printf(“请输入进程名:“);
scanf(“%d“&m);
for(k=1;k<=10;k++)
if(a[k].name==m)
l=1;
if(l==1)
{
printf(“创建失败!该进程已经存在!\n“);
   
}
else
{
a[pi].name=m;
printf(“\n“);

printf(“请输入优先级:“);
scanf(“%d“&a[pi].KO);
a[pi++].state=2;
printf(“创建成功!\n“);
printf(“\n“);
}
    getchar();
getchar();
}


void destory() //撤销进程
{
int inumk=0;
printf(“请输入要撤销的进程:“);
scanf(“%d“&num);
for(i=0;i<=10;i++)
if(a[i].name==num)
k=i;
if(k!=0)
{
a[k].name=0;
a[k].KO=0;
a[k].state=0;
printf(“撤销成功!\n“);
}
else
printf(“撤销失败!不存在此进程!\n“);
getchar();
getchar();
}

void active() //激活进程
{
int ik=0m;
printf(“ 请输入进程名:“);
scanf(“%d“&m);
for(i=0;i<=10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case 1 :a[k].state=4;printf(“激活成功!\n“);break;
case 2 :a[k].state=3;printf(“激活成功!\n“);break;
default:printf(“激活失败!进程已经激活或正在执行!\n“);
}
}
else
printf(“激活失败!进程不存在\n!“);
getchar();
getchar();
}


void hang() //挂起进程
{
int ik=0m;
printf(“请输入进程名:“);
scanf(“%d“&m);
for(i=1;i<=10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case 3:a[k].state=2;printf(“挂起成功!\n“);break;
case 4:a[k].state=1;printf(“挂起成功!\n“);break;
case 5:a[k].state=1;printf(“挂起成功!\n“);break;
default:printf(“挂起失败!进程已经处于挂起状态!\n“);
}
}
else
printf(“挂起失败!进程不存在!\n“);
getchar();
getchar();
}

void release() //释放进程
{
int ik=0m;
printf(“请输入进程名:“);
scanf(“%d“&m);
for(i=1;i<=10;i++)
if(a[i].name==m)
k=i;
     if(k!=0)
 {
 switch(a[k].state)
 {
 case 2:a[k].state=1;printf(“释放成功!\n“);break;
 case 3:a[k].state=4;printf(“释放成功!\n“);break;
 default:printf(“ 释放失败!进程处于就绪状态或正在执行!\n“);
 }
 }
 else
 printf(“ 释放失败!进程不存在!\n“);
 getchar();
 getchar();
}

void execution() //执行进程
{
int ik=0m;
printf(“请输入进程名:“);
scanf(“%d“&m);
for(i=1;i<+10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case 4:a[k].state=5;printf(“执行成功!\n“);break;
case 5:printf(“进程正在执行!\n“);
default:printf(“进程不符合执行条件!\n“);
}
}
else
printf(“进程不存在!\n“);
getchar();
getchar();
}


void state_appear(int k)
{
int a;
a=k;
switch(a)
{
case 1:printf(“静止就绪\n“);break;
case 2:printf(“静止阻塞\n“);break;
    case 3:printf(“活动阻塞\n“);break;
    case 4:printf(“活动就绪\n“);break;
case 5:printf(“执行\n“);break;
}
}

void look_state()
{
int imnk=0;
printf(“1-查看所有进程状态\n“);
printf(“2-查询单个进程状态\n“);
printf(“请选择:“);
scanf(“%d“&n);
switch(n)

case 1:
printf(“进程名     优先级        进程状态\n“);
for(i=1;i<=10;i++)
if(a[i].name!=0)
{
printf(“%d\t\t%d\t“a[k].namea[i].KO);
state_appear(a[i].state);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4922  2010-04-27 10:18  邢伟 2班  231\jinchen g.cpp

     文件      65536  2010-04-27 11:45  邢伟 2班  231\程序说明.doc

     目录          0  2010-04-27 11:47  邢伟 2班  231

----------- ---------  ---------- -----  ----

                70458                    3


评论

共有 条评论