| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3448 人关注过本帖
标题:时间片轮转调度算法,帮看下
只看楼主 加入收藏
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 19楼 azzbcc
对哈,那难道是小于等于?
2013-04-10 23:05
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 19楼 azzbcc
下一个进程到达时间小于等于前一个刚执行完的CPU占用时间,然后进入队列?这样呢?
2013-04-10 23:08
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 19楼 azzbcc
揪心...
2013-04-10 23:16
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我写吧,count是干嘛的?
int prio;         
int round;         
int cputime;      
int needtime;
int gettime;   
int count;     //?????????   
char state;        
struct node *next


[fly]存在即是合理[/fly]
2013-04-10 23:22
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 19楼 azzbcc
慢慢写,我明天6点起来看,我是真憋在这了,Thank you,gentle man。
2013-04-10 23:24
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
一会我们也断网了,明天再传吧,感觉用循环链表会容易一些,我试试!


[fly]存在即是合理[/fly]
2013-04-10 23:49
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 26楼 azzbcc
我今天早上要用
2013-04-11 04:37
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
呵呵,现在来的几步?


[fly]存在即是合理[/fly]
2013-04-11 06:03
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Data
{
    char name[10];
//    int  prio;  没用到、、、
    int  round;
    int  cputime;
    int  needtime;
    int  gettime;
//    int  count;
    char state;  //添加了一个未到达的状态:'N'
}Data;

typedef struct Node
{
    int data[100];
    int front, rear;
}QueueLink;

int N, need;    //N为进程总数, need为时间片
int Time = 0;    //一共要用的时间
Data all[10];
QueueLink run;

/*
把所有的进程存入all数组,按到达时间排序

队列中存入的是该进程在all数组中对应的下标

再依据时间推进,将已到达的进程入队列,再将未执行完的进程入队列

另外round和cputime分别指什么?他们的值完全一样,或许我理解错了吧
*/

int cmp(const void *a, const void *b)
{
    Data *m = (Data *)a;
    Data *n = (Data *)b;
    return m->gettime - n->gettime;
}

void Output(int time)
{
    int i;
    getchar();
    if (time >= 0)    printf("\n当前时间为:%dms\n", time);

    puts("进程名  到达的时间  占用cpu时间 到完成还要得时间 轮转时间片  状态");
    for (i = 0;i < N;++i)
    {
        printf("  %s         %d             %d            %d             %d        %c\n",
            all[i].name, all[i].gettime, all[i].cputime, all[i].needtime, all[i].round, all[i].state);
    }
    printf("\n");
}

void init()
{
    int i;

    memset(all, 0, sizeof(all));

    printf("输入进程的个数:");
    scanf("%d", &N);

    for (i = 0;i < N;++i)
    {
        puts("输入进程名,到达时间及其需要运行的时间:");
        scanf("%s%d%d", all[i].name, &all[i].gettime, &all[i].needtime);
        Time += all[i].needtime;
        all[i].state = 'N';
    }
    qsort(all, N, sizeof(Data), cmp);

    Output(-1);

    printf("请输入时间片长度:");
    scanf("%d", &need);
    printf("输入时间片长度为: %d\n", need);
}

void DeQueue(int *a)
{    //出队列
    *a = run.data[run.front++];
}

void EnQueue(int a)
{    //入队列
    run.data[run.rear++] = a;
}

void fun()
{
    int i, time = 0, now = 0;
    while (time < Time)
    {
        //将未执行进程入队列
        for (i = 0;i < N;++i)
        {
            if (all[i].gettime <= time && all[i].state == 'N')
            {
                EnQueue(i);
                all[i].state = 'W';
            }
        }
        //将未完成的进程入队列
        for (i = 0;i < run.front;++i)
        {
            if (all[i].state != 'F')
            {
                EnQueue(run.data[i]);
            }
        }
        
        //出队列
        DeQueue(&now);
        if (all[now].state == 'F')
        {    //已经完成进程
            continue;
        }

        all[now].state = 'R';    //将当前设定为运行态
        Output(time);

        if (all[now].needtime > need)
        {
            all[now].needtime -= need;
            all[now].round += need;
            all[now].cputime += need;
            all[now].state = 'W';
            time += need;
        }
        else
        {
            time += all[now].needtime;
            all[now].round += all[now].needtime;
            all[now].cputime += all[now].needtime;
            all[now].needtime = 0;
            all[now].state = 'F';
        }
    }
    Output(time);
}

int main( void )
{
    init();
    fun();
    return 0;
}


[fly]存在即是合理[/fly]
2013-04-11 06:04
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 29楼 azzbcc
早安,来得及,好给力啊!
2013-04-11 06:16
快速回复:时间片轮转调度算法,帮看下
数据加载中...
 
   



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

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