C语言实现操作系统的进程调度算法--RR算法
生活随笔
收集整理的這篇文章主要介紹了
C语言实现操作系统的进程调度算法--RR算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
c語言實現調度算法--RR算法
- 測試輸入為4個進程,時間片q=3,進程為A、B、C、D,序列號為都為0,運行時間分別為6/7/9/12
測試輸入為4個進程,時間片q=3,進程為A、B、C、D,序列號為都為0,運行時間分別為6/7/9/12
RR算法代碼實現: #include<stdio.h> #define MAX 10 struct task_struct {char name[10]; /*進程名稱*/int number; /*進程編號*/float come_time; /*到達時間*/float run_begin_time; /*開始運行時間*/float run_time; /*運行時間*/float run_end_time; /*運行結束時間*/int priority; /*優先級*/int run_flag; /*調度標志*/int start_flag; //是否為第一次開始調度 } tasks[MAX]; int counter; /*實際進程個數*/ int time_counter=0; int poutput(); /*調度結果輸出*/ int time(); int charge();//判斷是否所有的進程都被執行過void main() {pinput();printf("時間片輪轉算法。\n\n");time();poutput(); }int time() {float time_temp=0;int i;int j=0;int k=0;struct task_struct copy_task[MAX];//備份for(i=0; i<counter; i++){copy_task[j++]=tasks[i];//對進程的初始化信息備份}time_temp=tasks[0].come_time;while(charge()){for(i=0; i<counter; i++){if(tasks[i].come_time>time_temp){time_temp=tasks[i].come_time;}if(tasks[i].run_flag==0)//該進程還未結束{if(tasks[i].start_flag==0) //該條件成立則說明,該進程是第一次執行,記錄開始執行時間{tasks[i].run_begin_time=time_temp;tasks[i].start_flag=1;}if(tasks[i].run_time/time_counter>1)//至少有兩倍的時間片未執行{tasks[i].run_time=tasks[i].run_time-time_counter;time_temp=time_temp+time_counter;}else if(tasks[i].run_time-time_counter==0){time_temp=time_temp+time_counter;tasks[i].run_end_time=time_temp;tasks[i].run_flag=1;tasks[i].run_time=copy_task[i].run_time;}else//僅剩下不足一倍的時間片{time_temp=time_temp+tasks[i].run_time;tasks[i].run_end_time=time_temp;tasks[i].run_flag=1;tasks[i].run_time=copy_task[i].run_time;}}}} }int charge()//判斷是否全部進程都執行完畢 {int k;int super_flag=0;//判斷是否全部的進程都執行完畢for(k=0; k<counter; k++){if(tasks[k].run_flag==0){super_flag=1;return super_flag;break;}else{super_flag=0;}}return super_flag; }int pinput() /*進程參數輸入*/ {int i;printf("please input the process counter:\n");scanf("%d",&counter);printf("please input the length of time:\n");scanf("%d",&time_counter);for(i=0; i<counter; i++){printf("******************************************\n");printf("please input the process of %d th :\n",i+1);printf("please input the name:\n");scanf("%s",tasks[i].name);printf("please input the number:\n");scanf("%d",&tasks[i].number);printf("please input the come_time:\n");scanf("%f",&tasks[i].come_time);printf("please input the run_time:\n");scanf("%f",&tasks[i].run_time);printf("please input the priority:\n");scanf("%d",&tasks[i].priority);tasks[i].run_begin_time=0;tasks[i].run_end_time=0;tasks[i].run_flag=0; //運行是否結束tasks[i].start_flag=0;//是否首次被執行}return 0; }int poutput() /*調度結果輸出*/ {int i;float turn_round_time=0,f1,w=0;printf("進程名 進程號 到達時間 運行時間 開始時間 結束時間 優先級 周轉時間\n");for(i=0; i<counter; i++){f1=tasks[i].run_end_time-tasks[i].come_time;turn_round_time+=f1;printf("%s\t%d\t%5.3f\t%5.3f\t%5.3f\t %5.3f\t %d\t %5.3f\n",tasks[i].name,tasks[i].number,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].priority,f1);}printf("average_turn_round_timer=%5.2f\n",turn_round_time/counter);return 0; }總結
以上是生活随笔為你收集整理的C语言实现操作系统的进程调度算法--RR算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libvirt调用c语言程序,libvi
- 下一篇: 双系统删除ubuntu详细指南(图解)