review part of memory report.
This commit is contained in:
parent
19a8aae423
commit
6aacfe8fe4
6 changed files with 119 additions and 118 deletions
Binary file not shown.
|
@ -10,11 +10,11 @@
|
|||
|
||||
|
||||
Dans un monde de plus en plus informatisé, une personne souhaitant pouvoir réaliser un système complexe informatique optimisé, surtout au niveau OS, est obligé de se pencher sur le fonctionnement de la mémoire.
|
||||
Tout les programes, quels qu'ils soient doivent être stockés en mémoire pour pouvoir être éxecutés.
|
||||
Il est ainsi intéressant de savoir tout dabord d'un point de vue physique les différents niveaux de mémoire.
|
||||
Ensuite, il devient nécessaire de comprendre comment la mémoire est passée d'un niveau à un autre, puis enfin, comment elle est organisé, notament en voyant ce qu'est la mémoire virtuelle.
|
||||
Tous les programmes, quels qu'ils soient doivent être stockés en mémoire pour pouvoir être éxecutés.
|
||||
Il est ainsi intéressant de savoir d'un point de vue physique les différents niveaux de mémoire.
|
||||
Il devient aussi nécessaire de comprendre comment la mémoire est passée d'un niveau à un autre, enfin, comment elle est organisée, notamment en voyant ce qu'est la mémoire virtuelle.
|
||||
|
||||
Ce rapport n'inclueras cependant pas le fonctionement de la mémoire entre différents ordinateurs, mais se focalisera uniquement sur le fonctionnement de la mémoire à l'interieur d'un même ordinateur.
|
||||
Ce rapport n'incluera cependant pas le fonctionnement de la mémoire entre différents ordinateurs, mais se focalisera uniquement sur le fonctionnement de la mémoire à l'intérieur d'un même ordinateur.
|
||||
De plus, ce document ne parlera pas des mémoires spéciales tel que celle du BIOS, et il est important de rapeler que puisque le fonctionnement du processeur n'est pas le sujet de ce rapport, la gestion de la mémoire au sein du processeur ne sera pas non plus abordé.
|
||||
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
\chapter{Les différents niveaux de mémoire physiques.}
|
||||
|
||||
Commençons notre annalyse du fonctionement de la mémoire par expliquer physiquement les différents types de mémoire, ainsi que les raisons de leur éxistances.
|
||||
Commençons notre annalyse du fonctionement de la mémoire par expliquer physiquement les différents types de mémoire, ainsi que les raisons de leurs existances.
|
||||
|
||||
\begin{center}
|
||||
|
||||
|
@ -21,11 +21,11 @@
|
|||
|
||||
\section{Le disque physique}
|
||||
|
||||
Le disque physique est la ou réside les données quand elles ne sont pas chargés dans la mémoire centrale.
|
||||
De par cette définition, c'est aussi la où réside les données lorsque l'ordinateur est éteint ou hors tensions.
|
||||
Cette mémoire est considéré comme étant la moins chère des différents types de mémoires, étant donné que l'on peut facilement trouver des disques de plusieurs TiB sur le marché.
|
||||
Elle possède néanmoins le désavantage d'être aussi considéré comme étant la mémoire la plus lente de toutes si on omets la mémoire partagé par un réseau tel que nfs que nous n'aborderons pas dans ce document.
|
||||
Nous expliquerons plus loin dans ce document (I.4) les différentes raison de cette affirmation.
|
||||
Le disque physique est là où réside les données quand elles ne sont pas chargées dans la mémoire centrale.
|
||||
De par cette définition, c'est aussi là où réside les données lorsque l'ordinateur est éteint ou hors tension.
|
||||
Cette mémoire est considérée comme étant la moins chère des différents types de mémoires, étant donné que l'on peut facilement trouver des disques de plusieurs TiB sur le marché.
|
||||
Elle possède néanmoins le désavantage d'être aussi considérée comme étant la mémoire la plus lente de toutes si on omet la mémoire partagée par un réseau tel que nfs que nous n'aborderons pas dans ce document.
|
||||
Nous expliquerons plus loin dans ce document (I.4) les différentes raisons de cette affirmation.
|
||||
|
||||
Passons maintenant à décrire la mémoire vive.
|
||||
|
||||
|
@ -33,83 +33,84 @@
|
|||
|
||||
\section{La mémoire vive}
|
||||
|
||||
La mémoire vive, aussi appelé mémoire volatile ou encore manière général RAM ou encore DRAM, comme Dynamic Random Access Memory, qui n'est pas à confondre avec la SRAM comme Static Random Access Memory.
|
||||
La mémoire vive, aussi appelée mémoire volatile ou encore de manière générale RAM ou encore DRAM, comme Dynamic Random Access Memory, qui n'est pas à confondre avec la SRAM comme Static Random Access Memory.
|
||||
C'est une mémoire que l'on considère comme couteuse, qui se compte en GiB sur un ordinateur moderne.
|
||||
Elle contient toute la mémoire active lors du fonctionnement d'un ordinateur, par example le noyeau, l'init system, le server x, plus généralement, touts les processus actif, associés aux données qu'ils utilisent.
|
||||
Lors de l'arret de l'ordinateur, toute les données contenues dedans sont perdu si elle ne sont pas transféré sur le disque physique.
|
||||
Elle contient toute la mémoire active lors du fonctionnement d'un ordinateur, par exemple le noyau, l'init system, le serveur x, plus généralement, tous les processus actifs, associés aux données qu'ils utilisent.
|
||||
Lors de l'arrêt de l'ordinateur, toutes les données contenues dedans sont perdues si elles ne sont pas transférées sur le disque physique.
|
||||
|
||||
Passons désormais à la mémoire la plus complexe, celle contenu dans le processeur.
|
||||
Passons désormais à la mémoire la plus complexe, celle contenue dans le processeur.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\section{La mémoire CPU.}
|
||||
|
||||
Premièrement, il est important de rappeller qu'il y à différents niveaux de mémoire au niveau du processeur.
|
||||
Premièrement, il est important de rappeler qu'il y a différents niveaux de mémoire au niveau du processeur.
|
||||
Tout dabord, celle que tout le monde connais, les registres.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\subsection{les registres}
|
||||
|
||||
Quand on pense à la mémoire contenu à l'intérieur du processeur, on pense tout dabord aux registres.
|
||||
Quand on pense à la mémoire contenue à l'intérieur du processeur, on pense tout dabord aux registres.
|
||||
Il s'agit de la mémoire la plus essentielle d'un ordinateur.
|
||||
Il n'y as seulement quelques registres dans un processeur, chaqu'un possède une taille se comptant en bit, par example 32 bits ou 64 bits.
|
||||
C'est dedans que sont stockés les données que le processseur travaille actuellement dessus.
|
||||
Il y a seulement quelques registres dans un processeur, chacun possède une taille se comptant en bit, par exemple 32 bits ou 64 bits.
|
||||
C'est dedans que sont stockées les données que le processseur travaille actuellement dessus.
|
||||
|
||||
C'est la plus rapide des mémoires, cependant du fait de sa nature extrèmement petite, elle doit se faire épauler par différent niveaux de caches.
|
||||
C'est la plus rapide des mémoires, cependant du fait de sa nature extrêmement petite, elle doit se faire épauler par différents niveaux de caches.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\subsection{le cache processeur.}
|
||||
|
||||
Le cache processeur est une mémoire elle aussi très couteuse essentiel au bon fonctionnement d'un ordinateur.
|
||||
Les différents niveaux de caches, només L1, L2, ou encore L3, parfois même L4.
|
||||
Le cache processeur est une mémoire elle aussi très couteuse essentielle au bon fonctionnement d'un ordinateur.
|
||||
Les différents niveaux de caches, nommés L1, L2, ou encore L3, parfois même L4.
|
||||
L1 étant le niveaux de cache le plus rapide, et L3, L4 quand il existe, le plus lent.
|
||||
Il est cependant intéressant de noté que même si L1 est le plus rapide, c'est aussi le plus petit, et L3/L4 le plus grand.
|
||||
la taille des cache se comptes en KiB, voir pour les PC les plus modernes en MiB.
|
||||
Par example pour donner un indice de leur tailles sur un pc moderne, le L1 de mon PC fait 256KiB, le L2 fait 8MiB, et le L3 16MiB.
|
||||
Il peut aussi y avoir plusieurs caches d'un même niveau à l'intérieur d'un processeur, par example un réservé aux instructions et un réservés aux données.
|
||||
Bien qu'il y ait une instruction assembleur pour demander au processeur explicitement de charger une donnée dans les caches, en temps normal le processeur se débrouille tout seul pour choisir quel données y mettre.
|
||||
Cette instruction est donc vraiment très peu utilisé.
|
||||
Il est cependant intéressant de noter que même si L1 est le plus rapide, c'est aussi le plus petit, et L3/L4 le plus grand.
|
||||
la taille des caches se compte en KiB, voir pour les PC les plus modernes en MiB.
|
||||
Par exemple pour donner un indice de leur taille sur un pc moderne, le L1 de mon PC fait 256KiB, le L2 fait 8MiB, et le L3 16MiB.
|
||||
Il peut aussi y avoir plusieurs caches d'un même niveau à l'intérieur d'un processeur, par exemple un réservé aux instructions et un autre réservé aux données.
|
||||
Bien qu'il y ait une instruction assembleur pour demander au processeur explicitement de charger une donnée dans les caches, en temps normal le processeur se débrouille tout seul pour choisir quelles données y mettre.
|
||||
Cette instruction est donc vraiment très peu utilisée.
|
||||
|
||||
Maintenant que nous avons introduit les différents niveaux de mémoire physique, passons à expliquer leur différents côuts.
|
||||
Maintenant que nous avons introduit les différents niveaux de mémoire physique, passons à expliquer leurs différents côuts.
|
||||
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\section{Explication du cout de la mémoire.}
|
||||
\section{Explication du coût de la mémoire.}
|
||||
|
||||
La mémoire à un coût.
|
||||
Financier, mais pas que.
|
||||
Ici nous allons parler plutôt du coût en place et en distance.
|
||||
En effet, plus la mémoire se situe éloigné du processeur, et plus elle est longue à accéder, en particulier pour le disque physique qui à besoin d'aller lire la mémoire sur son support.
|
||||
D'un autre côté, plus on en met proche du processeur, et moins il n'y à de place pour mettre des instructions.
|
||||
C'est pour cette raison qu'il à été choisis de faire plusieurs niveaux de mémoires. Les niveaux en haut, comme les registres ou le cache processeur, permettent au processeur de pouvoir toujours avoir des instruction à executer pendant que les données transitent entre les différents niveaux.
|
||||
D'un autre côté, les niveaux bas comme la mémoire vive ou le disque physique, se situent à des endroits ou il y à beaucoup d'espaces.
|
||||
Le problème de la mémoire vive est à la fois qu'une fois que l'ordinateur est hors tension elle disparait, mais aussi qu'elle coûte beaucoup plus chère à l'unitée en euro/GiB que le disque physique qui lui, garde sa mémoire même après que l'ordinateur soit éteint.
|
||||
Son problème à lui au disque physique, est qu'il prends tellement longtemps à lire ou à écrire des données, ajoutons y qu'il se situe super loin du processeur, cela le rend innaptes à être utilisé pour stocker de la mémoire activement utilisé par l'ordinateur.
|
||||
En effet, plus la mémoire se situe éloignée du processeur, et plus elle est longue à accéder, en particulier pour le disque physique qui à besoin d'aller lire la mémoire sur son support.
|
||||
D'un autre côté, plus on en met proche du processeur, et moins il y a de place pour mettre des instructions.
|
||||
C'est pour cette raison qu'il a été choisi de faire plusieurs niveaux de mémoires. Les niveaux en haut, comme les registres ou le cache processeur, permettent au processeur de pouvoir toujours avoir des instructions à executer pendant que les données transitent entre les différents niveaux.
|
||||
D'un autre côté, les niveaux bas comme la mémoire vive ou le disque physique, se situent à des endroits où il y a beaucoup d'espaces.
|
||||
Le problème de la mémoire vive est qu'une fois que l'ordinateur est hors tension elle disparait, mais aussi qu'elle coûte beaucoup plus chère à l'unité en euro/GiB que le disque physique qui lui, garde sa mémoire même après que l'ordinateur soit éteint.
|
||||
L'incovénient du disque physique, est qu'il prend énormément de temps à lire ou à écrire des données.
|
||||
De plus, il se situe super loin du processeur, cela le rend inapte à être utilisé pour stocker de la mémoire activement utilisée par l'ordinateur.
|
||||
|
||||
|
||||
Voyons désormais comment la mémoire est passé d'un niveau à un autre.
|
||||
Le fonctionnement du processeur étant à la fois extrèmement compliqué et pas du ressort de ce document, nous allons tout particulièrement nous intéresser au passage de la mémoire entre la mémoire disque et la mémoire vive.
|
||||
Voyons désormais comment la mémoire est passée d'un niveau à un autre.
|
||||
Le fonctionnement du processeur étant à la fois extrêmement compliqué et pas du ressort de ce document, nous allons tout particulièrement nous intéresser au passage de la mémoire entre la mémoire disque et la mémoire vive.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\section{Passage d'un niveau de mémoire à un autre.}
|
||||
|
||||
Pour pourvoir expliquer le passage de la mémoire entre le niveau du disque et de la RAM, nous allons commencer par décrire comment la mémoire est stockée dans le disque.
|
||||
Pour pouvoir expliquer le passage de la mémoire entre le niveau du disque et de la RAM, nous allons commencer par décrire comment la mémoire est stockée dans le disque.
|
||||
Un disque physique est composé de secteurs.
|
||||
Un ordinateur, quand il demande des données au disque, est obligé de demander un secteur entier.
|
||||
La taille d'un secteur dépend entièrement du matériel, cependant, de nos jours, il est souvant fixé à 4KiB.
|
||||
La taille d'un secteur dépend entièrement du matériel, cependant, de nos jours, il est souvent fixé à 4KiB.
|
||||
|
||||
\includegraphics[width=450pt]{physical_disk_representation.drawio.png}
|
||||
|
||||
La RAM, elle, cependant, est beaucoup plus flexible concernant son maniment.
|
||||
Chaque octet à une addresse, ce qui permet de facilement manier les données.
|
||||
La RAM, elle, cependant, est beaucoup plus flexible concernant son maniement.
|
||||
Chaque octet à une adresse, ce qui permet de facilement manier les données.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation.drawio.png}
|
||||
|
||||
La solution trouvé pour permettre le transfert de la mémoire entre la mémoire physique et la mémoire vive, est de tout dabord, réserver une partie de la mémoire pour être sur de ne rien écraser.
|
||||
La solution trouvée pour permettre le transfert de la mémoire entre la mémoire physique et la mémoire vive, est de tout d'abord, réserver une partie de la mémoire pour être sûr de ne rien écraser.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_space_locked.drawio.png}
|
||||
|
||||
|
@ -117,19 +118,20 @@
|
|||
|
||||
\includegraphics[width=450pt]{physical_disk_representation_sector_2.drawio.png}
|
||||
|
||||
Le disque accepte volontièrement de nous le passer.
|
||||
Il ne reste plus qu'as écrire ce secteur dans la mémoire à l'emplacement que nous avons réservé pour que le secteur soit chargé en mémoire.
|
||||
Le disque accepte volontairement de nous le passer.
|
||||
Il ne reste plus qu'a écrire ce secteur dans la mémoire à l'emplacement que nous avons réservé pour que le secteur soit chargé en mémoire.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_sector_2_loaded.drawio.png}
|
||||
|
||||
De part cette explication, nous pouvons en déduire deux choses.
|
||||
Premièrement, pour charger tout le disque en mémoire vive, encore faut-il en avoir assez, il suffirait que l'on recopie chaque secteur du disque dans la RAM.
|
||||
Deuxièmement, pour changer une donnée sur le disque, il suffit de charger un secteur en mémoire vive, changer la donnée, puis renvoyer le secteur modifié au disque pour qu'il écrase l'ancien secteur.
|
||||
Ce mécanisme de navette etant très lent, c'est pour ca que les mécanismes de géstion modèrne de la mémoire font en sorte de le limiter le plus possible, en notament une fois que l'on as chargé un secteur, le garder en mémoire le plus longtemps que possible, même lorsque que l'on as fini de s'en servir pour que si il vient à être redemandé, il soit immédiatement accéssible.
|
||||
Ce mécanisme de garder en mémoire un secteur est même étendue dans les ordinateurs modernes.
|
||||
Etant donné que souvant quand on demandes un secteur, il vas aussi être nécessaire de charger les secteurs environnant, automatiquement, le fait de demander un secteur fait charger en mémoire vive les secteurs environnants.
|
||||
Premièrement : pour charger tout le disque en mémoire vive, encore faut-il en avoir assez, il suffirait que l'on recopie chaque secteur du disque dans la RAM.
|
||||
Deuxièmement : pour changer une donnée sur le disque, il suffit de charger un secteur en mémoire vive, changer la donnée, puis renvoyer le secteur modifié au disque pour qu'il écrase l'ancien secteur.
|
||||
Ce mécanisme de navette etant très lent, c'est pour ça que les mécanismes de gestion moderne de la mémoire font en sorte de le limiter le plus possible, en notamment une fois que l'on as chargé un secteur, le garder en mémoire le plus longtemps possible, même lorsque que l'on a fini de s'en servir pour que s'il vient à être redemandé, il soit immédiatement accessible.
|
||||
Ce mécanisme de garder en mémoire un secteur est même étendu dans les ordinateurs modernes.
|
||||
Etant donné que souvent quand on demande un secteur, il va aussi être nécessaire de charger les secteurs environnants.
|
||||
Automatiquement, le fait de demander un secteur fait charger en mémoire vive les secteurs environnants.
|
||||
|
||||
Maintenant que nous avons longuement parlé de la mémoire à un niveau physique, notament les différents niveaux de mémoires ainsi que du transfert de la mémoire entre le niveau disque physique et la mémoire vive, passons à expliquer comment s'organise la mémoire.
|
||||
Maintenant que nous avons longuement parlé de la mémoire à un niveau physique, notamment les différents niveaux de mémoires ainsi que du transfert de la mémoire entre le niveau disque physique et la mémoire vive, passons à expliquer comment s'organise la mémoire.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -8,26 +8,26 @@
|
|||
\chapter{Organisation de la mémoire au sein d'un même niveau physique}
|
||||
|
||||
Sur un ordinateur, tout n'est pas un seul et même block.
|
||||
Il y à des données, et des instructions, puis il y à différents programes stockés en mémoire, et quand les programes sont éxecutés, ils deviennent des processus, qui eux aussis font leur modifications sur les données du système.
|
||||
Pour organiser tout ca, la notion de fichier et de système de fichiers est apparus.
|
||||
Il y a des données, et des instructions, puis il y a différents programmes stockés en mémoire, et quand les programmes sont éxecutés, ils deviennent des processus, qui eux aussi font leurs modifications sur les données du système.
|
||||
Pour organiser tout ça, la notion de fichier et de système de fichiers est apparue.
|
||||
Un système de fichier organise les fichiers dans la mémoire.
|
||||
Au début, ce concept est apparu pour organiser les fichiers sur un disque physique, puis avec le temps, pour simplifer le passage de la mémoire au disque, le vfs, virtual filesystem est apparu.
|
||||
Il permet d'armoniser l'interface avec tout les systèmes de fichiers, autemps les systèmes de fichiers physique (sur le disque) que les systèmes de fichiers dans la mémoire vive (RAM).
|
||||
Nous avons réaliser un rapport expliquant le fonctionnement des systèmes de fichiers que je vous invite à lire.
|
||||
Cependant ce qui reste à retenir, c'est que dans les faits, la mémoire dans les disques physique est organisé grace aux systèmes de fichiers ainsi que les pilotes qui permettent au système de les lire.
|
||||
Dans la ram aussi, il se trouve des systèmes de fichier.
|
||||
Sur linux, les processus se trouve dans un système de fichier (/proc proc), les devices connectées aussis sont mises dans un système de fichier (/dev devtmpfs) et il en à d'autres.
|
||||
Il permet d'armoniser l'interface avec tout les systèmes de fichiers, autant les systèmes de fichiers physique (sur le disque) que les systèmes de fichiers dans la mémoire vive (RAM).
|
||||
Nous avons réalisé un rapport expliquant le fonctionnement des systèmes de fichiers que je vous invite à lire.
|
||||
Cependant ce qui reste à retenir, c'est que dans les faits, la mémoire dans les disques physiques est organisée grace aux systèmes de fichiers ainsi que les pilotes qui permettent au système de les lire.
|
||||
Dans la ram aussi, il se trouve des systèmes de fichiers.
|
||||
Sur linux, les processus se trouvent dans un système de fichier (/proc proc), les périphériques connectés aussi sont mises dans un système de fichier (/dev devtmpfs) et il y en a d'autres.
|
||||
|
||||
Dans ce rapport, nous allons tout particulièrement nous intéresser à la gestion de la mémoire concernant les processus, notament en parlant de la mémoire virtuelle.
|
||||
En effet, il fut un temps lointains ou les addresses décrivant les données et les instructions des processus étaient physique, mais cela avait des désavantages, notament parce que un même programe devait toujours s'éxecuter au même endroit dans la mémoire.
|
||||
Pour palier cela, le concept de mémoire virtual, ainsi que less addresses virtuelles sont apparu.
|
||||
Dans ce rapport, nous allons tout particulièrement nous intéresser à la gestion de la mémoire concernant les processus, notamment en parlant de la mémoire virtuelle.
|
||||
En effet, il fût un temps lointains où les adresses décrivant les données et les instructions des processus étaient physiques, mais cela avait des désavantages, notamment parce qu'un même programme devait toujours s'éxecuter au même endroit dans la mémoire.
|
||||
Pour palier cela, le concept de mémoire virtuelle, ainsi que les adresses virtuelles sont apparues.
|
||||
Nous rappelons qu'un processus est un programme chargé et exécuté en mémoire par le processeur, il possède une pile, des données, ainsi que des instructions.
|
||||
|
||||
\includegraphics[width=450pt]{processus_representation.drawio.png}
|
||||
|
||||
Il est intéressant à noter que la pile, les instructions ou encore les données ne sont pas obligés d'être contigues.
|
||||
On dit que ce sont des segments de données, et peuvent se trouver nimporte ou dans la RAM, éventuellement même sur le disque, c'est ce que l'on appelle le swap.
|
||||
Cette gestion de la mémoire par segments, est ce que l'on appelle la gestion de la mémoire segmenté, et ce sera aussi notre première section dans cette partie sur l'organisation de la mémoire.
|
||||
Il est intéressant à noter que la pile, les instructions ou encore les données ne sont pas obligés d'être contigües.
|
||||
On dit que ce sont des segments de données, et peuvent se trouver n'importe où dans la RAM, éventuellement même sur le disque, c'est ce que l'on appelle le swap.
|
||||
Cette gestion de la mémoire par segments, est appelée la gestion de la mémoire segmentée, et ce sera aussi notre première section dans cette partie sur l'organisation de la mémoire.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
|
@ -36,60 +36,60 @@
|
|||
|
||||
\subsection{Principes}
|
||||
|
||||
Un segment est enchainement contigüe de donnée.
|
||||
La simplification d'un processus définie plus haut en 3 segments en est un example, cependant, dans la réalitée, un processus peut-être découpé en beaucoup plus de segments.
|
||||
Par example les instructions peuvent être en plusieurs segements, certains contiendrons des instructions partagées entre plusieurs processus et d'autres des instructions réservés à ce processus.
|
||||
Les données comme la pile peuvent elles aussi être contenu entre plusieurs segements.
|
||||
Sous linux, il suffit de regarder ce qui se trouve dans /proc/<PID>/maps pour pouvoir voir tout les segments associées aux processus.
|
||||
Un segment est un enchainement contigüe de données.
|
||||
La simplification d'un processus défini plus haut en 3 segments en est un exemple, cependant, dans la réalitée, un processus peut-être découpé en beaucoup plus de segments.
|
||||
Par exemple les instructions peuvent être en plusieurs segments, certains contiendront des instructions partagées entre plusieurs processus et d'autres des instructions réservés à ce processus.
|
||||
Les données comme la pile peuvent elles aussi être contenues entre plusieurs segments.
|
||||
Sous linux, il suffit de regarder ce qui se trouve dans /proc/<PID>/maps pour pouvoir voir tous les segments associés aux processus.
|
||||
|
||||
Ce qui est important à noter c'est que dans la ram, les segments ne se suivent pas forcéments.
|
||||
Ce qui est important à noter c'est que dans la ram, les segments ne se suivent pas forcément.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_with_process.drawio.png}
|
||||
|
||||
Cependant, cela lève la question, comment le gestionnaire de la mémoire s'y retrouve pour savoir que pour un processus, à quel endroit se situe les segments de données, à quel endroit se situe les instructions, etc... dans la RAM.
|
||||
Nous verrons donc le principe de traduction d'addresses pour la mémoire segemntée.
|
||||
Nous verrons donc le principe de traduction d'adresses pour la mémoire segemntée.
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\subsection{Traduction d'addresses}
|
||||
\subsection{Traduction d'adresses}
|
||||
|
||||
Pour garder une trace d'ou se situes en mémoire les processus, le système garde une table des segments par processus.
|
||||
Dans cette table, chaque segments est désigné par un numéro, une addresse, une table et des droits.
|
||||
Voici un example.
|
||||
Pour garder une trace d'où se situent en mémoire les processus, le système garde une table des segments par processus.
|
||||
Dans cette table, chaque segment est désigné par un numéro, une adresse, une table et des droits.
|
||||
Voici un exemple.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_segmentation_table_process.drawio.png}
|
||||
|
||||
Dans cette methode de gestion de la mémoire, il est utilisé des addresses virtuels pour pouvoir se situer dans la mémoire.
|
||||
Cette addresse virtuel est relative à un processus donné.
|
||||
Elles possèdent un numéro de segment, ainsi que un déplacement dans le segment.
|
||||
Dans cette méthode de gestion de la mémoire, il est utilisé des adresses virtuelles pour pouvoir se situer dans la mémoire.
|
||||
Cette adresse virtuelle est relative à un processus donné.
|
||||
Elle possède un numéro de segment, ainsi qu'un déplacement dans le segment.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_segmentation_virt_address_process.drawio.png}
|
||||
|
||||
Le MMU (Memory Management Unit), un composant matériel dédié pour s'occuper de faire des traductions d'addresses virtuels en addresses physiques.
|
||||
Le MMU (Memory Management Unit), un composant matériel dédié pour s'occuper de faire des traductions d'adresses virtuelles en adresses physiques.
|
||||
Il commence par regarder dans la table.
|
||||
Est-ce que le segment y se trouve ?
|
||||
Si non, retourner une interruption pour signaler le défault de segment.
|
||||
Est-ce que le segment s'y trouve ?
|
||||
Si non, retourner une interruption système pour signaler le défault de segment.
|
||||
Est-ce que les droits sur le segment sont bon ?
|
||||
Si non, retourner une interruption pour signaler la violation des droits du segment.
|
||||
Est-ce que le offset ne dépasse pas du segment ?
|
||||
Est-ce que le déplacement ne dépasse pas du segment ?
|
||||
Si oui, retourner une interruption pour signaler le débordement.
|
||||
Seulement si tout ces test passent, la traduction est réalisée.
|
||||
Seulement si tous ces tests passent, la traduction est réalisée.
|
||||
|
||||
La traduction se déroule ainsi.
|
||||
On cherche à obtenir la traduction d'une l'addresse virtuelle.
|
||||
On vas donc regarder dans la table des segments l'addresse du début du segment.
|
||||
Puis, on vas ajoutter à cette addresse du début du segment le déplacement, et voilà, nous avons obtenu l'addresse mémoire phisique.
|
||||
On cherche à obtenir la traduction d'une adresse virtuelle.
|
||||
On vas donc regarder dans la table des segments l'adresse du début du segment.
|
||||
Puis, on va ajouter à cette adresse du début du segment le déplacement, et voilà, nous avons obtenu l'adresse mémoire physique.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_segmentation_translation_process.drawio.png}
|
||||
|
||||
Dans la réalité, les choses se passent un peu différement de comme décrit si dessus.
|
||||
Dans la réalité, les choses se passent un peu différemment de comme décrit si dessu.
|
||||
Plutôt que de garder la trace du numéro de segment, la table des segments garde la trace de si le segment est en mémoire vive ou pas.
|
||||
Dans le cas ou il n'est pas dans la mémoire vive, cela signifie qu'il se trouve sur le disque, et qu'il faut dabord aller le chercher pour le ramener dans la mémoire centrale avant de pouvoir l'utiliser.
|
||||
Dans le cas où il n'est pas dans la mémoire vive, cela signifie qu'il se trouve sur le disque, et qu'il faut dabord aller le chercher pour le ramener dans la mémoire centrale avant de pouvoir l'utiliser.
|
||||
C'est long, donc, grace à une interruption système, le processus est mis en attente pour qu'un autre puisse être exécuté pendant ce temps.
|
||||
|
||||
L'avantage de la gestion de la mémoire grace à de la segmentation, est que nous pouvons désormais protéger et partager les différents segments qui composent la mémoire.
|
||||
Cependant, cette gestion de la mémoire à une grosse limitation.
|
||||
Les segments ne peuvent pas être découpés, ce qui génére beaucoup de mémoire perdu à cause de l'espace disponible entre les segments (fragmentation).
|
||||
L'avantage de la gestion de la mémoire grace à la segmentation, est que nous pouvons désormais protéger et partager les différents segments qui composent la mémoire.
|
||||
Cependant, cette gestion de la mémoire à une grosse limite.
|
||||
Les segments ne peuvent pas être découpés, ce qui génére beaucoup de mémoire perdue à cause de l'espace disponible entre les segments (fragmentation).
|
||||
|
||||
Cependant, à notre avantage, il existe un autre mécanisme pour gérer la mémoire; la mémoire paginée.
|
||||
|
||||
|
@ -104,50 +104,49 @@
|
|||
Le principe fondamental de la mémoire paginée est la page.
|
||||
En effet, une page est un bloc de taille fixe de la mémoire virtuelle.
|
||||
Elle divise ainsi l'espace de mémoire du processus, ce qui signifie que le processus est ainsi divisé en pages.
|
||||
Il est créer des cases mémoires sur la mémoire physique pour pouvoir acceuilir les pages.
|
||||
Il est créé des cases mémoires sur la mémoire physique pour pouvoir accueilir les pages.
|
||||
Chaque case vaut la taille d'une page.
|
||||
Un processus, est donc divisé en pages pour pouvoir être mis dans les cases.
|
||||
Cela permet donc de quasiment faire disparaitre l'espace perdu à cause de la fragmentation.
|
||||
En effet, puisqu'un processus ne prends pas la totalité de l'espace qui lui est alloué, l'espace libre à la fin de la dernière page sera perdu.
|
||||
En effet, puisqu'un processus ne prend pas la totalité de l'espace qui lui est alloué, l'espace libre à la fin de la dernière page sera perdu.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_with_pages.drawio.png}
|
||||
|
||||
Pour chaque processus, il est donc obligé de garder la trace de ces pages, c'est pour ca que, comme pour la gestion segmenté de la mémoire, le système conserve un table des pages pour chaque processus.
|
||||
Pour chaque processus, il est donc obligé de garder la trace de ces pages, c'est pour ça que, comme pour la gestion segmentée de la mémoire, le système conserve une table des pages pour chaque processus.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_pagination_table_process.drawio.png}
|
||||
|
||||
Pour un processus, il est possible de demander de récupérer l'addresse physique correspondant à une addresse virtuel.
|
||||
Chaque addresse virtuel est composé d'un numéro de page, et d'un déplacement
|
||||
Pour un processus, il est possible de demander de récupérer l'adresse physique correspondant à une adresse virtuelle.
|
||||
Chaque adresse virtuelle est composée d'un numéro de page, et d'un déplacement
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_pagination_virt_address.drawio.png}
|
||||
|
||||
\vspace{10pt}
|
||||
|
||||
\subsection{Traduction d'addresses}
|
||||
\subsection{Traduction d'adresses}
|
||||
|
||||
Comme pour la gestion de la mémoire segmentée, le MMU se charge de faire la conversion des addresses vituelles en addresses physiques.
|
||||
Tout dabord, il vérifie que la page est présente dans la table.
|
||||
Puis, si les droits sont ok.
|
||||
Comme pour la gestion de la mémoire segmentée, le MMU se charge de faire la conversion des adresses vituelles en adresses physiques.
|
||||
Tout dabord, il vérifie que la page est présente dans la table puis, si les droits sont ok.
|
||||
Si un test échoue il envoie une interruption système pour régler le problème, sinon, il effectue la conversion.
|
||||
Ici aussi, par soucis de clareté, nous avons mis les numéros de pages sur le tableau alors que dans un véritable tableau de pages, il n'y en aurrait pas.
|
||||
Comme pour la segmentation, il devrait y avoir, même si je ne l'ai pas représenté, un indicateur de présence de la page dans la mémoire, et si le MMU tente de traduire l'addresse d'une page qui n'est pas présente en mémoire, il faudrait dabord la rapatrier depuis le disque physique.
|
||||
Comme pour la segmentation, il devrait y avoir, même si je ne l'ai pas représenté, un indicateur de présence de la page dans la mémoire, et si le MMU tente de traduire l'adresse d'une page qui n'est pas présente en mémoire, il faudrait dabord la rapatrier depuis le disque physique.
|
||||
|
||||
Pour faire la conversion de l'addresse virtuelle en addresse physique, le MMU commence par regarder le numéro de page, et trouver dans le tableau l'entrée correspondante.
|
||||
Pour faire la conversion de l'adresse virtuelle en adresse physique, le MMU commence par regarder le numéro de page, et trouver dans le tableau l'entrée correspondante.
|
||||
Il récupère alors le numéro de case correspondante.
|
||||
Pour obtenir l'addresse de la case correspondante, il lui reste plus que de prendre le numéro de case et le multiplier par la taille d'une case.
|
||||
Pour obtenir l'adresse de la case correspondante, il lui reste plus qu'à prendre le numéro de case et le multiplier par la taille d'une case.
|
||||
Enfin, pour finir, il se décale sur la page du déplacement demandé.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_pages_operation.drawio.png}
|
||||
|
||||
L'avantage de la gestion mémoire par pages est notament qu'il n'est pas nécessaire d'avoir toutes les pages d'un processus en mémoire.
|
||||
Le reste des pages peuvent juste ne pas être chargé, et être chargé que lorsque l'on en à besoin.
|
||||
Cela règle aussi bien le problème de fragmentation que l'on expérience avec la gestion de mémoire ségmenté.
|
||||
L'avantage de la gestion mémoire par pages est notamment qu'il n'est pas nécessaire d'avoir toutes les pages d'un processus en mémoire.
|
||||
Le reste des pages peut juste ne pas être chargé, et être chargé que lorsque l'on en à besoin.
|
||||
Cela règle aussi bien le problème de fragmentation que l'on observe avec la gestion de mémoire segmentée.
|
||||
|
||||
Son problème par contre, c'est qu'il ne permet pas d'avoir de la mémoire partagée de manière efficiente.
|
||||
En effet, si nous souhaitons avoir de la mémoire partagée entre les processus, avec juste une mémoire paginée on se retrouve bien embétés.
|
||||
Eh oui, on peut partager une page, mais si la fin des données que l'on veut partager est entre deux pages, il n'y as pas de solutions.
|
||||
Soit on partage une partie des données que l'on ne souhaites pas partager, soit on ne partage pas toutes les données que l'on souhaites partager.
|
||||
Dans les deux cas on est embétées, c'est pour cette raison que l'on as commencés à implementer les deux méthodes en même temps, c'est à dire une gestion de la mémoire hybride à la fois segmentée et paginée.
|
||||
En effet, si nous souhaitons avoir de la mémoire partagée entre les processus, avec juste une mémoire paginée on se retrouve bien embété.
|
||||
Eh oui, on peut partager une page, mais si la fin des données que l'on veut partager est entre deux pages, il n'y a pas de solutions.
|
||||
Soit on partage une partie des données que l'on ne souhaite pas partager, soit on ne partage pas toutes les données que l'on souhaite partager.
|
||||
Dans les deux cas on est embété, c'est pour cette raison que l'on a commencé à implémenter les deux méthodes en même temps, c'est à dire une gestion de la mémoire hybride, à la fois segmentée et paginée.
|
||||
|
||||
|
||||
|
||||
|
@ -167,11 +166,11 @@
|
|||
|
||||
\vspace{10pt}
|
||||
|
||||
\subsection{Traduction d'addresses}
|
||||
\subsection{Traduction d'adresses}
|
||||
|
||||
Le principe pour obtenir une addresse physique est simple quand on connais déjà le principe pour obtenir une addresse physique pour une mémoire ségmentée ou paginée.
|
||||
Le principe pour obtenir une adresse physique est simple quand on connais déjà le principe pour obtenir une adresse physique pour une mémoire ségmentée ou paginée.
|
||||
La seule différence, c'est que maintenant, il vas falloir faire les deux en même temps.
|
||||
Nous avons donc comme addresse virtuel la même que quand on utilise une gestion de la mémoire segmentée, c'est à dire, un segment, assortis du déplacement que le processus veut dessu.
|
||||
Nous avons donc comme adresse virtuel la même que quand on utilise une gestion de la mémoire segmentée, c'est à dire, un segment, assortis du déplacement que le processus veut dessu.
|
||||
Nous allons commencer par aller chercher la table des pages associés à ce segment
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_hybride_1.drawio.png}
|
||||
|
@ -180,13 +179,13 @@
|
|||
C'est très simple.
|
||||
Il suffit de faire une division euclidienne entre notre déplacement sur le segment, et la taille des pages.
|
||||
Le quotient est notre numéro de page, et le reste le déplacement sur cette même page.
|
||||
Maintenant que l'on à notre numéro de page et notre déplacement, il suffit d'aller chercher la page dans la table de pagination associé à notre segment, et faire le calcul décris dans le chapitre précédent sur la géstion de la mémoire paginée pour obtenir l'addresse physique.
|
||||
Maintenant que l'on à notre numéro de page et notre déplacement, il suffit d'aller chercher la page dans la table de pagination associé à notre segment, et faire le calcul décris dans le chapitre précédent sur la géstion de la mémoire paginée pour obtenir l'adresse physique.
|
||||
|
||||
\includegraphics[width=450pt]{physical_DRAM_representation_hybride_2.drawio.png}
|
||||
|
||||
Si la gestion de la mémoire suivant la méthode ségmentation paginée possède beaucoup d'avantages concernant la gestion de la mémoire et son optimisation, elle possède un énorme désavantage, et pas des moindres, sa vitesse.
|
||||
Elle est plus de deux fois plus longue que les autres méthodes, à cause du grand nombre d'oppération qu'elle doit effectuer pour obtenir la traduction d'une addresse virtuelle en addresse physique.
|
||||
Il existe cependant des solutions pour l'accelérer, par example l'utilisation de cache, appellé le cache TLB dans le processeur, qui garde en mémoire les addresses de pages recherchées les plus récentes.
|
||||
Elle est plus de deux fois plus longue que les autres méthodes, à cause du grand nombre d'oppération qu'elle doit effectuer pour obtenir la traduction d'une adresse virtuelle en adresse physique.
|
||||
Il existe cependant des solutions pour l'accelérer, par example l'utilisation de cache, appellé le cache TLB dans le processeur, qui garde en mémoire les adresses de pages recherchées les plus récentes.
|
||||
Cela accélère énormément cette gestion mémoire, étant donnée que les mêmes pages sont très souvant recherchés.
|
||||
|
||||
Maintenant que nous avons bien parlé des différentes gestions mémoires, nous allons parler du cas ou la mémoire vive est pleine, comment notre gestion de la mémoire paginée vas faire.
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
Les anciennes pages vont être stockés dans un espace de stockage que l'on nomme le swap dans l'attente d'être rechargé en mémoire.
|
||||
|
||||
Le swap est une partition sur le disque, ou, dans le cas de linux, cela peut aussi être un fichier sur un disque étant donné que tout est fichier.
|
||||
Cette partition, vas avoir une table d'addressage contenu dans la mémoire vive, pour faire le lien avec la mémoire physique.
|
||||
Cette partition, vas avoir une table d'adressage contenu dans la mémoire vive, pour faire le lien avec la mémoire physique.
|
||||
Quand la mémoire vive est pleine, elle vas remplacer des pages qui sont dans la RAM pour la mettre dans ce swap.
|
||||
|
||||
C'est ainsi qu'apparait la notion d'algorithme de remplacements.
|
||||
|
|
|
@ -73,14 +73,14 @@
|
|||
|
||||
Jérémy PRIMARD
|
||||
|
||||
Jude Coulavin ?
|
||||
Jude Coulavin
|
||||
|
||||
\vfill
|
||||
|
||||
\fontsize{12}{12}
|
||||
\selectfont
|
||||
|
||||
Enseignant superviseur
|
||||
Enseignant
|
||||
|
||||
\fontsize{14}{18}
|
||||
\selectfont
|
||||
|
|
Loading…
Add table
Reference in a new issue