⚙️ Processus & Threads
🎯 Concept de Processus
Un processus est un programme en cours d'exécution. C'est l'unité de base de l'exécution dans un OS.
PCB (Process Control Block)
Structure de données du noyau contenant toutes les informations pour gérer un processus :
- État du processus (running, ready, waiting, terminated)
- Compteur de programme (Program Counter)
- Registres du processeur
- PID (Process ID) et PPID (Parent Process ID)
- Informations de scheduling (priorité, temps CPU)
- Informations mémoire (pointeurs segment, tables pages)
- Informations E/S (fichiers ouverts, périphériques)
🔄 États d'un Processus
NEW → READY → RUNNING → TERMINATED
↑ ↓ ↓
WAITING ←──┘
Astuce Les transitions sont gérées par le scheduler
⚡ Création de Processus - fork()
Quatre événements provoquant la création :
- Initialisation du système
- Appel système
fork() - Demande utilisateur
- Lancement traitement par lot
Valeurs retournées par fork() :
- Négatif : Échec création
- 0 : Retourné au processus fils
- Positif (PID) : Retourné au parent
📖 Syntaxe de base :
#include <unistd.h>
pid_t pid = fork();
if (pid == 0) {
// Code du fils
printf("Je suis le fils, PID=%d\n", getpid());
} else if (pid > 0) {
// Code du parent
printf("Je suis le père, PID=%d, Fils=%d\n", getpid(), pid);
} else {
// Erreur
perror("fork failed");
}
🧵 Threads (Processus Légers)
Un thread est un flux séquentiel de contrôle à l'intérieur d'un programme.
Caractéristiques :
- Partage l'espace d'adressage avec les autres threads du même processus
- Partage ressources : mémoire, fichiers, objets, connexions
- Plus léger qu'un processus (création/changement contexte rapide)
- Permet le parallélisme au sein d'une application
API POSIX Threads (pthread)
| Fonction | Description |
|---|---|
pthread_create() |
Créer un nouveau thread |
pthread_exit() |
Termine le thread appelant |
pthread_join() |
Attend la fin d'un thread |
pthread_yield() |
Libère l'UC pour un autre thread |
📖 Syntaxe complète :
#include <pthread.h>
void *routine(void *arg) {
printf("Thread exécuté\n");
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, routine, NULL);
pthread_join(thread, NULL); // Attendre la fin
return 0;
}
// Compiler avec : gcc -pthread prog.c