进程调度FIFO C语言实现,c++ 进程调度模拟系统(FIFO,优先数调度算法,时间片轮转调度算法)...

该博客介绍了如何用C++编程实现操作系统中的三种调度算法:先进先出(FIFO)、优先级调度和时间片轮转。通过定义进程控制块结构体,初始化数据,读取输入数据,然后分别执行三种调度策略,计算并输出每个进程的等待时间,展示了这些算法的执行流程。
摘要由CSDN通过智能技术生成

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

}

}

694748ed64b9390909c0d88230893790.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值