xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 8KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-18
  • 語言: 其他
  • 標簽: code??

資源簡介

實驗1 進程調度(2學時)

一、實驗目的
通過實驗加強對進程調度算法的理解和掌握。
二、實驗內容
編寫程序實現基于優先級的時間片輪轉調度算法。
三、實驗要求
1、假定系統有5個進程,每個進程用一個進程控制塊PCB來代表,
其中:
進程名:作為進程的標識,假設五個進程的進程名分別為p1,p2,p3,p4,p5。
指針:進程按順序排成循環鏈表,用指針指出下一個進程的進程控制塊首地址,最后一個進程中的指針指出第一個進程的進程控制塊首地址。
要求運行時間:假設進程需要運行的單位時間數。
已運行時間:假設進程已經運行的單位時間數,初值為0。
狀態:可假設有兩種狀態,就緒狀態和結束狀態。進程的初始狀態都為就緒狀態。
2、每次運行所設計的處理器調度程序調度進程之前,為每個進程隨機確定它的要求運行時間和優先級(數值越大,優先級越高)。
3、進程調度依據優先級進行,優先級隨著時間動態增加,每經過一個時間片,優先級加1。
4、此程序是模擬處理器調度,因此,被選中的進程并不實際啟動運行,而是執行
已運行時間+1
來模擬進程的一次運行,表示進程已經運行過一個單位時間。
5、在所設計的程序中應有顯示語句,能顯示每次被選中的進程名以及運行一次后進程隊列的變化。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
using?namespace?std;

struct?PCB{
????string?name;?//?進程名
????int?prio;?//?優先級
????int?requ_time;?//?要求運行時間
????int?fini_time;?//?已運行時間
????bool?state;?//?進程狀態
????PCB*?next;?//?指向下一個進程的指針
????void?init(string?name){?//?進程初始化
????????this->name?=?name;
????????prio?=?rand()%10+1;?//?隨機優先級
????????requ_time?=?rand()%20+1;?//?隨機要求運行時間
????????fini_time?=?0;?//?已運行時間初始化為0
????????state?=?false;?//?進程狀態為false?表示還沒完成,處于就緒狀態;?為true?表示已經完成,處于結束狀態
????}
};
PCB?p[6];
PCB*?it;

bool?cmp(PCB?A?PCB?B){?//?對進程的排序函數
????if(A.state==false?&&?B.state==false){?//?都處于就緒狀態,如果優先級相等,則還需要完成時間短的排在前面,否則優先級高的排在前面
????????if(A.prio?==?B.prio)?return?(A.requ_time-A.fini_time)<(B.requ_time-B.fini_time);
????????return?A.prio>B.prio;
????}else{?//?如果有進程處于完成狀態,則處于就緒狀態的排在前面
????????if(A.state==false)?return?true;
????????else?if(B.state==false)?return?false;
????????else?return?A.prio>B.prio;
????}
}

bool?check(){?//?檢查是否所有進程都完成了,都完成了返回true還有沒完成的返回false
????bool?ret?=?true;
????it?=?&p[1];
????for(int?i=1;?i<6;?i++){
????????if(it->state?==?false)?{?//?仍有沒完成的
????????????ret?=?false;
????????????break;
????????}
????????it?=?it->next;
????}
????return?ret;
}

void?change(){?//?對于重新排序完的鏈表,修改他們的指針
????for(int?i=1;?i<6;?i++){
????????p[i].next?=?&p[i+1];
????}
????p[5].next?=?&p[1];
}

void?print(){?//?打印進程狀態
????it?=?&p[1];
????cout?<????for(int?i=1;?i<6;?i++){
????????cout?<name?<prio?<requ_time?<fini_time?<state?<????????it?=?it->next;
????}
}

int?main()
{
????srand(time(NULL));?//?隨機的種子
????p[1].init(“p1“);?p[2].init(“p2“);?p[3].init(“p3“);?p[4].init(“p4“);?p[5].init(“p5“);?//?初始化每一個進程
????change();
????cout?<????print();
????sort(p+1p+6cmp);?//?按照優先級對進程重新排序
????change();
????cout?<????print();
????int?now?=?0;?//?當前運行的時間
????while(check()?==?false){?//?如果仍然有沒完成的進程,?CPU繼續運行
????????now++;?//?時間+1
????????it?=?&p[1];?//?it是處于鏈表第一個的地址,代表處于就緒狀態的進程且優先級最高
????????it->fini_time++;?//?執行
????????if(it->fini_time?==?it->requ_time)?{?//?該進程完成
????????????it->state?=?true;?//?更改為完成狀態
????????????cout?<name?<????????????cout?<????????????print();
????????}
????????it?=?it->next;?//?指向下一個進程
????????for(int?i=2;?i<6;?i++){
????????????if(it->state?==?true)?break;
????????????it->prio++;?//?除了當前的進程,其他處于就緒狀態的進程優先級+1
it?=?it->next;
????????}
????????sort(p+1p+6cmp);?//?按照優先級重新排序
????????change();?//?更改指針
????}
????cout?<????print();

????return?0;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3356??2018-04-27?08:05??main.cpp
?????文件???????33792??2018-04-25?15:15??實驗1.doc

評論

共有 條評論