日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

動態演示操作系統進程調度算法,FCFS, RR, SPN, SRT, HRRN

作者:crazybobo1207 更新時間: 2023-10-15 編程語言

之前寫了一個靜態效果的:C/C++實現操作系統進程調度算法,FCFS, RR, SPN, SRT, HRRN-CSDN博客

這次改成了動態演示,使用了上古神器MFC(微軟基礎類庫)來做界面-_-#

定義一個定時器Timer,然后把之前的代碼都放到這個Timer里,每隔0.1秒鐘執行。進程數改成10個。

部分代碼如下,俺是C和C++混用,比如有時候用#define定義符號常量,沒用const定義常量。

//主要代碼片段

#define ScheduleFunNum 5	//5個調度算法
#define ProcedureNum 10		//10個進程
#define MaxTime 100			//總共最大時長
#define TimeSlice 4			//RR算法時間片

//代碼略

void CCPUScheduleDlg::Init()
{
	// TODO: 在此處添加實現代碼.
	
	//kill所有定時器
	for (int i = 0; i < ScheduleFunNum; i++)
	{
		KillTimer(i);
	}

	//初始化方塊區域,全部置“空”
	for (int x = 0; x < MaxTime; x++)
	{
		for (int y = 0; y < ProcedureNum; y++)
		{
			square[x][y] = 0;
		}
	}

	//清空進程列表
	procedureList.clear();

	//置初始時間為0
	time = 0;
}


void CCPUScheduleDlg::InitProcedureInfo()
{
	//pid, arriveTime, serviceTime, eclapsedTime, remainTime, accmulateTime
	//進程id,到達時間,服務時間,已服務時間,剩余時間,已用時間片
	CPUProcedure p1(1, 0, 6, 0, 6, 0);
	CPUProcedure p2(2, 2, 2, 0, 2, 0);
	CPUProcedure p3(3, 4, 4, 0, 4, 0);
	CPUProcedure p4(4, 5, 5, 0, 5, 0);
	CPUProcedure p5(5, 8, 12, 0, 12, 0);
	CPUProcedure p6(6, 12, 2, 0, 2, 0);
	CPUProcedure p7(7, 15, 8, 0, 8, 0);
	CPUProcedure p8(8, 18, 2, 0, 2, 0);
	CPUProcedure p9(9, 22, 5, 0, 5, 0);
	CPUProcedure p10(10, 25, 12, 0, 12, 0);

    //代碼略
}


void CCPUScheduleDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值

	if (nIDEvent == 1)  //FCFS
	{
		//某個進程到達,將此進程扔進List
		for (int i = 0; i < ProcedureNum; i++)
		{
			if (time == procedure[i].arriveTime)
			{
				procedureList.push_back(procedure[i]);
			}
		}
		
		//遍歷進程List,根據不同的調度算法,判斷當前輪到哪個進程執行
		CPUProcedure p;
		if (!procedureList.empty())
		{
			p = procedureList.front();
			procedureList.pop_front();
		
			square[time][p.pid - 1] = 1;  //如果當前時間是0,選擇的進程id是1,則將square[0][0]置1
			p.eclapsedTime++;
			p.remainTime--;

			if (p.remainTime != 0)	//如果當前進程未執行完畢,將其放回進程List
			{
				procedureList.push_front(p);
			}
		}

		if (time < MaxTime - 1)
		{
			time++;
		}
		else
		{
			KillTimer(1);
		}

		OnPaint();
		
	}

	else if (nIDEvent == 2) //非搶占SJF
	{

    //以下代碼略

動態視頻如下,有兩個RR算法,其中一個是俺自己造的,和原始的RR算法有點區別。

進程調度動態演示

原文鏈接:https://blog.csdn.net/crazybobo1207/article/details/133801580

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新