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 (lsen 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
