www.pudn.com > os1.rar > os1.c


#include 
#include 
#include 
#include 
#include "Conio.h" 
#define closegr closegraph 
int i=0,j=0,p=1,flag=0,sum=600; 
struct pcb  /* 建立pcb的结构体 */ 
  {int num; 
   int time; 
   int time1; 
   int priority; 
   int priority1; 
   int size; 
   int address; 
   int estate; 
  }a[30],b[30],f[30],run[30],wait[30]; 
struct node    /* 建立内存空间的结构体 */ 
{int num; 
 int address; 
 int size; 
}allot[30]; 
 
void initgr(void) /* BGI初始化 */ 
{ 
  int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */ 
  registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ 
  initgraph(&gd, &gm, ""); 
} 
 
 
void Run()    /* 运行 */ 
{int n,m,h=0,r=0,k=0,q; 
 for(n=0;nn;m--) 
     allot[m+1]=allot[m]; 
    a[t].address=allot[n].address+allot[n].size; 
    allot[n+1].num=a[t].num; 
    allot[n+1].address=a[t].address; 
    allot[n+1].size=a[t].size; 
    p++; 
    sum-=a[t].size; 
    return(1); 
   } 
  } 
 if(a[t].size<=sum) 
  {for(n=0;na[q].priority) 
    {for(m=1;m=w;m--) 
        allot[m+1]=allot[m]; 
       allot[w].num=a[q].num; 
       allot[w].address=a[q].address; 
       allot[w].size=a[q].size; 
       p++; 
       sum-=a[q].size; 
      } 
    } 
} 
void Release()   /* 解挂 */ 
{int k,s,n,q; 
 printf("Input the program's pid:"); 
 scanf("%d",&k); 
 for(n=0;n16)           /* 只允许运行16个pcb */ 
      {printf("Only 16 pcb can be done.Select again."); 
       break; 
      } 
    else 
      {printf("pcb%d:\n",i+1); 
       printf("Input time(0-160):"); 
       scanf("%d",&a[i].time); 
           if(a[i].time<0||a[i].time>160) 
        {printf("Time is too long!Select again!"); 
         break; 
        } 
       printf("Input priority(0-200):"); 
       scanf("%d",&a[i].priority); 
       if(a[i].priority<0||a[i].priority>200) 
        {printf("Priority is too large!Select again!"); 
         break; 
        } 
       if(a[i].time>a[i].priority)   /* 优先权必须比时间的值大 */ 
        {printf("Priority must be larger than time!Select again!"); 
         break; 
        } 
       printf("Input size(0-600):"); 
           scanf("%d",&a[i].size); 
       if(a[i].size<0||a[i].size>600) 
        {printf("Size overflow!Select again!"); 
         break; 
        } 
       a[i].time1=a[i].time; 
       a[i].priority1=a[i].priority; 
       a[i].num=i+1; 
       a[i].address=-1; 
       a[i].estate=1; 
           i++; 
           if(flag==1) 
            {Hangup(); 
             break; 
            } 
           else 
        break; 
      } 
     case 2:Run();flag=1;Output();break; 
     case 3:Release();break; 
     case 0:exit(0);break; 
     default:printf("Input error!Please select again!"); 
    } 
  } 
} 
main() 
{int n,driver=VGA,mode=VGAHI; 
 initgr(); /* BGI初始化 */ 
 initgraph(&driver,&mode,"\\tc"); 
 cleardevice(); 
 clrscr(); 
 for(n=0;n<30;n++) 
 {allot[n].num=0;      /* 初始化内存空间 */ 
  allot[n].address=-1; 
  allot[n].size=0; 
 } 
 allot[0].address=0; 
 allot[1].address=600; 
 while(1) 
  Select(); 
  closegr(); /* 恢复TEXT屏幕模式 */ 
  return 0; 
}