/*********************************/
程序名称:进程调度算法:先来先服务算法、时间片轮转调度算法的实现
copyright@ pengkuny
主页:http://www.cppblog.com/pengkuny
完成日期:2006.12.01
参考资料:汤子瀛<<计算机操作系统>>
/********************************/
// 时间片轮转调度算法
#include<iostream>
#include
<cstdio>
#include
<cmath>
#include
<cstring>

using namespace std;
enum STATUS {RUN,READY,WAIT,FINISH};

struct PCBNode
{        
    
int  processID;              //进程ID
    STATUS  status;              //进程状态
    int  priorityNum;          //优先数
    int  reqTime;             //总的需要运行时间
    int  remainTime;          //剩下需要运行时间
    int  arriveTime;          //进入就绪队列时间
    int  startTime;           //开始运行时间
    int  finishTime;          //结束运行时间
    int  totalTime;           //周转时间
    float  weightTotalTime;      //带权周转时间    
}
;

struct QueueNode 
{
    
int ID;          //进程ID
    struct QueueNode * next;   //队列中下一个进程指针
}
;

struct LinkQueue
{
    QueueNode 
*head;//队首
}
;
void Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable);
bool RR_Run(LinkQueue& Q,QueueNode* q, QueueNode* p, const int Round,int& currentTime,PCBNode * ProcessTable);
//分配时间片给q所指进程,p为刚退出的进程
void RoundRobin(LinkQueue& Q,const int Round, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable);
//时间片轮转调度,调用RR_Run(),时间片大小设为Round
void InitialQueue(LinkQueue& Q,PCBNode * ProcessTable,const int processnum);
//初始化就绪队列
void Input(PCBNode * ProcessTable, const int processnum);
//从input.txt文件输入数据

int main()
{
    LinkQueue Q;
//就绪队列
    Q.head = NULL;
    
const int processnum = 16;//进程数
    const int Round = 1;      //时间片大小
    int totalTimeSum = 0;     //周转时间
    int    WeightTotalTimeSum = 0;//带权周转时间
    PCBNode * ProcessTable=new PCBNode[processnum];   //进程表

    Input(ProcessTable, processnum);
    InitialQueue(Q, ProcessTable, processnum);
    RoundRobin(Q, Round, totalTimeSum,WeightTotalTimeSum,ProcessTable);    
    cout
<<"时间片轮调度的平均周转时间为:"<<totalTimeSum/processnum<<endl;
    cout
<<"时间片轮调度的平均带权周转时间为:"<<WeightTotalTimeSum/processnum<<endl;

    Input(ProcessTable, processnum);
    InitialQueue(Q, ProcessTable, processnum);
    Fcfs(Q, totalTimeSum,WeightTotalTimeSum,ProcessTable);
    cout
<<"先来先服务的平均周转时间为:"<<totalTimeSum/processnum<<endl;
    cout
<<"先来先服务的平均带权周转时间为:"<<WeightTotalTimeSum/processnum<<endl;

    delete [] ProcessTable;
    
return 0;
}


void RoundRobin(LinkQueue& Q,const int Round, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable)
{
    totalTimeSum 
= 0;   //总的周转时间
    weightTotalTimeSum = 0;//平均周转时间
    int currentTime = 0;   //当前时间
    QueueNode* p;
    QueueNode
* q;
    QueueNode
* r;
    
bool finish = false;//调用RR_Run()后,该进程是否已经做完退出
    
    p 
= Q.head;
    q 
= p->next;
    
while (q != NULL)//从队首开始依次分配时间片
    {
        
do
        
{        
            cout
<<"**********************"<<endl;
            cout
<<"在时间片"<<(currentTime+1)/Round<<"内,活动进程为:  "<<q->ID<<endl;
            cout
<<"进程"<<q->ID<<" 现在需要的时间片为:  "<<ProcessTable[q->ID].remainTime<<endl;
            finish 
= RR_Run(Q, q, p, Round, currentTime, ProcessTable);//分配时间片给q进程
            cout<<endl;
            
            
if (!finish)//若是进程在本时间片内做完,则跳出do…while循环
            {            
                
if (q->next == NULL) 
                
{
                    r 
= Q.head->next;
                }

                
else
                
{
                    r 
= q->next;
                }

            }

            
else //否则计算周转时间和带权周转时间
            {
                totalTimeSum 
+= ProcessTable[q->ID].totalTime;
                weightTotalTimeSum 
+= ProcessTable[q->ID].weightTotalTime;

                delete q; 
//从队列中删除q进程
                q = p;
            }

        }
while (!finish &&  (ProcessTable[r->ID].arriveTime > currentTime + Round));
        
//下一个进程很晚才来,则继续给当前进程分配时间片
        
        p 
= q;
        q 
= q->next;

        
if (q == NULL && Q.head->next!=NULL)
        
{
            p 
= Q.head;
            q 
= p->next;
        }
 
    }
 
    delete Q.head;
    Q.head 
= NULL;
}


