⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 process2.c

📁 模拟实现操作系统的各项性能
💻 C
字号:
#include<stdio.h>
#include<alloc.h>
#include<stdlib.h>
#include<dos.h>
#define MAX 10
struct process
{
  int num;
  unsigned int intime;
  struct information
  {
     int priority;
     unsigned int exetucetime;
  }information;
  unsigned int outtime;
  int state;
  struct process* next;
}*Node[MAX],*out;

int  CreatePCB()
{
 int i=0,k;
 char ch;
 do
 {
    i++;
    Node[i]=(struct process*)malloc(sizeof(struct process));
   printf("please enter inform of process%d:\n",i);
   Node[i]->num=i;
   Node[i]->intime=clock();
   printf("please enter priority:");
   scanf("%d",&(Node[i]->information).priority);
   printf("please enter exetucetime:");
   scanf("%u",&(Node[i]->information).exetucetime);
   Node[i]->state=1;
   printf("Continue create PCB?(Y/N):");
   getchar();
   ch=getchar();
 }while(ch=='Y'||ch=='y');
 return i;
}

struct process* FCFS(int n)
 {
  int i;
  struct process *head1,*p;
  head1=(struct process*)malloc(sizeof(struct process));
  head1->next=NULL;
  p=head1;
  for(i=n;i>=1;i--)
  {
    p=Node[i];
    p->next=head1->next;
    head1->next=p;
  }
  return head1;
 }
 
struct process* FPF(int n)
{
 int min,x,i,j,a[MAX],k,b[MAX];
 struct process *head2,*p;
 head2=(struct process*)malloc(sizeof(struct process));
 head2->next=NULL;
 p=head2;
 for(i=1;i<=MAX;i++)
 {
    a[i]=0;
    b[i]=1;
 }
 x=1;
 for(i=1;i<=n;i++)
 {
    k=i;
  if(b[i]!=-1) min=Node[i]->information.priority;
  else continue;
  for(j=1;j<=n;j++)
   {
     if(b[j]!=-1&&min>Node[j]->information.priority)
     {
       k=j;
       min=Node[j]->information.priority;
     }
    }
    b[k]=-1;
    a[x]=Node[k]->num;
    x++;
  }
  for(i=1;i<=n;i++)
  {
    p=Node[a[i]];
    p->next=head2->next;
    head2->next=p;
  }
 return head2;
}

void dele(int i,int n)
{

    if(n==0) printf("You donot Create Process!\n");
    else if(i>n) printf("Not the Process!\n");
    else
    {
      Node[i]->num=0;
    }

}

void SweapOut(int outnum,int n)
{
  int i;
  out=(struct process*)malloc(sizeof(struct process));
  for(i=1;i<n;i++)
  {
    if((Node[i]->num)==outnum)
    {
      
      out=Node[i];
      out->state=0;
      break;
    }
   }
}
void SweapIn()
{
   int runtime=0;
   out->state=1;
   printf("--------**********************************************---------\n");
   printf("num\tpriority\tneedtime\truntime\t\tintime\t\touttime\n");
   while((out->information).exetucetime>0)
   { 
      runtime++;
      printf("%2d",out->num);
      printf("%10d",(out->information).priority);
      printf("%17u",(out->information).exetucetime);
      printf("%17d",runtime);
      out->outtime=(out->intime)+(out->information).exetucetime;;
      printf("%17u%16u\n",out->intime,out->outtime);
      (out->information).exetucetime--;
      sleep(1);
   }
   printf("--------**********************************************---------\n");
}

void menu()
{
    printf("\t\t***********************************************\n");
    printf("\t\t|           1.Cteate Process!                 |\n");
    printf("\t\t|           2.Delete Process!                 |\n");
    printf("\t\t|           3.Weap out Process!               |\n");
    printf("\t\t|           4.Weap in Process!                |\n");
    printf("\t\t|           5.FCFS!                           |\n");
    printf("\t\t|           6.FPF!                            |\n");    
    printf("\t\t|           7.OVER!                           |\n");
    printf("\t\t***********************************************\n");
    printf("Please you select:");
}

void FCFS_FPF(struct process *head,int n)
{
  int i=0,j,runtime;
  struct process *p;
  p=head->next;
  i=0;
  printf("Jin Chen Zhi Xing Gou Cheng Ru Xia(FCFS):\n");
  for(i=1;i<=n;i++)
  {
    runtime=0;
    if(p->num==0||p->state==0) {p=p->next;continue;}
    printf("%d prosess exetuce information:\n",i);
    printf("--------**************************************************************---------\n");
    printf("num\tpriority\tneedtime\truntime\t\tintime\t\touttime\n");
    j=(p->information).exetucetime;
    while(j>0)
    {
      runtime++;
      printf("%2d",p->num);
      printf("%10d",(p->information).priority);
      printf("%17u",j);
      printf("%15d",runtime);
      p->outtime=(p->intime)+(p->information).exetucetime;
      printf("%17u%16u\n",p->intime,p->outtime);
      j--;
      sleep(1);
    }
    printf("--------**************************************************************---------\n\n\n");
    p=p->next;
 }
}
void main()
{
 int i=0,n=0,m,num,sign,k,j;
 int k1=0,k2=0,k3=0,k4=0;
 struct process *head,*p;
 while(1)
 {
   menu();
   scanf("%d",&sign);
   if(sign==1) 
   {
      n=CreatePCB();k1=1;
   }

   else if(sign==2)
   {
    if(k1==1)
    {
      if((k3==0)&&(k4==0))
      {
        printf("Cteate process of :");
        for(j=1;j<=n;j++)
           printf("%d  ",Node[j]->num);
        printf("\n");
        printf("Please input num of delete process:");
        scanf("%d",&k);
        dele(k,n);
      }
      else printf("Process exetuce over!\n");
    }
    else printf("You don't cteate process!\n");
   }
   else if(sign==3) 
   {
    printf("please intput num of sweapout process:");
    scanf("%d",&num);
    SweapOut(num,n);
    k2=1;
   }

   else if(sign==4) 
   {
    if(k2==1)
      SweapIn();
    else printf("You don't sweapout process!\n");
   }
   
   else if(sign==5) 
   {
    if(n==0)
       printf("You donot Create Process!\n");
    else 
    {
      if(k4==0)
      {
        head=FCFS(n);       
        FCFS_FPF(head,n);
        k3=1;
      }
      else printf("Process exetuce over!\n");
    }
   } 

   else if(sign==6) 
   {
    if(n==0)
       printf("You donot Create Process!\n");
    else 
    {
       if(k3==0)
       {
         head=FPF(n);
         FCFS_FPF(head,n);
         k4=1;
       }
       else printf("Process exetuce over!\n");
    }
   }

   else if(sign==7) break;
   i++;
  }
  printf("OVER!\n");
  scanf("%d",&m);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -