www涩-www黄网站-www黄色-www黄色com-国产免费拍拍视频在线观看网站-国产免费怕怕免费视频观看

模擬實現進程調度——采用高優先數優先和先來服務算法

2018-03-14 14:35:55 csdn  點擊量: 評論 (0)
進程調度算法:采用最高優先數優先的調度算法(即把處理機分配給優先數最高的進程)和先來先服務算法。  每個進程有一個進程控制塊

      進程調度算法:采用最高優先數優先的調度算法(即把處理機分配給優先數最高的進程)和先來先服務算法。

  每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、優先數、到達時間、需要運行時間、已用CPU時間、進程狀態等等。

  進程的優先數及需要的運行時間可以事先人為地指定(也可以由隨機數產生)。進程的到達時間為進程輸入的時間。

  進程的運行時間以時間片為單位進行計算。每個進程的狀態可以是就緒 W(Wait)、運行R(Run)、或完成F(Finish)三種狀態之一。

  就緒進程獲得 CPU后都只能運行一個時間片。用已占用CPU時間加1來表示。

  如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時間,也就是進程還需要繼續運行,此時應將進程的優先數減1(即降低一級),然后把它插入就緒隊列等待CPU。每進行一次調度程序都打印一次運行進程、就緒隊列、以及各個進程的 PCB,以便進行檢查。重復以上過程,直到所要進程都完成為止。

 

[cpp] view plain copy
 
  1. #include <stdio.h>  
  2. #include <stdlib.h>   
  3. #include <conio.h>   
  4. #define getpch(type) (type*)malloc(sizeof(type))   
  5.    
  6. struct pcb   /* 定義進程控制塊PCB */  
  7. {  
  8.     char name[10];  
  9.     char state;  
  10.     int super;  
  11.     int ntime;  
  12.     int rtime;  
  13.     struct pcb* link;  
  14. }*ready = NULL, *p;  
  15. typedef struct pcb PCB;  
  16. sort() /* 建立對進程進行優先級排列函數*/  
  17. {  
  18.     PCB *first, *second;  
  19.     int insert = 0;  
  20.     if ((ready == NULL) || ((p->super) > (ready->super))) /*優先級最大者,插入隊首*/  
  21.     {  
  22.         p->link = ready;  
  23.         ready = p;  
  24.     }  
  25.     else /* 進程比較優先級,插入適當的位置中*/  
  26.     {  
  27.         first = ready;  
  28.         second = first->link;  
  29.         while (second != NULL)  
  30.         {  
  31.             if ((p->super) > (second->super)) /*若插入進程比當前進程優先數大,*/  
  32.             { /*插入到當前進程前面*/  
  33.                 p->link = second;  
  34.                 first->link = p;  
  35.                 second = NULL;  
  36.                 insert = 1;  
  37.             }  
  38.             else /* 插入進程優先數最低,則插入到隊尾*/  
  39.             {  
  40.                 first = first->link;  
  41.                 second = second->link;  
  42.             }  
  43.         }  
  44.         if (insert == 0) first->link = p;  
  45.     }  
  46. }  
  47. input() /* 建立進程控制塊函數*/  
  48. {  
  49.     int i, num;  
  50.       
  51.     printf("\n 請輸入進程數?");  
  52.     scanf("%d", &num);  
  53.     for (i = 0; i < num; i++)  
  54.     {  
  55.         printf("\n 進程號No.%d:\n", i);  
  56.         p = getpch(PCB);  
  57.         printf("\n 輸入進程名:");  
  58.         scanf("%s", p->name);  
  59.         printf("\n 輸入進程優先數:");  
  60.         scanf("%d", &p->super);  
  61.         printf("\n 輸入進程運行時間:");  
  62.         scanf("%d", &p->ntime);  
  63.         printf("\n");  
  64.         p->rtime = 0; p->state = 'w';  
  65.         p->link = NULL;  
  66.         sort(); /* 調用sort函數*/  
  67.     }  
  68. }  
  69. int space()  
  70. {  
  71.     int l = 0; PCB* pr = ready;  
  72.     while (pr != NULL)  
  73.     {  
  74.         l++;  
  75.         pr = pr->link;  
  76.     }  
  77.     return(l);  
  78. }  
  79. disp(PCB * pr) /*建立進程顯示函數,用于顯示當前進程*/  
  80. {  
  81.     printf("\n qname \t state \t super \t ndtime \t runtime \n");  
  82.     printf("|%s\t", pr->name);  
  83.     printf("|%c\t", pr->state);  
  84.     printf("|%d\t", pr->super);  
  85.     printf("|%d\t", pr->ntime);  
  86.     printf("|%d\t", pr->rtime);  
  87.     printf("\n");  
  88. }  
  89. check() /* 建立進程查看函數 */  
  90. {  
  91.     PCB* pr;  
  92.     printf("\n **** 當前正在運行的進程是:%s", p->name); /*顯示當前運行進程*/  
  93.     disp(p);  
  94.     pr = ready;  
  95.     printf("\n ****當前就緒隊列狀態為:\n"); /*顯示就緒隊列狀態*/  
  96.     while (pr != NULL)  
  97.     {  
  98.         disp(pr);  
  99.         pr = pr->link;  
  100.     }  
  101. }  
  102. destroy() /*建立進程撤消函數(進程運行結束,撤消進程)*/  
  103. {  
  104.     printf("\n 進程 [%s] 已完成.\n", p->name);  
  105.     free(p);  
  106. }  
  107. running() /* 建立進程就緒函數(進程運行時間到,置就緒狀態*/  
  108. {  
  109.     (p->rtime)++;  
  110.     if (p->rtime == p->ntime)  
  111.         destroy(); /* 調用destroy函數*/  
  112.     else  
  113.     {  
  114.         (p->super)--;  
  115.         p->state = 'w';  
  116.         sort(); /*調用sort函數*/  
  117.     }  
  118. }  
  119. main() /*主函數*/  
  120. {  
  121.     int len, h = 0;  
  122.     char ch;  
  123.     input();  
  124.     len = space();  
  125.     while ((len != 0) && (ready != NULL))  
  126.     {  
  127.         ch = getchar();  
  128.         h++;  
  129.         printf("\n The execute number:%d \n", h);  
  130.         p = ready;  
  131.         ready = p->link;  
  132.         p->link = NULL;  
  133.         p->state = 'R';  
  134.         check();  
  135.         running();  
  136.         printf("\n 按任一鍵繼續......");  
  137.         ch = getchar();  
  138.     }  
  139.     printf("\n\n 進程已經完成.\n");  
  140.     ch = getchar();  
  141. }  

 

