Sabtu, 30 Juni 2012

MEMBUAT PROGRAM PENJADWALAN CPU MENGGUNAKAN C++

NI dia Silahkan Di compile Dulu ya sebelum Di kumpulkan Takut Salah soalnya.. karena saya sendiri belumm mencoba,,, heheheh
PROGRAM PENJADWALAN CPU FCFS DENGAN C++

// Header file for Cpu scheduling


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

class cpuschedule
{
    int n,Bu[20];
    float Twt,Awt,A[10],Wt[10],w;
public:
    //Getting the No of processes & burst time
    void Getdata();
    //First come First served Algorithm
    void Fcfs();
    //Shortest job First Algorithm
    void Sjf();
    //Shortest job First Algorithm with Preemption
    void SjfP();
    //Shortest job First Algorithm with NonPreemption
    void SjfNp();
    //Round Robin Algorithm
    void RoundRobin();
    //Priority Algorithm
    void Priority();
};
// Implementation file for Cpu scheduling

#include "cpuh.h"
//Getting no of processes and Burst time
void cpuschedule::Getdata()
{
    int i;
    cout<<"
Enter the no of processes:";
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cout<<"
Enter The BurstTime for Process p"<<i<<"=    ";
        cin>>Bu[i];
    }
}

//First come First served Algorithm
void cpuschedule::Fcfs()
{
    int i,B[10];
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
    }
    Wt[1]=0;
    for(i=2;i<=n;i++)
    {
        Wt[i]=B[i-1]+Wt[i-1];
    }

    //Calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm
void cpuschedule::Sjf()
{
    int i,j,temp,B[10];
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
    }
    for(i=n;i>=1;i--)
    {
        for(j=1;j<=n;j++)
        {
            if(B[j-1]>B[j])
            {
                temp=B[j-1];
                B[j-1]=B[j];
                B[j]=temp;
            }
        }
    }

    Wt[1]=0;
    for(i=2;i<=n;i++)
    {
        Wt[i]=B[i-1]+Wt[i-1];
    }
    //calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm with NonPreemption

void cpuschedule::SjfNp()
{
    int i,B[10],Tt=0,temp,j;
    char S[10];
    float A[10],temp1,t;
    Twt=0.0;
    w=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        S[i]='T';
        Tt=Tt+B[i];
        cout<<"
Enter the Arrival Time for"<<i<<"th process=    ";
        cin>>A[i];
    }

    for(i=n;i>=1;i--)
    {
        for(j=3;j<=n;j++)
        {
            if(B[j-1]>B[j])
            {
                temp=B[j-1];
                temp1=A[j-1];
                B[j-1]=B[j];
                A[j-1]=A[j];
                B[j]=temp;
                A[j]=temp1;
            }
        }
    }

    for(i=1;i<=n;i++)
    {
        cout<<"
p"<<i<<"    "<<B[i]<<"    "<<A[i];
    }

    //For the 1st process
        Wt[1]=0;
        w=w+B[1];
        t=w;
        S[1]='F';

        while(w<Tt)
        {
            i=2;
            while(i<=n)
            {
                if(S[i]=='T'&&A[i]<=t)
                {
                    Wt[i]=w;
                    cout<<"
WT"<<i<<"="<<Wt[i];
                    S[i]='F';
                    w=w+B[i];
                    t=w;
                    i=2;
                }
                else
                    i++;
            }
        }

        for(i=1;i<=n;i++)
            cout<<"
Wt"<<i<<"=="<<Wt[i];


        //calculating average weighting Time
        for(i=1;i<=n;i++)
            Twt=Twt+(Wt[i]-A[i]);
        Awt=Twt/n;
    cout<<"Total   Weighting Time="<<Twt<<"
";
    cout<<"Average Weighting Time="<<Awt<<"
";
}

//Priority Algorithm

void cpuschedule::Priority()
{
    int i,B[10],P[10],j;
    w=0.0;
    int max;
    Twt=0.0;
    max=1;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        cout<<"
Enter the priority for process P"<<i<<"=    ";
        cin>>P[i];
        if(max<P[i])
            max=P[i];
    }
    j=1;
    while(j<=max)
    {
        i=1;
        while(i<=n)
        {
            if(P[i]==j)
            {
                Wt[i]=w;
                w=w+B[i];
            }
            i++;
        }
        j++;
    }

    //calculating average weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"Total   Weighting Time="<<Twt<<"
";
    cout<<"Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm with Preemption
void cpuschedule::SjfP()
{
    int i,j,m,Wt[10],k,B[10],A[10],Tt=0,Wtm[10],temp;
    char S[20],start[20];
    int max=0,Time=0,min;
    float Twt=0.0,Awt;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process P"<<i<<"=    "<<B[i];
        if(B[i]>max)
            max=B[i];
        Wt[i]=0;
        S[i]='T';
        start[i]='F';
        Tt=Tt+B[i];
        cout<<"
Enter the Arrival Time for"<<i<<"th process=    ";
        cin>>A[i];
        if(A[i]>Time)
            Time=A[i];
    }
    //cout<<"
