du docs : p>
Remarque: les données de base évite le terme Chiffonnage parce que c'est déroutant. Il n'y a pas de "pessus" un virtuel Défaut de la page de la mémoire. Les défauts de page sont déclenché, causé, tiré ou rencontré. Bien sûr vous pouvez Relâchez la mémoire sur le noyau dans un variété de façons (en utilisant les fonctions vm_deallocate, munmap ou sbrk). Coeur Les données décrivent cela comme "Tourner un objet dans une faute ". P> blockQuote>
est une faute dans les données de base essentiellement une défaillance de la page de la mémoire? Je n'ai qu'une légère idée de la page de mémoire. Je crois que c'est une sorte de "pièce de code dans la mémoire" qui est nécessaire pour exécuter des procédures et des trucs de ce type, et comme l'application est exécutée, des morceaux de code sont aspirés dans la mémoire comme "pages" et jeté comme ils ne sont pas nécessaire plus. Probablement 99% faux;) p>
Quelqu'un? P>
3 Réponses :
Bien que votre programme ne fonctionne pas tout ce qu'il soit stocké sur la RAM.
Il existe des mécanismes de pagination dans le cadre du système d'exploitation qui stocke uniquement la page de mémoire la plus utilisée de la RAM pour un accès plus rapide.
Lorsque vous programmez en essayant d'accéder à un emplacement de mémoire qui n'est pas actuellement chargé sur RAM un défaut de page se produit et que la page est apportée du disque.
Étant donné que la RAM disponible ne limite que les pages de mémoire les plus importantes stockées dans la RAM. p>
Ce mécanisme est soumis à la mise en œuvre du système d'exploitation.
Pour une exploration plus complète de la théorie des systèmes d'exploitation, je recommanderais le livre de systèmes d'exploitation modernes par A.S.Tenenbaum. P>
Une page de mémoire est l'unité de base des données de votre application du point de vue du système d'exploitation. Tous vos indicateurs et données sont organisés en groupes de pages. Lorsque votre programme fait référence à un emplacement de mémoire légale dans votre application - en essayant de lire ou d'écrire des données ou de charger une instruction, l'adresse est traduite dans un emplacement dans l'une de ces pages. Une défaillance de la page se produit lorsque la page contenant l'adresse n'est pas réellement présente dans la mémoire physique. À ce stade, le système d'exploitation doit charger la page à partir du disque en mémoire afin que votre programme puisse continuer. P>
La page est donc chargée automatiquement dans la mémoire lorsque le pointeur pointe vers un emplacement qui n'est actuellement pas chargé?
Oui - il est chargé par le système d'exploitation. Lorsque votre application consomme trop de mémoire, par exemple, il existe de nombreux défauts de page qui rendent le contrôle de la commande au noyau afin de lire les pages du disque et de faire en sorte que le programme soit très lent.
Est-ce lié au soi-disant "fichier de swap"?
@Dont - Le fichier d'échange est l'endroit où le système d'exploitation (s'il utilise un) stockerait des pages qu'il doit retirer temporairement de la mémoire pour faire de la place pour de nouvelles pages en mémoire. Les pages en lecture seule (code) ne sont pas nécessairement stockées dans le fichier d'échange comme possible, si vous le souhaitez, être lus à partir de l'application d'origine. Bien sûr, tout dépend de la mise en œuvre du système. Vous devriez examiner l'article Wikipedia sur la pagination, en.wikipedia.org/wiki/Pinging , Ou ramasser le livre de Tanenbaum pour plus d'informations: EN.Wikipedia.org/wiki/ADREW_S._TANENBAUM a>
Je n'ai qu'une légère idée de la page de mémoire. Je crois que c'est une sorte de "pièce de code dans la mémoire" qui est nécessaire pour exécuter des procédures et des trucs de ce type, et comme l'application est exécutée, des morceaux de code sont aspirés dans la mémoire comme "pages" et jeté comme ils ne sont pas nécessaire plus. p> blockQuote>
truc (i.e. code et données) en mémoire. P>
Chaque chose qui existe en mémoire a une adresse (une adresse mémoire). P>
L'espace d'adresses de mémoire (par exemple 4 Go sur une machine 32 bits) est divisé en "pages", où chaque page est une pièce de mémoire contiguë de mémoire (par exemple 4kb par page). P>
L'espace d'adressage est mappé (par la CPU et l'O / S) dans la RAM (ou éventuellement mappé sur les ports d'E / S, mais c'est une histoire différente). P>
Il peut y avoir moins de RAM installé (par exemple, 1 Go) que d'espace d'adresses (par exemple 4 Go), par conséquent, des trucs (par exemple, les choses les moins utilisées) peuvent être échangées (par l'O / S) de RAM sur un fichier de page sur le disque. Les pages entières et intégrées (par exemple, des morceaux de 4kb) sont ce qui est échangé (pas d'octets individuels). P>
Lorsque l'application essaie d'accéder à une adresse qui n'est pas mappée actuellement à la RAM, c'est une faute dite de la page. Pour gérer une défaillance de la page, le O / S pourrait: P>
- GRATUIT UN DE RAM, en échangeant quelque chose (par exemple le moins récemment utilisé) de RAM au disque LI>
- cartographe que la RAM nouvellement libérée est disponible à l'adresse que l'application tente d'accéder à li>
- échangez dans la RAM, du disque, tout ce qui est censé être à cette adresse (qui, à un moment donné dans le passé, avait été échangé de cette adresse au disque) li>
- reprend l'application où il est parti: l'application essaie à nouveau d'accéder à cette adresse mémoire, uniquement cette fois sans défaut de page. Li> ul>
Cela ne me dérange pas que vous soyez brillant sur toute la mémoire virtuelle (comme je l'ai fait), mais que vous avez donné le niveau de détail que vous avez donné, vous ne pensez pas que vous devriez le mentionner? La façon dont vous le décrivez, il semble que chaque application est la cartographie de la mémoire physique. Généralement, ce qui est échangé n'est pas lié à une adresse physique, mais plutôt une autre page (virtuelle) de votre propre application. Pas besoin de caractéristiques d'utilisation de la mémoire de votre application pour affecter l'application de quiconque.
@tvanfosson Cela ne m'a pas eu pour moi de le mentionner, et maintenant que vous l'avez suggéré, je ne suis pas sûr de la résumer. Mais d'une manière, chaque application est i> mappage à la mémoire physique: chaque application voit l'espace d'adresses entier (ou la plupart) comme si l'espace d'adressage appartenait à cette application seule et les cartes O / S cet espace d'adressage à la RAM. Une application multiple implique plusieurs instances d'espace d'adresses et les différentes instances se font concurrence pour la RAM.
Décider de quoi échanger (par exemple de choisir une page utilisée par cette application ou par une autre application) est un détail de mise en œuvre spécifique au O / S (et je ne sais pas ce que sont les détails pour l'iPhone).