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
- 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.
- 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ó.
- 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.
- 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.
Fonaments de Sistemes Operatius
Mòdul 1: Introducció als Sistemes Operatius
- Conceptes Bàsics de Sistemes Operatius
- Història i Evolució dels Sistemes Operatius
- Tipus de Sistemes Operatius
- Funcions Principals d'un Sistema Operatiu
Mòdul 2: Gestió de Recursos
Mòdul 3: Concurrència
- Conceptes de Concurrència
- Fils i Processos
- Sincronització i Exclusió Mútua
- Problemes Clàssics de Concurrència