Le kernel entier est-il chargé dans la memory au démarrage?

Je lis à travers ce doc IBM très populaire (je le vois assez souvent sur le web) expliquant la fonction du disque RAM initial.

J'ai frappé un mur en conceptualisant comment cela fonctionne cependant.

Dans le doc, il est dit

Le chargeur de démarrage, tel que GRUB, identifie le kernel qui doit être chargé et copy cette image du kernel et tout initrd associé dans la memory

Je suis déjà confus: copy-t-il le kernel entier en memory ou en partie? Si le kernel entier est en memory alors pourquoi avons-nous besoin du disque RAM initial?

Je pensais que le but d'initrd était de pouvoir avoir une petite image de kernel généralisée et initrd installera les modules corrects avant que l'image du kernel ne soit chargée. Mais si le kernel entier est déjà en memory, pourquoi avons-nous besoin d'initrd?

Cela amène aussi une autre chose qui me confond – où sont les modules chargés dans le kernel? Tous les modules du kernel sont-ils stockés dans initrd?

Le kernel entier est chargé dans la memory au démarrage, typiquement avec un initramfs nos jours. (Il est toujours possible de configurer un système pour démarrer sans initramfs mais c'est inhabituel sur les ordinateurs de bureau et les servers).

Le rôle de initramfs est de fournir la fonctionnalité nécessaire pour monter les "vrais" filesystems et continuer à démarrer le système. Cela implique des modules du kernel, ainsi que divers binarys: il faut au less udev , peut-être un peu de mise en réseau, et kmod qui charge des modules.

Les modules peuvent être chargés dans le kernel plus tard que juste le démarrage, donc il n'y a pas de préparation spéciale du kernel par initramfs . Ils peuvent être stockés n'importe où: initramfs , /lib/modules sur le système de files réel, dans un tree de développement si vous développez un module … Les initramfs ne doivent contenir que les modules nécessaires pour monter le système de files racine contient le rest).

Le kernel entier (mais pas ses modules) sera chargé dans la memory. S'il y a des modules dont le kernel aura besoin avant que des filesystems soient disponibles (cela signifie généralement les pilotes pour les filesystems et leurs périphériques), ces modules seront dans initramfs (en memory), et le kernel les chargera à partir de là. D'autres modules peuvent être chargés plus tard à partir du système de files.

Le kernel dans les configurations Linux modernes est fortement basé sur les modules, c'est-à-dire que le kernel proprement dit (chargé au démarrage dans la RAM) inclut uniquement la fonctionnalité minimale, tout le rest est compilé sous forme de modules (chargeables au moment de l'exécution). Pour que cela fonctionne, même lorsque les périphériques ou les filesystems nécessaires au démarrage sont des modules, un initramfs est chargé avec le kernel (comme son nom l'indique, il s'agit d'une zone RAM avec un système de files simple, monté au démarrage). Ce système de files temporaire est monté sur / , et contient les programmes de démarrage et les modules requirejs. Une fois que le démarrage sur initramfs est terminé, Linux exécute un pivot_root(8) , menant le réel / et lancant le contenu initramfs .

Le sharepoint cette complexité est par exemple qu'une dissortingbution peut comstackr un kernel (kernel minimal et set complet de modules) et, lors de l'installation du kernel, créer un initramfs adapté au matériel et à la configuration de la machine cible. Tout cela est nécessaire en raison de la variété sauvage des périphériques et des configurations des «ordinateurs personnels».