Table des matières
Avant-propos" >Avant-propos
Origine" >Origine
Mémoire virtuelle" >Mémoire virtuelle
Pagination et tableaux de pages" >Pagination et tableaux de pages
Adressage et allocation de mémoire" >Adressage et allocation de mémoire
Partage de données" >Partage de données
ÉCHANGE" >ÉCHANGE
FAQ" >FAQ
32 bits et 64 bits" >32 bits et 64 bits
Exploiter directement la mémoire physique" >Exploiter directement la mémoire physique
Le processus JVM occupe trop de mémoire virtuelle" >Le processus JVM occupe trop de mémoire virtuelle
Commandes de gestion couramment utilisées" >Commandes de gestion couramment utilisées
Afficher l'état de la mémoire système" >Afficher l'état de la mémoire système
pmap" >pmap
Modifier la configuration de la mémoire" >Modifier la configuration de la mémoire
Opération SWAP" >Opération SWAP
Résumé" >Résumé
Maison Tutoriel système Linux Mémoire virtuelle Linux, vous la comprenez bien ?

Mémoire virtuelle Linux, vous la comprenez bien ?

Feb 05, 2024 pm 12:42 PM
linux linux教程 linux系统 linux命令 shell脚本 Linux embarqué bon permis Débuter avec Linux apprentissage Linux

Avant-propos

Récemment, il y a un sujet de partage dans le groupe que j'attends avec impatience : "La mémoire virtuelle sous Linux". Un soir, alors que nous faisions des heures supplémentaires, nous discutions du concept de mémoire virtuelle. Notre chef a constaté que plusieurs collègues ne comprenaient pas assez clairement la mémoire virtuelle, il a donc spécialement choisi ce sujet pour ce collègue (rires).

Avant, j'avais une certaine compréhension du concept des systèmes d'exploitation, mais après l'obtention de mon diplôme, j'ai ressenti un peu de regret face au gaspillage de mes quatre années de spécialisation en informatique à l'université. Par conséquent, après le travail, j'ai pris le temps de regarder le cours sur le système d'exploitation ouvert du Harbin Institute of Technology sur NetEase Cloud Classroom, et j'ai également lu un livre « Linux Kernel Design and Implementation » qui explique les concepts de base des systèmes d'exploitation. De plus, l'année dernière, j'ai écrit un serveur simple en langage C et j'en ai appris davantage sur le système sous-jacent. Ces connaissances m'ont permis de mieux appréhender la couche applicative et m'ont beaucoup aidé lors d'un récent dépannage.

Il y a quelques jours, un autre collègue m'a posé une autre question liée à la mémoire virtuelle, et j'ai réalisé que ma compréhension de la mémoire virtuelle n'était pas assez approfondie, et que certains concepts étaient même contradictoires. Par conséquent, j'ai parcouru quelques informations et réorganisé ces connaissances, dans l'espoir d'être plus à l'aise dans l'application pratique la prochaine fois.

Origine


Mémoire virtuelle

Il ne fait aucun doute que la mémoire virtuelle est certainement l'un des concepts les plus importants du système d'exploitation. Je pense que c'est principalement à cause de l'importance de la mémoire dans l'ensemble du système. Le processeur est très rapide, mais a une capacité limitée et une seule fonction. Les autres matériels d'E/S prennent en charge diverses fonctions sophistiquées, mais elles sont plus lentes que le processeur. Par conséquent, ils ont besoin d’un lubrifiant qui agisse comme un tampon entre eux, et c’est là que la mémoire entre en jeu.

Dans les systèmes d'exploitation modernes, le multitâche est devenu la norme. Le parallélisme multitâche améliore considérablement l'utilisation du processeur, mais il entraîne également des conflits dans les opérations de mémoire entre plusieurs processus. Le concept de mémoire virtuelle vise à résoudre ce problème.

Mémoire virtuelle Linux, vous la comprenez bien ?

L'image ci-dessus est l'explication la plus simple et la plus intuitive de la mémoire virtuelle.

