#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, 3},
{"P2", 2, 6},
{"P3", 4, 4},
{"P4", 6, 5},
{"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+CgojZGVmaW5lIE4gNQoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBuYW1lWzNdOwogICAgaW50IGFycml2YWw7CiAgICBpbnQgc2VydmljZTsKICAgIGludCBzdGFydDsKICAgIGludCBmaW5pc2g7CiAgICBpbnQgdHVybmFyb3VuZDsKICAgIGludCB3YWl0aW5nOwp9IFByb2Nlc3M7CgppbnQgbWFpbigpIHsKICAgIFByb2Nlc3MgcFtOXSA9IHsKICAgICAgICB7IlAxIiwgMCwgM30sCiAgICAgICAgeyJQMiIsIDIsIDZ9LAogICAgICAgIHsiUDMiLCA0LCA0fSwKICAgICAgICB7IlA0IiwgNiwgNX0sCiAgICAgICAgeyJQNSIsIDgsIDJ9CiAgICAgICAgCiAgICB9OwoKICAgIGludCBpLCB0aW1lID0gMDsKICAgIGZsb2F0IHN1bVRBVCA9IDAsIHN1bVdhaXQgPSAwLCB0b3RhbFNlcnZpY2UgPSAwOwoKICAgIHByaW50ZigiXG49PT09PSBTSU1VTEFUSU9OIEZDRlMgPT09PT1cbiIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBpZiAodGltZSA8IHBbaV0uYXJyaXZhbCkKICAgICAgICAgICAgdGltZSA9IHBbaV0uYXJyaXZhbDsKCiAgICAgICAgcFtpXS5zdGFydCA9IHRpbWU7CiAgICAgICAgcFtpXS5maW5pc2ggPSBwW2ldLnN0YXJ0ICsgcFtpXS5zZXJ2aWNlOwogICAgICAgIHBbaV0udHVybmFyb3VuZCA9IHBbaV0uZmluaXNoIC0gcFtpXS5hcnJpdmFsOwogICAgICAgIHBbaV0ud2FpdGluZyA9IHBbaV0udHVybmFyb3VuZCAtIHBbaV0uc2VydmljZTsKCiAgICAgICAgdGltZSA9IHBbaV0uZmluaXNoOwoKICAgICAgICBzdW1UQVQgKz0gcFtpXS50dXJuYXJvdW5kOwogICAgICAgIHN1bVdhaXQgKz0gcFtpXS53YWl0aW5nOwogICAgICAgIHRvdGFsU2VydmljZSArPSBwW2ldLnNlcnZpY2U7CiAgICB9CgogICAgZmxvYXQgYXZnVEFUID0gc3VtVEFUIC8gTjsKICAgIGZsb2F0IGF2Z1dhaXQgPSBzdW1XYWl0IC8gTjsKICAgIGZsb2F0IHRocm91Z2hwdXQgPSAoZmxvYXQpTiAvIHBbTi0xXS5maW5pc2g7CiAgICBmbG9hdCBjcHVVdGlsID0gKHRvdGFsU2VydmljZSAvIHBbTi0xXS5maW5pc2gpICogMTAwOwoKICAgIHByaW50ZigiXG4lLThzJS0xMHMlLTEwcyUtMTBzJS0xMHMlLTEwcyUtMTBzXG4iLCAKICAgICAgICAiUHJvY2VzcyIsICJBcnJpdmUiLCAiU2VydmljZSIsICJTdGFydCIsICJGaW5pc2giLCAiVHIiLCAiVHciKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlLThzJS0xMGQlLTEwZCUtMTBkJS0xMGQlLTEwZCUtMTBkXG4iLAogICAgICAgICAgICBwW2ldLm5hbWUsIHBbaV0uYXJyaXZhbCwgcFtpXS5zZXJ2aWNlLAogICAgICAgICAgICBwW2ldLnN0YXJ0LCBwW2ldLmZpbmlzaCwgcFtpXS50dXJuYXJvdW5kLCBwW2ldLndhaXRpbmcpOwogICAgfQoKICAgIHByaW50ZigiXG4tLS0gUsOpc3VsdGF0cyBnbG9iYXV4IC0tLVxuIik7CiAgICBwcmludGYoIlRlbXBzIG1veWVuIGRlIHJvdGF0aW9uIDogJS4yZlxuIiwgYXZnVEFUKTsKICAgIHByaW50ZigiVGVtcHMgbW95ZW4gZCdhdHRlbnRlICAgOiAlLjJmXG4iLCBhdmdXYWl0KTsKICAgIHByaW50ZigiRMOpYml0IGR1IHN5c3TDqG1lICAgICAgICA6ICUuMmYgcHJvY2Vzc3VzL3VuaXTDqSBkZSB0ZW1wc1xuIiwgdGhyb3VnaHB1dCk7CiAgICBwcmludGYoIlV0aWxpc2F0aW9uIGR1IENQVSAgICAgIDogJS4yZiAlJVxuIiwgY3B1VXRpbCk7CgogICAgLy8gPT09PT0gRGlhZ3JhbW1lIGRlIEdhbnR0ID09PT09CiAgICBwcmludGYoIlxuLS0tIERpYWdyYW1tZSBkZSBHYW50dCAtLS1cblxuIik7CgogICAgLy8gUHJlbWnDqHJlIGxpZ25lIDogYmFycmVzCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCJ8Iik7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwW2ldLnNlcnZpY2U7IGorKykKICAgICAgICAgICAgcHJpbnRmKCLilogiKTsKICAgIH0KICAgIHByaW50ZigifFxuIik7CgogICAgLy8gRGV1eGnDqG1lIGxpZ25lIDogbm9tcyBkZXMgcHJvY2Vzc3VzCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlLTNzIiwgcFtpXS5uYW1lKTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBbaV0uc2VydmljZTsgaisrKQogICAgICAgICAgICBwcmludGYoIiAgIik7CiAgICB9CiAgICBwcmludGYoIlxuIik7CgogICAgLy8gVHJvaXNpw6htZSBsaWduZSA6IHRlbXBzCiAgICBpbnQgY3VycmVudCA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgcHJpbnRmKCIlZCIsIHBbaV0uc3RhcnQpOwogICAgICAgIHByaW50ZigiJSpkIiwgcFtpXS5zZXJ2aWNlICogMiwgcFtpXS5maW5pc2gpOwogICAgfQogICAgcHJpbnRmKCJcbiIpOwoKICAgIHJldHVybiAwOwp9Cg==