#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NULL 0
int shumu=0;
//进程的内容结构体
struct node
{
int a;
char ch;
};
//进程PCB结构体
struct jincheng
{
int pid;
int youxian;
float luntime;
float zhantime;
char zhuangtai;//a表示执行,b表示动态就绪
node *neirong;
struct jincheng *next;
};
struct jincheng *neijin,*neizhi,*p,*q;
//换出进程函数
void huanchu(int a)
{
p=neijin;
while(p->pid!=a&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("该进程不在内存里!\n");
return;
}
if(p==neijin)
{
neijin=neijin->next;
}
else
{
q->next=p->next;
}
}
//杀死正在运行进程函数
void shasi()
{
neizhi->next=NULL;
printf("运行的进程已经杀死!\n");
return;
}
//创建新进程后与正在运行进程比较优先级并根据优先级判断谁该占用处理机
int bijiao()
{
int i,j;
p=neijin;
while(p!=NULL)
{
q=p;
p=p->next;
}
i=q->youxian;
j=neizhi->next->youxian;
if(i>j)
{
p=neijin;
if(p==q)
{
neijin=neizhi->next;
p->neirong=(node*)malloc(sizeof(node));
p->neirong->a=9;
p->neirong->ch='c';
neizhi->next=p;
return 1;
}
else{
while(p->next!=q)
{
p=p->next;
}
p->next=neizhi->next;
q->neirong=(node*)malloc(sizeof(node));
q->neirong->a=9;
q->neirong->ch='c';
neizhi->next=q;
neizhi->next->next=NULL;
return 1;
}
}
else
return -1;
}
void main()
{
int zhixing();
void shasi();
void chakan();
void tongxing(int);
neizhi=(jincheng*)malloc(sizeof(jincheng));
neizhi->next=NULL;
neijin=(jincheng*)malloc(sizeof(jincheng));
neijin->next=NULL;
neijin->pid=1;
neijin->youxian=6;
neijin->luntime=3.5;
neijin->zhantime=3;
neijin->neirong=(node*)malloc(sizeof(node));
neijin->neirong=NULL;
neijin->zhuangtai='b';
shumu++;
p=(jincheng*)malloc(sizeof(jincheng));
p->next=neijin->next;
neijin->next=p;
p->pid=2;
p->youxian=5;
p->luntime=3.5;
p->zhantime=3;
p->neirong=(node*)malloc(sizeof(node));
p->neirong=NULL;
p->zhuangtai='b';
shumu++;
q=(jincheng*)malloc(sizeof(jincheng));
q->next=p->next;
p->next=q;
q->pid=3;
q->youxian=4;
q->luntime=3.5;
q->zhantime=3;
q->neirong=(node*)malloc(sizeof(node));
q->neirong=NULL;
q->zhuangtai='b';
shumu++;
int i,n=1;
int k,j,s;
j=zhixing();
int creat();
while(n==1)
{
printf("********************************************\n");
printf("* 进程演示系统 *\n");
printf("********************************************\n");
printf(" 1.创建新的进程 2.查看运行进程 \n");
printf(" 3.换出某个进程 4.杀死运行进程 \n");
printf(" 5.进程之间通信 6.退出系统 \n");
printf("********************************************\n");
printf("请选择(1~6)\n");
scanf("%d",&i);
switch(i)
{
case 1:k=creat();
if(k==1)
printf("进程创建成功!\n");
if(neijin->next==NULL)
{
printf("由于只有一个进程所以为它分配处理机.\n");
neizhi->next=neijin;
neijin->neirong=(node*)malloc(sizeof(node));
neijin->neirong->a=3;
neijin->neirong->ch='c';
neijin=NULL;
continue;
}
k=bijiao();
if(k==1)
{
printf("由于新进程的优先级高于正在执行的进程所以正在执行的\n");
printf("进程让出处理机交给新进程,而它变为活动就绪!\n");
}
if(k!=1)
printf("新进程的优先级低于正在运行的进程所以它只有等待!\n");
break;
case 2:
if(neizhi->next==NULL)
{
printf("没有进程处于执行状态!\n");
continue;
}
chakan();break;
case 3:
if(neijin==NULL)
{
printf("内存中已经没有处于活动就绪的进程了请创建!\n");
continue;
}
printf("已有处于活动就绪进程的名字为:\n");
p=neijin;
printf("(");
while(p!=NULL)
{
printf("%d ",p->pid);
p=p->next;
}
printf(")\n");
printf("请输入要换出的处于活动就绪进程的名字\n");
scanf("%d",&s);
huanchu(s);
if(neijin==NULL)
printf("内存中已经没有活动就绪进程!\n");
else
{
printf("已有处于活动就绪进程的名字为:\n");
p=neijin;
printf("(");
while(p!=NULL)
{
printf("%d ",p->pid);
p=p->next;
}
printf(")\n");
}
break;
case 4:
if(neizhi->next==NULL)
{
printf("没有处于执行状态的进程!\n");
continue;
}
shasi();
if(neijin==NULL)
{
printf("已经没有处于活动就绪的进程请创建!\n");
continue;
}
j=zhixing();
if(j==1)
{ printf("已为一个动态就绪进程中优先级最高的进程分配处理器!\n");
}
break;
case 5:
if(neijin==NULL)
{
printf("内存中已经没有处于活动就绪的进程了请创建!\n");
continue;
}
if(neizhi->next==NULL)
{
printf("没有处于执行状态的进程!\n");
continue;
}
printf("请输入要与正在运行的进程进行进程通讯的进程名字\n");
scanf("%d",&s);
tongxing(s);
break;
case 6:exit(0);
default:n=0;
}
}
}
//创建新的进程函数
int creat()
{
int i;
if(shumu>20)
{
printf("内存已满请先换出进程!\n");
i=-1;
return i;
}
else
{
if(neijin==NULL)
{
p=(jincheng*)malloc(sizeof(jincheng));
printf("请输入新进程的名字(数字):\n");
scanf("%d",&p->pid);
printf("请输入新进程的优先级:(数字)\n");
scanf("%d",&p->youxian);
p->luntime=3.5;
p->zhantime=3;
p->neirong=(node*)malloc(sizeof(node));
p->neirong=NULL;
p->zhuangtai='b';
p->next=NULL;
neijin=p;
shumu++;
i=1;
}
else
{
p=neijin;
while(p->next!=NULL)
{
p=p->next;
}
q=(jincheng*)malloc(sizeof(jincheng));
q->next=p->next;
p->next=q;
printf("请输入新进程的名字(数字):\n");
scanf("%d",&q->pid);
printf("请输入新进程的优先级:(数字)\n");
scanf("%d",&q->youxian);
q->luntime=3.5;
q->zhantime=3;
q->neirong=(node*)malloc(sizeof(node));
q->neirong=NULL;
q->zhuangtai='b';
shumu++;
i=1;
}
}
return i;
}
//从活动就绪进程队列中找到一个优先级最高的进程并为它分配处理机
int zhixing()
{
int i,j;
p=neijin;
if(neizhi->next!=NULL)
{
return -1;
}
i=neijin->youxian;
p=neijin->next;
while(p!=NULL)
{ j=p->youxian;
if(i>=j)
{
p=p->next;
}
if(i<j)
{
i=p->youxian;
p=p->next;
}
}
if(neijin->youxian==i)
{
neijin->neirong=(node*)malloc(sizeof(node));
neijin->neirong->a=9;
neijin->neirong->ch='c';
neizhi->next=neijin;
neijin=neijin->next;
neizhi->next->next=NULL;
}
else
{
p=neijin;
while(i!=p->youxian)
{
q=p;
p=p->next;
}
p->neirong=(node*)malloc(sizeof(node));
p->zhuangtai='a';
p->neirong->a=9;
p->neirong->ch='c';
neizhi->next=p;
q->next=p->next;
}
return 1;
}
//
void chakan()
{
p=neizhi->next;
printf("该执行进程的名字为:%d\n",p->pid);
printf("该执行进程的的优先级:%d\n",p->youxian);
printf("该执行进程的轮转时间为:%f\n",p->luntime);
printf("该执行进程占用cpu的时间为:%f\n",p->zhantime);
printf("该执行的进程内容为:\n");
printf("%d ",p->neirong->a);
printf("%c",p->neirong->ch);
printf("\n");
}
void tongxing(int a)
{
q=neijin;
while(q->pid!=a&&q!=NULL)
{
q=q->next;
}
if(q==NULL)
{
printf("所输入的进程不在内存中!\n");
return ;
}
p=neizhi->next;
q->neirong=(node*)malloc(sizeof(node));
q->neirong->a=p->neirong->a;
q->neirong->ch=p->neirong->ch;
printf("通信成功!\n");
return;
}
tianshangfanxin
- 粉丝: 4
- 资源: 2
最新资源
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页