Le système d'exploitation a un morceau de mémoire physique (la partie centrale) et deux processus (en fait plus) P1 et P2. Le système d'exploitation dit respectivement à P1 et P2 que toute ma mémoire est à vous, utilisez-la comme vous le souhaitez et gérez-la. . assez. Mais en fait, le système d'exploitation leur a juste tiré un gros gâteau. Ces mémoires auraient été attribuées à P1 et P2, mais en fait, ils n'ont reçu qu'un numéro de série. Ce n'est que lorsque P1 et P2 commencent réellement à utiliser ces mémoires que le système commence à se déplacer et à reconstituer les différents blocs du processus. P2 pense qu'il utilise la mémoire A, mais en fait, elle a été discrètement redirigée vers la mémoire B réelle. le système. Même lorsque P1 et P2 partagent la mémoire C, ils ne le savent pas.

Cette méthode des systèmes d'exploitation pour tromper les processus est la mémoire virtuelle. Pour des processus tels que P1 et P2, ils pensent tous qu'ils occupent toute la mémoire, et ils ne savent pas et n'ont pas besoin de se soucier de l'adresse de la mémoire physique qu'ils utilisent.

Pagination et tableaux de pages

La mémoire virtuelle est un concept dans le système d'exploitation. Pour le système d'exploitation, la mémoire virtuelle est un tableau de comparaison Lorsque P1 obtient les données dans la mémoire A, il doit se rendre à l'adresse A de la mémoire physique et rechercher les données en mémoire. B. Il doit aller à l'adresse C de la mémoire physique.

Nous savons que l'unité de base du système est l'octet. Si chaque octet de mémoire virtuelle est mappé à l'adresse de la mémoire physique, chaque entrée nécessite au moins 8 octets (adresse virtuelle 32 bits -> adresse physique 32 bits), dans le cas de la mémoire 4G, 32 Go d'espace sont nécessaires pour stocker le tableau de comparaison, ce tableau est donc trop grand pour contenir même l'adresse physique réelle, le système d'exploitation a donc introduit le concept de 页(Page).

Lorsque le système démarre, le système d'exploitation divise toute la mémoire physique en pages en unités de 4K. Lorsque la mémoire est allouée à l'avenir, l'unité est une page, donc la table de mappage des pages de mémoire virtuelle correspondant aux pages de mémoire physique est considérablement réduite. La mémoire 4G ne nécessite qu'une table de mappage de 8 Mo. Certains processus n'utilisent pas de mémoire virtuelle. Il est nécessaire de sauvegarder la relation de mappage, et Linux conçoit également une table de pages à plusieurs niveaux pour une mémoire volumineuse, qui peut être paginée pour réduire la consommation de mémoire. La table de mappage entre la mémoire virtuelle du système d'exploitation et la mémoire physique s'appelle 页表.

Adressage et allocation de mémoire

Nous savons que grâce au mécanisme de mémoire virtuelle, chaque processus pense qu'il occupe toute la mémoire. Lorsque le processus accède à la mémoire, le système d'exploitation convertira l'adresse de mémoire virtuelle fournie par le processus en adresse physique, puis obtiendra les données. à l'adresse physique correspondante. Il existe un élément matériel dans le processeur qui est spécifiquement utilisé pour traduire les adresses de mémoire virtuelle. Le processeur définit également une stratégie de cache pour l'adressage des tables de pages. En raison de la localisation du programme, son taux de réussite dans le cache peut atteindre 98 %. 内存管理单元 MMU(Memory Management Unit)

La situation ci-dessus est le mappage de l'adresse virtuelle à l'adresse physique dans la mémoire de la table de pages. Si l'adresse physique accédée par le processus n'a pas été allouée, le système générera un

Pendant le traitement de l'interruption, le système passe à l'état du noyau. pour attribuer l’adresse virtuelle au processus. 缺页中断

Fonction


La mémoire virtuelle résout non seulement le problème des conflits d'accès à la mémoire entre plusieurs processus grâce à la traduction d'adresses mémoire, mais apporte également plus d'avantages.

Gestion de la mémoire des processus

