进程的唤醒与阻塞

更新时间:2023-10-20 16:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

进程的唤醒与阻塞

#include<stdio.h> #include<stdlib.h> #include<string.h> struct jincheng_type{ int pid; int youxian;

int zhuangtai;//标志进程状态,0为不存在内存,1为在内存,3为挂起

char info[10]; }

struct jincheng_type neicun[20]; int shumu=0,guaqi=0,pid,flag=0; void create(){

if(shumu>=20) printf("\\n内存已满,请先换出或杀死进程\\n"); else{

for(int i=0;i<20;i++)

//定位,找到可以还未创建的进程 if(neicun[i].zhuangtai==0) break;

printf("\\n请输入新进程pid\\n"); scanf("%d",&(neicun[i].pid)); for(int j=0;j<i;j++)

if(neicun[i].pid==neicun[j].pid){

printf("\\n该进程已存在\\n"); return; }

printf("\\n请输入该进程的优先级\\n"); scanf("%d",&(neicun[i].youxian)); printf("\\n请输入该进程的大小\\n"); scanf("%d",&(neicun[i].daxiao)); printf("\\n请输入新进程的内容\\n"); scanf("%s",&(neicun[i].info)); //创建进程,使标记为1 neicun[i].zhuangtai=1; shumu++; } }

void run(){

for(int i=0;i<20;i++){ if(neicun[i].zhuangtai==1){ //输出运行进程的各个属性值

printf("\\n pid=%d",neicun[i].pid); printf("youxian=%d",neicun[i].youxian); printf("daxiao=%d",neicun[i].daxiao); printf("zhuangtai=%d",neicun[i].zhuangtai); printf("info=%s",neicun[i].info); flag=1; } }

if(!flag)printf("\\n当前没有运行的进程\\n"); }

void huanchu(){ if(!shumu){

printf("当前没有运行的进程\\n"); return; }

printf("\\n"); printf("\\n");

scanf("%d",&pid); for(int i=0;i<20;i++){

//定位,找到所要换出的进程,根据其状态做相应的处理 if(pid==neicun[i].pid){ if(neicun[i].zhuangtai==1){ neicun[i].zhuangtai=2; guaqi++;

printf("\\n已成功换出进程\\n"); }

else if(neicun[i].zhuangtai==0) printf("\\n要换出的进程不存在\\n");

else printf("\\n要换出的进程已被挂起\\n"); flag=1; brek; } }

//找不到,则说明进程不存在

if(flag==0) printf("\\n要换出的进程不存在\\n"); } void kill(){ if(!shumu){

printf("当前没有运行的进程\\n"); return;

}

printf("\\n "); scanf("%d",&pid); for(int i=0;i<20;i++){

//定位,找到所要杀死的进程,根据其状态做相应的处理 if(neicun[i].pid){

if(pid==neicun[i].zhuangtai==1){ neicun[i].zhuangtai=0; shumu--;

printf("\\n已成功杀死进程\\n"); }

else if(neicun[i].zhuangtai==0) printf("\\n要杀死的进程不存在\\n");

else printf("\\n要杀死的进程已被挂起\\n"); flag=1; break; } }

//找不到,则说明进程不存在

if(!flag)printf("\\n要杀死的进程不存在\\n"); }

void huanxing(){

if(!shumu){

printf("当前没有运行的进程\\n"); return; } if(!guaqi){

printf("当前没有挂起的进程\\n"); return; }

printf("\\n输入pid\\n"); scanf("%d",&pid); for(int i=0;i<20;i++){ //定位,

找到所要换出的进程,根据其状态做出相应的处理

if(pid==neicun[i].pid){ flag=false;

if(neicun[i].zhuangtai==2){ neicun[i].zhuangtai=1; gauqi--;

printf("\\n已成功换出进程\\n"); }

else if(neicun[i].zhuangtai==0) printf("\\n要换出的进程不存在\\n");

else printf("\\n要换出的进程已被挂起\\n"); break; } }

//找不到,则说明进程不存在

if(flag) printf("\\n要换出的进程不存在\\n"); }

void main(){ int n=1; int sum;

//一开始所有进程都不在内存中 for(int i=0;i<20;i++) neicun[i].zhuangtai=0; while(n){

printf("\\n*************************************************************");

printf("\\n* 进程演示系统

*");

printf("\\n*************************************************************");

printf("\\n* 1.创建新的进程 *");

printf("\\n* 2.换出某个进程 *");

printf("\\n* 3.唤醒某个进程 *");

printf("\\n*************************************************************");

printf("\\n请选择(1~6)\\n"); scanf("%d",&sum); switch(sum){ case 1:creat();break; case 2:run;break; case 3:huanxing();break; case 4:kill();break; case 5:huangxing();break; case 6:exit(0); default:n=0 }

flag=0;//恢复标记 } }

本文来源:https://www.bwwdw.com/article/32af.html

Top