Member 13525348 Ответов: 0

Может ли кто-нибудь помочь с алгоритмом C++, который вычисляет циклическую программу планирования процессора с переключением контекста?


У меня уже есть рабочий код, который вычисляет время ожидания и время поворота(я скопировал его ниже с этого веб-сайта:http://ankurm.com/implementing-round-robin-scheduling-algorithm-in-c/ thanks btw), но у меня нет такого, который также вычисляет его с помощью переключения контекста. Пожалуйста, помогите, заранее спасибо.

Что я уже пробовал:

#include<iostream.h>
#include<conio.h>

struct process
{
    int no;
    int at,et,wt,tt;
    int tet;
    int t;
};

void main()
{

clrscr();

    process p[200];
    int i,j,k;
    cout<<"\n\n Enter No of Processes:";
    int np;
    cin>>np;


    for (i=0;i<np;i++)
    {
	cout<<"\n Enter Execution time of process"<<i+1<<":";
	cin>>p[i].et;
	p[i].tet=p[i].et;
	p[i].at=p[i].t=p[i].tt=p[i].wt=0;
	p[i].no=i+1;

    }

    cout<<"\n Enter Time Quantum:";
    int q;
    cin>>q;

    cout<<"\n Entered Data";
    cout<<"\n Process\tET";
    for(i=0;i<np;i++)
    {
	cout<<"\n "<<p[i].no<<"\t"<<"\t"<<p[i].et;
    }

    int totaltime=0;
    for(i=0;i<np;i++)
    {
	totaltime+=p[i].et;
    }

    i=0;
    k=0;

    int rrg[99];
    for(j=0;j<totaltime;j++)
    {
	if((k==0)&&(p[i].et!=0))
	{
	    p[i].wt=j;
	    if((p[i].t!=0))
	    {
		p[i].wt-=q*p[i].t;
	    }
	}
	if((p[i].et!=0)&&(k!=q))
	{
	    rrg[j]=p[i].no;
	    p[i].et-=1;
	    k++;
	}
	else
	{
	    if((k==q)&&(p[i].et!=0))
	    {
		p[i].t+=1;
	    }
	    i=i+1;
	    if(i==np)
	    {
		i=0;
	    }

		k=0;
	    j=j-1;
	}
    }

    /*
    for(j=0;j<totaltime;j++)
    {
	cout<<"\n"<<rrg[j];
    }
    */

    int twt=0;
    int ttt=0;
    cout<<"\n Result Of Round Robin";
    cout<<"\n PNo\tET\tWT\tTT";
    for(i=0;i<np;i++)
    {
	int n;
	p[i].tt=p[i].wt+p[i].tet;
	ttt+=p[i].tt;
	twt+=p[i].wt+n;
	cout<<"\n "<<p[i].no<<"\t"<<p[i].tet<<"\t"<<p[i].wt<<"\t"<<p[i].tt;
    }

    cout<<"\n Average Waiting Time:"<<(float)twt/np;
    cout<<"\n Average Turn Around Time:"<<(float)ttt/np;

    getch();
}

0 Ответов