作业调度算法

程序实现了作业调度算法中的FCFS算法和SJF算法.

FCFS算法:优先考虑系统中等待时间长的作业 ,而不管该作业所需执行时间长短.说的通俗点 , 哪个作业先提交 , 哪个作业先进内存.这是对作业调度而言 , 同样 , FCFS算法也可以用于进程调度 , 此时 谁先进内存的谁先上cpu.

那么这样一来就会出现这样的问题 : 如果一个作业所需运行时间很长(长作业) , 并且它先提交给系统 . 那么该作业就要长时间的占用cpu , 而之后来到的短作业 , 即便它占用cpu的时间很短也上不了cpu.在单位时间内 , cpu上执行的作业数会变少.系统吞吐量降低.

为了解决这种情况 , 采用SJF算法. SJF算法优先考虑短作业 , 即:不管作业的提交时间 , 作业服务时间短的先上cpu . 这样一来,系统吞吐量提高了.

这套代码基于链表 , 链表的一个节点模拟一个作业说明书.

FCFS和SJF两套算法是由void ListSort2(LinkList  &L) 和 void ListSort(LinkList  &L)模拟的.

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<stdlib.h>  
  3. using namespace std;  
  4.   
  5. typedef struct LNode_JCB  
  6. {  
  7.     int arrive_time;  
  8.     int serve_time;  
  9.     int finish_time;  
  10.     int turnover_time;  
  11.     struct LNode_JCB *next;  
  12. }LNode_JCB , *LinkList;  
  13.   
  14. int main()  
  15. {  
  16.     //声明   
  17.     void  CreateList_L(LinkList &L , int n);  
  18.     void  ListSort(LinkList &L);  
  19.     void simulate_cpu_dispatch(LinkList &L);  
  20.     void ListSort2(LinkList  &L);  
  21.     void FCFS(LinkList &L , int n);  
  22.     void SJF(LinkList &L , int n);  
  23.     LinkList L;  int n=5;  
  24.       
  25.     //先来先服务   
  26.     FCFS(L , n);  
  27.     //短作业优先   
  28.     SJF(L,n);  
  29.     return 0;  
  30. }  
  31.   
  32. void   CreateList_L(LinkList &L , int n)  
  33. {  
  34.     L = (LinkList)malloc(sizeof(LNode_JCB));  
  35.     L->next = NULL;  
  36.     for(int i=n ; i>0 ; --i)  
  37.     {  
  38.         LinkList p = (LinkList)malloc(sizeof(LNode_JCB));  
  39.         cout<<"***************************输入第"<<n-i+1<<"的作业到达时间"<<endl;  
  40.         cout<<"                            ";  
  41.         cin>>p->arrive_time;  
  42.         cout<<"***************************输入第"<<n-i+1<<"个作业的服务时间"<<endl;  
  43.         cout<<"                            ";  
  44.         cin>>p->serve_time;  
  45.         p->next = L->next;  
  46.         L->next = p;  
  47.     }  
  48. }  
  49.   
  50. /* 
  51. void  ListSort(LinkList &L , LinkList &u) 
  52. { 
  53.     LinkList m; 
  54.     while(L->next) 
  55.     { 
  56.         if(L->time > L->next->time) 
  57.         { 
  58.             u = L->next; 
  59.             L->next->next = m; 
  60.             L->next->next =L; 
  61.             L->next = m; 
  62.         } 
  63.         else 
  64.         { 
  65.             u = L; 
  66.             L = L->next; 
  67.         } 
  68.     } 
  69. } 
  70. */  
  71.   
  72. void ListSort(LinkList  &L)  //单链表排序    基于先来先服务算法排序   
  73. {    
  74.     LinkList p, q;    
  75.     int t;    
  76.     p = L->next;    
  77.     while (p)    
  78.     {    
  79.         q = p->next;    
  80.         while (q)    
  81.         {    
  82.             if (p->arrive_time > q->arrive_time)    
  83.             {    
  84.                 t = p->arrive_time;    
  85.                 p->arrive_time = q->arrive_time;    
  86.                 q->arrive_time = t;  
  87.                   
  88.                 t = p->serve_time;  //在排序时对服务时间也要交换   
  89.                 p->serve_time = q->serve_time;  
  90.                 q->serve_time = t;    
  91.             }    
  92.             q = q->next;    
  93.         }    
  94.         p = p->next;    
  95.     }    
  96. }    
  97.   
  98.   
  99. void ListSort2(LinkList  &L)  //单链表排序   基于短作业优先算法排序   
  100. {    
  101.     LinkList p, q;    
  102.     int t;    
  103.     p = L->next;    
  104.     while (p)    
  105.     {    
  106.         q = p->next;    
  107.         while (q)    
  108.         {    
  109.             if (p->serve_time > q->serve_time)    
  110.             {    
  111.                 t = p->serve_time;    
  112.                 p->serve_time = q->serve_time;    
  113.                 q->serve_time = t;  
  114.                   
  115.                 t = p->arrive_time;  //到达时间也要交换   
  116.                 p->arrive_time = q->arrive_time;  
  117.                 q->arrive_time = t;    
  118.             }    
  119.             q = q->next;    
  120.         }    
  121.         p = p->next;    
  122.     }    
  123. }    
  124.   
  125.   
  126. void simulate_cpu_dispatch(LinkList &L)  
  127. {  
  128.     LinkList p = L->next;  
  129.     p->finish_time = p->arrive_time +  p->serve_time;  
  130.     p->turnover_time = p->finish_time - p->arrive_time;  
  131.     while(p->next)  
  132.     {  
  133.         if(p->next->arrive_time >= p->finish_time)  
  134.         {  
  135.             p->next->finish_time = p->next->arrive_time +  p->next->serve_time;  
  136.             p->next->turnover_time = p->next->finish_time - p->next->arrive_time;  
  137.             p = p->next;  
  138.         }  
  139.         else  
  140.         {  
  141.             p->next->finish_time = p->finish_time + p->next->serve_time;  
  142.             p->next->turnover_time = p->next->finish_time - p->next->arrive_time;  
  143.             p = p->next;  
  144.         }  
  145.     }  
  146. }  
  147.   
  148. void  FCFS(LinkList &L , int n)  
  149. {  
  150.     cout<<"                           ";  
  151.     cout<<"实现作业调度算法//基于先来先服务,模拟cpu运行环境"<<endl;   
  152.     CreateList_L(L , n);//构造单链表   
  153.     ListSort(L);//单链表排序   
  154.     simulate_cpu_dispatch(L);  
  155.     L = L->next;  
  156.     int i=5;  
  157.     while(L)  
  158.     {  
  159.         cout<<endl<<endl<<endl;  
  160.         cout<<"///第"<<i-5+1<<"个进入cpu的作业://"<<endl;  
  161.         cout<<"                           到达时间"<<L->arrive_time<<endl<<endl;  
  162.         cout<<"                           服务时间"<<L->serve_time<<endl<<endl;   
  163.         cout<<"                           完成时间"<<L->finish_time<<endl<<endl;  
  164.         cout<<"                           周转时间"<<L->turnover_time<<endl<<endl;  
  165.         i++;  
  166.         L= L->next;  
  167.     }  
  168. }  
  169.   
  170. void  SJF(LinkList &L , int n)  
  171. {  
  172.     cout<<"                           ";  
  173.     cout<<"实现作业调度算法//基于短作业优先算法,模拟cpu运行环境"<<endl;   
  174.     CreateList_L(L , n);//构造单链表   
  175.     ListSort2(L);//单链表排序   
  176.     simulate_cpu_dispatch(L);  
  177.     L = L->next;  
  178.     int i=5;  
  179.     while(L)  
  180.     {  
  181.         cout<<"///第"<<i-5+1<<"个进入cpu的作业://"<<endl;  
  182.         cout<<"                           到达时间"<<L->arrive_time<<endl<<endl;  
  183.         cout<<"                           服务时间"<<L->serve_time<<endl<<endl;   
  184.         cout<<"                           完成时间"<<L->finish_time<<endl<<endl;  
  185.         cout<<"                           周转时间"<<L->turnover_time<<endl<<endl;  
  186.         i++;  
  187.         L= L->next;  
  188.     }  
  189. }  
效果图:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值