bool RR_Run(LinkQueue& Q,QueueNode* q, QueueNode* p, const int Round,int& currentTime,PCBNode * ProcessTable)
{
    
if (ProcessTable[q->ID].remainTime <= Round)//在此时间片内能够做完,之后退出进程调度
    {
        ProcessTable[q
->ID].finishTime = currentTime + ProcessTable[q->ID].remainTime;
        ProcessTable[q
->ID].totalTime += ProcessTable[q->ID].remainTime;
        ProcessTable[q
->ID].weightTotalTime = ProcessTable[q->ID].totalTime/ProcessTable[q->ID].reqTime;        

        currentTime 
= ProcessTable[q->ID].finishTime;
        
        p
->next = q->next;
        cout
<<endl;
        cout
<<"进程"<<q->ID<<"完成!"<<endl;

        
return true;
    }

    
else//此时间片内做不完
    {
        ProcessTable[q
->ID].remainTime = ProcessTable[q->ID].remainTime - Round;
        ProcessTable[q
->ID].totalTime += Round;
        currentTime 
+= Round;
        
        
return false;
    }

}



void Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable)
{
    totalTimeSum 
= 0;
    weightTotalTimeSum 
= 0;//平均周转时间
    QueueNode* p;
    QueueNode
* q;
    
    p 
= Q.head->next;
    
if (p !=NULL ) 
    
{
        ProcessTable[p
->ID].startTime = ProcessTable[p->ID].arriveTime;
        ProcessTable[p
->ID].finishTime = ProcessTable[p->ID].arriveTime + ProcessTable[p->ID].reqTime;
    }

    
    
for(q=p->next; q!=NULL; q=q->next)
    
{
        
        
if (ProcessTable[q->ID].arriveTime < ProcessTable[p->ID].finishTime)
        
{
            ProcessTable[q
->ID].startTime = ProcessTable[p->ID].finishTime;
            ProcessTable[q
->ID].finishTime = ProcessTable[p->ID].finishTime + ProcessTable[q->ID].reqTime;
        }

        
else//下个进程到达时间较晚
        {
            ProcessTable[q
->ID].startTime = ProcessTable[q->ID].arriveTime;
            ProcessTable[q
->ID].finishTime = ProcessTable[q->ID].arriveTime + ProcessTable[q->ID].reqTime;
        }

        p 
= q;
    }

    
    
for(q=Q.head->next; q!=NULL; q=q->next)
    
{
        ProcessTable[q
->ID].totalTime = ProcessTable[q->ID].finishTime - ProcessTable[q->ID].arriveTime;
        ProcessTable[q
->ID].weightTotalTime = ProcessTable[q->ID].totalTime/ProcessTable[q->ID].reqTime;        
        totalTimeSum 
+= ProcessTable[q->ID].totalTime;
        weightTotalTimeSum 
+= ProcessTable[q->ID].weightTotalTime;
    }
    
    
    
int t = 0;
    
for(q=Q.head->next; q!=NULL; q=q->next)
    
{
        cout
<<"*********************"<<endl;
        
while ( t<ProcessTable[q->ID].finishTime )
        
{
            cout
<<"时刻"<<t<<":  进程"<<q->ID<<"活动"<<endl;
            t
++;
        }

        
if (q->next != NULL)
        
{    
            cout
<<"时刻"<<t<<":  进程"<<q->ID<<"结束活动,开始下一个进程."<<endl;
            cout
<<"进程"<<q->ID<<"的周转时间为: "<<ProcessTable[q->ID].totalTime<<endl;
            cout
<<"进程"<<q->ID<<"的带权周转时间为: "<<ProcessTable[q->ID].weightTotalTime<<endl<<endl;
        }

        
else
        
{
            cout
<<"时刻"<<t<<":  进程"<<q->ID<<"结束活动."<<endl<<endl;
            cout
<<"进程"<<q->ID<<"的周转时间为: "<<ProcessTable[q->ID].totalTime<<endl;
            cout
<<"进程"<<q->ID<<"的带权周转时间为: "<<ProcessTable[q->ID].weightTotalTime<<endl<<endl;            
        }

    }

    cout
<<"所有进程结束活动."<<endl<<endl;

    p 
= Q.head;
    
for(q=p->next; q!=NULL; q=q->next)
    
{
        delete p;
        p 
= q;
    }

}