Max="<<max;
    int w=0,flag=0,t=0;
    i=1;
    while(t<Time)
    {
        if(A[i]<=t && B[i]!=0)
        {
            if(flag==0)
            {
                Wt[i]=Wt[i]+w;
                cout<<"
Wt["<<i<<"]="<<Wt[i];
            }
            B[i]=B[i]-1;
            if(B[i]==0)
                S[i]='F';
            start[i]='T';
            t++;
            w=w+1;
            if(S[i]!='F')
            {
                j=1;flag=1;
                while(j<=n && flag!=0)
                {
                    if(S[j]!='F' && B[i]>B[j] && A[j]<=t && i!=j )
                    {
                        flag=0;
                        Wt[i]=Wt[i]-w;
                        i=j;
                    }
                    else
                    {
                        flag=1;
                    }
                    j++;
                }
            }
            else
            {
                i++;
                j=1;
                while(A[j]<=t &&j<=n)
                {
                    if(B[i]>B[j] && S[j]!='F')
                    {
                        flag=0;
                        i=j;
                    }
                    j++;
                }
            }
        }
        else
            if(flag==0)
            i++;
    }


    cout<<"
Printing remaining burst time
";
    for(i=1;i<=n;i++)
        cout<<"
B["<<i<<"]="<<B[i];
    cout<<"
";

    while(w<Tt)
    {
        min=max+1;
        i=1;
        while(i<=n)
        {
            if(min>B[i] && S[i]=='T')
            {
                min=B[i];
                j=i;
            }
            i++;
        }
        i=j;
        if(w==Time && start[i]=='T')
        {
            w=w+B[i];
            S[i]='F';
        }
        else
        {
            Wt[i]=Wt[i]+w;
            w=w+B[i];
            S[i]='F';
        }
    }

cout<<"Weight info
";

    for(i=1;i<=n;i++)
        cout<<"
WT["<<i<<"]="<<Wt[i];
cout<<"after subtracting arrival time
";
    for(i=1;i<=n;i++)
    {
        Wt[i]=Wt[i]-A[i];
        cout<<"
WT["<<i<<"]="<<Wt[i];
    }
    //Calculating Average Weighting time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Average Weighting Time="<<Awt;



}

//Round Robin Algorithm
void cpuschedule::RoundRobin()
{

    int i,j,tq,k,B[10],Rrobin[10][10],count[10];
    int max=0;
    int m;
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        if(max<B[i])
            max=B[i];
        Wt[i]=0;
    }
    cout<<"
Enter the Time Quantum=";
    cin>>tq;
    //TO find the dimension of the Rrobin array
    m=max/tq+1;

    //initializing Rrobin array
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            Rrobin[i][j]=0;
        }
    }
    //placing value in the Rrobin array
    i=1;
    while(i<=n)
    {
        j=1;
        while(B[i]>0)
        {
            if(B[i]>=tq)
            {
                B[i]=B[i]-tq;
                Rrobin[i][j]=tq;
                j++;
            }
            else
            {
                Rrobin[i][j]=B[i];
                B[i]=0;
                j++;
            }
        }
        count[i]=j-1;
        i++;
    }

    cout<<"Display
";
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<"Rr["<<i<<","<<j<<"]="<<Rrobin[i][j];
            cout<<"    ";
        }
        cout<<"
";
    }
    //calculating weighting time
    int x=1;
    i=1;
    while(x<=n)
    {
        for(int a=1;a<x;a++)
        {
            Wt[x]=Wt[x]+Rrobin[a][i];
        }
        i=1;
        int z=x;
        j=count[z];
        k=1;
        while(k<=j-1)
        {
            if(i==n+1)
            {
                i=1;
                k++;
            }
            else
            {
                if(i!=z)
                {
                    Wt[z]=Wt[z]+Rrobin[i][k];
                }
                i++;
            }
        }
        x++;
    }
    for(i=1;i<=n;i++)
        cout<<"
Weighting Time for process P"<<i<<"="<<Wt[i];

    //calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Application file for cpu Scheduling
#include "cpuh.h"

void main()
{
    int ch,cho;
    cpuschedule c;
    do
    {
        cout<<"                 MENU
";
        cout<<"1.Getting BurstTime
";
        cout<<"2.FirstComeFirstServed
";
        cout<<"3.ShortestJobFirst
";
        cout<<"4.RoundRobin
";
        cout<<"5.Priority
";
        cout<<"6.EXIT
";
        cout<<"Enter your choice
";
        cin>>ch;
        switch(ch)
        {
        case 1:
            c.Getdata();
            break;
        case 2:
            cout<<"FIRST COME FIRST SERVED SCHEDULING
";
            c.Fcfs();
            break;
        case 3:
            cout<<"SHORTEST JOB FIRST SCHEDULING
";
            do
            {
                cout<<"1.SJF-Normel
";
                cout<<"2.SJF-Preemptive
";
                cout<<"3.SJF-NonPreemptive
";
                cout<<"Enter your choice
";
                cin>>cho;
                switch(cho)
                {
                case 1:
                    c.Sjf();
                    break;
                case 2:
                    c.SjfP();
                    break;
                case 3:
                    c.SjfNp();
                    break;
                }
            }while(cho<=3);
            break;
        case 4:
            cout<<"ROUND ROBIN SCHEDULING
";
            c.RoundRobin();
            break;
        case 5:
            cout<<"PRIORITY SCHEDULING
";
            c.Priority();
            break;
        case 6:
            break;
        }
    }while(ch<=5);
}


      

0 komentar:

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More