资源简介

用C语言链表实现进程转换,阻塞变就绪,就绪变执行,执行变阻塞三种状态的转换

资源截图

代码片段和文件信息

#include
#include
//执行结点
typedef struct run{
    int data;
    struct run *next;
}run*runlist;
//就绪节点
typedef struct ready{
    int data;
    struct ready *next;
}ready*readylist;
//阻塞节点
typedef struct block{
    int data;
    struct block *next;
}block*blocklist;
//执行队列
runlist runlist_creat(){
    run *L*p;
    L=(run *)malloc(sizeof(run));
    p=(run *)malloc(sizeof(run));
    if(p==NULL||L==NULL){
        exit(1);
    }
    L->next=NULL;
    int x=5;
    p->data=x;
    p->next=L->next;
    L->next=p;
    printf(“执行指针为:%d\n“p->data);
    return L;
}
//就绪队列
readylist readylist_creat(){
    int i;
    int a[5]={21546};
    ready *L;
    L=(ready *)malloc(sizeof(ready));
    ready *p*s;
    L->next=NULL;
    s=L;
    //依次将数组a中的5个元素插入单链表中
    for(i=0; i<5; i++)
    {
        p=(ready *)malloc(sizeof(ready));
        p->data=a[i];
        p->next=s->next;
        s->next=p;
        s=s->next;
    }
    //将该链表显示
    p=L->next;
    printf(“就绪指针为:%d\n“a[0]);
    printf(“就绪队列为:“);
    while(p)
    {
        printf(“%d “p->data);
        p=p->next;
    }
    return L;
}
//阻塞队列
blocklist blocklist_creat(){
    int i;
    int a[5]={12473};
    block *L;
    L=(block *)malloc(sizeof(block));
    block *p*s;
    L->next=NULL;
    s=L;
    //依次将数组a中的5个元素插入单链表中
    for(i=0; i<5; i++)
    {
        p=(block *)malloc(sizeof(block));
        p->data=a[i];
        p->next=s->next;
        s->next=p;
        s=s->next;
    }
    //将该链表显示
    p=L->next;
    printf(“\n阻塞指针为:%d\n“a[0]);
    printf(“阻塞队列为:“);
    while(p)
    {
        printf(“%d “p->data);
        p=p->next;
    }
    return L;
}
//阻塞变就绪
void block_to_ready(readylist pr_headblocklist pb_head){
    readylist pr_temp =pr_head;
    readylist pr_new;
    blocklist pb_temp =pb_head;
    for(;pr_temp->next!=NULL;pr_temp=pr_temp->n

评论

共有 条评论