void InitialQueue(LinkQueue& Q, PCBNode * ProcessTable,const int processnum)
{
    
//初始化
    
    
for (int i=0;i<processnum;i++)
    
{
        ProcessTable[i].processID
=i;
        ProcessTable[i].reqTime
=ProcessTable[i].remainTime;
        ProcessTable[i].finishTime
=0;
        ProcessTable[i].startTime
=0;    
        ProcessTable[i].status
=WAIT;
        ProcessTable[i].totalTime
=0;
        ProcessTable[i].weightTotalTime
=0;        
    }

    
    Q.head 
= new QueueNode;
    Q.head
->next = NULL;
    QueueNode 
* p;
    QueueNode 
* q;
    
for (i=0;i<processnum;i++)
    
{    
        p 
= new QueueNode;
        p
->ID = i;
        p
->next = NULL;
        
if (i == 0)
        
{
            Q.head
->next = p;            
        }

        
else
            q
->next = p;
        
        q 
= p;
    }

}



void Input(PCBNode * ProcessTable, const int processnum)
{
    FILE 
*fp;        //读入线程的相关内容
    if((fp=fopen("input.txt","r"))==NULL)
    
{
        cout
<<"can not open file!"<<endl;
        exit(
0);
    }
        
    
for(int i=0;i<processnum;i++)
    
{
        fscanf(fp,
"%d %d %d",&ProcessTable[i].arriveTime,&ProcessTable[i].remainTime,&ProcessTable[i].priorityNum);
    }

    fclose(fp);
}




建议输入数据:input.txt
0    4      0
1    35     1
2    10     2
3    5      3
6    9      4
7    21     5
9    35     6
11  23     7
12  42     8  
13   1      9
14   7     10
20   5     11
23   3     12
24   22    13
25   31    14
26   1     15
posted on 2006-12-04 12:16 哈哈 阅读(16615) 评论(39)  编辑 收藏 引用

