进程典型七大调度算法

进程调度方式

类别:抢占式、非抢占式

调度算法的评价准则

面向用户

作业周转时间 = 后备队列等待时间 + 就绪队列等待时间+执行时间+等待IO时间

平均周转时间 = T = 1 n ( ∑ i = 1 n T i ) T = \frac{1}{n}(\sum_{i=1}^nT_i) T=n1(i=1nTi), T i T_i Ti为作业i的周转时间

带权周转时间 = W= 1 n ( ∑ i = 1 n T i T S i ) \frac{1}{n}(\sum_{i=1}^n\frac{T_i}{T_{Si}})

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用C语言实现多级反馈队列调度算法的示例: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_QUEUE_SIZE 100 #define MAX_LEVELS 3 typedef struct process { int id; int burst_time; int remaining_time; int level; } process_t; typedef struct queue { int front; int rear; int size; process_t* processes[MAX_QUEUE_SIZE]; } queue_t; queue_t* create_queue() { queue_t* queue = (queue_t*) malloc(sizeof(queue_t)); queue->front = 0; queue->rear = -1; queue->size = 0; return queue; } bool is_empty(queue_t* queue) { return queue->size == 0; } bool is_full(queue_t* queue) { return queue->size == MAX_QUEUE_SIZE; } void enqueue(queue_t* queue, process_t* process) { if (is_full(queue)) { printf("Error: Queue is full\n"); return; } queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE; queue->processes[queue->rear] = process; queue->size++; } process_t* dequeue(queue_t* queue) { if (is_empty(queue)) { printf("Error: Queue is empty\n"); return NULL; } process_t* process = queue->processes[queue->front]; queue->front = (queue->front + 1) % MAX_QUEUE_SIZE; queue->size--; return process; } process_t* create_process(int id, int burst_time, int level) { process_t* process = (process_t*) malloc(sizeof(process_t)); process->id = id; process->burst_time = burst_time; process->remaining_time = burst_time; process->level = level; return process; } void run_processes(queue_t** queues, int num_queues) { int time_quantum[MAX_LEVELS] = {4, 8, 16}; int current_time = 0; int current_level = 0; while (true) { bool all_queues_empty = true; for (int i = current_level; i < num_queues; i++) { if (!is_empty(queues[i])) { all_queues_empty = false; break; } } if (all_queues_empty) { break; } process_t* current_process = dequeue(queues[current_level]); if (current_process != NULL) { printf("Time %d: Running process %d from level %d\n", current_time, current_process->id, current_process->level); if (current_process->remaining_time <= time_quantum[current_level]) { current_time += current_process->remaining_time; current_process->remaining_time = 0; } else { current_time += time_quantum[current_level]; current_process->remaining_time -= time_quantum[current_level]; } if (current_process->remaining_time == 0) { printf("Time %d: Process %d completed\n", current_time, current_process->id); free(current_process); } else { int next_level = current_level + 1; if (next_level < num_queues) { printf("Time %d: Process %d demoted to level %d\n", current_time, current_process->id, next_level); current_process->level = next_level; enqueue(queues[next_level], current_process); } else { printf("Time %d: Process %d continues in level %d\n", current_time, current_process->id, current_level); enqueue(queues[current_level], current_process); } } } current_level = (current_level + 1) % num_queues; } } int main() { queue_t* queues[MAX_LEVELS]; for (int i = 0; i < MAX_LEVELS; i++) { queues[i] = create_queue(); } enqueue(queues[0], create_process(1, 12, 0)); enqueue(queues[0], create_process(2, 8, 0)); enqueue(queues[0], create_process(3, 6, 0)); enqueue(queues[0], create_process(4, 4, 0)); run_processes(queues, MAX_LEVELS); for (int i = 0; i < MAX_LEVELS; i++) { free(queues[i]); } return 0; } ``` 这个程序使用了一个包含三个队列的多级反馈队列调度算法,每个队列的时间片大小依次为4、8和16,每个队列的优先级依次递减。在主函数中,我们创建了四个进程并将它们加入第一个队列中,然后调用run_processes函数来运行它们。运行过程中,程序会输出每个进程的执行情况,包括进程编号、所在队列、开始时间、结束时间等信息。最后,我们释放了创建的所有队列和进程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值