Introducció

La gestió de processos és una de les funcions més crítiques d'un sistema operatiu. Un procés és un programa en execució, que inclou el codi del programa, les dades, i l'estat d'execució. La gestió de processos implica la creació, planificació, i terminació de processos, així com la gestió de la seva execució.

Conceptes Clau

  1. Processos i fils

  • Procés: Un programa en execució que té el seu propi espai d'adreces.
  • Fil: La unitat bàsica d'execució dins d'un procés. Els fils dins del mateix procés comparteixen l'espai d'adreces.

  1. Estat dels processos

  • Nou (New): El procés està sent creat.
  • Preparat (Ready): El procés està preparat per ser executat.
  • En execució (Running): El procés està sent executat per la CPU.
  • Esperant (Waiting): El procés està esperant un esdeveniment (per exemple, entrada/sortida).
  • Terminat (Terminated): El procés ha finalitzat la seva execució.

  1. Planificació de processos

  • Planificador a llarg termini (Long-term scheduler): Decideix quins processos es carreguen a la memòria.
  • Planificador a curt termini (Short-term scheduler): Decideix quin dels processos preparats serà executat per la CPU.
  • Planificador a mitjà termini (Medium-term scheduler): Gestiona la suspensió i reactivació de processos.

  1. Context de procés

  • Context de procés: Inclou tota la informació necessària per a la gestió del procés, com ara el comptador de programa, registres de la CPU, i informació de l'estat del procés.

Exemples Pràctics

Creació de Processos en C

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        fprintf(stderr, "Error en la creació del procés\n");
        return 1;
    } else if (pid == 0) {
        printf("Procés fill\n");
        execlp("/bin/ls", "ls", NULL);
    } else {
        printf("Procés pare\n");
        wait(NULL);
    }

    return 0;
}

Explicació del codi:

  • fork(): Crea un nou procés duplicant el procés pare.
  • pid < 0: Indica un error en la creació del procés.
  • pid == 0: Indica que el codi està sent executat pel procés fill.
  • execlp(): Reemplaça el codi del procés fill amb el programa especificat (ls en aquest cas).
  • wait(): El procés pare espera que el procés fill acabi.

Exercicis Pràctics

Exercici 1: Creació i Terminació de Processos

Objectiu: Escriu un programa en C que creï un procés fill que imprimeixi "Hola, sóc el procés fill" i després acabi. El procés pare ha d'imprimir "Hola, sóc el procés pare" i esperar que el procés fill acabi.

Solució:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        fprintf(stderr, "Error en la creació del procés\n");
        return 1;
    } else if (pid == 0) {
        printf("Hola, sóc el procés fill\n");
    } else {
        printf("Hola, sóc el procés pare\n");
        wait(NULL);
    }

    return 0;
}

Exercici 2: Planificació de Processos

Objectiu: Escriu un programa en C que creï dos processos fills. Cada procés fill ha d'imprimir el seu identificador de procés (PID) i després acabar. El procés pare ha d'esperar que tots dos processos fills acabin.

Solució:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    pid_t pid1, pid2;

    pid1 = fork();

    if (pid1 < 0) {
        fprintf(stderr, "Error en la creació del primer procés\n");
        return 1;
    } else if (pid1 == 0) {
        printf("Primer procés fill, PID: %d\n", getpid());
        return 0;
    } else {
        pid2 = fork();

        if (pid2 < 0) {
            fprintf(stderr, "Error en la creació del segon procés\n");
            return 1;
        } else if (pid2 == 0) {
            printf("Segon procés fill, PID: %d\n", getpid());
            return 0;
        } else {
            wait(NULL);
            wait(NULL);
            printf("Procés pare\n");
        }
    }

    return 0;
}

Resum

En aquesta secció hem après sobre la gestió de processos, incloent els conceptes de processos i fils, els estats dels processos, la planificació de processos, i el context de procés. També hem vist exemples pràctics de com crear i gestionar processos en C, i hem realitzat exercicis per reforçar aquests conceptes. La comprensió d'aquests fonaments és essencial per a l'eficient gestió dels recursos del sistema operatiu.

© Copyright 2024. Tots els drets reservats