Comment la mémoire est-elle gérée dans le système d'exploitation ?

Animation de scénario

0. Gestion de la mémoire - Un gestionnaire de mémoire simple - "Compréhension approfondie de la programmation - Utilisation du langage d'assemblage Linux".gif

Contexte

Les programmeurs WEB entrent souvent en contact avec js, css, image, xhr et le temps de requête de chaque ressource dans les options de développement du navigateur. comme suit:

image-20220703075051134.png

Cet indicateur de temps est l'endroit le plus intuitif pour les problèmes de performance en cas de problème.

Envoyez une requête du navigateur au middleware backend tel que tomcat, iis et nginx pour obtenir le résultat de retour. Dans chaque lien expérimenté à cette étape, nous travaillons sans relâche pour raccourcir le temps de visite à la plage acceptable pour les clients.

Lorsque le trafic est faible, cela n'affectera pas le service et n'attirera pas l'attention. Cependant, si le trafic des utilisateurs augmente, cela peut entraîner une série de problèmes. (Par exemple, lorsque la promotion est en cours d'exécution, lorsque les données sont ciblées par l'ingénieur du crawler).

Le phénomène mentionné ci-dessus. Il peut y avoir des problèmes de déploiement, des problèmes de disque ou de processeur, de mémoire, etc. Afin de percer ces énormes piles technologiques, cet article commence par "mémoire". Parce que la "mémoire" peut être un gros obstacle pour de nombreux programmeurs débutants.

Analogie entre gestion de la mémoire et « verser du vin »

Ensuite, commencez par l'indicateur de surveillance de "mémoire" et présentez brièvement l'idée de conception de "mémoire" au niveau du système d'exploitation. Jette les bases d'une compréhension approfondie des enjeux associatifs de « mémoire ».

Afin de faciliter la compréhension de ce concept abstrait, utilisez un processus facile à comprendre pour faire une analogie. "Cup and keg" correspond à "process" et "memory space".

Convention : En d'autres termes, certaines variables de base sont standardisées dans le processus d'initialisation, comme les spécifications sur l'emballage de la bière, 350 ml en bouteille, 200 ml en remplissage, 10 L en fût, et des attributs tels que l'origine, les ingrédients, la date de production, etc.

Tasse : Je veux une tasse de mémoire, ma capacité est de 64 ml.

image-20220710093342231.png

Fût : j'ai 1024 ml, nous ne vendons que le verre entier

image-20220710093447789.png

Monologue du baril : où se trouve le baril, à quelle hauteur il est levé, l'angle d'inclinaison, quand il est versé, quand un verre est terminé. Pour la position de retrait actuelle de cette tasse. où trouver une nouvelle tasse

Narrateur : La tasse et le baril définissent chacun leurs propres spécifications, et le baril verse de la mémoire dans la tasse

image-20220710093519722.png

analogie:

  • En comparant un tonneau de vin à une clé USB, le tonneau lui-même n'a pas d'échelle, mais pour qu'il soit distribué en douceur dans la tasse, il est nécessaire de connaître la capacité du tonneau et la capacité de la tasse
  • L'allocation de mémoire de fonctionnement équivaut à appliquer pour les tasses et les tonneaux de vin, "s'il vous plaît, versez-moi un verre de vin"
  • Lorsque le tonneau de vin est versé dans le verre, c'est un processus de demande en versant. Je dois me demander, combien ai-je, si j'ai assez à verser, s'il y en a assez, versez-le directement, s'il est pas assez, puis-je postuler pour un autre baril

那么接下来需要做的是,如果用汇编语言操作器件的话,需要怎么设计?

  • 定义全局变量,全局变量就像我们在写某一个页面初始化过程中要对用到的全局变量进行定义那样。全局变量有哪些?

    • 管理内存的起始处
    • 管理的内存之后的一个内存位置
    • 内存区头空间大小
    • 头中可用标志的位置
    • 内存区头中大小字段的位置
    • 标记分配空间的数字
    • 用于标记已回收空间的数字
    • 中断系统调用的系统调用号
  • 初始化函数

  • 获取一段内存,这个过程怎么设计?

    • 查看每一个的大小以及是否已经分配
    • 如果某个内存区大于所请求的大小,且可用,该函数就获取内存区
    • 如果无法找到足够大的内存区,就向操作系统请求更多的内存
    • 移动current_break

    它看起来像一个迭代的过程。

  • 释放内存到内存池中

这就像一个Java Web的程序员去接到一个需求实现它的道理是一样的。对从产品部门接到的需求进行拆分细化。

其实内存的管理的原理,从宏观上来说就是上述的流程,它像我们平时处理业务中的供求关系的加减法是同样的道理。只不过是交互的对象是计算机主板上的内存条,讨价还价的过程交给了电路和芯片,我们需要给出的是策略。

windows上的内存指标分析

从上面的类比来说,它只能给人对“内存”这一概念有一个宏观整体的认识。先找一个例子落地一下,不至于过于空泛引起不适。

在windows上有下面这么个命令:

carbone(1).png 在windows上执行结果如下:

carbone(2).png 上图中明显能看到第一列数据是时间戳,第二列数据显示的是可用内存,第三列数据是每秒的页面调度。这个命令我是在一台server2008的windows服务器上执行。

通过它能看出来内存的什么动作呢?

可用内存开始的时候维持在902MB,第三列的页面调度的数据保持的是0。在到第五行的时候,从0突然增长到8831.173840。这说明有内存页面参与调度了。而且可用内存从900左右减少到700左右。

对应的操作是因为我打开了一个浏览器。

而这个页面是什么呢?它就相当于上述的啤酒桶中的啤酒。以64为一个单位进行分配调度。在内存中则以内存页为内存调度。

Partagez celui-ci ici. Je suis "Demandez à l'ordinateur". Apprenons ensemble les composants de l'ordinateur.

Je participe au recrutement du programme de signature de créateurs de la communauté technologique Nuggets, cliquez sur le lien pour vous inscrire et soumettre .

Je suppose que tu aimes

Origine juejin.im/post/7118634557041508383
conseillé
Classement