大云網官方微信售電那點事兒

責任編輯:售電衡衡

免責聲明:本文僅代表作者個人觀點,與本站無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
我要收藏
個贊
?
主站蜘蛛池模板: 国内精品久久久久久久久| 性盈盈影院在线观看| 在线观看一级毛片| 中文字幕1区| 日鲁夜鲁鲁狠狠综合视频| 午夜香蕉网| 久久久久亚洲精品中文字幕| 男人扒开腿躁女人j| 韩国免费一级成人毛片| 欧美一区二区在线| 久久精品国产这里是免费| 精品视频一区二区三三区四区| 老头巨大粗长xxxxx| 天堂在线视频网站| 久久久久综合国产| 国产午夜在线观看视频播放| xxxwww欧美性| 日日摸天天摸狠狠摸视频| 中文字幕亚洲区| 欧美巨大精品videos| 婷婷国产成人久久精品激情| 久久久精品免费热线观看| 国产欧美一区二区三区视频| 国产免费爱在线观看视频| 91最新91精品91蝌蚪| 亚洲国产精品网| 久久成人国产精品免费| 国产aⅴ一区二区三区| 成人自拍小视频| 午夜桃色剧场| 亚洲国产爱久久全部精品| 久久久久久久99精品免费观看| 欧美视频久久| 国产9191精品免费观看| v片免费看| 91亚洲成人| 美国黑人特大一级毛片| 国产精品一级香蕉一区| 亚洲三级成人| 国内成人自拍视频| 亚洲一区二区三区在线网站|