操作系統(tǒng)進程的基本調(diào)度算法,短作業(yè)優(yōu)先是先來先服務(wù)算法的一種改進,能獲得大的系統(tǒng)吞吐率。它和先來先服務(wù)算法的區(qū)別在于當有多個進程在就緒隊列時,要選擇一個服務(wù)時間最短的進行執(zhí)行,這樣的話在一定時間內(nèi)能夠執(zhí)行的進程數(shù)量最多(吞吐率大)
創(chuàng)新互聯(lián)于2013年成立,先為尉氏等服務(wù)建站,尉氏等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為尉氏企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。輸入即將到達的進程數(shù)還有進程的信息,時間片大小,初始化pcb
最先到達且最短的進程換到1號位,計算第一個進程的完成時間,
將系統(tǒng)時間設(shè)為這個值,設(shè)下一個執(zhí)行進程序號nextprocess
已完成進程數(shù)sum=1
進入死循環(huán)
{? ? ?if(完成進程數(shù)>= 進程總數(shù))
跳出死循環(huán)
設(shè)nextprocess為sum+1
循環(huán)查找有沒有已到達且更短的進程,換到nextprocess位
if(nextprocess位的進程沒到達)
系統(tǒng)時間變?yōu)樗竭_的時間
計算nextprocess進程完成時間,系統(tǒng)時間等于這個時間,sum+1
}
代碼實現(xiàn)如下
#define N 5 //進程數(shù)量
#includeusing namespace std;
struct pcb
{
char process_name[10]; //進程名字
int arrive_time; //到達時間
int service_time; //服務(wù)時間
int complete_time; //完成時間
}PCB[N+1]; //0號單元不存數(shù)據(jù),只做交換
int sjf(int n)
{
int i;
cout<< "\n請輸入各進程的信息\n"<< endl;
for(i=1;i<=n;i++) //輸入各進程信息
{
cout<< "------\n請輸入第"<< i<< "進程名字: ";
cin >>PCB[i].process_name ;
cout<< "請輸入到達時間: " ;
cin >>PCB[i].arrive_time ;
cout<< "請輸入服務(wù)時間: " ;
cin >>PCB[i].service_time ;
}
{ //最先到達且最短的進程換到1號位
int temp = 1;
for (i = 2; i<= n; i++)
{
if (PCB[temp].arrive_time >PCB[i].arrive_time ||
(PCB[temp].arrive_time == PCB[i].arrive_time && PCB[temp].service_time >PCB[i].service_time))
{
temp = i;
}
}
PCB[0] = PCB[temp];
PCB[temp] = PCB[1];
PCB[1] = PCB[0];
}
int sum=1; //已完成進程數(shù)
PCB[1].complete_time = PCB[1].arrive_time + PCB[1].service_time;
int time = PCB[1].complete_time; //第一個進程結(jié)束時間(最先到達且最短的) ,也是當前系統(tǒng)時間
cout<< "\n第1次進程調(diào)度運行的進程為 : "<< PCB[1].process_name<< endl;
int nextprocess ; //下一次調(diào)度進程的pcb序號
while(1)
{ if(sum >= n)
break;
nextprocess = i = sum+1;
while(i<=n)
{ //未執(zhí)行進程中有已到達且更短的
if(time >= PCB[i].arrive_time && PCB[i].service_time< PCB[nextprocess].service_time )
nextprocess = i ;
i++;
}
{
PCB[0]=PCB[nextprocess]; //將下一個執(zhí)行進程換到sum+1位
PCB[nextprocess]=PCB[sum+1];
PCB[sum+1]=PCB[0];
nextprocess = sum + 1;
}
if(PCB[nextprocess].arrive_time >time)
{
time = PCB[nextprocess].arrive_time ;
}
time += PCB[nextprocess].service_time; //nextprocess執(zhí)行完的時間
PCB[nextprocess].complete_time = time;
sum++;
cout<< "第"<< sum<< "次進程調(diào)度運行的進程為 : "<< PCB[nextprocess].process_name<< endl;
}
return 0;
}
void print()
{
int i = 1;
float round_time[N+1], force_round_time[N+1], sum = 0;
cout<< "\n 進程 |"<< "到達時間 |"<< " 服務(wù)時間 |"<< " 完成時間 |"<< " 周轉(zhuǎn)時間 |"<< " 帶權(quán)周轉(zhuǎn)時間"<< endl;
while (i
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