资源简介

进程管理 执行 唤醒 阻塞 结束

资源截图

代码片段和文件信息

#include
#include
void Instruction();
typedef struct node
{
int data;
struct node *next;
}linklist;
linklist *head;
typedef struct node1
{
int data;
struct node1 *next;
}dlinklist;
dlinklist *head1;
int j = 0;
void CreatePCB()//创建PCB
{
linklist *r;
r = head;
while(r->next != NULL)
r = r->next;
if(r->next == NULL&& j != 11)
{
int x;
linklist *p;
printf(“请输入进程名\n“);
scanf(“%d“&x);
p = (linklist*)malloc(sizeof(linklist));
p->data = x;
r->next = p;
r = p;
printf(“%d“p->data);
printf(“创建成功\n“);
j++;
}
    if(j == 11) 
{
r->next = NULL;
printf(“进程已满\n“);
getchar();
Instruction();
}
    else if(head->next != NULL)//head->next作为执行态
{
printf(“%d“head->next->data);
printf(“处于执行态\n“);
r->next = NULL;
getchar();
Instruction();
}
}
void Block()
{
dlinklist *t*r;
linklist *q;
r = head1;
while(r->next!=NULL)
{
r=r->next;
}
if(head->next != NULL)//有执行态就将执行态阻塞
{
t=(dlinklist*)malloc(sizeof(dlinklist));
t->data = head->next->data;
r->next = t;
r = t;
printf(“%d“t->data);
printf(“已处于阻塞态\n“);
q = head->next;
head->next = head->next->next;
free(q);
j--;

if(head->next != NULL)
{
printf(“%d“head->next->data);
printf(“处于执行态\n“);
}
else
printf(“进程为空\n“);
}
else
{
printf(“错误操作\n“);
}
r->next = NULL;
getchar();
Instruction();
}
void Wakeup()
{
int x;
dlinklist *t*s*m*w;
linklist *p*q;
t = head1;
s = head1;
p = head;
if(head1->next == NULL) printf(“没有可唤醒的进程\n“);
else
{
printf(“请选择唤醒进程\n“);
while(t->next != NULL)//输出阻塞态
{
printf(“%d    “t->next->data);
t = t->next;
}
t = head1;
scanf(“%d“&x);
while(t->next != NULL)
{
if(x == t->next->data)
{
while(p->next != NULL)//找到链表PCB的尾
p = p->next;
q = (linklist*)malloc(sizeof(linklist));
q->data =t->next->data;
p->next = q;
p = q;
p->next=NULL;
printf(“%d“x);
printf(“唤醒成功\n“);
printf(“%d“head->next->data);
printf(“正在执行\n“);
j++;
w = t->next;//删除多余项
m = head1;
while(m != t)
m = m->next;
m->next = m->next->next;
free(w);
break;
}
els

评论

共有 条评论