91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 68KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-09
  • 語言: 其他
  • 標簽: 操作系統??

資源簡介

進程調度算法包括先來先服務調度算法FCFS、最短作業時間優先SJF(搶占式 和非搶占式)、最高響應比調度HRN算法4種。(每個人必須做非搶占式SJF, 然后在后面的三種中任選一種,即每個人必須做2種調度算法的模擬。)

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include
#define?DELAY?100???????
using?namespace?std;

unsigned?short?TIME?=?0;?//當前時間?
unsigned?short?NUM?=?0;?//進程數量?
char?TYPE?=?‘1‘;???????//算法類型

//進程控制塊PCB?
typedef?struct?PCB?{
char?name[16];
char?state;?//[R]Run[F]Finish[P]Pause[N]New?
unsigned?short?t_arrive;?//到達時間
unsigned?short?t_start;?//開始時間
unsigned?short?t_finish;?//完成時間
unsigned?short?t_service;?//服務時間
unsigned?short?t_run;?//運行時間
unsigned?short?t_wait;?//等待時間
struct?PCB?*next;
}?pcb;

pcb?*now?=?NULL?//現在運行的進程
*head?=?NULL;?//pcb鏈頭部指針?

void?fcfs();?//先到先服務?
void?sjf();?//短作業優先?

void?init();??????//初始化,完成pcb錄入?
pcb?*sort(pcb*);?//對init()錄入的pcb按到達時間排序?
void?timer();????//定時器,每一個延遲自我調用一次?
void?result();???//打印結果?

?//先到先服務算法
void?fcfs()?{
if?(now->t_arrive>TIME)?{//還未到達,則是無進程狀態
printf(“[時間:%d]\t無進程運行\n“?TIME);
return;
}
if?(now->state?==?‘N‘)?{//N新進程改為R正在運行進程。設置開始時間為time,并打印。
now->state?=?‘R‘;
now->t_start?=?TIME;
printf(“[時間:%d]\t進程:%s?首次運行\n“?TIME?now->name);
}
else?if?(now->state?==?‘R‘)?{//R正在運行進程的話
(now->t_run)++;//運行時間自動加一
if?(now->t_run?>=?now->t_service)?{//運行結束時
now->state?=?‘F‘;//標記結束
now->t_finish?=?TIME;//標記結束時間
printf(“[時間:%d]\t進程:%s?任務完成\n“?TIME?now->name);//打印
now?=?now->next;//跳轉到下一個進程
if?(now?!=?NULL)?fcfs();
}
else?//打印運行狀態
printf(“[時間:%d]\t進程:%s?正在運行,已運行時間:%d\n“?TIME?now->name?now->t_run);
}
}

void?sjf()?{
if?(now->t_arrive>TIME)?{//所有進程都完畢,新進程進程還未到達,則是無進程狀態
printf(“[時間:%d]\t無進程運行\n“?TIME);
return;
}
if?(now->state?==?‘N‘)?{//N新進程改為R正在運行進程。設置開始時間為time,并打印。
now->state?=?‘R‘;
now->t_start?=?TIME;
printf(“[時間:%d]\t進程:%s?首次運行\n“?TIME?now->name);
}
else?if?(now->state?==?‘R‘)?{//R正在運行的進程
(now->t_run)++;//運行時間自動加一
if?(now->t_run?>=?now->t_service)?{//運行結束時
now->state?=?‘F‘;//標記結束
now->t_finish?=?TIME;//標記結束時間
printf(“[時間:%d]\t進程:%s?任務完成\n“?TIME?now->name);//打印

pcb?*p?=?head//檢索指針,從頭檢索。
*p_min?=?NULL;//最小進程
unsigned?short?t_min?=?9999;
while?(p?!=?NULL?&&?p->t_arrive?<=?TIME)?{//從【現在時間及以前】并且未結束的進程中,選出服務時間最小的進程?
if?(p->state?==?‘F‘)?{//當前檢索進程已經結束,則檢索指針指向下一個進程檢索。
p?=?p->next;
continue;
}
if?(p->t_service? t_min?=?p->t_service;
p_min?=?p;
}
p?=?p->next;//檢索下一個
}

now?=?p_min;//跳轉到最短進程
if?(now?!=?NULL)?sjf();
}
else?//打印運行狀態
printf(“[時間:%d]\t進程:%s?正在運行,已運行時間:%d\n“?TIME?now->name?now->t_run);
}
}



//格式化輸出結果
void?result()?{
pcb?*p?=?head;
double?zhouzhuan?=?0?pingjunzhouzhuan?=?0;
printf(“\n=========運行結果=========\n\n“);
printf(“名稱?到達時間?開始時間?完成時間?服務時間?周轉時間?帶權周轉時間\n“);
while?(p?!=?NULL)
{
printf(“?%s\t%d\t?%d\t?%d\t?%d\t?%d\t?%.2f\n“?p->name?p->t_arrive
p->t_start?p->t_finish?p->t_service?p->t_finish?-?p->t_arrive
1.0*(p->t_finish?-?p->t_arrive)?/?p->t_service);

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-06-15?18:35??os\
?????文件????????5346??2017-04-11?16:05??os\os.cpp
?????文件???????71945??2017-04-11?16:02??os\運行結果.docx

評論

共有 條評論