請麻煩高手進來幫看一下SJF with Preemptive 的代碼是哪裡出的問題!!
毋暝熊熊 2008-12-24 09:37:32 #include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
void PSJF(int data[100][4],int n)
{ //data[][] is input array
while( true ) //Bubble sort
{ int t=0;
for ( int i=0;i<n-1;++i )
{ if (data[i][2]>data[i+1][2] )//Arrival Time 前項>後項就交換
{ swap(data[i][3],data[i+1][3]);
swap(data[i][2],data[i+1][2]);
swap(data[i][1],data[i+1][1]);
swap(data[i][0],data[i+1][0]);
++t;
}
}
if ( t==0) break;//若無交換即退出
}
int tt=data[0][2];
int time=data[0][2];//目前時間
int c=0,j=0,m=0,a,b=1;
int ready[100][4];//ready array
int rdata[100][4];//running array
for (int i=0;i<n;i++)
{ tt+=data[i][1]; //last finish time
}
while (time<=tt)
{
while (m<n)
{ if (data[m][2]==time )//將ready process放入 ready array
{ ready[c][3]=data[m][3];
ready[c][2]=data[m][2];
ready[c][1]=data[m][1];
ready[c][0]=data[m][0];
c++;
m++;
}
}
if (c>1)//ready array 內有2個以上的process
{ for (a=0;a<c-1;a++)//比較剩餘Burst Time 較少的放到前面
{ for (int k=a+1;k<c;k++)
{ if (ready[a][1]>ready[k][1] && ready[a][2]==ready[k][2])
{ swap(ready[a][3],ready[k][3]);
swap(ready[a][2],ready[k][2]);
swap(ready[a][1],ready[k][1]);
swap(ready[a][0],ready[k][0]);
}
}
}
}
//將ready array的第一個內容放入running array
rdata[j][0]=ready[0][0]; //process id 放入
rdata[j][2]=ready[0][2]; //process start time 放入
rdata[j][3]=ready[0][3]; //process Priority放入
time=data[b][2]; //目前時間
b++;
rdata[j][1]=time-rdata[j][2];//已執行的Burst Time
ready[0][1]-=rdata[j][1];//剩餘Burst Time
if (rdata[j][0]!=ready[0][0])
{ ready[0][2]=time;//Arrival Time 改變
j++;
}
for (int i=0;i<c-1;i++) //完成schedule 的process 從ready array 移除.
{ if (ready[i][1]==0)
{ ready[i][3]=ready[i+1][3];
ready[i][2]=ready[i+1][2];
ready[i][1]=ready[i+1][1];
ready[i][0]=ready[i+1][0];
}
}
for (int i=0;i<4;i++) ready[c-1][i]=0;
if (ready[0][1]==0 && ready[1][1]==0) break; //ready array沒有process時離開迴圈
}
for (int i=0;i<j;i++)
{ for (int z=0;z<4;z++)
{ cout<<rdata[i][z]<<" ";
}
cout<<endl;
}
}
int main ()
{
int data[100][4],n,m,a=1;
char s;
while (a=1)
{
cout<<"CPU Scheduling:"<<endl;
cout<<"-----------------------------------------------"<<endl;
cout<<"(1)First-Come, First-Served(FCFS)"<<endl;
cout<<"(2)Non-Preemptive Shortest-Job-First(Non-Preemptive SJF)"<<endl;
cout<<"(3)Preemptive Shortest-Job-First(Preemptive SJF)"<<endl;
cout<<"(4)Non-Preemptive Priority"<<endl;
cout<<"(5)Preemptive Priority"<<endl;
cout<<"(6)Round-Robin(RR)"<<endl;
cout<<"-----------------------------------------------"<<endl;
cout<<"Select CPU Scheduling Method Number: ";
cin>>m;
cout<<"Input number of processes: ";
cin>>n;
int tq;
if(m==6)
{ cout<<"Time Quantum: ";
cin>>tq;//Time Quantum
}
for (int i=0;i<n;i++)
{ data[i][0]=i+1;//process id
cout<<"P"<<data[i][0]<<"'s Burst Time: ";
cin>>data[i][1]; //Burst Time
if (m!=6)
{ cout<<"P"<<data[i][0]<<"'s Arrival Time: ";
cin>>data[i][2]; //Arrival Time
}
else data[i][2]=0;
if (m==4||m==5 )
{ cout<<"P"<<data[i][0]<<"'s Priority: ";
cin>>data[i][3]; //Priority
}
else data[i][3]=0;
}
if(m==1) fcfs(data,n);
else if(m==2) NPSJF(data,n);
else if(m==3) PSJF(data,n);
else if(m==4) NPP(data,n);
else if(m==5) PP(data,n);
else if(m==6) RR(data,n,tq);
cout<<endl;
cout<<"Again Schedule? (y/n)";
cin>>s;
if (s=='Y' || s=='y') a=1;
if (s=='N' || s=='n') exit(0);
cout<<endl;
}
system("pause");
return 0;
}
目前Compiler後,完全沒有顯示出結果..
麻煩高手幫看一下是哪邊的問題...感激不盡!!