免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1686 | 回复: 3
打印 上一主题 下一主题

缺些什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-30 21:58 |只看该作者 |倒序浏览
#include "stdio.h"
#define MaxProcessNumber 10
#define MaxGanttNumber 500
#define MaxCPUTime 10000
char *ErrorTable[]={"Success!",
                "Input file open error!",
                "Can not close the input file!",
                "Exceed the Max Process Number",
                "No Process"};
int ProcessNumber = 0;
int GanttNumber = 0;
int CPUBurstTime[MaxProcessNumber];
int WaitingTime[MaxProcessNumber]={0};
int GanttChartProcess[MaxGanttNumber];
int GanttChartTime[MaxGanttNumber];
int TerminationProcess[MaxProcessNumber] = {0};
double AverageWaitingTime = 0.0;

// Read Process Information  From Input File
int ReadProcess(char *infn)
{
        FILE *fp;
        if(( fp = fopen(infn, "r")) == NULL)
        {
                return 1;
        }
       
        for(ProcessNumber=0;ProcessNumber<MaxProcessNumber&&!feof(fp);ProcessNumber++)
        {
                fscanf(fp,"%d", &CPUBurstTime[ProcessNumber]);
        }
        ProcessNumber--;

        if(fclose(fp))
        {                          
                return 2;       
        }
        if(ProcessNumber == MaxProcessNumber)
        {
                return 3;
        }
        if(ProcessNumber == 0)
        {
                return 4;
        }
        return 0;
}

// Implementation of CPU Scheduling Algorithm
int CPUScheduling()
{
        //Gantt Charter
        int time = 0, AlloCPUProcoss = 0,EndProcessNum = 0,i;
        GanttChartTime[GanttNumber] = time;
        GanttChartProcess[GanttNumber] = AlloCPUProcoss;       
        while(time < MaxCPUTime)
        {       

                /////////////Different CPUScheduling//////////////////////////////////////////
                time++;
                CPUBurstTime[AlloCPUProcoss]--;
                for(i=0;i<ProcessNumber;i++)
                {
                        if(TerminationProcess[i] == 0 && AlloCPUProcoss != i)
                                WaitingTime[i]++;
                }
               
                if(CPUBurstTime[AlloCPUProcoss] == 0)
                {
                        GanttNumber++;
                        GanttChartTime[GanttNumber] = time;
                        TerminationProcess[AlloCPUProcoss] = 1;
                        EndProcessNum++;
                        if(EndProcessNum < ProcessNumber)
                        {
                                AlloCPUProcoss++;
                                GanttChartProcess[GanttNumber] = AlloCPUProcoss;
                        }
                        else
                        {
                                break;
                        }
                }         
                ///////////////////////////////////////////////////////////////////////////////
        }
        return 0;
}

// Output Gantt Chart
int OutputGantt()
{
        int i;
        printf("-------------Gantt Chart---------------\n");
        printf("      ");
        for(i=0;i<GanttNumber;i++)
        {
                printf("%d-P%d-",GanttChartTime[i],GanttChartProcess[i]);
        }
        printf("%d\n",GanttChartTime[GanttNumber]);
        printf("---------------------------------------\n");
        return 0;
}

// Calculate Waiting Time
int CalWaitingTime()
{
        int i,sum = 0 ;
        for(i=0;i<ProcessNumber;++i)
        {
                sum += WaitingTime[i];
        }
        AverageWaitingTime = 1.0*sum/ProcessNumber;
        return 0;
}

// Output Waiting Time
int OutputResult()
{
        int i;
        printf("-          Waiting Time               -\n");
        printf("---------------------------------------\n");
        for(i=0;i<ProcessNumber;i++)
                printf("    P%d:%d\n",i,WaitingTime[i]);
        printf("    Average Waiting Time = %lf.\n",AverageWaitingTime);
        printf("---------------------------------------\n");
        return 0;
}

// Output Error Message
char *OutputError(int number)
{
        return ErrorTable[number];
}

// Main Function
int main(int argc, char *argv[])
{
        int res = 0;
        if((res=ReadProcess(argv[1])) != 0)
                goto EXIT;
        if((res=CPUScheduling()) != 0)
                goto EXIT;
        if((res=OutputGantt()) != 0)
                goto EXIT;
        if((res=CalWaitingTime()) != 0)
                goto EXIT;
        if((res=OutputResult()) != 0)
                goto EXIT;
EXIT:
        if(res != 0)
                printf("%s\n",OutputError(res));
        return 1;
}

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2010-11-30 22:05 |只看该作者
想干嘛?最好直入主题,没人会先去看代码然后去猜的。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2010-12-01 08:41 |只看该作者
顶 ls

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2010-12-01 09:01 |只看该作者
缺少说明,不知道你要问啥{:3_184:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP