C++ でFCFSアルゴリズムを実装する方法を教えてください。

First-Come First-Served(FCFS)は、まず最初に到着したタスクが実行される先着順スケジューリングアルゴリズム。

以下にFCFSスケジューリングアルゴリズムをC++で実装した簡単な例を示します。

#include <iostream>
#include <vector>

struct Process {
    int arrivalTime;
    int burstTime;
};

void calculateWaitingTime(std::vector<Process>& processes, std::vector<int>& waitingTimes) {
    int n = processes.size();
    waitingTimes[0] = 0; // 第一个进程的等待时间为0

    for (int i = 1; i < n; i++) {
        waitingTimes[i] = processes[i - 1].burstTime + waitingTimes[i - 1];
    }
}

void calculateTurnaroundTime(std::vector<Process>& processes, std::vector<int>& waitingTimes, std::vector<int>& turnaroundTimes) {
    int n = processes.size();

    for (int i = 0; i < n; i++) {
        turnaroundTimes[i] = processes[i].burstTime + waitingTimes[i];
    }
}

void calculateAverageTime(std::vector<Process>& processes) {
    int n = processes.size();
    std::vector<int> waitingTimes(n);
    std::vector<int> turnaroundTimes(n);

    calculateWaitingTime(processes, waitingTimes);
    calculateTurnaroundTime(processes, waitingTimes, turnaroundTimes);

    int totalWaitingTime = 0;
    int totalTurnaroundTime = 0;

    for (int i = 0; i < n; i++) {
        totalWaitingTime += waitingTimes[i];
        totalTurnaroundTime += turnaroundTimes[i];
    }

    float averageWaitingTime = static_cast<float>(totalWaitingTime) / n;
    float averageTurnaroundTime = static_cast<float>(totalTurnaroundTime) / n;

    std::cout << "Average Waiting Time: " << averageWaitingTime << std::endl;
    std::cout << "Average Turnaround Time: " << averageTurnaroundTime << std::endl;
}

int main() {
    std::vector<Process> processes = { {0, 10}, {6, 20}, {60, 5}, {110, 8} };

    calculateAverageTime(processes);

    return 0;
}

上述の例では、プロセスが到着時間と実行時間を保持するStructure型プロセスが定義されています。 calculateWaitingTime関数は各プロセスの待ち時間を計算するために使用され、calculateTurnaroundTime関数は各プロセスのターンアラウンド時間を計算するために使用されます。 calculateAverageTime関数は上位2つの関数を呼び出して、平均待ち時間と平均ターンアラウンド時間を計算します。 main関数は、プロセス配列を定義し、calculateAverageTime関数に渡して、計算が実行されます。

以上の内容は、FCFSアルゴリズムの基本的な実装内容であり、必要に応じて調整と拡張を行うことができます。

bannerAds