64,648
社区成员
发帖
与我相关
我的任务
分享
void init()
{
PRO *p; /*初始化链表(初始I/O表)*/
g_head = (PRO*)malloc(sizeof(PRO));
g_head->next = NULL;
g_head->prior = NULL;
p = (PRO*)malloc(sizeof(PRO));
strcpy(p->name, "P1");
p->team=100;
p->ci=10;
p->rec=1;
p->next = NULL;
p->prior = g_head;
g_head->next = p;
g_curr=g_head->next;
p = (PRO*)malloc(sizeof(PRO));
strcpy(p->name, "P2");
p->team=30;
p->ci=5;
p->rec=5;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PRO*)malloc(sizeof(PRO));
strcpy(p->name, "P3");
p->team=40;
p->ci=2;
p->rec=4;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PRO*)malloc(sizeof(PRO));
strcpy(p->name, "P4");
p->team=85;
p->ci=7;
p->rec=3;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PRO*)malloc(sizeof(PRO));
strcpy(p->name, "P5");
p->team=60;
p->ci=8;
p->rec=4;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=g_head->next;
local = (PRO*)malloc(sizeof(PRO)); /*选中进程*/
strcpy(local->name, "P0");
local->team=0;
local->ci=0;
local->rec=0;
local->next=NULL;
local->prior=NULL;
}
void acceptreq()
{
PRO *p;
p = (PRO*)malloc(sizeof(PRO));
printf("please input the information of the new process\n");
printf("进程名:");
scanf("%s",p->name);
printf("柱面号(0-199):");
scanf("%d",&p->team); /*输入请求进程信息*/
printf("磁道号(0-20):");
scanf("%d",&p->ci);
printf("记录号(0-7):");
scanf("%d",&p->rec);
getchar();
g_curr=g_head; /*将此节点链入I/O请求表*/
while(g_curr->next!=NULL)
g_curr=g_curr->next;
p->next=NULL;
p->prior=g_curr;
g_curr->next=p;
g_curr=g_head->next;
PrintInit(); /*将新的I/O请求表输出*/
}
void qddd() /*驱动调度函数*/
{
PRO *out;
int deng=0;
int deng1=0;
int min=g_head->next->team;
int max=g_head->next->team;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if(g_curr->team==record)
{
min=g_curr->rec;
out=g_curr;
deng=1;
break;
}
}
switch(deng)
{
case 1:
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if(g_curr->team==record&&abs(g_curr->rec-rec0)<=abs(min-rec0))
{
min=g_curr->rec;
out=g_curr;
}
}
break;
case 0:
switch (yi)
{
case 1:
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (g_curr->team > record)
{
min = g_curr->team;
deng1=1;
break;
}
}
switch(deng1)
{
case 1:
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (min>=g_curr->team&&g_curr->team>record)
{
min=g_curr->team;
out=g_curr;
}
}
break;
case 0:
yi=0;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (max<=g_curr->team)
{
min=g_curr->team;
out=g_curr;
}
}
break;
}
break;
case 0:
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (g_curr->team < record)
{
max = g_curr->team;
deng1=1;
break;
}
}
switch(deng1)
{
case 1:
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (max<=g_curr->team&&g_curr->team<record)
{
max=g_curr->team;
out=g_curr;
}
}
break;
case 0:
yi=1;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (min>=g_curr->team)
{
min=g_curr->team;
out=g_curr;
}
}
break;
}
break;
}
break;
}
strcpy(local->name,out->name);
local->team=out->team;
local->ci=out->ci;
local->rec=out->rec;
printf("被选中进程:\n");
printf(" 进程名 柱面号 磁道号 记录号\n");
printf("%4s %8d %8d %5d\n", out->name, out->team, out->ci,out->rec );
switch(yi)
{
case 1:
printf("current direction is UP\n");
printf("*************************************\n");
break;
case 0:
printf("current direction is DOWN\n");
printf("*************************************\n");
break;
}
record = local->team;
rec0=local->rec;
if (out->next==NULL) /*将选中的进程从I/O请求表中删除*/
{
out->prior->next=NULL;
free(out);
}
else
{
out->prior->next=out->next;
out->next->prior=out->prior;
free(out);
}
}
跪求大神帮我解答啊~~~~~~