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;n a[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; }