评论:
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-03 16:17 | phoenix
怎么运行不了的?  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-03 19:46 | pengkuny
@phoenix
什么现象?
我试了一下,是不是"can't open the file"?
你只要添加一个input.txt文件就可以运行了,文件内容为:(我建议输入的数据).
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 13:21 | phoenix
不是"can't open the file"
是 “Fcfs(Q, totalTimeSum,WeightTotalTimeSum,ProcessTable);”这里的'Fcfs' : undeclared identifier
还有“void Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable)
{ ”
这里的'Fcfs' : redefinition; different type modifiers

这个怎么办?还有我可以加你QQ么?
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 13:47 | pengkuny
@phoenix
sorry,起先忘了函数声明Fcfs;已经加上去了,
不过这些错误自己应该能够调试修改过来吧
当然可以加QQ拉  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 13:56 | phoenix
希望能得到快点的回复~~呵呵`~谢谢!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 13:57 | phoenix
哦哦~~我加你QQ啰~~  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 14:05 | phoenix
还有我想问你哦~~我的VC6.0里没有stdafx.h这个函数~~有些程序就运行不了~~怎么办?  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-04 14:15 | pengkuny
@phoenix
vc里怎么可能没有呢?那就奇怪了.#include<stdafx.h>
实在没有,到别人那里拷贝一份,放到原来的文件夹下就可以了——我想  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-05 22:09 | 小山日志
stdafx.h 是用来加速编译速度的头文件,通常编译VC工程时把你需要的头文件在这里包含,不用也行。特别是这样的小工程... ... ^_^  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-05 23:46 | pengkuny
@小山日志
没错,避免重复编译.
一般没必要加  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-01-08 09:29 | phoenix
你好,我想问问你那里还保存有我前几天用邮箱发给你的进程调度么?
我想让你帮我分析一下里面的代码,我有些问题搞不懂。比如,我想知道
源代码前面的“PCB,*PCBptr,**PCBpp;”这几个是什么意思,PCBpp为什么要用两个**?方便的话,可以在QQ上回复我么,我一直在线的。谢谢!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-03-09 18:49 | fangyi
你好,请问你能不能再加上一种调度算法,优先级调度算法,谢谢你哦!!!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-03-09 19:18 | pengkuny
@fangyi
那不能,优先级调度算法倒是有,不过是别人做的,
要的话email给我:pengkuny@163.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-03-10 13:03 | fangyi
那太感谢了,我的emai是zhuangfangyi@163.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-03-11 09:35 | fangyi
已经收到你的邮件了,真的很感谢,我加你qq,交个朋友吧!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法[未登录] 2007-05-20 20:21 |
@pengkuny有你在真好呀解决了很多问题呀哈哈 谢谢了!!
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-16 13:32 | 小亮
请问可不可以提供一个用C或C++写的多级反馈队列调度算法啊?谢谢  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-16 13:48 | pengkuny
@小亮
你联系方式都没有,叫我怎么提供?  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-17 13:25 | vicky
可否将 高优先权优先调度算法 和 多级反馈队列调度算法的C代码给我呢?万分感谢~
我邮箱是mxw_0925@sohu.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-17 13:56 | 小亮
请问可不可以提供一个用C或C++写的多级反馈队列调度算法和多级反馈队列调度算法的C代码完整程序啊?对不起,之前忘记给邮箱地址了,我邮箱地址是du198573@126.com,急需,请多多指教,万分感激!谢谢!@pengkuny
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-17 14:04 | 小亮
请问可不可以提供一个用C或C++写的多级反馈队列调度算法和多级反馈队列调度算法的C代码完整程序啊?对不起,之前忘记给邮箱地址了,我邮箱地址是du198573@126.com,急需,请多多指教,万分感激!谢谢,可以的话也可以加我QQ:404101489  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-18 11:53 | 小亮
@pengkuny
感谢这么快就帮我写好了多级反馈队列调度算法,如果能附加N-S流程图就更加完美了,不过还是真的要感谢你!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-18 16:32 | 小亮
感谢这么快就帮我写好了多级反馈队列调度算法,如果能附加N-S流程图就更加完美了,不过还是真的要感谢你!希望有时间可以发个N-S流程图给我,谢谢!du198573@126.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-18 22:50 | pengkuny
@小亮
没空, 我现在一大堆考试 一大堆实验 天天凌晨5,6点才睡觉, 烦死了, 呵呵  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-06-19 12:10 | 小亮
@pengkuny
没关系拉,那你自己要注意休息拉!  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-07-05 17:41 | 宝贝疙瘩
能不能在这2天内帮我写一个先来先服务的程序,简单点的,每句后面有注释,最后些上思路的?谢谢啊~~  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-07-05 18:10 | pengkuny
@宝贝疙瘩
帮你写?
Oh, come on!

十天之后再说吧,我最近考试烦死了.
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-07-05 18:13 | pengkuny
@宝贝疙瘩
我这篇文章里不是已经给出先来先服务的源代码了吗?
  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-12-02 11:44 | *幻&.
你好俸哦.......
偶像........  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法[未登录] 2007-12-06 13:06 | kevin
偶像厉害啊!!!!!1
能不能顺便提供个提供一个用C或C++写的多级反馈队列调度算法啊?谢谢

我的邮箱是tanyongshan18@126.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2007-12-24 00:08 | betty
input.txt文件是什么意思  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2008-10-24 10:35 | wuming
谁需要这个程序就联系我 发邮件 ludinghui125@163.com  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-04-09 10:57 | 做实验不容易
可以把修改了的程序贴上来不?不要加那个intput.txt文件的.  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-04-20 10:37 | 歼击机
#include<conio.h>
#include<iostream.h>
#include<fstream.h>

#define N 20

typedef struct pcb/*进程控制块定义*/
{
char pname[N]; /*进程名*/
int runtime; /*运行时间*/
int arrivetime; /*到达时间*/
char state; /*进程状态*/
struct pcb *next; /*链接指针*/
}PCB;

PCB head_input;//就绪队列
PCB head_run;
PCB * pcb_input;

static char R='r',C='c';
unsigned long current; /*记录系统当前时间的变量*/

void inputprocess(); /*建立进程函数*/
int readyprocess(); /*建立就绪队列函数*/
int readydata(); /*判断进程是否就绪函数*/
int runprocess(); /*运行进程函数*/

ofstream fout;

/*定义建立就绪队列函数*/
int readyprocess()
{
while(1)
{
if(readydata()==0)/*判断是否就绪函数*/
return 1;
else
runprocess();/*运行进程函数*/
}
}

/*定义判断就绪队列是否有进程函数*/
int readydata()
{
if(head_input.next==NULL)
{
if(head_run.next==NULL)
return 0;//就绪队列和运行队列都没有进程时,返回0,最终程序结束
else
return 1;//就绪队列为空,运行队列非空,返回上级循环,继续运行
}

PCB *p1,*p2,*p3;

p1=head_run.next;
p2=&head_run;
while(p1!=NULL)
{
p2=p1;
p1=p2->next;
}
p1=p2;//p1指向run队列的最后一个进程

p3=head_input.next;//p3指向就绪队列的第一个进程
p2=&head_input;

while(p3!=NULL)
{//遍历就绪队列
if(((unsigned long)p3->arrivetime<=current)&&(p3->state==R))
{//若符合条件(p3所指进程的时间)
cout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p3->pname<<" start,\n";
fout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p3->pname<<" start,\n";
p2->next=p3->next;

//将p3所指进程,放到p1所指进程之后
p3->next=p1->next;
p1->next=p3;

p3=p2;
}
p2=p3;
p3=p3->next;
}
return 1;
}

/*定义运行进程函数*/
int runprocess()
{
PCB *p1,*p2;
if(head_run.next==NULL)
{//若运行队列为空,时间+1,跳出函数
current++;
return 1;
}
else
{
p1=head_run.next;//p1指向运行队列的第一个进程
p2=&head_run;
while(p1!=NULL)
{//遍历运行队列

p1->runtime--;//p1所指进程运行时间-1
current++;//时间+1

if(p1->runtime<=0)
{//p1所指进程运行时间=0,输出并删除
cout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p1->pname<<" end. \n";
fout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p1->pname<<" end. \n";
p1->state=C;
p2->next=p1->next;
delete p1;
p1=NULL;
}
else
{
p2=p1;
p1=p2->next;
}
}
return 1;
}
}


/*定义建立进程函数*/
void inputprocess()
{

PCB *p1,*p2;
int num; /*要建立的进程数*/
unsigned long max=0;

cout<<"How many processes do you want to run:";
fout<<"How mant processes do you want to run:";
cin>>num;
fout<<num<<endl;

p1=&head_input;
p2=p1;
p1->next=new PCB;
p1=p1->next;

for(int i=0;i<num;i++)
{
cout<<"No."<<i+1<<" process input pname:";
fout<<"No."<<i+1<<" process input pname:";
cin>>p1->pname;
fout<<p1->pname<<endl;

cout<<" runtime:";
fout<<" runtime:";
cin>>p1->runtime;
fout<<p1->runtime<<endl;

cout<<" arrivetime:";
fout<<" arrivetime:";
cin>>p1->arrivetime;
fout<<p1->arrivetime<<endl;

p1->runtime=(p1->runtime)*1000;
p1->arrivetime=(p1->arrivetime)*1000;
p1->state=R;
if((unsigned long)(p1->arrivetime)>max)
max=p1->arrivetime;
p1->next=new PCB;
p2=p1;
p1=p1->next;
}

delete p1;
p1=NULL;
p2->next=NULL;
}



void main()
{
fout.open("result.txt");
cout<<"\ntime 1=1000 time slice\n";
fout<<"\ntime 1=1000 time slice\n";

current=0;
inputprocess();
readyprocess();

cout<<flush;
getch();
fout.close();
}  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-05-03 12:53 | 创意产品
谢谢,学习了  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-06-09 20:43 | 课程设计
请问这个是有界面的嘛?请问能不能发一个有界面的,先来先服务、时间片轮转调度算法啊?谢谢~~lily88zl@yahoo.com.cn  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-08-21 10:56 | Cavendish
@phoenix
重新定义 采用相同的模型定义  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2009-08-21 10:57 | Cavendish
@课程设计
加上一个界面编辑器 自己编辑一个就好了  回复  更多评论
  
# re: 进程调度:先来先服务算法、时间片轮转调度算法 2010-04-15 17:04 | 捏捏
input.txt添加到哪里啊?
@pengkuny
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理