#include#include struct S_PCB{ int id; //进程id int yxj; //进程优先级 int size; //进程大小 char mess[20]; //进程内容 int state; //进程状态0不在内存,1在内存,2挂起。 }; struct S_PCB s_pcb[10]; //初始化最多可以有10个进程 struct S_PCB gq_pcb[10]; //挂起的进程 int num = 0,num_gq = 0,i; //num进程数量 num_gq挂起进程数量 int create(); //声明函数 创建 void doDelete(); //删除 void check(); //查看 void callout(); //唤出 void kill(); //杀死进程 void awaken(); //唤醒进程 //创建进程 int create(int id){ int del; for(i = 0; i < num; i++){ //判断是否存在相同id if(s_pcb[i].id == id){ printf("当前进程id已存在n"); return 0; break; } } if(num >= 10){ //判断进程容量是否已满 printf("当前进程已满是否删除或挂起某些进程?是输入1否则输入0n"); scanf("%d",&del); if(del == 1){ doDelete(); return 2; } else{ return 0; } } else{ //输入相关信息 s_pcb[num].id = id; s_pcb[num].state = 1; printf("请输入进程优先级:n"); scanf("%d",&s_pcb[num].yxj); printf("请输入进程大小:n"); scanf("%d",&s_pcb[num].size); printf("请输入进程内容:n"); scanf("%s",&s_pcb[num].mess); num ++; return 1; } } void check(){ //查看进程 int ckid,cki; //要查看的进程id、控制循环变量 int gqorno; //进程是否被挂起 int yn = 1; //是否继续查看 printf("请选择查看未挂起的进程或者挂起的进程未挂起输入1挂起输入0: n"); scanf("%d",&gqorno); if(gqorno == 1){ while(yn == 1){ if(num == 0){ printf("当前没有在内存中的进程进程n"); break; } else{ printf("请选择要查看的进程编号:n"); for(cki = 0; cki < num; cki++){ //循环遍历已存在的进程 printf("进程 %d 的id为:%dn",cki+1,s_pcb[cki].id); } scanf("%d",&ckid); //输入要查看的进程 printf("当前进程id为:%dn",s_pcb[ckid-1].id); printf("当前进程优先级为:%dn",s_pcb[ckid-1].yxj); printf("当前进程大小为:%dn",s_pcb[ckid-1].size); printf("进程内容为:%sn",s_pcb[ckid-1].mess); printf("是否要查看其他进程?查看输入1否则输入0n"); scanf("%d",&yn); } } } else if(gqorno == 0){ while(yn == 1){ if(num_gq == 0){ printf("当前没有挂起的进程n"); break; } else{ printf("请选择要查看的挂起进程编号:n"); for(cki = 0; cki < num_gq; cki++){ //循环遍历已存在的进程 printf("进程 %d 的id为:%dn",cki+1,gq_pcb[cki].id); } scanf("%d",&ckid); //输入要查看的进程 printf("当前进程id为:%dn",gq_pcb[ckid-1].id); printf("当前进程优先级为:%dn",gq_pcb[ckid-1].yxj); printf("当前进程大小为:%dn",gq_pcb[ckid-1].size); printf("进程内容为:%sn",gq_pcb[ckid-1].mess); printf("是否要查看其他进程?查看输入1否则输入0n"); scanf("%d",&yn); } } } else{ printf("您输入的有误n"); } } void doDelete(){ //删除或挂起进程 int scgq,sgi,sgxh; printf("请输入要删除或挂起进程的序号:n"); for(sgi=0; sgi < num; sgi++){ printf("进程 %d 的id为:%dn",sgi+1,s_pcb[sgi].id); } scanf("%d",&sgxh); sgxh--; //显示时序号加一用户输入后需要减一 printf("请选择要删除或挂起进程,删除输入1挂起输入2:n"); scanf("%d",&scgq); if(scgq == 1){ for(sgi = sgxh; sgi < num - 1; sgi++){ s_pcb[sgi] = s_pcb[sgi+1]; } num--; } else if(scgq == 2){ gq_pcb[num_gq] = s_pcb[sgxh]; gq_pcb[num_gq].state = 2; num_gq++; for(sgi = sgxh; sgi < num - 1; sgi++){ s_pcb[sgi] = s_pcb[sgi+1]; } num--; } } //唤出 void callout(){ int coi,gxh; //要唤出的进程序号 挂起进程的序号 if(num == 0){ printf("当前没有运行的进程。n"); } else{ printf("请输入要唤出进程的序号:n"); for(coi=0; coi < num; coi++){ printf("进程 %d 的id为:%dn",coi+1,s_pcb[coi].id); } scanf("%d",&gxh); gxh--; if(gxh 运行结果如图
主界面
创建进程结果
查看进程结果如图
kill进程