Cela aide le processus de gestion de la mémoire, principalement reflété dans :

  • Intégrité de la mémoire : En raison de la « tromperie » de la mémoire virtuelle sur le processus, chaque processus pense que la mémoire qu'il obtient est une adresse continue. Lorsque nous écrivons une application, nous n'avons pas besoin de considérer l'allocation de gros blocs d'adresses. Nous pensons toujours que le système dispose de suffisamment de gros blocs de mémoire.
  • Sécurité : puisqu'un processus accède à la mémoire, il doit être traité via la table des pages. Le système d'exploitation peut implémenter un contrôle des autorisations de mémoire en ajoutant divers indicateurs d'autorisation d'accès à chaque élément de la table des pages.

Partage de données

Il est plus facile de partager de la mémoire et des données via la mémoire virtuelle.

Lorsqu'un processus charge une bibliothèque système, il alloue toujours d'abord un morceau de mémoire et charge le fichier de bibliothèque sur le disque dans cette mémoire lorsqu'il utilise directement la mémoire physique, car l'adresse de la mémoire physique est unique, même si le système constate que la mémoire physique est unique. la même bibliothèque est dans le système. Elle a été chargée deux fois, mais la mémoire de chargement spécifiée par chaque processus était différente et le système n'a rien pu faire.

Lors de l'utilisation de la mémoire virtuelle, le système doit uniquement faire pointer l'adresse de mémoire virtuelle du processus vers l'adresse de mémoire physique où se trouve le fichier de bibliothèque. Comme le montre la figure ci-dessus, les adresses B des processus P1 et P2 pointent toutes deux vers l'adresse physique C.

Il est également très simple d'utiliser la mémoire partagée en utilisant la mémoire virtuelle. Le système n'a qu'à faire pointer l'adresse de mémoire virtuelle de chaque processus vers l'adresse de mémoire partagée allouée par le système.

ÉCHANGE

La mémoire virtuelle permet aux processus « d'étendre » la mémoire.

Nous avons mentionné plus tôt que la mémoire virtuelle alloue de la mémoire physique au processus via des interruptions de défaut de page. La mémoire est toujours limitée. Que se passe-t-il si toute la mémoire physique est occupée ?

Linux propose le concept de SWAP. Les partitions SWAP peuvent être utilisées sous Linux. Lorsque la mémoire physique est allouée mais que la mémoire disponible est insuffisante, les données de mémoire temporairement inutilisées seront d'abord placées sur le disque, permettant aux processus qui en ont besoin de l'utiliser en premier. puis le processus devra les utiliser à nouveau. Ces données sont ensuite chargées en mémoire Grâce à cette technologie « d'échange », Linux peut permettre au processus d'utiliser plus de mémoire.

FAQ


J'avais aussi beaucoup de questions sur la compréhension de la mémoire virtuelle.

32 bits et 64 bits

Le problème le plus courant concerne les versions 32 bits et 64 bits.

Le processeur accède à la mémoire via un bus physique, la plage d'adresses d'accès est donc limitée par le nombre de bus machine. Sur une machine 32 bits, il y a 32 bus. Chaque bus a deux potentiels, haut et bas, représentant les bits 1 et 2. 0 respectivement. Ensuite, l'adresse maximale accessible est 2 ^ 32 bits = 4 Go, il n'est donc pas valide d'insérer une mémoire supérieure à 4 Go sur une machine 32 bits et le processeur ne peut pas accéder à une mémoire supérieure à 4 Go.

Mais les machines 64 bits n'ont pas de bus 64 bits et leur mémoire maximale est limitée par le système d'exploitation Linux prend actuellement en charge un maximum de 256 Go de mémoire.

Selon le concept de mémoire virtuelle, il est acceptable d'exécuter un logiciel 64 bits sur un système 32 bits. Cependant, en raison de la conception structurelle des adresses de mémoire virtuelle du système, les adresses virtuelles 64 bits ne peuvent pas être utilisées en 32 bits. systèmes.

Exploiter directement la mémoire physique

Le système d'exploitation utilise la mémoire virtuelle. Que devons-nous faire si nous voulons exploiter directement la mémoire ?

Linux mappera chaque appareil sur /dev/ 目录下的文件,我们可以通过这些设备文件直接操作硬件,内存也不例外。在 Linux 中,内存设置被映射为 /dev/mem, et l'utilisateur root pourra directement exploiter la mémoire en lisant et en écrivant ce fichier.

Le processus JVM occupe trop de mémoire virtuelle

