Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Các thuật toán về lập lịch cho CPU (FCFS,SJF,SRT,RR)

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    2

    Wink Các thuật toán về lập lịch cho CPU (FCFS,SJF,SRT,RR)

    Các bác cố gắng giúp em vói nhé, em đang học môn hệ điều hành gặp mấy thuật toán này khó quá mong các bác giúp em với nhé

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    5

    Red face Hay quá nhỉ

    thuật toán FCFS
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<stdlib.h>
    4. #define d 10
    5. #define true 1
    6. #define false 0
    7.  
    8. typedef unsigned char bool;
    9.  
    10. int  td[100],tc[100],kt[100],cpu[100],p[100],luu[100];
    11. int  i,j,tam,min,sum;
    12. bool finish[100];
    13. float tong,kq;
    14. int  n;
    15. void dq(int k)
    16. {
    17. int i;
    18. min=1000;
    19.     for (i=k;i<=n;i++)
    20.      if ((!finish[i])&&(td[i]<min)) min=td[i];
    21.     for (i=k;i<=n;i++)
    22.     {
    23.        if ((td[i]<=tam)&&(!finish[i])&&(td[i]==min))
    24.     {
    25.      kt[i]=tam+cpu[i];
    26.      finish[k]=true;
    27.      tam=tam+cpu[i];
    28.      sum=sum-cpu[i];
    29.      cpu[i]=0;
    30.     }
    31.        if ((i==n)&&(sum>0)) dq(1);
    32.      if(sum==0) exit;
    33.      if ((i<=n-1)&&(sum>0)) dq(i+1);
    34.     }
    35.  
    36.     if(sum>0)  dq(1);
    37. }
    38. void nhap()
    39. {
    40.   outtextxy(300,5,"THUAT TOAN FCFS ");
    41.   outtextxy(200,20,"Thuc Hien Tran Gia Dung CT12A  ");
    42.   outtextxy(280,30,"&Tran Van Thieu CT12A  ");  
    43. printf("so tien trinh N= ");scanf("%d",&n);
    44.  gotoxy(2,3); printf("Thoi gian den: ");
    45.  for (i=1;i<=n;i++)
    46.   {
    47.    gotoxy(15+3*i,3);
    48.    scanf("%d",&td[i]);
    49.   }
    50.  gotoxy(2,4); printf("Thoi gian CPU: ");
    51.  for (i=1;i<=n;i++)
    52.   {
    53.     gotoxy(15+3*i,4); scanf("%d",&cpu[i]);
    54.     luu[i]=cpu[i];
    55.     finish[i]=false;
    56.   }
    57. }
    58. void inra()
    59. {
    60.  tam=1000;sum=0;
    61.   for (i=1;i<=n;i++)
    62.    {
    63.     sum=sum+cpu[i];
    64.     if (td[i]<tam)  tam=td[i];
    65.    }
    66.    dq(1);
    67.    gotoxy(4,6); printf("process ");
    68.    for (i=1;i<=n;i++)
    69.     {
    70.      gotoxy(4*i+d,6);printf("P%d",i);
    71.     }
    72.     gotoxy(4,8);printf("Tg cho   ");
    73.     for (i=1;i<=n;i++)
    74.      {
    75.       tong=tong+kt[i]-(luu[i]+td[i]);
    76.            gotoxy(4*i+d,8);printf("%d",kt[i]-(luu[i]+td[i]));
    77.      }
    78.     gotoxy(37,8);printf("\t===>TGTB= %f",tong/n);
    79.     gotoxy(4,10);printf("TG Luu   ");
    80.     for (i=1;i<=n;i++)
    81.      {
    82.       gotoxy(4*i+d,10);printf("%d",kt[i]-td[i]);
    83.      }
    84.     gotoxy(4,12);printf("TGKT    ");
    85.     for (i=1;i<=n;i++)
    86.     {
    87.      gotoxy(4*i+d,12); printf("%d",kt[i]);
    88.       kq=kt[n];
    89.     }
    90.      gotoxy(37,12);printf("\t===>Thong luong= %f",kq/n);
    91.  
    92. }
    93. void main()
    94. {
    95.  clrscr();
    96.  nhap();
    97.  inra();
    98.   getch();
    99. }
    100. /*vi du
    101.  6
    102. 0 2 5 7 8 10
    103. 5 7 8 4 6 3  */

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi truong_tp_89 Xem bài viết
    Các bác cố gắng giúp em vói nhé, em đang học môn hệ điều hành gặp mấy thuật toán này khó quá mong các bác giúp em với nhé
    thuật toán RR
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<stdlib.h>
    4. #define d 10
    5. #define true 1
    6. #define false 0
    7. typedef unsigned char bool;
    8. int td[100],tc[100],kt[100],cpu[100],p[100],luu[100];
    9.     int i,j,tam,min,sum;
    10.     bool finish[100];
    11.     float tong,kq;
    12.     int n,q;
    13. void dq(int k)
    14. {
    15.  int i;
    16.  min=1000;
    17.     for(i=k;i<=n;i++)
    18.      if ((!finish[i])&&(td[i]<min)) min=td[i];
    19.     for(i=k;i<=n;i++)
    20.     {
    21.        if ((td[i]<=tam)&&(!finish[i])&&(td[i]==min))
    22.      {
    23.        if (cpu[i]<q)
    24.        {
    25.         kt[i]=tam+cpu[i];
    26.         finish[k]=true;
    27.         tam=tam+cpu[i];
    28.         sum=sum-cpu[i];
    29.         cpu[i]=0;
    30.         }
    31.       else
    32.       if (cpu[i]>=q)
    33.       {
    34.         cpu[i]=cpu[i]-q;
    35.         if (cpu[i]==0)
    36.         {
    37.          kt[i]=tam+q;
    38.          finish[i]=true;
    39.         }
    40.         tam=tam+q;
    41.         sum=sum-q;
    42.       }
    43.      if ((i==n)&&(sum>0)) dq(1);
    44.      if(sum==0) exit;
    45.      if ((i<=n-1)&&(sum>0)) dq(i+1);
    46.        }
    47.   }
    48.        if (sum>0)  dq(1);
    49. }
    50. void nhap()
    51. {
    52.  outtextxy(300,5,"THUAT TOAN RR ");
    53.  outtextxy(200,20,"Thuc Hien Tran van Thieu CT12A  ");  
    54.  printf("so tien trinh N= ");scanf("%d",&n);
    55.  printf("nhap vao q:= ");scanf("%d",&q);
    56.  gotoxy(2,3); printf("Thoi gian den: ");
    57.  for(i=1;i<=n;i++)
    58.  {
    59.   gotoxy(15+3*i,3); scanf("%d",&td[i]);
    60.  }
    61.  gotoxy(2,4); printf("Thoi gian CPU: ");
    62.  for(i=1;i<=n;i++)
    63.  {
    64.        gotoxy(15+3*i,4);scanf("%d",&cpu[i]);
    65.        luu[i]=cpu[i];
    66.        finish[i]=false;
    67.  }
    68. }
    69. void inra()
    70. {
    71. tam=1000;sum=0;
    72. for(i=1;i<=n;i++)
    73. {
    74.     sum=sum+cpu[i];
    75.     if (td[i]<tam)  tam=td[i];
    76. }
    77. dq(1);
    78. gotoxy(4,6);printf("process ");
    79. for(i=1;i<=n;i++)
    80. {
    81.  gotoxy(4*i+d,6);printf("P%d",i);
    82. }
    83. gotoxy(4,8);printf("Tg cho   ");
    84. for(i=1;i<=n;i++)
    85. {
    86.  tong=tong+kt[i]-(luu[i]+td[i]);
    87.  gotoxy(4*i+d,8);printf("%d",kt[i]-(luu[i]+td[i]));
    88. }
    89. gotoxy(37,8);printf("===>TGTB= %3.4f",tong/n);
    90. gotoxy(4,10);printf("TG Luu   ");
    91. for(i=1;i<=n;i++)
    92. {
    93.  gotoxy(4*i+d,10);printf("%d",kt[i]-td[i]);
    94. }
    95. gotoxy(4,12);printf("TGKT    ");
    96.  
    97. for (i=1;i<=n;i++)
    98.     {
    99.      gotoxy(4*i+d,12); printf("%d",kt[i]);
    100.       kq=kt[n];
    101.     }
    102.      gotoxy(37,12);printf("\t===>Thong luong= %f",kq/n);
    103. }void main()
    104. {
    105.  clrscr();
    106.  nhap();
    107.  inra();
    108.  
    109. getch();
    110. }
    111. /*vi du
    112.  6
    113. 0 2 5 7 8 10
    114. 5 7 8 4 6 3  */

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    1

    hai cái này tớ cũng làm rùi. khó là 2 cái kia cơ ai giai coi hộ cái. tui chỉ làm đựoc 1 vài trường hợp nhỏ thui

  5. #5
    Ngày gia nhập
    05 2009
    Bài viết
    1

    Thuật toán SJF, up lên cho pm nào muốn tham khảo:

    C Code:
    1. /*GIAI THUAT DINH THOI SJFS
    2. */
    3. #include <stdio.h>
    4. #include <conio.h>
    5. typedef struct PR{  char ten[12];
    6.             int tvao;
    7.             int txly;
    8.             int tcho;
    9.             int tluu;
    10.             int stt;
    11.             int dut;
    12.             } PROCESS;
    13. PROCESS a[20];
    14. int n, j, ok[20];
    15. void In(PROCESS a[20]);
    16. void Sjfs();
    17. void Fuctions();
    18. //Main()
    19. void main()
    20. {
    21.     Fuctions();
    22. }
    23. //Fuctions()
    24. void Fuctions()
    25. {
    26.     do{
    27.         clrscr();
    28.         printf("\n\t----------------GIAI THUAT DINH THOI SJFS---------------\n\n");
    29.         printf("\n So luong tien trinh: n = ");
    30.         scanf("%d",&n);
    31.     }while((n<=0)||(n>20));
    32.     In(a);
    33.     Sjfs();
    34.     getch();
    35. }
    36. //In()
    37. void In(PROCESS a[20])
    38. {
    39.     int i=1;
    40.     while (i<=n)
    41.     {
    42.         fflush(stdin);
    43.         printf("\n\tTen tien trinh : ");
    44.         gets(a[i].ten);
    45.         printf("\tThoi gian xu ly: ");
    46.         scanf("%d",&a[i].txly);
    47.         i++;
    48.     }
    49. }
    50. //Sjfs()
    51. void Sjfs()
    52. {
    53.     int i,t,d,id,s1=0,s2=0;
    54.     PROCESS *k=a;
    55.     for (i=0; i<=n;i++) ok[i]=0;
    56.     ok[0]=-1;
    57.     t=k[0].txly;
    58.     k[0].tcho=0;
    59.     k[0].stt=1;
    60.     k[0].tluu=t;
    61.     j=1;
    62.     while(j<=n)
    63.     {
    64.         d=0;
    65.         int tmin=99;
    66.         for(i=1; i<=n; i++)
    67.             if(ok[i]!=-1 &&k[i].tvao<=t)
    68.             {
    69.                 d++;
    70.                 ok[i]=1;
    71.             }
    72.         if (d!=0)
    73.         {
    74.             d--;
    75.             for (i=1; i<=n; i++)
    76.                 if (ok[i]==1 && k[i].txly<tmin)
    77.                 {
    78.                     tmin=k[i].txly;
    79.                     id=i;
    80.                 }
    81.             ok[id]=-1;
    82.             k[id].stt=j;
    83.             k[id].tcho=t-k[id].tvao;
    84.             t=t+k[id].txly;
    85.             k[id].tluu=k[id].tcho + k[id].txly;
    86.             j++;
    87.         }
    88.         else
    89.         {
    90.             for (i=1; i<=n; i++)
    91.             if (ok[i]==0 && k[i].txly<tmin)
    92.             {
    93.                 tmin=k[i].txly;
    94.                 id=i;
    95.             }
    96.             ok[id]=-1;
    97.             k[id].stt=j;
    98.             k[id].tcho=0;
    99.             t=k[id].tvao+k[id].txly;
    100.             k[id].tluu=k[id].tcho + k[id].txly;
    101.             j++;
    102.         }
    103.     };
    104.  
    105.     for(i=1; i<n;i++)
    106.         for(j=i+1;j<=n;j++)
    107.             if (k[i].stt>k[j].stt)
    108.             {
    109.                 PROCESS tg=k[i];
    110.                 k[i]=k[j];
    111.                 k[j]=tg;
    112.             }
    113.     clrscr();
    114.     printf("\n\t----------------GIAI THUAT DINH THOI SJFS---------------\n\n");
    115.     printf("\n\t\t|TT  | Ten TT | SD CPU | Tgxly| TgCho|\n");
    116.     printf("\t\t----------------------------------------");
    117.     for (i=1; i<=n; i++)
    118.     {
    119.         s1=s1+k[i].tcho;
    120.         s2=s2+k[i].tluu;
    121.         printf("\n\t\t| %2d | %6s | %6d | %4d | %4d |",
    122.             i,k[i].ten,k[i].txly,k[i].tluu,k[i].tcho);
    123.     }
    124.     getch();
    125. }

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    14

    Mặc định Các thuật toán về lập lịch cho CPU (FCFS,SJF,SRT,RR)

    @asuka123456:
    bạn ơi, giải thích mình rõ các td[100],tc[100],kt[100],cpu[100],p[100],luu[100] và giới thiệu sơ lược cho mình hiểu hơn về đoạn code FCFS với, cảm ơn bạn nhiều

  7. #7
    Ngày gia nhập
    09 2010
    Nơi ở
    Hải Phòng city
    Bài viết
    527

    up cho vài cuốn sách lên với
    chứ đọc code không thể hiểu nổi thế nào cả.
    thanks.
    ****************************************
    *****Trường Sa, Hoàng Sa là của Việt Nam*****
    ****************************************

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Mọi người ơi cho em hỏi lệnh này gotoxy(4,12) trong c++ là có nghĩa gì thế,nếu chuyển sang c# thì phải làm thế nào,em chỉ học c# thôi nên đọc đoạn này em không hiểu lắm.
    Mong mọi người giải thích giùm em với.
    Cảm ơn mọi người.

  9. #9
    Ngày gia nhập
    06 2009
    Nơi ở
    Hà Nội
    Bài viết
    11

    Bài của bạn cái chỗ void Sjfs() không có kiểu trả về à. Khi mình code lại lên Turbo C thì nó báo lỗi declaration syntax erro! :(

  10. #10
    Ngày gia nhập
    06 2009
    Nơi ở
    Hà Nội
    Bài viết
    11

    Mặc định code không chạy :D

    Trích dẫn Nguyên bản được gửi bởi asuka123456 Xem bài viết
    thuật toán RR
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<stdlib.h>
    4. #define d 10
    5. #define true 1
    6. #define false 0
    7. typedef unsigned char bool;
    8. int td[100],tc[100],kt[100],cpu[100],p[100],luu[100];
    9.     int i,j,tam,min,sum;
    10.     bool finish[100];
    11.     float tong,kq;
    12.     int n,q;
    13. void dq(int k)
    14. {
    15.  int i;
    16.  min=1000;
    17.     for(i=k;i<=n;i++)
    18.      if ((!finish[i])&&(td[i]<min)) min=td[i];
    19.     for(i=k;i<=n;i++)
    20.     {
    21.        if ((td[i]<=tam)&&(!finish[i])&&(td[i]==min))
    22.      {
    23.        if (cpu[i]<q)
    24.        {
    25.         kt[i]=tam+cpu[i];
    26.         finish[k]=true;
    27.         tam=tam+cpu[i];
    28.         sum=sum-cpu[i];
    29.         cpu[i]=0;
    30.         }
    31.       else
    32.       if (cpu[i]>=q)
    33.       {
    34.         cpu[i]=cpu[i]-q;
    35.         if (cpu[i]==0)
    36.         {
    37.          kt[i]=tam+q;
    38.          finish[i]=true;
    39.         }
    40.         tam=tam+q;
    41.         sum=sum-q;
    42.       }
    43.      if ((i==n)&&(sum>0)) dq(1);
    44.      if(sum==0) exit;
    45.      if ((i<=n-1)&&(sum>0)) dq(i+1);
    46.        }
    47.   }
    48.        if (sum>0)  dq(1);
    49. }
    50. void nhap()
    51. {
    52.  outtextxy(300,5,"THUAT TOAN RR ");
    53.  outtextxy(200,20,"Thuc Hien Tran van Thieu CT12A  ");  
    54.  printf("so tien trinh N= ");scanf("%d",&n);
    55.  printf("nhap vao q:= ");scanf("%d",&q);
    56.  gotoxy(2,3); printf("Thoi gian den: ");
    57.  for(i=1;i<=n;i++)
    58.  {
    59.   gotoxy(15+3*i,3); scanf("%d",&td[i]);
    60.  }
    61.  gotoxy(2,4); printf("Thoi gian CPU: ");
    62.  for(i=1;i<=n;i++)
    63.  {
    64.        gotoxy(15+3*i,4);scanf("%d",&cpu[i]);
    65.        luu[i]=cpu[i];
    66.        finish[i]=false;
    67.  }
    68. }
    69. void inra()
    70. {
    71. tam=1000;sum=0;
    72. for(i=1;i<=n;i++)
    73. {
    74.     sum=sum+cpu[i];
    75.     if (td[i]<tam)  tam=td[i];
    76. }
    77. dq(1);
    78. gotoxy(4,6);printf("process ");
    79. for(i=1;i<=n;i++)
    80. {
    81.  gotoxy(4*i+d,6);printf("P%d",i);
    82. }
    83. gotoxy(4,8);printf("Tg cho   ");
    84. for(i=1;i<=n;i++)
    85. {
    86.  tong=tong+kt[i]-(luu[i]+td[i]);
    87.  gotoxy(4*i+d,8);printf("%d",kt[i]-(luu[i]+td[i]));
    88. }
    89. gotoxy(37,8);printf("===>TGTB= %3.4f",tong/n);
    90. gotoxy(4,10);printf("TG Luu   ");
    91. for(i=1;i<=n;i++)
    92. {
    93.  gotoxy(4*i+d,10);printf("%d",kt[i]-td[i]);
    94. }
    95. gotoxy(4,12);printf("TGKT    ");
    96.  
    97. for (i=1;i<=n;i++)
    98.     {
    99.      gotoxy(4*i+d,12); printf("%d",kt[i]);
    100.       kq=kt[n];
    101.     }
    102.      gotoxy(37,12);printf("\t===>Thong luong= %f",kq/n);
    103. }void main()
    104. {
    105.  clrscr();
    106.  nhap();
    107.  inra();
    108.  
    109. getch();
    110. }
    111. /*vi du
    112.  6
    113. 0 2 5 7 8 10
    114. 5 7 8 4 6 3  */
    cái RR này mình gõ lại code cũng không chạy :( lỗi cái prototype dq(1). Ai giải thích giúp cái

Các đề tài tương tự

  1. Bài tập C++ Bài tập về thuật toán FCFS này làm thế nào đây ??
    Gửi bởi tuansonyu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 24-11-2013, 09:32 PM
  2. Lập trình C Giải thuật mô phỏng FCFS bằng ngôn ngữ C?
    Gửi bởi heaven_love9491 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 22-03-2013, 08:09 PM
  3. Dịch vụ kế toán: Báo cáo thuế, dịch vụ tư vấn thuế, báo cáo thuế tncn vnnp
    Gửi bởi ecomvnnp01 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 16-02-2012, 11:07 AM
  4. Lập trình C++ hướng dẫn cách vẽ giản đồ Gantt lập lịch cho Cpu bằng FCFS
    Gửi bởi snoit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 08-12-2011, 09:42 PM
  5. Thuật toán FCFS (First Come First Served) : vẽ Sơ đồ gantt
    Gửi bởi quangbinhit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 26-05-2011, 11:28 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn