【问题标题】:FCFS CPU Scheduling program in C++C++中的FCFS CPU调度程序
【发布时间】:2013-10-21 11:30:32
【问题描述】:

我正在尝试在 c++ 中实现 FCFS CPU 调度。我有以下代码,它运行时没有错误,但在某些数字上给了我“垃圾数据”,例如除第一个计算的所有进程的等待时间、响应时间和周转时间的值

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class ProcessInfo
{
public:
    string ProcessID;
    int BurstTime;
    int Arrival;

    int WaitingTime;
    int ResponseTime;
    int TurnaroundTime;
};

int main()
{
    ProcessInfo P1, P2, P3 = ProcessInfo();

    ProcessInfo Array[3] = {P1, P2, P3};

    for(int i = 0; i < 3; i++)
    {
        cout<<"Please enter Process ID for process "<<i<<endl;
        cin>>Array[i].ProcessID;

        cout<<"Please enter Burst Time for process "<<i<<endl;
        cin>>Array[i].BurstTime;

        cout<<"Please enter Arrival Time for process "<<i<<endl;
        cin>>Array[i].Arrival;
    }

    if (Array[0].Arrival < Array[1].Arrival && Array[0].Arrival < Array[2].Arrival)
    {
        if (Array[1].Arrival < Array[2].Arrival)
        {
            P1.WaitingTime = 0;
            P1.ResponseTime = 0;
            P1.TurnaroundTime = P1.BurstTime;

            P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival);
            P2.ResponseTime = 0;
            P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;

            P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival);
            P3.ResponseTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival) ;
            P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;

            cout<<"Order of processes is: P1, P2, P3"<<endl;

            cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
            cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
            cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;

            cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
            cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
            cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;

            cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
            cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
            cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
        }
        else
            if (Array[2].Arrival < Array[1].Arrival)
            {
                P1.WaitingTime = 0;
                P1.ResponseTime = 0;
                P1.TurnaroundTime = P1.BurstTime;

                P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival);
                P3.ResponseTime = P3.WaitingTime;
                P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;

                P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival);
                P2.ResponseTime = P2.WaitingTime;
                P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;

                cout<<"Order of processes is: P1, P3, P2"<<endl;

                cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
                cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
                cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;

                cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
                cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
                cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;

                cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
                cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
                cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
            }
    }

    else
        if(Array[1].Arrival < Array[0].Arrival && Array[1].Arrival < Array[2].Arrival)
        {
            if (Array[2].Arrival < Array[0].Arrival)
            {
                P2.WaitingTime = 0;
                P2.ResponseTime = 0;
                P2.TurnaroundTime = P2.BurstTime;

                P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival);
                P3.ResponseTime = P3.WaitingTime;
                P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;

                P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival);
                P1.ResponseTime = P1.WaitingTime;
                P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;

                cout<<"Order of processes is: P2, P3, P1"<<endl;

                cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
                cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
                cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;

                cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
                cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
                cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;

                cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
                cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
                cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
            }
            else
                if (Array[0].Arrival < Array[2].Arrival)
                {
                    P2.WaitingTime = 0;
                    P2.ResponseTime = 0;
                    P2.TurnaroundTime = P2.BurstTime;

                    P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival);
                    P1.ResponseTime = P1.WaitingTime;
                    P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;

                    P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival);
                    P3.ResponseTime = P3.WaitingTime;
                    P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;

                    cout<<"Order of processes is: P2, P1, P3"<<endl;

                    cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
                    cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
                    cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;

                    cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
                    cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
                    cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;

                    cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
                    cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
                    cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;

                }
        }
        else

            if(Array[2].Arrival < Array[1].Arrival && Array[2].Arrival < Array[0].Arrival)
            {
                if (Array[1].Arrival < Array[0].Arrival)
                {
                    P3.WaitingTime = 0;
                    P3.ResponseTime = 0;
                    P3.TurnaroundTime = P1.BurstTime;

                    P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival);
                    P2.ResponseTime = P2.WaitingTime;
                    P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;

                    P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival);
                    P1.ResponseTime = P1.WaitingTime;
                    P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;

                    cout<<"Order of processes is: P3, P2, P1"<<endl;

                    cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
                    cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
                    cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;

                    cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
                    cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
                    cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;

                    cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
                    cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
                    cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
                }
                else
                    if (Array[0].Arrival < Array[1].Arrival)
                    {
                        P3.WaitingTime = 0;
                        P3.ResponseTime = 0;
                        P3.TurnaroundTime = P1.BurstTime;

                        P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival);
                        P1.ResponseTime = P1.WaitingTime;
                        P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;

                        P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival);
                        P2.ResponseTime = P2.WaitingTime;
                        P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;

                        cout<<"Order of processes is: P3, P1, P2"<<endl;

                        cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
                        cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
                        cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;

                        cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
                        cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
                        cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;

                        cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
                        cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
                        cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
                    }
            }



    }

【问题讨论】:

    标签: c++ cpu scheduling


    【解决方案1】:

    你没有初始化变量P1P2,所以这些结构的内容是未定义的。

    这将使操作像

    P1.TurnaroundTime = P1.BurstTime;
    

    也未定义。

    如果你想要好的起始值,添加一个默认构造函数。

    【讨论】:

    • 我添加了以下默认构造函数
    • 类 ProcessInfo { public: string ProcessID;整数突发时间;国际到达;整数等待时间;诠释响应时间;整数周转时间; ProcessInfo() { ProcessID = " ";突发时间 = 0;到达 = 0;等待时间 = 0;响应时间 = 0;周转时间 = 0; } };现在它给了我所有值的零
    • @Scorps 您可能希望在调试器中逐行执行代码,以查看它是否执行您想要的操作并设置您想要的值。
    【解决方案2】:

    不要使用P1P2P3 进行计算。而是使用Array[0]Array[1]Array[2]

    【讨论】:

      【解决方案3】:
      #include<iostream>
      
      #include<cstdio>
      
      #include<cstdlib>
      
      int process,*q,i,slice,a=0,at2[10],to[10];
      
      void takeprocess()
      
      {
      
          printf("Enter the total number of process\n");
      
          scanf("%d",&process);
      
      
      }
      
      
      void takecputime()
      
      {
      
          q=(int*)calloc(process,(sizeof(int)));
      
      for(i=1;i<=process;i++)
      
      {
      
      printf("Enter the CPU burst time for the process P%d : ",i);
      
         scanf("%d",q+i);
      
         to[i]=at2[i]=*(q+i);
      
      }
      
      }
      
      void checkfcfs()
      
      {
       int wt1[process];
      
          for(i=1;i<process;i++)
      
          {
      
              a=wt1[i]=*(q+i)+a;
      
          }
      
          a=0;
      
          printf("the waiting time for process P1 is : 0\n");
      
          for(i=1;i<process;i++)
      
          {
      
         a=wt1[i]+a;
      
              printf("the waiting time for process P%d is : %d\n",i+1,wt1[i]);
          }
      
          a=a/process;
      
          printf("the average waiting time for processes are :%d\n",a);
      
          printf("the sequence of the processes are as follows\n");
      
          for(i=1;i<=process;i++)
      
          {
      
              printf("P%d\n",i);
      
          }
      
      
      }
      
      using namespace std;
      
      int main()
      
      {
      
                   takeprocess();
      
                   takecputime();
      
                   checkfcfs();
      
                   return 0;
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-24
        • 2011-01-14
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        • 2021-11-19
        相关资源
        最近更新 更多