天天看點

程序排程FIFO C語言實作,c++ 程序排程模拟系統(FIFO,優先數排程算法,時間片輪轉排程算法)...

[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();

}

}

程式排程FIFO C語言實作,c++ 程式排程模拟系統(FIFO,優先數排程算法,時間片輪轉排程算法)...