操作系统|先来先服务时间调度算法(FSFC)

模拟的实现为非抢占式

先来先服务算法,根据其字面意思我们就可以知道,该进程调度算法是根据到达时间依次执行,因此我们可以很容易想到用使用排序对进程进入时间进行排序操作。

进程信息根据进入时间排序

//按照进入时间进行排序
void EnterTimeSort(vector<Process>& process)
{
	if (process.size() == 0)
		return;
	for (int i = 0; i < process.size() - 1; i++)
	{
		for (int j = 0; j < process.size() - i - 1; j++)
		{
			if (process[j]._EnterTime > process[j + 1]._EnterTime)
				Swap(process[j], process[j + 1]);
		}
	}
}

然后根据所所排好序的进程信息依次进行进程调度

在依次将排好需的进程执行,我们需要有一个时间线,来标记当前时间,时间线的起始时间为第一个进程被调度的时间;
在进行进程调度时,如果进程的进入时间小于时间线时间,证明当前时间下没有进程,则需要将时间线的时间加快,移动至最近的一条进程进入时间。
如果进程的进入时间大于时间线时间,则证明该进程早已经到达,但是一直在等待,因此该进程的开始时间应该为当前时间线的时间。

//依次执行进程
void RunProcess(vector<Process>& process)
{
	if (process.size() == 0)
		return;
	for (int i = 0; i < process.size(); i++)
	{
		//如果进程进入时间小于等于时间线的时间
		if (process[i]._LineTime <= process[i]._EnterTime)
		{
			//则该开始时间就应为该进程的进入时间
			process[i]._BeginTime = process[i]._EnterTime;
			process[i]._LineTime = process[i]._EnterTime;  //将时间线的时间调整至进程进入时间
			process[i]._LineTime += process[i]._ServiceTime;  //将时间线增加一个该进程的服务时间
			process[i]._FinishTime = process[i]._LineTime;  //将进程结束时间修改为当前时间线时间
		}
		else  //进程进入时间大于时间线时间,则证明该进程一直在等待状态
		{
			process[i]._BeginTime = process[i]._LineTime;  //将进程开始时间赋值为当前时间线时间
			process[i]._LineTime += process[i]._ServiceTime;  //将时间线增加一个该进程时间
			process[i]._FinishTime = process[i]._LineTime;  //将进程结束时间修改为当前时间线时间
		}
		process[i]._rTime = process[i]._FinishTime - process[i]._EnterTime;   //计算该进程的周转时间
		process[i]._PowerTime = process[i]._rTime / process[i]._ServiceTime;  //计算该进程的带权周转时间
	}
}

先来先服务进程调度

//先来先服务
void FCFS(vector<Process> process)
{
	if (process.size() == 0)
		return;
	EnterTimeSort(process);  //按照进入时间排序
	process[0]._LineTime = process[0]._EnterTime;   //将最早进入内存的是进程时间设置为时间线的起点
	RunProcess(process);  //依次执行所有进程
	OutPut(process);  //打印进程信息
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值