[OS / Linux] Processus, thread, gestion de la mémoire

Manque de connaissances

Dans le secteur SRE, j'ai l'impression de ne pas connaître au quotidien le mécanisme du système d'exploitation et le mécanisme Linux. Récemment, j'ai lu des livres sur ce sujet et j'ai progressivement complété mes connaissances. Cet article sera la sortie lorsqu'il sera complété. Si vous avez des suggestions, je vous serais reconnaissant de bien vouloir commenter.

En écrivant cet article, je me suis principalement référé aux livres suivants! Manuel de l'ingénieur en infrastructure 2 Techniques et connaissances efficaces pour l'amélioration des compétences

Processus et threads

processus

Il fait référence à l'unité d'exécution minimale sur le système d'exploitation. Le processus est exécuté en allouant des ressources CPU.

Éléments qui composent le processus

Transition d'état

Il existe des états «Running Town», «Running» et «Hibernate». Chaque fois qu'un processus est créé, il passe à différents états.

Créer un nouveau processus

Lorsque vous créez un nouveau processus, vous commencez par copier (appelé forking) un processus qui existe déjà. Vous pouvez également le vérifier avec une commande, veuillez donc le vérifier. pstree

Si vous tapez la commande ls, elle sera exécutée dans l'ordre suivant.

1.Tapez la commande ls
2.le processus bash est fourchu
3.Génération de processus enfant(La mémoire virtuelle peut être allouée.)
4.Le contenu du processus enfant devient la commande ls par l'appel système exec

fil

Il s'agit d'une unité d'exécution de tâches qui peut être créée plusieurs fois dans un processus afin qu'un traitement parallèle puisse être effectué.

image.png

Différence par rapport au processus

Bien qu'il s'agisse de la même structure, le thread est réalisé en passant un drapeau tel que s'il faut copier l'espace mémoire lors de la construction.

Lors de la création d'un Processus, toutes les informations du processus parent sont transmises au processus enfant, et la mémoire virtuelle est réservée au processus enfant, il s'agit donc d'un processus relativement lourd.

Comme vous pouvez le voir dans l'article ci-dessous, dans le contexte historique, au début, il n'y avait que des processus, pas de threads. Et lors de la création d'un processus, le processus parent divise le processus enfant et toutes les informations sont héritées, ce qui est inefficace. Je pense que ce sont des ** threads ** qui peuvent partager l'espace mémoire du processus et réaliser des traitements parallèles.

[Traitement parallèle, ceci et celui du traitement parallèle --Qiita](https://qiita.com/Kohei909Otsuka/items/26be74de803d195b37bd#%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86 % E3% 81% A7% E3% 81% A9% E3% 81% 86% E3% 81% 84% E3% 81% 86% E3% 81% A8% E3% 81% 8D% E3% 81% AB% E3 % 83% 91% E3% 83% 95% E3% 82% A9% E3% 83% BC% E3% 83% 9E% E3% 83% B3% E3% 82% B9% E3% 81% 8C% E3% 81 % 82% E3% 81% 8C% E3% 82% 8B% E3% 81% AE% E3% 81% 8B% E7% 90% 86% E8% AB% 96)

Mutax

Un mécanisme qui permet de réécrire à partir d'un seul thread

Gestion de la mémoire

Lorsque vous créez un processus, la mémoire virtuelle est allouée et le processus s'exécute.

Vue d'ensemble

image.png

Mémoire physique

Fait référence au périphérique de stockage principal (mémoire principale / RAM).

Mémoire virtuelle

C'est un mécanisme qui donne l'impression que le système a plus de mémoire qu'il ne l'est en réalité. Lorsqu'un processus accède à la mémoire, il passe par la mémoire virtuelle.

The Linux Kernel

MMU La MMU (Memory Management Unit) intégrée à la CPU convertit l'adresse de stockage virtuelle et l'adresse de mémoire physique. La MMU est fournie avec les informations ** Table de pagination ** et les utilise pour effectuer la conversion. En outre, cette correspondance est appelée cartographie. [[Illustration] L'essence, le mécanisme et les mérites de la mémoire virtuelle (mémoire virtuelle) ~ Swap, MMU et table de pagination ~ \ | Guide SE](https://milestone-of-se.nesuke.com/sv-basic/ architecture / mémoire-virtuelle-et-échange /)

échanger

Supposons qu'un processus manque de mémoire physique lorsqu'il demande au système d'exploitation d'allouer de la mémoire. Dans ce cas, l'espace mémoire physique déjà alloué est libéré dans la zone d'échange. (Swap out) Inversement, lorsque les données expulsées sont nécessaires, les données sont renvoyées de la zone d'échange vers l'espace mémoire physique. (Swap-in) Du stockage virtuel, la zone utilisée par le disque dur est la zone de swap.

Appel système

Le système d'exploitation fournit une fonction (API) appelée "appel système" pour les programmes généraux, et en principe il est supposé être accessible indirectement par cet appel système.

Je pense que c'est une image de l'interface. ・ Il sert d'intermédiaire pour l'accès au noyau Linux.

[[Illustration] Espace utilisateur et espace noyau pour les débutants, appel système, MMU / protection de la mémoire, mécanisme \ | Guide SE](https://milestone-of-se.nesuke.com/sv-basic/architecture/user -space-noyau-espace /)

Noyau Linux

Le système d'exploitation sert d'intermédiaire entre le matériel et le logiciel. Le noyau Linux est une fonction essentielle d'un tel système d'exploitation.

Cette explication dans l'article ci-dessous est plutôt sympa.

[Pour les débutants] Qu'est-ce que le noyau Linux? --Qiita

image.png Cité ci-dessous [Fichier: Layer-of-System.png](https://uc2.h2np.net/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB : Layer-of-System.png)

Espace noyau et espace utilisateur

L'espace utilisateur est la zone mémoire utilisée par l'application (logiciel fonctionnant sous l'OS). L'espace noyau fait référence à la zone mémoire utilisée par le noyau.

Il s'agit d'un espace noyau et d'un espace utilisateur séparés dans la MMU.

Pourquoi vous devez vous séparer

Si quelqu'un peut accéder à l'espace du noyau, cela mènera à l'accès au système d'exploitation. Cela peut détruire le système d'exploitation lui-même en même temps. Par conséquent, j'ose diviser l'espace de cette manière.

Si vous souhaitez utiliser l'espace noyau

Les processus en mode utilisateur n'ont pas accès à l'espace noyau. Cependant, lorsque je souhaite l'utiliser, je peux basculer entre le mode utilisateur et le mode noyau avec une fonction appelée ** Context Switch **.

Introduction au noyau Linux Espace utilisateur et espace noyau \ | Introduction au développement de pilotes de périphériques Linux

Recommended Posts

[OS / Linux] Processus, thread, gestion de la mémoire
Processus Linux
Gérer le processus Jupyter
Linux (mémoire de commande)
[Linux] [C] Obtenir le temps CPU par processus / thread
Distribution OS et Linux
Gestion de la mémoire au démarrage
Gestion de la mémoire »Présentation des concepts
[Français] Spark Memory Management depuis 1.6.0
Système de gestion de paquet principal Linux