Station MinuitPortail personnel de révision

IFT-2001 — Systèmes d’exploitationAutomne 2026

Semaine 3 — Processus et appels système

6. Mémoire après `fork` et copie sur écriture

LECTURE 09 / 231 repère · 1 captureSynthèse avec omissions acceptées

6. Mémoire après fork et copie sur écriture

Après fork, une variable existant avant l'appel possède initialement la même valeur logique dans le père et le fils. Si le fils modifie sa copie, celle du père ne change pas. Les deux espaces ne sont pas une mémoire partagée ordinaire.

Sur le terrain / Capture LinuxS03-FORK
Même point de départ, deux mémoires. Les PID différents identifient deux processus.
Même point de départ, deux mémoires

Après fork, l’enfant remplace sa copie de x par 99. Le parent attend sa terminaison, puis observe encore 10 dans son propre espace.

  • Les PID différents identifient deux processus.
  • Cette observation montre l’indépendance logique des valeurs; elle ne mesure pas les copies physiques de pages.
Lire la capture en texte
python3 demo-fork.py  # os.fork(), x = 10 puis x = 99 dans l’enfant

Avant fork : x = 10
Enfant : PID=726 ; x = 99
Parent : PID=723 ; x = 10

Démonstration Station Minuit · Ubuntu 24.04 / WSL2 · Python 3 · 15 octobre 2026 (Toronto). Sortie réelle remise en page et capturée; exemple ajouté, distinct du matériel officiel.

Une duplication physique immédiate de toutes les pages serait coûteuse, surtout si le fils appelle ensuite exec. Les systèmes modernes emploient donc la copie sur écriture (copy-on-write) :

  1. le père et le fils référencent initialement les mêmes pages physiques protégées;
  2. une tentative d'écriture provoque une faute contrôlée;
  3. le noyau copie seulement la page concernée;
  4. le processus qui écrit reçoit sa copie privée;
  5. l'autre processus conserve l'ancienne page.

Le code non modifiable peut aussi rester partagé physiquement. Cette optimisation est invisible pour le programme : l'isolation logique doit demeurer exacte.

Pour échanger volontairement des données, des processus distincts utilisent un mécanisme explicite : tube, socket, fichier, mémoire partagée, signal ou autre service du système.

Retour au sommaire de l’unitéHaut de page
Récupérer manuellement les données locales

Copier séparément les données ci-dessous dans des fichiers texte avant de fermer la page ou de modifier le stockage. Une valeur illisible ou incompatible reste en place. Aucun effacement ni rétablissement écrasant n’est effectué automatiquement. L’export/import JSON est disponible sur la page Progression du cours. Cette récupération séparée reste utile pour une valeur brute ou un conflit.

Clé de ce cours : . Format v1 porté par cette clé; dates UTC et identifiants durables.

Si l’accès est refusé, la valeur persistée peut rester inaccessible. Réautoriser le stockage dans le navigateur puis rouvrir ce cours permet de la relire. Une réinitialisation exige une décision explicite après récupération; aucune commande de suppression n’est proposée ici. Les données restent sur cette origine et cet appareil, sans transfert automatique.