SRTF最短剩余时间优先调度C语言实现

什么是SRTF?
SRTF=Shortest Remaining Time First
实现思想:当新进程进入就绪队列时,如果它需要处理的时间比当前进程处理时间短,则将当前进程挂起,把CPU分配给新进程。
SRTF就是SJF的抢占式版本。

#include<stdio.h>
#include<stdlib.h>
typedef struct PCB {
   
	int id;//任务序号
	int arrivetime;//任务到达时间
	int runtime;//任务需要执行的时间
	int counttime;//记录任务处理一段时间后,剩下的需要处理的时间
	struct PCB* next;
}*task, pcb;
pcb* creattask(int x, int y, int z) {
   
	task newtask = (task)malloc(sizeof(pcb));
	newtask->id = x;
	newtask->arrivetime = y;
	newtask->runtime = z;
	newtask->counttime = z;
	newtask->next = NULL;
	return newtask;
}
void deltask(pcb* n, int x) {
   
	task d
  • 20
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SRTF(Shortest Remaining Time First)是一种用于调度任务的算法,它根据任务的剩余执行时间来选择下一个要执行的任务。以下是用C语言实现SRTF调度算法的示例代码: ```c #include <stdio.h> #include <stdbool.h> typedef struct { int pid; // 进程ID int burst; // 执行时间 int remaining; // 剩余执行时间 } Process; void SRTF(Process processes[], int n) { int currentTime = 0; int totalBurstTime = 0; bool isCompleted[n]; // 初始化剩余执行时间和完成状态 for (int i = 0; i < n; i++) { processes[i].remaining = processes[i].burst; isCompleted[i] = false; totalBurstTime += processes[i].burst; } while (currentTime < totalBurstTime) { int shortestJobIndex = -1; int shortestRemainingTime = INT_MAX; // 寻找剩余时间最短的任务 for (int i = 0; i < n; i++) { if (!isCompleted[i] && processes[i].remaining < shortestRemainingTime) { shortestRemainingTime = processes[i].remaining; shortestJobIndex = i; } } // 更新当前时间和任务的剩余执行时间 currentTime++; processes[shortestJobIndex].remaining--; // 如果任务执行完毕,将其标记为已完成 if (processes[shortestJobIndex].remaining == 0) { isCompleted[shortestJobIndex] = true; } } // 打印结果 printf("进程ID\t执行时间\n"); for (int i = 0; i < n; i++) { printf("%d\t%d\n", processes[i].pid, processes[i].burst); } } int main() { Process processes[] = { {1, 6}, {2, 8}, {3, 3}, {4, 4} }; int n = sizeof(processes) / sizeof(Process); SRTF(processes, n); return 0; } ``` 这段代码中,定义了一个`Process`结构体,其中包含进程的ID、执行时间和剩余执行时间。`SRTF`函数用于实现SRTF调度算法,使用了一个循环来寻找剩余时间最短的任务,并依次减少任务的剩余执行时间。程序会不断更新当前时间和任务的剩余执行时间,直到所有任务都执行完毕。最后,会打印出每个进程的ID和执行时间。在`main`函数中,定义了一个示例任务队列并调用了`SRTF`函数进行调度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值