کد برنامه شبیه سازی cpu با اولویتی fcfs , sjf, r.r, srtf

Senmurv

عضو جدید
سلام

سوال من درباره یه برنامه شبیه سازی هست که این الگوریتمها توشه البته که مدتی که شاخ شده...

فرق این الگوریتمها خیلی خوب میدونم. اما در کد نویسی اونها وارد نیستم.

اگر کسی کد این برنامه ها رو داره در اختیار داره لطف کنه تا تو سایت بذاره(آخه برنامه خودم مشکل داره ).

لطفا کمکم کنید....

یکم سوال دارم

برنامه خودم یه ایراداتی داره مثلا تو fcfs

کد:
#include<stdio.h>

struct job
{
    char jid[10];
    int bt;
    int wt;
    int tt;
}q[10];

void first_come_first_serve(int n,int time)
{
    int clk=0,i,curr_p=0;
    int j_time=q[0].bt;
    while(clk!=time)
    {
        if(j_time==0)
        {
            curr_p++;
            j_time=q[curr_p].bt;
        }
        for(i=curr_p+1;i<n;i++)
            q[i].wt++;    
        clk++;
        j_time--;
    }
}

int main()
{
    float avg_wt=0,avg_tt=0;
    int n=0,time=0,i;
    FILE *fp;
    fp=fopen("input.txt","r");
    do
    {
        fscanf(fp,"%s %d\n",q[n].jid,&q[n].bt);
        q[n].wt=q[n].tt=0;
        time+=q[n].bt;
        n++;
    }
    while(!feof(fp));
    fclose(fp);
    first_come_first_serve(n,time);
    for(i=0;i<n;i++)
        q[i].tt=q[i].bt+q[i].wt;
    printf("JID\tBT\tWT\tTT\n");
    for(i=0;i<n;i++)
    {
        printf("%s\t%d\t%d\t%d\n",q[i].jid,q[i].bt,q[i].wt,q[i].tt);
        avg_wt+=q[i].wt;
        avg_tt+=q[i].tt;
    }
    printf("Average Waiting Time:: %.2f\n",avg_wt/n);
    printf("Average Turnaround Time:: %.2f\n",avg_tt/n);
    return 0;
}

من حالا برنامه رو میخواهم یه کاریش کنم که تعداد پردازه ها بگیره ... و اینبار در یک "لینک لیست" ذخیره کنه نه در فایل....
اما بلد نیستم.

کد برنامه های r.r خوب ننوشتم.

من پایه ام شما فقط کمک کنید.
مطمئنا پست پر باری میشه.
 

Senmurv

عضو جدید
کسی پیدا میشه بدونه ایراد برنامه نویسی من در این FCFS چیه؟؟

کد:
#include <iostream.h>
#include <process.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node{
    int id;
    int et;
    int ol;
    int cb;
    int eq;
    int xt;
}j[5],ej[5];

   int Q[50],tt_si_t=0;
   void newj();
   void meno();
   void fcfs();
   void sjf();
   void srtf();
   void rr();
   void olaviyati();

//*********************** Main Body ****************************

void main(){
    int choice;
    while(1){
      meno();
        cin>>choice;
      if (choice > 7 || choice<1){
              cout<<"\n\n\t\tWarning : Select is incorrect (1-4) ";
              getch();
      }
      switch(choice){
            case 1 :{newj();continue;}
            case 2 :{fcfs();continue;}
         case 3 :{sjf();}
         case 4 :{srtf();}
            case 5 :{rr();}
         case 6 :{olaviyati();}
         case 7 : exit(1);
       }//switch
    }
}

