#include <stdio.h>
#define N 5
typedef struct {
char name[3];
int arrival;
int service;
int start;
int finish;
int turnaround;
int waiting;
} Process;
int main() {
Process p[N] = {
{"P1", 0, 10},
{"P2", 5, 3},
{"P3", 2, 4},
{"P4", 2, 4},
{"P5", 8, 2}
};
float sumTAT = 0, sumWait = 0, totalService = 0;
printf("\n===== SIMULATION FCFS =====\n");
for (i = 0; i < N; i++) {
p[i].finish = p[i].start + p[i].service;
p[i].turnaround = p[i].finish - p[i].arrival;
p[i].waiting = p[i].turnaround - p[i].service;
sumTAT += p[i].turnaround;
sumWait += p[i].waiting;
totalService += p[i].service;
}
float avgTAT = sumTAT / N;
float avgWait = sumWait / N;
float throughput = (float)N / p[N-1].finish;
float cpuUtil = (totalService / p[N-1].finish) * 100;
printf("\n%-8s%-10s%-10s%-10s%-10s%-10s%-10s\n", "Process", "Arrive", "Service", "Start", "Finish", "Tr", "Tw");
printf("---------------------------------------------------------------\n");
for (i = 0; i < N; i++) {
printf("%-8s%-10d%-10d%-10d%-10d%-10d%-10d\n", p[i].name, p[i].arrival, p[i].service,
p[i].start, p[i].finish, p[i].turnaround, p[i].waiting);
}
printf("\n--- Résultats globaux ---\n"); printf("Temps moyen de rotation : %.2f\n", avgTAT
); printf("Temps moyen d'attente : %.2f\n", avgWait
); printf("Débit du système : %.2f processus/unité de temps\n", throughput
); printf("Utilisation du CPU : %.2f %%\n", cpuUtil
);
// ===== Diagramme de Gantt =====
printf("\n--- Diagramme de Gantt ---\n\n");
// Première ligne : barres
for (i = 0; i < N; i++) {
for (int j = 0; j < p[i].service; j++)
}
// Deuxième ligne : noms des processus
for (i = 0; i < N; i++) {
for (int j = 0; j < p[i].service; j++)
}
// Troisième ligne : temps
int current = 0;
for (i = 0; i < N; i++) {
if (i == 0)
printf("%*d", p
[i
].
service * 2, p
[i
].
finish); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE4gNQoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBuYW1lWzNdOwogICAgaW50IGFycml2YWw7CiAgICBpbnQgc2VydmljZTsKICAgIGludCBzdGFydDsKICAgIGludCBmaW5pc2g7CiAgICBpbnQgdHVybmFyb3VuZDsKICAgIGludCB3YWl0aW5nOwp9IFByb2Nlc3M7CgppbnQgbWFpbigpIHsKICAgIFByb2Nlc3MgcFtOXSA9IHsKICAgICAgICB7IlAxIiwgMCwgMTB9LAogICAgICAgIHsiUDIiLCA1LCAzfSwKICAgICAgICB7IlAzIiwgMiwgNH0sCiAgICAgICAgeyJQNCIsIDIsIDR9LAogICAgICAgIHsiUDUiLCA4LCAyfQogICAgICAgIAogICAgfTsKCiAgICBpbnQgaSwgdGltZSA9IDA7CiAgICBmbG9hdCBzdW1UQVQgPSAwLCBzdW1XYWl0ID0gMCwgdG90YWxTZXJ2aWNlID0gMDsKCiAgICBwcmludGYoIlxuPT09PT0gU0lNVUxBVElPTiBGQ0ZTID09PT09XG4iKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgaWYgKHRpbWUgPCBwW2ldLmFycml2YWwpCiAgICAgICAgICAgIHRpbWUgPSBwW2ldLmFycml2YWw7CgogICAgICAgIHBbaV0uc3RhcnQgPSB0aW1lOwogICAgICAgIHBbaV0uZmluaXNoID0gcFtpXS5zdGFydCArIHBbaV0uc2VydmljZTsKICAgICAgICBwW2ldLnR1cm5hcm91bmQgPSBwW2ldLmZpbmlzaCAtIHBbaV0uYXJyaXZhbDsKICAgICAgICBwW2ldLndhaXRpbmcgPSBwW2ldLnR1cm5hcm91bmQgLSBwW2ldLnNlcnZpY2U7CgogICAgICAgIHRpbWUgPSBwW2ldLmZpbmlzaDsKCiAgICAgICAgc3VtVEFUICs9IHBbaV0udHVybmFyb3VuZDsKICAgICAgICBzdW1XYWl0ICs9IHBbaV0ud2FpdGluZzsKICAgICAgICB0b3RhbFNlcnZpY2UgKz0gcFtpXS5zZXJ2aWNlOwogICAgfQoKICAgIGZsb2F0IGF2Z1RBVCA9IHN1bVRBVCAvIE47CiAgICBmbG9hdCBhdmdXYWl0ID0gc3VtV2FpdCAvIE47CiAgICBmbG9hdCB0aHJvdWdocHV0ID0gKGZsb2F0KU4gLyBwW04tMV0uZmluaXNoOwogICAgZmxvYXQgY3B1VXRpbCA9ICh0b3RhbFNlcnZpY2UgLyBwW04tMV0uZmluaXNoKSAqIDEwMDsKCiAgICBwcmludGYoIlxuJS04cyUtMTBzJS0xMHMlLTEwcyUtMTBzJS0xMHMlLTEwc1xuIiwgCiAgICAgICAgIlByb2Nlc3MiLCAiQXJyaXZlIiwgIlNlcnZpY2UiLCAiU3RhcnQiLCAiRmluaXNoIiwgIlRyIiwgIlR3Iik7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHByaW50ZigiJS04cyUtMTBkJS0xMGQlLTEwZCUtMTBkJS0xMGQlLTEwZFxuIiwKICAgICAgICAgICAgcFtpXS5uYW1lLCBwW2ldLmFycml2YWwsIHBbaV0uc2VydmljZSwKICAgICAgICAgICAgcFtpXS5zdGFydCwgcFtpXS5maW5pc2gsIHBbaV0udHVybmFyb3VuZCwgcFtpXS53YWl0aW5nKTsKICAgIH0KCiAgICBwcmludGYoIlxuLS0tIFLDqXN1bHRhdHMgZ2xvYmF1eCAtLS1cbiIpOwogICAgcHJpbnRmKCJUZW1wcyBtb3llbiBkZSByb3RhdGlvbiA6ICUuMmZcbiIsIGF2Z1RBVCk7CiAgICBwcmludGYoIlRlbXBzIG1veWVuIGQnYXR0ZW50ZSAgIDogJS4yZlxuIiwgYXZnV2FpdCk7CiAgICBwcmludGYoIkTDqWJpdCBkdSBzeXN0w6htZSAgICAgICAgOiAlLjJmIHByb2Nlc3N1cy91bml0w6kgZGUgdGVtcHNcbiIsIHRocm91Z2hwdXQpOwogICAgcHJpbnRmKCJVdGlsaXNhdGlvbiBkdSBDUFUgICAgICA6ICUuMmYgJSVcbiIsIGNwdVV0aWwpOwoKICAgIC8vID09PT09IERpYWdyYW1tZSBkZSBHYW50dCA9PT09PQogICAgcHJpbnRmKCJcbi0tLSBEaWFncmFtbWUgZGUgR2FudHQgLS0tXG5cbiIpOwoKICAgIC8vIFByZW1pw6hyZSBsaWduZSA6IGJhcnJlcwogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHByaW50ZigifCIpOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcFtpXS5zZXJ2aWNlOyBqKyspCiAgICAgICAgICAgIHByaW50Zigi4paIIik7CiAgICB9CiAgICBwcmludGYoInxcbiIpOwoKICAgIC8vIERldXhpw6htZSBsaWduZSA6IG5vbXMgZGVzIHByb2Nlc3N1cwogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHByaW50ZigiJS0zcyIsIHBbaV0ubmFtZSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwW2ldLnNlcnZpY2U7IGorKykKICAgICAgICAgICAgcHJpbnRmKCIgICIpOwogICAgfQogICAgcHJpbnRmKCJcbiIpOwoKICAgIC8vIFRyb2lzacOobWUgbGlnbmUgOiB0ZW1wcwogICAgaW50IGN1cnJlbnQgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIGlmIChpID09IDApCiAgICAgICAgICAgIHByaW50ZigiJWQiLCBwW2ldLnN0YXJ0KTsKICAgICAgICBwcmludGYoIiUqZCIsIHBbaV0uc2VydmljZSAqIDIsIHBbaV0uZmluaXNoKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKCiAgICByZXR1cm4gMDsKfQo=