入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

操作系统实验一之进程管理源代码

创建时间:2016-10-08 投稿人: 浏览次数:3062

1.目的和要求

通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。

2.实验内容

用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。

3.主体程序

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

 

struct  PCB_type

   {  int pid;

      int priority;     

      int cputime;  

  int state;        

int shumu=0,pid_l;      

struct PCB_type neicun[20];

struct PCB_type hc[10];

int max=0;int number=0;

void create();

void run();

void huanchu();

void kill();

     /*            创建新进程             */

void create()  

{

      if(shumu>=20)

          {

          printf(" 内存已满,请先结束或换出进程 ");

          }

          else

          {

  shumu++;

      printf(" 请输入新进程的程序名 ");

          scanf("%d",&neicun[shumu-1].pid);

          printf(" 请输入新进程的优先级 ");

          scanf("%d",&neicun[shumu-1].priority);

          printf(" 请输入新进程的运行时间 ");

          scanf("%d",&neicun[shumu-1].cputime);

  printf(" 创建进程时令其状态为就绪 ");

  neicun[shumu-1].state=2;

      }

  printf(" 创建进程成功! ");

 

}

/*          查看当前运行进程         */

void run()

{

int max=0;

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

{

if((neicun[i].state==1)&&(neicun[i].priority>=neicun[max].priority))

max=i;

}

neicun[max].state=3;

printf("当前运行进程程序名: %d",neicun[max].pid);

printf(" 该进程的优先级: %d",neicun[max].priority);

printf(" 该进程的运行时间: %d",neicun[max].cputime);

printf(" 该进程的状态: %d",neicun[max].state);

}

/*            换出            */

void huanchu()

{

int k;

printf("请输入要换出程序的程序名:");

scanf("%d",&k);

for(int j=0;j<shumu;j++)

{

if(neicun[j].state==1)

{

hc[number].pid=neicun[j].pid;

hc[number].state=neicun[j].state;

hc[number].priority=neicun[j].priority;

hc[number].cputime=neicun[j].cputime;

number++;

neicun[j].pid=0;

neicun[j].state=0;

neicun[j].priority=0;

neicun[j].cputime=0;

pid_1++;

}

else printf("进程%d无法换出的pid:%d ",j.neicun[j].pid);

if(number!=0)

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

{

printf("当前运行进程程序名: %d",hc[i].pid);

            printf(" 该进程的优先级: %d",hc[i].priority);

              printf(" 该进程的运行时间: %d",hc[i].cputime);

             printf(" 该进程的状态: %d",hc[i].state);

}

}

PCB_type temp=neicun[0];

for(k=0;k<=shumu;k++)

{

if(neicun[k].priority>temp.priority)

tmpe=neicun[k];

}

neicun[k].state=1;

}

/*            杀死进程            */

void kill()

{

    neicun[max].pid=0;

neicun[max].priority=0;

neicun[max].cputime=0;

neicun[max].state=0;

if(max==(shumu-1))

shumu--;

else{

for(int j=max+1;j<shumu;j++)

{

neicun[j-1].pid=neicun[j].pid;

neicun[j-1].priority=neicun[j].priority;

neicun[j-1].cputime=neicun[j].cputime;

neicun[j-1].state=neicun[j].state;

}

shumu--;

}

max=0;

run();

}

/* int k=0;

printf("请输入要杀死程序的进程名:");

scanf("%d",&k);

if(neicun[k].state=1)

neicun[k].state=2;

neicun[k].cputime=0;

neicun[k].pid=0;

neicun[k].priority=0;

neicun[k].state=0;

    if(k==(shumu-1))

  shumu--;

else{

for(int j=k+1;j<shumu;j++)

  {

  neicun[j-1].pid=neicun[j].pid;

  neicun[j-1].priority=neicun[j].priority;

  neicun[j-1].cputime=neicun[j].cputime;

  neicun[j-1].state=neicun[j].state;

}

       shumu--;

}

printf("进程%d已被杀死!,k");

}*/

 

int main()

{

    int n,a;

    n=1;

    while(n==1)

    {

    system("cls");

printf(" **********************************************");

printf(" *               进程演示系统                 *");

printf(" **********************************************");

printf("     1.创建新的进程             2.查看运行进程");

printf("     3.换出某个进程             4.杀死运行进程");

printf("     5.退出系统                               ");

printf(" **********************************************");

printf(" 请选择(1~5):");

scanf("%d",&a);

       switch(a)

    { case 1:

          create( );

printf(" press anykey to go on~");

getch();

      break;

      case 2 :

        run();

printf(" press anykey to go on~");

getch();

       break;

      case 3 :

    huanchu();

printf(" press anykey to go on~");

getch();

      break;

   case 4 :

      kill();

printf(" press anykey to go on~");

getch();

      break;

   case 5 :

   exit(0);

        default:

n=0;

   break;

 }

       }

}

 

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。