[c++]代碼庫#include
#include
#include
const int block_time=10; //定義時間片的長度為10秒
const int MAXPCB=100; //定義最大程序數
//定義程序結構體
typedef struct node {
char name[20];
int status;
int time;
int privilege;
int finished;
int wait_time;
} pcb;
pcb pcbs[MAXPCB];
int quantity;
//初始化函數
void initial() {
int i;
for ( i=0; i
strcpy ( pcbs[i].name,"" );
pcbs[i].status=0;
pcbs[i].time=0;
pcbs[i].privilege=0;
pcbs[i].finished=0;
pcbs[i].wait_time=0;
}
quantity=0;
}
//讀資料函數
int readData() {
FILE *fp;
char fname[20];
int i;
cout<
cin>>fname;
if ( ( fp=fopen ( fname,"r" ) ) ==NULL ) {
cout<
} else {
while ( !feof ( fp ) ) {
fscanf ( fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,&pcbs[quantity].time,&pcbs[quantity
].privilege );
quantity++;
}
//輸出所讀入的資料
cout<
cout<
for ( i=0; i
cout<
}
return ( 1 );
}
return ( 0 );
}
//重置資料,以供另一個算法使用
void init() {
int i;
for ( i=0; i
pcbs[i].finished=0;
pcbs[i].wait_time=0;
}
}
//先進先出算法
void FIFO() {
int i,j;
int total;
//輸出FIFO算法執行流
cout<
cout<
cout<
for ( i=0; i
cout<
for ( j=i+1; j
pcbs[j].wait_time+=pcbs[i].time;
}
}
total=0;
for ( i=0; i
total+=pcbs[i].wait_time;
}
cout<
}
//優先數排程算法
void privilege() {
int i,j,p;
int passed_time=0;
int total;
int queue[MAXPCB];
int current_privilege=1000;
for ( i=0; i
current_privilege=1000;
for ( j=0; j
if ( ( pcbs[j].finished==0 ) && ( pcbs[j].privilege
p=j;
current_privilege=pcbs[j].privilege;
}
}
queue[i]=p;
pcbs[p].finished=1;
pcbs[p].wait_time+=passed_time;
passed_time+=pcbs[p].time;
}
//輸出優先數排程執行流
cout<
cout<
cout<
for ( i=0; i
cout<
}
total=0;
for ( i=0; i
total+=pcbs[i].wait_time;
}
cout<
}
//時間片輪轉排程算法
void timer() {
int i,j,number,flag=1;
int passed_time=0;
int max_time=0;
int round=0;
int queue[1000];
int total=0;
while ( flag==1 ) {
flag=0;
number=0;
for ( i=0; i
if ( pcbs[i].finished==0 ) {
number++;
j=i;
}
}
if ( number==1 ) {
queue[total]=j;
total++;
pcbs[j].finished=1;
}
if ( number>1 ) {
for ( i=0; i
if ( pcbs[i].finished==0 ) {
flag=1;
queue[total]=i;
total++;
if ( pcbs[i].time<=block_time* ( round+1 ) ) {
pcbs[i].finished=1;
}
}
}
}
round++;
}
if ( queue[total-1]==queue[total-2] ) {
total--;
}
cout<
cout<
for ( i=0; i
cout<
}
}
//顯示版權資訊函數
void version() {
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
}
//主函數
void main() {
int flag;
version();
initial();
flag=readData();
if ( flag==1 ) {
FIFO();
init();
privilege();
init();
timer();
}
}
