实时调度之最早截止时间EDF

EDF算法

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
class Process{
   
    string name;
    int run_time;
    int dead_time;
public:
    Process(string tname,int trun_time,int tdead_time):name(tname),run_time(trun_time),dead_time(tdead_time){
   }
    void setRun_time(){
   run_time--;}
    int getDead_time(){
   return dead_time;}
    int getRun_time(){
   return run_time;}
    string getName(){
   return name;}
    bool OK(){
   return run_time==0;}
    bool operator<(Process& p1){
   return this->dead_time<p1.dead_time;}
};
class EDF{
   
    vector
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C语言的非周期性任务实时调度EDF的伪代码: ``` /* 定义任务结构体 */ typedef struct { int id; /* 任务ID */ int wcet; /* 任务的最坏情况执行时间 */ int deadline; /* 任务的截止时间 */ int remaining; /* 任务剩余执行时间 */ } Task; /* 声明任务数组 */ Task tasks[N]; /* 初始化任务数组 */ for (int i = 0; i < N; i++) { tasks[i].id = i; tasks[i].wcet = /* 任务最坏情况执行时间 */; tasks[i].deadline = /* 任务截止时间 */; tasks[i].remaining = tasks[i].wcet; } /* 定义EDF调度函数 */ void edf_schedule() { int time = 0; int completed = 0; while (completed < N) { /* 找到剩余执行时间最小的任务 */ int min_remaining = INT_MAX; int min_index = -1; for (int i = 0; i < N; i++) { if (tasks[i].remaining > 0 && tasks[i].deadline < min_remaining) { min_remaining = tasks[i].remaining; min_index = i; } } /* 执行该任务 */ tasks[min_index].remaining--; time++; /* 检查任务是否完成 */ if (tasks[min_index].remaining == 0) { printf("Task %d completed at time %d\n", tasks[min_index].id, time); completed++; } /* 检查任务是否超时 */ for (int i = 0; i < N; i++) { if (tasks[i].remaining > 0 && tasks[i].deadline <= time) { printf("Task %d missed deadline at time %d\n", tasks[i].id, time); /* 重置任务剩余执行时间 */ tasks[i].remaining = tasks[i].wcet; } } } } ``` 该伪代码实现了EDF调度算法,通过找到剩余执行时间最小的任务来进行调度,确保了截止时间最早的任务首先被执行。同时,该算法也考虑了任务是否超时的情况,并进行了处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值