www.e4938.cn-老师你下面太紧了拔不出来,99re8这里有精品热视频免费,国产第一视频一区二区三区,青青草国产成人久久

<button id="60qo0"></button>

<strike id="60qo0"></strike>
<del id="60qo0"></del>
<fieldset id="60qo0"><menu id="60qo0"></menu></fieldset>
  • 模擬實(shí)現(xiàn)進(jìn)程調(diào)度——采用高優(yōu)先數(shù)優(yōu)先和先來(lái)服務(wù)算法

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

          進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來(lái)先服務(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來(lái)表示。

      如果運(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(即降低一級(jí)),然后把它插入就緒隊(duì)列等待CPU。每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、以及各個(gè)進(jìn)程的 PCB,以便進(jìn)行檢查。重復(fù)以上過(guò)程,直到所要進(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() /* 建立對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)排列函數(shù)*/  
    17. {  
    18.     PCB *first, *second;  
    19.     int insert = 0;  
    20.     if ((ready == NULL) || ((p->super) > (ready->super))) /*優(yōu)先級(jí)最大者,插入隊(duì)首*/  
    21.     {  
    22.         p->link = ready;  
    23.         ready = p;  
    24.     }  
    25.     else /* 進(jìn)程比較優(yōu)先級(jí),插入適當(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 請(qǐng)輸入進(jìn)程數(shù)?");  
    52.     scanf("%d", &num);  
    53.     for (i = 0; i < num; i++)  
    54.     {  
    55.         printf("\n 進(jìn)程號(hào)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),與本站無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
    我要收藏
    個(gè)贊
    ?
    国产成人无码A区在线观看视频| 韩国三级中文字幕HD久久精品| GOGOGO高清在线观看免费韩国| 国产精品毛片VA一区二区三区| 2021亚洲中文字幕在线第99| 国产精品视频一区二区噜噜| 樱桃视频大全免费高清版观看| 久久久国产精品| 国产精品久久久久精品香蕉| 国产AV巨作饥渴难耐的男雇主|