1.建立pcb結構體代表對相應程序的唯一標識,內含以下資料:
程序名要求執行時間
狀態指標
2.建立相應佇列和鍊錶
dequeready_queue; //就緒佇列
dequeblock_queue; //阻塞佇列
pcb_stru* ready_list = (pcb_stru*)malloc(sizeof(pcb_stru)); //就緒狀態鍊錶
pcb_stru* block_list = (pcb_stru*)malloc(sizeof(pcb_stru)); //阻塞狀態鍊錶
3.編寫對應函式(如下)並按一定順序呼叫
addaprocesstordyque():新建程序,則增加乙個pcb到就緒佇列;
runtofinish():執行程序,則從就緒佇列頭部刪除一程序並投入執行,顯示執行狀態,並順利結束;
runwait():執行後堵塞,從就緒佇列頭部刪除一程序並投入執行,顯示執行1個時間單位後又堵塞,並將此程序加入到堵塞佇列尾部;
signal():喚醒程序,從堵塞佇列頭部將堵塞的程序加入到就緒佇列尾部;
show()顯示所有程序的程序控制塊pcb的資訊。
注意事項:
1.所有程序的新增與執行都由控制台輸入指令唯一控制(最大併發度要求為5)
2.要求執行時間——假設程序需要執行的單位時間數;
狀態——可假設有三種狀態,"就緒"狀態、"阻塞"狀態和「結束」狀態。新建立程序的初始狀態都為「就緒」,用「r」表示,
當乙個程序執行結束後,它的狀態為「結束」,銷毀此程序 「阻塞」狀態的程序用「b」表示。
**如下:
#define maxprocess 5 //最大併發度
#include #include#include#include#include#include//雙端佇列
using namespace std;
typedef struct pcb
pcb_stru;
dequeready_queue; //就緒佇列
dequeblock_queue; //阻塞佇列
pcb_stru* ready_list = (pcb_stru*)malloc(sizeof(pcb_stru)); //就緒狀態鍊錶
pcb_stru* block_list = (pcb_stru*)malloc(sizeof(pcb_stru)); //阻塞狀態鍊錶
pcb_stru*r = ready_list;//指向就緒佇列的最後乙個節點
pcb_stru*b = block_list;//指向阻塞佇列的最後乙個節點
int g_processcount = 0;//實時記錄當前程序數
void print_order();
void addaprocesstordyque();
void runtofinish();
void runwait();
void signal();
void show();
//命令提示
void print_order()
//新建程序放入就緒佇列
void addaprocesstordyque()
//新建節點pro進隊
ready_queue.push_back(pro);
//新建節點pro插入就緒鍊錶的尾部
pro->next_pcb = null;
r->next_pcb = pro;
r = r->next_pcb;
g_processcount++;
}//執行乙個程序到結束
void runtofinish()
else }
//執行乙個程序到阻塞
void runwait()
else//執行一秒後結束
}else }
//從阻塞佇列喚醒乙個程序
void signal()
//將pro1放入就緒佇列
ready_queue.push_back(pro1);
//將pro1放入就緒鍊錶
pro1->next_pcb = null;
r->next_pcb = pro1;
r = r->next_pcb;
if (r != null)
else
//刪除隊首元素
block_queue.pop_front();
} else }
void show()
} else
//輸出阻塞佇列
if (block_list->next_pcb != null) }
else }
int main(int argc, char* argv)
//判斷是否達到最大併發度
if (g_processcount >= maxprocess)
print_order();
} system("pause");
return 0;
}
vs2013執行如下:
處理機排程 先來先服務排程(FCFS)
在多道程式系統中,排程的實質是一種資源分配。處理機排程是對處理機資源進行分配。處理排程演算法是指根據處理機分配策略所規定的的處理機分配演算法。此系列都是實現的非搶占的排程演算法。先來先服務排程 按照程序的先後進入次序進行排程 輸入 作業的數目,作業的到達時間與服務時間.輸出 作業的呼叫序列與其周轉時...
處理機排程
如果沒有處理機排程,則意味著必須等待當前程序執行完畢後下一程序才能執行,而程序常需等待外設的輸入,i o的速度相比處理機是非常慢的,因此這會對處理機資源造成嚴重浪費。引入排程後,可在執行程序等待輸入時把處理機排程給其他程序,從而提高處理機的利用率。作業排程 高階 在外存的作業中挑選乙個或多個作業,給...
處理機排程
多道程式系統中,程序的數量往往多於處理機的個數,程序爭用處理機的情況在所難免。處理機排程是對處理機進行分配,即從就緒佇列中按照一定的演算法選擇乙個程序並將處理機分配給它執行,以實現程序併發執行。乙個作業從提交到完成,經歷以下 排程 作業排程 從外存中選擇乙個或多個作業,分配記憶體 輸入 輸出等必要資...