【C语言】级反馈队列调度算法(Multilevel Feedback Queue Scheduling)

多级反馈队列调度算法(Multilevel Feedback Queue Scheduling)是一种操作系统进程调度算法,它将进程分配到不同优先级的队列中,并根据进程的行为动态调整其优先级。以下是用C语言实现多级反馈队列调度算法的简单示例:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// 定义进程结构体
typedef struct Process {
    int pid;
    int burst_time;
    int priority;
    int waiting_time;
    int turnaround_time;
} Process;

void schedule(Process *processes, int num_processes, int num_queues, int *quantum);

int main() {
    int num_processes = 5;
    int num_queues = 3;
    int quantum[] = {4, 8, 16}; // 每个队列的时间片长度

    Process processes[] = {
        {1, 10, 1},
        {2, 29, 3},
        {3, 3, 2},
        {4, 7, 1},
        {5, 12, 3}
    };

    schedule(processes, num_processes, num_queues, quantum);

    return 0;
}

void schedule(Process *processes, int num_processes, int num_queues, int *quantum) {
    int time = 0;
    bool done = false;

    // 创建多级队列
    Process **queues = (Process **) malloc(num_queues * sizeof(Process *));
    for (int i = 0; i < num_queues; i++) {
        queues[i] = (Process *) malloc(num_processes * sizeof(Process));
    }

    int *queue_size = (int *) calloc(num_queues, sizeof(int));

    // 将进程放入相应的优先级队列中
    for (int i = 0; i < num_processes; i++) {
        int priority = processes[i].priority - 1;
        queues[priority][queue_size[priority]++] = processes[i];
    }

    while (!done) {
        done = true;

        // 遍历多级队列
        for (int i = 0; i < num_queues; i++) {
            for (int j = 0; j < queue_size[i]; j++) {
                if (queues[i][j].burst_time > 0) {
                    done = false;

                    // 计算实际时间片长度
                    int actual_quantum = (queues[i][j].burst_time > quantum[i]) ? quantum[i] : queues[i][j].burst_time;
                    time += actual_quantum;
                    queues[i][j].burst_time -= actual_quantum;

                    // 计算等待时间和周转时间
                    for (int k = 0; k < num_processes; k++) {
                        if (processes[k].pid != queues[i][j].pid && processes[k].burst_time > 0) {
                            processes[k].waiting_time += actual_quantum;
                            processes[k].turnaround_time += actual_quantum;
                        }
                    }
                }
            }
        }
    }

    // 计算并显示结果
    double total_waiting_time = 0;
    double total_turnaround_time = 0;
    for (int i = 0; i < num_processes; i++) {
        total_waiting_time += processes[i].waiting_time;
        total_turnaround_time += processes[i].turnaround_time + processes[i].
burst_time;

    printf("进程 %d,等待时间 = %d,周转时间 = %d\n", processes[i].pid, processes[i].waiting_time, processes[i].turnaround_time);
}

double avg_waiting_time = total_waiting_time / num_processes;
double avg_turnaround_time = total_turnaround_time / num_processes;

printf("平均等待时间 = %.2lf\n", avg_waiting_time);
printf("平均周转时间 = %.2lf\n", avg_turnaround_time);

// 释放分配的内存
for (int i = 0; i < num_queues; i++) {
    free(queues[i]);
}
free(queues);
free(queue_size);
}


这个示例代码实现了一个简化版的多级反馈队列调度算法,进程根据它们的优先级被放入不同的队列中。代码首先初始化进程数据,然后调用`schedule`函数进行调度。
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多级反馈队列调度算法是一种常见的进程调度算法,可以根据进程的优先和运行状态来动态调整进程的执行顺序。下面是一个简单的C语言代码,实现了多级反馈队列调度算法: ```c #include <stdio.h> #include <stdlib.h> #define MAX_PROCESS 5 // 进程结构体 typedef struct process { int pid; // 进程ID int burst_time; // 运行时间 int priority; // 优先 int remaining_time; // 剩余时间 int queue; // 队列别 int quantum; // 时间片 } Process; // 队列结构体 typedef struct queue { Process* processes[MAX_PROCESS]; int front; int rear; } Queue; // 初始化队列 void initQueue(Queue* q) { q->front = 0; q->rear = -1; } // 判断队列是否为空 int isEmpty(Queue* q) { return q->rear < q->front; } // 入队操作 void enqueue(Queue* q, Process* p) { if (q->rear >= MAX_PROCESS - 1) { printf("队列已满,无法插入新的进程\n"); return; } q->rear++; q->processes[q->rear] = p; } // 出队操作 Process* dequeue(Queue* q) { if (isEmpty(q)) { printf("队列为空,无法出队\n"); return NULL; } Process* p = q->processes[q->front]; q->front++; return p; } // 执行进程 void executeProcess(Process* p, int execution_time) { p->remaining_time -= execution_time; if (p->remaining_time <= 0) { printf("进程 %d 执行完毕\n", p->pid); } else { printf("进程 %d 继续执行,剩余时间 %d\n", p->pid, p->remaining_time); } } // 多级反馈队列调度算法 void multilevelFeedbackScheduling(Process* processes, int num_processes, int time_slice) { Queue queues[3]; initQueue(&queues[0]); initQueue(&queues[1]); initQueue(&queues[2]); // 初始化进程,并入队到第一个队列 for (int i = 0; i < num_processes; i++) { processes[i].remaining_time = processes[i].burst_time; processes[i].queue = 0; processes[i].quantum = time_slice; enqueue(&queues[0], &processes[i]); } while (!isEmpty(&queues[0]) || !isEmpty(&queues[1]) || !isEmpty(&queues[2])) { if (!isEmpty(&queues[0])) { Process* p = dequeue(&queues[0]); executeProcess(p, p->quantum); if (p->remaining_time <= 0) { continue; } if (p->quantum > 0) { p->queue = 1; enqueue(&queues[1], p); } else { p->queue = 2; enqueue(&queues[2], p); } } else if (!isEmpty(&queues[1])) { Process* p = dequeue(&queues[1]); executeProcess(p, p->quantum); if (p->remaining_time <= 0) { continue; } if (p->quantum > 0) { p->queue = 1; enqueue(&queues[1], p); } else { p->queue = 2; enqueue(&queues[2], p); } } else { Process* p = dequeue(&queues[2]); executeProcess(p, p->quantum); if (p->remaining_time > 0) { p->queue = 2; enqueue(&queues[2], p); } } } } int main() { Process processes[5] = { {1, 10, 1, 0, 0, 0}, {2, 5, 0, 0, 0, 0}, {3, 8, 1, 0, 0, 0}, {4, 2, 2, 0, 0, 0}, {5, 6, 0, 0, 0, 0} }; multilevelFeedbackScheduling(processes, 5, 2); return 0; } ``` 以上代码实现了一个简单的多级反馈队列调度算法。在main函数中定义了5个进程,并调用`multilevelFeedbackScheduling`函数进行调度。其中,进程的`burst_time`表示运行时间,`priority`表示优先,`queue`表示队列别,`quantum`表示时间片。通过执行`make`命令进行编译运行,在执行过程中会输出进程的执行情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值