程序排程演算法
設計目的:
程序管理是作業系統中的重要功能,用來建立程序、撤消程序、實現程序狀態轉換,它提供了在可執行的程序之間復用cpu的方法。在程序管理中,程序排程是核心,因為在採用多道程式設計的系統中,往往有若干個程序同時處於就緒狀態,當就緒程序個數大於處理器數目時,就必須依照某種策略決定哪些程序優先占用處理器。本設計模擬在單處理器情況下的程序排程,加深對程序執行狀態和程序排程過程、排程演算法的理解。
設計內容:
設計程式模擬單處理機系統中的程序排程演算法,實現動態優先權程序排程演算法, 對n個程序採用動態優先權演算法的程序排程。
設計思路:
1.每個用來標識程序的程序控制塊pcb,包括以下資訊:程序標識數id,程序優先數priority,程序已占用的cpu時間cputime,程序還需占用的cpu時間needtime,程序狀態state等。
2.優先數改變的原則:程序在就緒佇列中呆乙個時間片,優先數增加1,程序每執行乙個時間片優先數減3。(注:優先數改變策略也可以自己設計)
3.設定排程前的初始狀態。
4.將每個時間片內的程序情況顯示出來。
#include #include #include #define getpch(type) (type*)malloc(sizeof(type))
#define null 0
/*****************************************/
struct pcb *ready=null,*p;
typedef struct pcb pcb;
/*****************************************/
void sort() /* 建立對程序進行優先順序排列函式*/
else /* 程序比較優先順序,插入適當的位置中*/
else
}/* 插入程序優先數最低,則插入到隊尾*/
if(insert==0) first->link=p; // p->link=null
}}
void input() /* 建立程序控制塊函式*/
}
int space() //統計就緒佇列長度
return(l);
}
void disp(pcb * pr) /*建立程序顯示函式,用於顯示當前程序*/
void check() /* 建立程序檢視函式 */ }
void destroy() /*建立程序撤消函式(程序執行結束,撤消程序)*/
void running() /* 建立程序就緒函式(程序執行時間到,置就緒狀態*/
(p->cputime)++;
if(p->cputime==p->needtime)
destroy(); /* 呼叫destroy函式*/
else
} void main() /*主函式*/
printf("\n\n 程序已經完成.\n");
ch=getchar();
}
演算法流程圖:
作業系統 程序排程演算法
cpu利用率 cpu忙碌的時間佔總時間的比例 利 用率 忙碌的 時間總時 間利用率 frac 利用率 總時 間忙碌的 時間 系統吞吐量 單位時間完成作業或程序的數量 吞 吐量 完成的 作業數量 總時 間吞吐量 frac 吞吐量 總時 間完成的 作業數量 周轉時間 完成作業需要花費的總時間 周 轉時 ...
作業系統 程序排程及其演算法
儲存處理機資訊 按某種演算法選取程序 把處理器分配給程序 排隊器。把就緒程序排成乙個或者幾個佇列 分派器。把程序從就緒佇列中取出來,然後把處理機給他 非搶占式 搶占式把就緒程序排成乙個佇列,把cpu分配給隊首程序,執行一定的時間,執行完畢就分配給另乙個新的隊首程序,每隔一定的時間就執行乙個程序 一旦...
程序排程演算法 作業系統筆記
1 先來先服務 first come first service,fcfs 排程演算法按照程序進入就緒佇列的先後順序選擇可以占用處理器的程序。這是一種不可搶占方式的排程演算法,優點是實現簡單,缺點是後來的程序等待cpu的時間較長。它現今主要用作輔助排程法 例如結合在優先順序排程演算法中使用,當有兩個...