Lorsque nous utilisons TOP pour afficher les performances du système, nous constaterons que dans la colonne VIRT, le processus Java occupera une grande quantité de mémoire virtuelle.

Mémoire virtuelle Linux, vous la comprenez bien ?

La raison de ce problème est que Java utilise le pool de mémoire Arena de Glibc pour allouer une grande quantité de mémoire virtuelle et ne pas l'utiliser. De plus, les fichiers lus par Java seront également mappés dans la mémoire virtuelle. Dans la configuration par défaut de la machine virtuelle, chaque pile de threads Java occupera 1 Mo de mémoire virtuelle. Pour plus de détails, vous pouvez vérifier pourquoi les programmes multithread sous Linux consomment autant de mémoire virtuelle.

La mémoire physique réelle occupée dépend de la colonne RES (résidente). La valeur de cette colonne est la taille qui est réellement mappée à la mémoire physique.

Commandes de gestion couramment utilisées


Nous pouvons également gérer nous-mêmes la mémoire virtuelle Linux.

Afficher l'état de la mémoire système

Il existe de nombreuses façons de vérifier l'état de la mémoire du système. freevmstat et d'autres commandes peuvent afficher l'état de la mémoire du système actuel. Il convient de noter que la mémoire disponible n'est pas seulement la colonne libre en raison des caractéristiques paresseuses du système d'exploitation. , un grand nombre de tampons/cache seront utilisés lorsque le processus n'est pas en cours d'exécution, ils ne seront pas nettoyés immédiatement après réutilisation. Si le processus qui les utilisait auparavant peut continuer à être utilisé, ils peuvent également être exploités si nécessaire. .

De plus, via cat /proc/meminfo, vous pouvez afficher les détails de l'utilisation de la mémoire système, y compris l'état des pages sales, etc. Les détails peuvent être trouvés à : /PROC/MEMINFO Mystery.

pmap

Si vous souhaitez afficher la distribution de mémoire virtuelle d'un certain processus individuellement, vous pouvez utiliser la commande pmap pid, qui répertoriera l'occupation de chaque segment de mémoire virtuelle de l'adresse basse à l'adresse haute.

Vous pouvez ajouter -XX paramètres pour afficher des informations plus détaillées.

Modifier la configuration de la mémoire

Nous pouvons également modifier la configuration du système Linux et utiliser les fichiers du répertoire sysctl vm [-options] CONFIG 或 直接读写 /proc/sys/vm/ pour afficher et modifier la configuration.

Opération SWAP

La fonctionnalité SWAP de la mémoire virtuelle n'est pas toujours bénéfique. Permettre au processus d'échanger en continu de grandes quantités de données entre la mémoire et le disque occupera considérablement le processeur et réduira l'efficacité de fonctionnement du système, nous ne souhaitons donc parfois pas utiliser le swap.

Nous pouvons modifier la commande vm.swappiness=0 来设置内存尽量少使用 swap,或者干脆使用 swapoff pour désactiver SWAP.

Résumé


Le concept de mémoire virtuelle est très simple à comprendre, mais il en découlera une série de connaissances très complexes. Cet article ne parle que de quelques principes de base et ignore de nombreux détails, tels que l'utilisation de registres de segment intermédiaire dans l'adressage de la mémoire virtuelle, l'utilisation de la mémoire virtuelle par le système d'exploitation pour améliorer les applications de cache et de tampon, etc. S'il y a une opportunité, je j'en parlerai séparément.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Android TV Box obtient une mise à niveau non officielle d'Ubuntu 24.04 Android TV Box obtient une mise à niveau non officielle d'Ubuntu 24.04 Sep 05, 2024 am 06:33 AM

Pour de nombreux utilisateurs, pirater un boîtier Android TV semble intimidant. Cependant, le développeur Murray R. Van Luyn a dû relever le défi de rechercher des alternatives appropriées au Raspberry Pi pendant la pénurie de puces Broadcom. Ses efforts de collaboration avec l'Armbia

Entrée de la version Web Deepseek Entrée du site officiel Deepseek Entrée de la version Web Deepseek Entrée du site officiel Deepseek Feb 19, 2025 pm 04:54 PM

