| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 270 人关注过本帖
标题:请问这个程序有没有问题啊???
只看楼主 加入收藏
zyz19890222
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
请问这个程序有没有问题啊???
#include<stdio.h>
#include<stdlib.h>
int n,m,t,use_cpu = 0,x = 0,unuse_cpu = 0;
struct PCB_type
{
    char name[1];
    int state;
    int cpu_time;
};

struct QueueNode
{
    struct PCB_type PCB;
    struct QueueNode *next;
};

struct QueueNode *ready_head = NULL,
                 *ready_tail = NULL,
                 *blocked_head = NULL,
                 *blocked_tail = NULL;

void creatList1();
void creatList2();  
void del(struct QueueNode* p);
void start_state();
void dispath(struct QueueNode* s1,struct QueueNode* s2,int x);
void calculate();

void start_state()  //输入假设的数据
{
    printf("请输入处于就绪状态进程的个数:");
    scanf("%d",&n);
    printf("请输入处于阻塞状态进程的个数:");
    scanf("%d",&m);
    printf("请输入时间片数:");
    scanf("%d",&t);
}

void creatList1()   //创建链表,记录所有进程的信息
{
   int i;   
   struct QueueNode* head1 = (struct QueueNode*)malloc(sizeof(struct QueueNode));
   struct QueueNode* p;//= (struct QueueNode*)malloc(sizeof(struct QueueNode));
   struct QueueNode* s1 = (struct QueueNode*)malloc(sizeof(struct QueueNode));
   p = head1;
   printf("**********就绪进程的信息输入**********\n");

for(i=0;i<n;i++)
{  
   printf("请输入进程名:");
   scanf("%s",s1->PCB.name);
   printf("请输入进程状态(2-表示“执行”,1-表示“就绪”,0-表示“阻塞”):");
   scanf("%d",&(s1->PCB.state));  
   printf("请输入此进程需要CPU时间片数:");
   scanf("%d",&(s1->PCB.cpu_time));
   s1->next = NULL;
   p->next = s1;
   p = p->next;
}
   ready_head = head1;
   ready_tail = p;
}

void creatList2()
{
   int i;
   struct QueueNode* head2=(struct QueueNode*)malloc(sizeof(struct QueueNode));
   struct QueueNode* p;// = (struct QueueNode*)malloc(sizeof(struct QueueNode));
   head2->next=NULL;
   p = head2;
   printf("**********阻塞进程的信息输入**********\n");
for(i=0;i<m;i++)
{  
   struct QueueNode* s2 = (struct QueueNode*)malloc(sizeof(struct QueueNode));
   printf("请输入进程名:");
   scanf("%s",s2->PCB.name);
   printf("请输入进程状态(2-表示“执行”,1-表示“就绪”,0-表示“阻塞”):");
   scanf("%d",&(s2->PCB.state));
   printf("请输入此进程需要CPU时间片数:");
   scanf("%d",&(s2->PCB.cpu_time));
   p->next = s2;
   p = p->next;
}
   blocked_head = head2;
   blocked_tail = p;
}

void del(struct QueueNode* p)   //删除p节点
{
    free(p);
}

void calculate()
{
    double rate;
    rate = use_cpu/(use_cpu + unuse_cpu)*100;
    printf("CPU利用率为:%f%",rate);
}

void dispath(struct QueueNode* s1,struct QueueNode* s2,int x)
{
    while(s1->next != NULL || s2->next != NULL)
    {
        struct QueueNode* p1 = (struct QueueNode*)malloc(sizeof(struct QueueNode));        
        if(s1->next != NULL)
        {
            p1 = s1->next;
            //s1->PCB.state = 2;
            printf("%s",&(p1->PCB.name));
            use_cpu++;
            p1->PCB.cpu_time--;
            if(p1->PCB.cpu_time > 0)
            {
                s1->next = p1->next;
                ready_tail = p1;
                p1->next = NULL;
                //ready_tail->next = s1;//
                s1->next = s1->next->next;
                //ready_tail = ready_tail->next;
            }
            else
            {
                s1->next = p1->next;
                del(p1);
            }
        }
        else
            unuse_cpu++;
        x++;
        if(x == t)
        {
           // ready_tail->
            ready_tail->next = blocked_head->next;
            blocked_head->next = blocked_head->next->next;
            ready_tail = ready_tail->next;
            x = 0;
        }
    }
}

void main()
{
    start_state();
    creatList1();
    creatList2();
    dispath(ready_head,blocked_head,x);
    calculate();   
}
搜索更多相关主题的帖子: void next include 
2010-10-19 18:37
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:20 
楼主问题没描述清楚啊
2010-10-19 18:56
zyz19890222
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-19
收藏
得分:0 
回复 2楼 遮天云
运行dispath函数会出现问题啊,我想问下dispath函数还有问题啊??
2010-10-19 19:12
zyz19890222
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-19
收藏
得分:0 
回复 2楼 遮天云
有n个进程处于就绪状态,有m个进程处于阻塞状态,采用时间片轮转法进程调度进行调度,且没过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程   
要求:输出系统中进程的调度次序         计算CPU的利用率
2010-10-19 19:16
快速回复:请问这个程序有没有问题啊???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012473 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved