正文

用C语言编写的模拟进程控制的程序2006-10-05 11:47:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/tld5yj/19044.html

分享到:

本程序是在Turbo C 2.0环境下编写的,预计在其他C程序编译系统中也没问题。

#define null 0
#define M "         Menu\n\n1.Creat a process\n2.Destroy a

process\n3.Blockaprocess\n4.Wakeup a process\n5.Suspend a process\n6.Active a

process\n7.Observe the processes\n\nPlease select the item you want to realize:"

struct PCB
{char name;
 int ko;
 int cha;
}

struct PCB pcb[10];
int i=0;

void creat()
{char a;
 int b;
 printf("Please input the name of the process:");
 scanf("%c",&a);
 printf("\nPlease input the ko of the process:");
 scanf("%d",&b);
 i++;
 pcb[i].name=a;
 pcb[i].ko=b;
 pcb[i].cha=1;
 printf(M);
}

void destroy()
{char a;
 int j;
 printf("Select a process you want to destroy:");
 scanf("%c",&a);
 printf("\n");
 for(j=1;j<=10;j++)
 {if(pcb[j].name==a)
  {pcb[j].name=0;
   pcb[j].ko=0;
   pcb[j].cha=0;
   printf("Process %c has been destroied.");
  }
  else printf("There isn't process %c existed!");
 }
 printf("\n");
 printf(M);
}

void block()
{char a;
 int j;
 printf("Please tell me which process you want to block:");
 scanf("%c",&a);
 printf("\n");
 for(j=1;j<=10;j++)
 {if(pcb[j].name==a)
  {if(pcb[j].cha==1)
   {pcb[j].cha=4;
    pcb[j].ko++;
    printf("Operation block has been finished!");
   }
   else if(pcb[j].cha==2)
        {pcb[j].cha=3;
         pcb[j].ko++;
         printf("Operation block has been finished!");
        }
        else printf("There is no process can be blocked!");
  }
 }
 printf("\n");
 printf(M);
}

void wakeup()
{char a;
 int j;
 printf("Please tell me which process you want to wakeup:");
 scanf("%c",&a);
 printf("\n");
 for(j=1;j<=10;j++)
 {if(pcb[j].name==a)
  {if(pcb[j].cha==3)
   {pcb[j].cha=2;
    pcb[j].ko--;
    printf("You have wakeup process %c.",a);
   }
   else if(pcb[j].cha==4)
        {pcb[j].cha=1;
         pcb[j].ko--;
         printf("You have wakeup process %c.",a);
        }
        else printf("There is no process can be wakedup!");
  }
 }
 printf("\n");
 printf(M);
}

void suspend()
{char a;
 int j;
 printf("Which process do you want to suspend?Select:");
 scanf("%c",&a);
 printf("\n");
 for(j=1;j<=10;j++)
 {if(pcb[j].name==a)
  {if(pcb[j].cha==2)
   {pcb[j].cha=1;
    pcb[j].ko++;
    printf("You have suspend process %c.",a);
   }
   else if(pcb[j].cha==3)
        {pcb[j].cha=4;
         pcb[j].ko++;
         printf("You have suspend process %c.",a);
        }
        else if(pcb[j].cha==5)
             {pcb[j].cha=1;
              pcb[j].ko++;
              printf("You have suspend process %c.",a);
             }
             else printf("You could suspend none!");
  }
 }
 printf("\n");
 printf(M);
}

void active()
{char a;
 int j;
 printf("Please tell me which process you want to active:");
 scanf("%c",&a);
 printf("\n");
 for(j=1;j<=10;j++)
 {if(pcb[j].name==a)
  {if(pcb[j].cha==1)
   {pcb[j].cha=2;
    pcb[j].ko--;
    printf("You have active process %c.",a);
   }
   else if(pcb[j].cha==4)
        {pcb[j].cha=3;
         pcb[j].ko--;
         printf("You have active process %c.",a);
        }
        else printf("There is no process can be actived!");
  }
 }
 printf("\n");
 printf(M);
}

void run()
{struct PCB *p;
 char t;
 int j,m,k;
 printf("The processes will run in the order of ko(lower earlier,higher later):\n");
 for(j=1,p=pcb;p!=null;j++,p++)
 {if(p[j].ko>p[j+1].ko)
  {t=p[j].name;
   p[j].name=p[j+1].name;
   p[j+1].name=t;
   m=p[j].cha;
   p[j].cha=p[j+1].cha;
   p[j+1].cha=m;
   k=p[j].ko;
   p[j].ko=p[j+1].ko;
   p[j+1].ko=k;
  }
 }
 for(p=pcb,j=1;p!=null;p++)
 {printf("Process %c:",p[j].name);
  printf("\tko:%d\tcha:%d",p[j].ko,p[j].cha);
  printf("\n");
 }
 printf("\n");
 printf(M);

observe()
{int j;
 for(j=1;j!=null;j++)
 {printf("Process %c:",pcb[j].name);
  printf("\tko:%d\tcha:%d",pcb[j].ko,pcb[j].cha);
  printf("\n");
 }
}

exit()
{exit(1);
}

main()
{int a,k;
 for(k=1;k<=10;k++)
 {pcb[i].name=0;
  pcb[i].ko=0;
  pcb[i].cha=0;
 }
 printf("         Menu\n\n");
 printf("1.Creat a process\n");
 printf("2.Destroy a process\n");
 printf("3.Block a process\n");
 printf("4.Wakeup a process\n");
 printf("5.Suspend a process\n");
 printf("6.Active a process\n");
 printf("7.Observe the processes\n");
 printf("8.Exit\n");
 printf("\n\n");
 printf("\n\nPlease select the item you want to realize:");
 scanf("%d",&a);
 printf("\n\n");
 if(a!=null)
 switch(a)
 {case 1:creat();break;
  case 2:destroy();break;
  case 3:block();break;
  case 4:wakeup();break;
  case 5:suspend();break;
  case 6:active();break;
  case 7:observe();break;
  case 8:exit();break;
 }
 getch();
}

阅读(6100) | 评论(10)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册