Deepseek est un puissant outil de recherche et d'analyse intelligent qui fournit deux méthodes d'accès: la version Web et le site officiel. La version Web est pratique et efficace et peut être utilisée sans installation; Que ce soit des individus ou des utilisateurs d'entreprise, ils peuvent facilement obtenir et analyser des données massives via Deepseek pour améliorer l'efficacité du travail, aider la prise de décision et promouvoir l'innovation.

Comment installer Deepseek Comment installer Deepseek Feb 19, 2025 pm 05:48 PM

Il existe de nombreuses façons d'installer Deepseek, notamment: Compiler à partir de Source (pour les développeurs expérimentés) en utilisant des packages précompilés (pour les utilisateurs de Windows) à l'aide de conteneurs Docker (pour le plus pratique, pas besoin de s'inquiéter de la compatibilité), quelle que soit la méthode que vous choisissez, veuillez lire Les documents officiels documentent soigneusement et les préparent pleinement à éviter des problèmes inutiles.

Adresse de téléchargement de l'application de portefeuille BitPie Bitpie Adresse de téléchargement de l'application de portefeuille BitPie Bitpie Sep 10, 2024 pm 12:10 PM

Comment télécharger l'application BitPie Bitpie Wallet ? Les étapes sont les suivantes : Recherchez « BitPie Bitpie Wallet » dans l'AppStore (appareils Apple) ou Google Play Store (appareils Android). Cliquez sur le bouton « Obtenir » ou « Installer » pour télécharger l'application. Pour la version informatique, visitez le site Web officiel du portefeuille BitPie et téléchargez le progiciel correspondant.

Installation officielle du site officiel de Bitget (Guide du débutant 2025) Installation officielle du site officiel de Bitget (Guide du débutant 2025) Feb 21, 2025 pm 08:42 PM

Bitget est un échange de crypto-monnaie qui fournit une variété de services de trading, notamment le trading au comptant, le trading de contrats et les dérivés. Fondée en 2018, l'échange est basée à Singapour et s'engage à fournir aux utilisateurs une plate-forme de trading sûre et fiable. Bitget propose une variété de paires de trading, notamment BTC / USDT, ETH / USDT et XRP / USDT. De plus, l'échange a une réputation de sécurité et de liquidité et offre une variété de fonctionnalités telles que les types de commandes premium, le trading à effet de levier et le support client 24/7.

Zabbix 3.4 Installation de la compilation du code source Zabbix 3.4 Installation de la compilation du code source Sep 04, 2024 am 07:32 AM

1. Environnement d'installation (machine virtuelle Hyper-V) : $hostnamectlStatichostname:localhost.localdomainIconname:computer-vmChassis:vmMachineID:renwoles1d8743989a40cb81db696400BootID:renwoles272f4aa59935dcdd0d456501Virtualisation:microsoftOperatingSystem:CentOS Linux7 (Core )CPEOSNom :cpe :

Le package d'installation OUYI OKX est directement inclus Le package d'installation OUYI OKX est directement inclus Feb 21, 2025 pm 08:00 PM

OUYI OKX, le premier échange mondial d'actifs numériques, a maintenant lancé un package d'installation officiel pour offrir une expérience de trading sûre et pratique. Le package d'installation OKX de OUYI n'a pas besoin d'être accessible via un navigateur. Le processus d'installation est simple et facile à comprendre.

Obtenez le package d'installation Gate.io gratuitement Obtenez le package d'installation Gate.io gratuitement Feb 21, 2025 pm 08:21 PM

Gate.io est un échange de crypto-monnaie populaire que les utilisateurs peuvent utiliser en téléchargeant son package d'installation et en l'installant sur leurs appareils. Les étapes pour obtenir le package d'installation sont les suivantes: Visitez le site officiel de Gate.io, cliquez sur "Télécharger", sélectionnez le système d'exploitation correspondant (Windows, Mac ou Linux) et téléchargez le package d'installation sur votre ordinateur. Il est recommandé de désactiver temporairement les logiciels antivirus ou le pare-feu pendant l'installation pour assurer une installation fluide. Une fois terminé, l'utilisateur doit créer un compte Gate.io pour commencer à l'utiliser.

See all articles