【C语言练习】083. 编写代码实现简单的操作系统调度算法

083. 编写代码实现简单的操作系统调度算法

  • 083. 编写代码实现简单的操作系统调度算法
    • 1. 先来先服务(FCFS)调度算法
      • 示例代码:FCFS调度算法
    • 2. 最短作业优先(SJF)调度算法
      • 示例代码:SJF调度算法
    • 3. 轮转调度(RR)算法
      • 示例代码:RR调度算法
    • 4. 优先级调度算法
      • 示例代码:优先级调度算法
      • 调度算法概述
      • 先来先服务(FCFS)
      • 短作业优先(SJF)
      • 优先级调度
      • 轮转调度(RR)
      • 对比总结

083. 编写代码实现简单的操作系统调度算法

在操作系统中,调度算法用于决定哪个进程或线程应该获得CPU资源。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(RR)和优先级调度等。以下将分别实现这些简单的调度算法。

1. 先来先服务(FCFS)调度算法

先来先服务(FCFS)调度算法是最简单的调度算法,按照进程到达的顺序进行调度。

示例代码:FCFS调度算法

#include 
#include 

typedef struct {
   
    int processID;
    int arrivalTime;
    int burstTime;
    int completionTime;
    int waitingTime;
    int turnaroundTime;
} Process;

void fcfsScheduling(Process processes[], int n) {
   
    int currentTime = 0;
    for (int i = 0; i < n; i++) {
   
        processes[i].completionTime = currentTime + processes[i].burstTime;
        processes[i].waitingTime = currentTime - processes[i].arrivalTime;
        processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime;
        currentTime = processes[i].completionTime;
    }
}

void printProcesses(Process processes[], int n) {
   
    printf("PID\tArrival\tBurst\tCompletion\tWaiting\tTurnaround\n");
    for (int i = 0; i < n; i++) {
   
        printf("%d\t%d\t%d\t%d\t%d\t%d\n",
               processes[i].processID,
               processes[i].arrivalTime,
               processes[i].burstTime,
               processes[i].completionTime,
               processes[i].waitingTime,
               processes[i].turnaroundTime);
    }
}

int main() {
   
    Process processes[] = {
   
        {
   1, 0, 5},
        {
   2, 1, 3},
        {
   3, 2, 8},
        {
   4, 3, 6},
        {
   5, 4, 2}
    };
    int n = sizeof(processes) / sizeof(processes[0]);

    fcfsScheduling(processes, n);
    printProcesses(processes, n);

    return 0;
}

2. 最短作业优先(SJF)调度算法

最短作业优先(SJF)调度算法选择具有最短执行时间的进程进行调度。

示例代码:SJF调度算法

#include 
#include 

typedef struct {
   
    int processID;
    int arrivalTime;
    int burstTime;
    int completionTime;
    int waitingTime;
    int turnaroundTime;
} Process;

int compare(const void* a, const void* b) {
   
    Process* p1 = (Process*)a;
    Process* p2 = (Process*)b;
    return p1->burstTime - p2->burstTime;
}

void sjfScheduling(Process processes[

你可能感兴趣的:(从零开始学习机器人,算法,c语言,开发语言,数据结构,排序算法)