欧美日操-欧美日韩91-欧美日韩99-欧美日韩ay在线观看-xxxx色-xxxx视频在线

模擬實(shí)現(xiàn)進(jìn)程調(diào)度——采用高優(yōu)先數(shù)優(yōu)先和先來服務(wù)算法

2018-03-14 14:35:55 csdn  點(diǎn)擊量: 評論 (0)
進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來先服務(wù)算法。  每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊

      進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來先服務(wù)算法。

  每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊( PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已用CPU時(shí)間、進(jìn)程狀態(tài)等等。

  進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時(shí)間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時(shí)間為進(jìn)程輸入的時(shí)間。

  進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。每個(gè)進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行R(Run)、或完成F(Finish)三種狀態(tài)之一。

  就緒進(jìn)程獲得 CPU后都只能運(yùn)行一個(gè)時(shí)間片。用已占用CPU時(shí)間加1來表示。

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

 

[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   /* 定義進(jìn)程控制塊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() /* 建立對進(jìn)程進(jìn)行優(yōu)先級排列函數(shù)*/  
  17. {  
  18.     PCB *first, *second;  
  19.     int insert = 0;  
  20.     if ((ready == NULL) || ((p->super) > (ready->super))) /*優(yōu)先級最大者,插入隊(duì)首*/  
  21.     {  
  22.         p->link = ready;  
  23.         ready = p;  
  24.     }  
  25.     else /* 進(jìn)程比較優(yōu)先級,插入適當(dāng)?shù)奈恢弥?/  
  26.     {  
  27.         first = ready;  
  28.         second = first->link;  
  29.         while (second != NULL)  
  30.         {  
  31.             if ((p->super) > (second->super)) /*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大,*/  
  32.             { /*插入到當(dāng)前進(jìn)程前面*/  
  33.                 p->link = second;  
  34.                 first->link = p;  
  35.                 second = NULL;  
  36.                 insert = 1;  
  37.             }  
  38.             else /* 插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊(duì)尾*/  
  39.             {  
  40.                 first = first->link;  
  41.                 second = second->link;  
  42.             }  
  43.         }  
  44.         if (insert == 0) first->link = p;  
  45.     }  
  46. }  
  47. input() /* 建立進(jìn)程控制塊函數(shù)*/  
  48. {  
  49.     int i, num;  
  50.       
  51.     printf("\n 請輸入進(jìn)程數(shù)?");  
  52.     scanf("%d", &num);  
  53.     for (i = 0; i < num; i++)  
  54.     {  
  55.         printf("\n 進(jìn)程號No.%d:\n", i);  
  56.         p = getpch(PCB);  
  57.         printf("\n 輸入進(jìn)程名:");  
  58.         scanf("%s", p->name);  
  59.         printf("\n 輸入進(jìn)程優(yōu)先數(shù):");  
  60.         scanf("%d", &p->super);  
  61.         printf("\n 輸入進(jìn)程運(yùn)行時(shí)間:");  
  62.         scanf("%d", &p->ntime);  
  63.         printf("\n");  
  64.         p->rtime = 0; p->state = 'w';  
  65.         p->link = NULL;  
  66.         sort(); /* 調(diào)用sort函數(shù)*/  
  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) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/  
  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() /* 建立進(jìn)程查看函數(shù) */  
  90. {  
  91.     PCB* pr;  
  92.     printf("\n **** 當(dāng)前正在運(yùn)行的進(jìn)程是:%s", p->name); /*顯示當(dāng)前運(yùn)行進(jìn)程*/  
  93.     disp(p);  
  94.     pr = ready;  
  95.     printf("\n ****當(dāng)前就緒隊(duì)列狀態(tài)為:\n"); /*顯示就緒隊(duì)列狀態(tài)*/  
  96.     while (pr != NULL)  
  97.     {  
  98.         disp(pr);  
  99.         pr = pr->link;  
  100.     }  
  101. }  
  102. destroy() /*建立進(jìn)程撤消函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤消進(jìn)程)*/  
  103. {  
  104.     printf("\n 進(jìn)程 [%s] 已完成.\n", p->name);  
  105.     free(p);  
  106. }  
  107. running() /* 建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài)*/  
  108. {  
  109.     (p->rtime)++;  
  110.     if (p->rtime == p->ntime)  
  111.         destroy(); /* 調(diào)用destroy函數(shù)*/  
  112.     else  
  113.     {  
  114.         (p->super)--;  
  115.         p->state = 'w';  
  116.         sort(); /*調(diào)用sort函數(shù)*/  
  117.     }  
  118. }  
  119. main() /*主函數(shù)*/  
  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 按任一鍵繼續(xù)......");  
  137.         ch = getchar();  
  138.     }  
  139.     printf("\n\n 進(jìn)程已經(jīng)完成.\n");  
  140.     ch = getchar();  
  141. }  

 

大云網(wǎng)官方微信售電那點(diǎn)事兒

責(zé)任編輯:售電衡衡

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個(gè)贊
?
主站蜘蛛池模板: 91精品国产福利尤物 | 国产午夜人做人视频羞羞 | 99精品视频免费 | 国产精品线在线精品 | 天堂视频在线视频观看2018 | 国产三级国产精品国产国在线观看 | 欧美国产另类 | 99re6这里只有精品视频 | 天堂在线最新版www中文 | 男女羞羞视频在线免费观看 | 99视频全部看免费观 | 亚洲特黄大黄一级毛片 | 亚洲一区欧洲一区 | 欧美性色黄大片在线观看 | 特级毛片在线观看 | 国产1024精品视频专区免费 | 六月婷婷久久 | 毛片站| 99爱在线精品视频免费观看9 | 麻豆视频网站入口 | 黑人干亚洲人 | 六月综合网 | 久久精品国产91久久麻豆自制 | 青青国产成人精品视频 | 一级片免费在线 | 国外幻女free性zozo交 | 亚洲欧美成人综合 | 欧美色视频在线观看 | 国产永久在线 | 色老成人精品视频在线观看 | 在线天堂中文www官网 | 榴莲app下载网址进入i | 免费亚洲成人 | 午夜精品影院 | 亚洲男女免费视频 | 在线另类视频 | 欧美第十页| 爆操网站 | 亚洲第一会所 | 乱在线伦视频免费 | 国产亚洲综合色就色 |