操作系统_高响应比优先算法_c语言实现

在这里插入图片描述
注:在PTA上面提交时务必把scanf_s改成scanf,(编译器用的是vs2019).

主函数

int main()
{
   
	int n;              //进程数量
	scanf_s("%d", &n);
	struct pcb p[333];
	input(p, n);
	sort(p, n);
	hrrf(p, n);
	output(p, n);
	return 0;
}

核心算法 高响应比优先

void hrrf(struct pcb* p, int n) {
   
	int finishedcount = 0;		  //记录已经完成的进程数
	int unfinishedposition = 0;		//记录未完成进程的位置
	double nowtime = 0;		     //现在时间
	for (int i = 0; i < n; i++) {
   		
		p[i].state = 0;
	}
	while (finishedcount < n) {
   

		double max_rp = 0;			//中间变量比较响应比
		int next = 0;		       //记录下一个要运行的位置下标
	
		//扫描找出有max响应比的进程下标
		for (int i = unfinishedposition; (i < n && p[i].atime <= nowtime&&i!=0); i++) {
   
			if (p[i].state == 1) {
   	 
				continue;
			}
			if (p[i].rp > max_rp) {
   			//扫描对比rp
				max_rp = p[i].rp;
				next = i;					//记录下一个要执行进程下标
			}
		}

		if (nowtime < p[unfinishedposition].atime * 1.0)	 //考虑到达的进程都运行完了, 有些进程还没到达的情况
		{
   
			nowtime = p[unfinishedposition].atime * 1.0;
			next = unfinishedposition;
		}

		//运行阶段
		{
   
			nowtime = nowtime + p[next].rtime;		//更新现在时间
			p[next].state = 1;						 //记录运行状态
			p[next].ftime = nowtime;	     		 //完成时间=现在时间
			p[next].ttime = nowtime - p[next].atime;			//周转=现在时间-到达
			p[next].wtime = 1.0 * p[next].ttime / p[next].rtime;		//带权周转=周转/运行
			
			
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值