Le noyau linux

Presque tout ce que fait le noyau de Linux tourne autour de la mémoire vive. L'une des tâches du noyau est de diviser la mémoire en plusieurs subdivisions, il devra également garder constamment des information sur l’état de chaque subdivision. Chaque processus obtient sa propre part de mémoire, et le noyau doit s'assurer que chaque processus conserve sa part.

Le noyau est chargé de gérer les tâches dans quatre domaines généraux du système :
  1. Le processus : Le noyau est responsable de déterminer quels processus sont autorisés à utiliser le CPU.
  2. La mémoire : Le noyau doit garder une trace de toute la mémoire - ce qui est actuellement alloué à un processus particulier, ce qui peut être partagé entre les processus et ce qui est libre.
  3. Les pilotes de périphérique : Le noyau agit comme une interface entre le matériel (tel qu'un disque) et les processus.
  4. Les appels système et le support: Les processus utilisent normalement les appels système pour communiquer avec le noyau.

1. Gestion des processus

Cette partie décrit la gestion des processus pour un processeur mono cœur.

La gestion des processus décrit le démarrage, la pause, la reprise et l’arrêt des processus. Si les concepts derrière le démarrage et l’arrêt des processus sont simples, décrire comment un processus utilise le CPU en cours de fonctionnement est un peu plus complexe.
Sur tout système d'exploitation moderne, de nombreux processus s'exécutent «simultanément». Par exemple, vous pouvez avoir un éditeur de texte et un lecteur audio ouverts en même temps sur un ordinateur de bureau. Cependant, les processus derrière ces applications ne s'exécutent généralement pas exactement en même temps.
Prenons le cas d'un système avec un processeur mono cœur. De nombreux processus peuvent utiliser le processeur, mais un seul processus peut réellement utiliser le processeur à un moment donné. En pratique, chaque processus utilise le CPU pendant une petite fraction de seconde, puis s'arrête; puis un autre processus utilise le CPU pour une autre petite fraction de seconde; puis un autre processus, et ainsi de suite. Le fait qu'un processus abandonne le contrôle du CPU à un autre processus est appelé un changement de contexte (ang. context switch).
Chaque intervalle de temps (ang. time slice) donne à un processus suffisamment de temps pour un calcul important (et en effet, un processus termine souvent sa tâche en cours au cours d'une seule tranche). Cependant, comme les intervalles sont petits, les humains ne peuvent pas les percevoir et le système semble exécuter plusieurs processus en même temps. Cette capacité est connue sous le nom de multitâche (ang. multitasking).

Le noyau est responsable du changement de contexte. Pour comprendre comment cela fonctionne, voici une situation avec un processus qui s'exécute en mode utilisateur mais sa tranche de temps est écoulée :
  1. Le CPU (le matériel réel) interrompt le processus en cours en se référant à un minuteur interne, passe en mode noyau et remet le contrôle au noyau.
  2. Le noyau enregistre l'état actuel du CPU et de la mémoire, ce qui sera essentiel pour reprendre ultérieurement le processus qui vient d'être interrompu.
  3. Le noyau exécute toutes les tâches qui ont pu se produire au cours de la tranche de temps précédente (telles que la collecte de données à partir des opérations d'entrée et de sortie (input/output opérations)).
  4. Le noyau est maintenant prêt à laisser un autre processus s'exécuter. Le noyau analyse la liste des processus prêts à fonctionner et en choisit un.
  5. Le noyau prépare la mémoire pour ce nouveau processus, puis prépare le CPU.
  6. Le noyau indique au CPU combien de temps durera le segment de temps pour le nouveau processus.
  7. Le noyau bascule le CPU en mode utilisateur et donne le contrôle du CPU au processus.

2. Gestion de la mémoire

Le noyau doit gérer la mémoire lors d'un changement de contexte. La gestion de la mémoire du noyau est compliquée car les conditions suivantes doivent être remplies :
  • Le noyau doit avoir sa propre zone privée en mémoire à laquelle les processus utilisateur ne peuvent pas accéder.
  • Chaque processus utilisateur a besoin de sa propre section de mémoire.
  • Un processus utilisateur ne peut pas accéder à la mémoire privée d'un autre processus.
  • Les processus utilisateur peuvent partager la mémoire.
  • Une partie de la mémoire dans les processus utilisateur peut être en lecture seule.
  • Le système peut utiliser plus de mémoire que ce qui est physiquement présent en utilisant l'espace disque comme auxiliaire.
Les processeurs modernes incluent toutefois, pour simplifier le travail du noyau, une unité de gestion de la mémoire (ang. memory management unit (MMU)) qui met en place un schéma d'accès à la mémoire appelé mémoire virtuelle (ang. virtual memory).
Lors de l'utilisation de la mémoire virtuelle, un processus n'accède pas directement à la mémoire par son emplacement physique dans le matériel. Au lieu de cela, le noyau configure chaque processus pour agir comme s'il avait lui-même une machine entière. Lorsque le processus accède à une partie de sa mémoire, la MMU intercepte l'accès et utilise une carte d'adresses mémoire pour traduire l'emplacement mémoire du processus en un emplacement mémoire physique réel sur la machine.

Le noyau doit toujours initialiser et continuellement maintenir et modifier cette carte d'adresses mémoire. Par exemple, lors d'un changement de contexte, le noyau doit changer la carte du processus sortant par celle du processus entrant.

3. Pilotes et gestion des périphériques

Un périphérique n'est généralement accessible qu'en mode noyau, car un accès incorrect (tel qu'un processus utilisateur demandant de couper l'alimentation) pourrait faire planter la machine. Un autre problème est que différents appareils ont rarement la même interface de programmation, même si les appareils font la même chose, comme deux cartes réseau différentes. Du fait que les pilotes fassent partie du noyau, ce s'efforce de présenter une interface de programmation uniforme aux processus utilisateur afin de simplifier le travail des développeurs de logiciels.

4. Appels système et support

D'autres types de fonctionnalités du noyau sont disponibles pour les processus utilisateur. Par exemple, les appels système (ang. system calls ou syscalls) effectuent des tâches spécifiques qu'un processus utilisateur seul ne peut pas bien mener ou pas du tout. Par exemple, les actes d'ouverture, de lecture et d'écriture de fichiers impliquent tous des appels système.
Deux appels système, fork () et exec (), sont importants pour comprendre le démarrage des processus :
  1. fork () Lorsqu'un processus appelle fork (), le noyau crée une copie presque identique du processus.
  2. exec () Lorsqu'un processus appelle exec (programme), le noyau démarre le programme, remplaçant le processus en cours.
À part init (), tous les processus utilisateur sur un système Linux démarrent à la suite de fork (), et la plupart du temps, vous exécutez également exec () pour démarrer un nouveau programme au lieu d'exécuter une copie d'un existant processus.

Le noyau prend également en charge les processus utilisateur avec des fonctionnalités autres que les appels système traditionnels, les plus courants étant des pseudo-périphériques (ang. pseudodevices). Les pseudo-périphériques ressemblent aux périphériques des processus utilisateur, mais ils sont implémentés uniquement par logiciel. En tant que tels, ils n'ont pas besoin techniquement d'être dans le noyau, mais ils sont généralement là pour des raisons pratiques. Par exemple, le dispositif générateur de nombres aléatoires du noyau (/dev/random) serait difficile à implémenter en toute sécurité avec un processus utilisateur.

Techniquement, un processus utilisateur qui accède à un pseudo-périphérique doit toujours utiliser un appel système pour ouvrir le périphérique.

Aucun commentaire:

Fourni par Blogger.