//********************** NewJob ************************
void newj(){
     clrscr();
     int i,k=1;
     cout<<"\n Process\t"<<"Enter\t    "<<"cpuburst\t   "<<"olaviyat";
     cout<<"\n -----------------------------------------------------";
     for(i=0;i<5;i++,k++){
        gotoxy(4,k+3);
        j[i].id=k;
        cout<<"p"<<j[i].id;
        gotoxy(18,k+3);
        cin>>j[i].et;
        gotoxy(32,k+3);
        cin>>j[i].ol;
        gotoxy(47,k+3);
        cin>>j[i].cb;
        tt_si_t += j[i].cb;
        j[i].eq = j[i].et;
        j[i].xt = j[i].cb + j[i].et;
     }
}

//********************** FCFS ***********************
void fcfs(){
   ej[5]=j[5];
    int clk=0,curr_p=0,c,i,j_time,a=0,b=0,min,time;
 /*  min=ej[0].et;
   for(a=0;a<5;a++){
       if(min>ej[a].et){
           min=ej[a].et;
         j_time=ej[a].cb;
       }
   }//for a
   time= tt_si_t + min;   */
   while(clk<=tt_si_t){

      for(a=0;a<5;a++){
          if(clk==ej[a].et){
             Q[b]=ej[a].id;
            b++;
         }//if
      }

       if(j_time==0){
             curr_p++;
             c=Q[curr_p++];
             j_time=ej[c].cb;
      }

      for(i=curr_p+1;i<5;i++){
         if(Q[i] > 0){
              c=Q[i];
             ej[c].eq++;
             ej[c].xt++;
         }
         else break;
      }
      clk++;
      j_time--;
   }//while
   for(i=0;i<5;i++){
         if(Q[i] > 0){
              c=Q[i];
            cout<<"P"<<c<<" ";
         }
         else break;
      }
}

//********************** SJF ************************
void sjf(){

}
//********************** SRTF ***********************
void srtf(){

}
//********************* R.R *************************
void rr(){

}

//******************* Olaviyati *********************
void olaviyati(){

}

//******************** Meno *************************
void meno(){
      int i;
        clrscr();
      gotoxy(5,3);
      for( i=0;i<=47;i++){cout<<char(196);}
      gotoxy(5,13);
      for( i=0;i<=47;i++){cout<<char(196);}
      int  za=4;
      for(i=0;i<9;i++,za++){gotoxy(4,za);cout<<char(179);}
      za=4;
      for(i=0;i<9;i++,za++){gotoxy(53,za);cout<<char(179);}
      gotoxy(4,3);cout<<char(218);
      gotoxy(53,3);cout<<char(191);
      gotoxy(4,13);cout<<char(192);
      gotoxy(53,13);cout<<char(217);
      gotoxy(6,4);
      gotoxy(5,2);cout<<" Simulation :";
      gotoxy(9,5);cout<<"1- New";
      gotoxy(9,7);cout<<"2- FCFS";
      gotoxy(9,9);cout<<"3- SJF";
      gotoxy(9,11);cout<<"4- SRTF";
      gotoxy(22,5);cout<<"5- R.R";
      gotoxy(22,7);cout<<"6- Olaviyati";
      gotoxy(22,9);cout<<"7- Exit";
      gotoxy(5,14);cout<<"  Select >>> ";
}
 

Farasystem

عضو جدید
کاربر ممتاز
با سلام.
خوب همونطور که حتماً می دونی FCFS یا همون FIFO ساده ترین الگوریتم زمانبندیه و به این شکل کار می کنه که First Input First Out اولین ورودی اولین خروجی خواهد بود. برای حلش فقط کافیه بر اساس زمان ورود مرتب سازی حبابی کنی. ( یا روش های دیگه ) البته من کدهات رو نگاه نکردم چون به زبان C آشنایی کامل ندارم. اتفاقاً امشب دارم الگوریتم های HRRN , MLFQ رو می نویسم. اگر خواستی خوشحال می شم با هم تبادل اطلاعات داشته باشیم در همین تاپیک.
 

wwolf

عضو جدید
دوستان این بحس خیلی مهمه بدجور نیاز بهش داریم پروژمونه یکی بزاره ببینیم جریان چیه بقیه استفاده کننن دعاش کنن .;)
 

Similar threads

بالا