Ici nous regardons comment la "pile" et le "tas" sont alloués en mémoire
FF.. | | <-- bas de la pile /|\ | | | valeurs| | | | pile élevées| | | \|/ grandit | | XX.. | | <-- haut de la pile [Pointeur de pile] | | | | | | 00.. |_________________| <-- fin de pile [Segment de pile] Pile
Les valeurs d'adresse de mémoire commencent à 00. (qui est aussi là où le Segment de Pile commence) et ils vont jusqu'à la valeur FF..
XX.. est la valeur réelle du pointeur de pile.
La pile est utilisée par les fonctions pour:
Par exemple, pour une fonction classique:
|int foo_function (parameter_1, parameter_2, ..., parameter_n) { |variable_1 declaration; |variable_2 declaration; .. |variable_n declaration; |// Body function |dynamic variable_1 declaration; |dynamic variable_2 declaration; .. |dynamic variable_n declaration; |// Le code est à l'intérieur du Segment Code, pas le segment Donnée/Pile! |return (ret-type) value; // souvent c'est à l'intérieur d'un registre, pour l'i386 le registre eax est utilisé. |} nous avons | | | 1. parameter_1 pushed | \ P | 2. parameter_2 pushed | | Avant I | ................... | | l'appel L | n. parameter_n pushed | / E | ** Return address ** | -- Appel | 1. local variable_1 | \ | 2. local variable_2 | | Après | ................. | | l'appel | n. local variable_n | / | | ... ... Pile ... ... libre | | T | n. dynamic variable_n | \ A | ................... | | Alloué par S | 2. dynamic variable_2 | | malloc & kmalloc | 1. dynamic variable_1 | / |_______________________| Usage typique de la pile Note: l'ordre des variables peut être différent selon l'architecture du matériel.
Nous devons distinguer 2 concepts:
Souvent le Processus s'appelle également Tâche ou Fil.
2 genre de serrures:
Copy_on_write est un mécanisme utilisé pour réduire l'utilisation de mémoire. Il remet l'allocation mémoire à plus tard de mémoire jusqu'à ce que la mémoire soit vraiment nécessaire.
Par exemple, quand une Tâche exécute l'Appel Système "fork()" (pour créer une autre Tâche), nous utilisons toujours les mêmes pages de mémoire que le parent, en mode lecture seule. Quand une Tâche ÉCRIT dans la page, elle cause une exception et la page est copiée et marquée "rw" (lecture, écriture).
1-) la page X est partagée entre la Tâche parent et la Tâche enfant Tâche Parent | | Accès RO ______ | |---------->|Page X| |_________| |______| /|\ | Têche Enfant | | | Accès RO | | |---------------- |_________| 2-) Write request Task Parent | | Accès RO ______ | |---------->|Page X| Trying to write |_________| |______| /|\ | Task Child | | | Accès RO | | |---------------- |_________| 3-) Final Configuration: Either Task Parent and Task Child have an independent copy of the Page, X and Y Task Parent | | Accès RW ______ | |---------->|Page X| |_________| |______| Task Child | | Accès RW ______ | |---------->|Page Y| |_________| |______|