操作系统实验——实现FCFS与SJF算法(C/C++)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

一、FCFS算法思路与代码部分

二、SJF算法思路与代码部分

三、全部代码


前言

本文用于记录我的操作系统实验一 只用了c++的cout cin语句 基本都是c。

文中定义进程为一结构体(已知条件为到达时间cometime服务时间servetime):

typedef struct pcb
{
	char id;//进程id
	int cometime;//到达时间
	int servetime;//服务时间
	int starttime;//开始时间
	int endtime;//结束时间
	int cycletime;//周转时间
	float powertime;//带权周转时间
};

一、FCFS算法思路与代码部分

FCFS(First come first serve)即先到先服务,以到达时间为基准,哪个进程的到达时间小就先服务,不过对于第i+1个进程的到达时间在第i个进程的完成时间之前还是之后要进行分类讨论。

首先是按到达时间排序(小的在前):

void sort_time(pcb p[], int n)//冒泡排序(按到达时间
{
	int i, j;
	pcb t;//中间变量
	for (i = 0; i < n - 1; i++)
	{
		for (j = i + 1; j <= n-1; j++)
			if (p[i].cometime > p[j].cometime)
			{
				t = p[i];
				p[i] = p[j];
				p[j] = t;
			}
	}
}

排完序后对于第一个到达的进程服务(即计算第一个进程的各种时间):

    p[0].starttime = p[0].cometime;
	p[0].endtime = p[0].starttime + p[0].servetime;
	p[0].cycletime = p[0].endtime - p[0].cometime;
	p[0].powertime = (p[0].cycletime * 1.0) / (p[0].servetime * 1.0);

接着就是遍历p[1]到p[n-1],进行分类讨论:

for (int i = 1; i <= n - 1; i++)
	{
        //若i-1还未完成时i就来了,则等待i-1完成
		if (p[i].cometime < p[i - 1].endtime)
			p[i].starttime = p[i - 1].endtime;
		else
        //i-1完成后经过一段空闲时间i来了,则直接服务
		{
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值