Maison  >  Article  >  Tutoriel système  >  Explication détaillée de l'espace du noyau Linux et de l'espace utilisateur

Explication détaillée de l'espace du noyau Linux et de l'espace utilisateur

王林
王林avant
2024-02-13 21:36:151040parcourir

Les pilotes Linux s'exécutent généralement dans l'espace noyau, mais peuvent également s'exécuter dans l'espace utilisateur. Ci-dessous, nous analyserons en détail les concepts d'espace noyau et d'espace utilisateur et comment les juger.

Linux simplifie le mécanisme de segmentation afin que l'adresse virtuelle et l'adresse linéaire soient toujours cohérentes. Par conséquent, l'espace d'adressage virtuel de Linux est également de 0 à 4G. Le noyau Linux divise cet espace de 4 Go en deux parties. Les octets de 1 Go les plus élevés (de l'adresse virtuelle 0xC0000000 à 0xFFFFFFFF) sont utilisés par le noyau et sont appelés « espace noyau ». Les 3 Go inférieurs (de l'adresse virtuelle 0x00000000 à 0xBFFFFFFF) sont utilisés par chaque processus et sont appelés « espace utilisateur). Étant donné que chaque processus peut entrer dans le noyau via des appels système, le noyau Linux est composé de tous les processus du partage système. Ainsi , du point de vue spécifique du processus, chaque processus peut disposer de 4 Go d'espace virtuel

.

Linux utilise un mécanisme de protection à deux niveaux : niveau 0 pour le noyau et niveau 3 pour les programmes utilisateur. Comme le montre la figure (la figure ne peut pas être représentée ici), chaque processus possède son propre espace utilisateur privé (0~3G). Cet espace est invisible pour les autres processus du système. Le premier Go d'espace virtuel du noyau est partagé par tous les processus et le noyau.

Explication détaillée de lespace du noyau Linux et de lespace utilisateur

L'espace noyau stocke le code et les données du noyau, tandis que l'espace utilisateur du processus stocke le code et les données du programme utilisateur. Qu'il s'agisse de l'espace noyau ou de l'espace utilisateur, ils se trouvent tous dans l'espace virtuel. Bien que l'espace du noyau occupe le premier Go de chaque espace virtuel, le mappage vers la mémoire physique commence toujours à partir de l'adresse la plus basse (0x00000000). Pour l'espace noyau, son mappage d'adresse est un mappage linéaire très simple. 0xC0000000 est le déplacement entre l'adresse physique et l'adresse linéaire, appelé PAGE_OFFSET dans le code Linux.

Alors comment communiquer entre l'espace noyau et l'espace utilisateur ? La communication s'effectue généralement via des appels système.

Comment déterminer si un pilote est un pilote en mode utilisateur ou un pilote en mode noyau ? Quels sont les critères de jugement ?

Les pilotes en mode espace utilisateur complètent généralement l'accès au matériel via des appels système, tels que le mappage de l'espace IO du pilote à l'espace utilisateur, etc. Par conséquent, la principale base de jugement réside dans les appels système. De plus, la liste chaînée en mode utilisateur est différente de la liste chaînée en mode noyau. Le mode utilisateur utilise printf et le mode noyau utilise printk. Chaque espace d'application en mode utilisateur est virtuel et relativement indépendant, mais il ne l'est pas en mode noyau, la programmation doit donc être très prudente. Bien entendu, la communication entre les programmes en mode utilisateur et en mode noyau peut être réalisée via ioctl, sysfs, proc, etc.

Mode noyau et mode utilisateur

Lorsqu'une tâche (processus) exécute un appel système et est piégée dans le code du noyau pour son exécution, nous disons que le processus est dans l'état d'exécution du noyau (ou simplement appelé état du noyau). À l'heure actuelle, le processeur exécute le code du noyau avec le niveau de privilège le plus élevé (niveau 0). Lorsqu'un processus est en mode noyau, le code noyau exécuté utilise la pile noyau du processus en cours. Chaque processus possède sa propre pile de noyau. Lorsqu'un processus exécute le propre code de l'utilisateur, on dit qu'il est dans l'état d'exécution de l'utilisateur (état utilisateur). Autrement dit, le processeur s'exécute dans le code utilisateur avec le niveau de privilège le plus bas (niveau 3). Lorsqu'un programme utilisateur est en cours d'exécution et est soudainement interrompu par un programme d'interruption, on peut également dire symboliquement que le programme utilisateur est dans l'état du noyau du processus. Parce que le gestionnaire d'interruption utilisera la pile du noyau du processus actuel. Ceci est quelque peu similaire à l'état d'un processus en mode noyau.

Contexte du processus et contexte d'interruption

Le processeur est toujours dans l'un des états suivants :

1. État du noyau, exécuté dans le contexte du processus, le noyau représente le processus exécuté dans l'espace du noyau ;

2. État du noyau, exécuté dans le contexte d'interruption, le noyau représente le matériel exécuté dans l'espace du noyau ;

3. Mode utilisateur, exécuté dans l'espace utilisateur.

Les applications de l'espace utilisateur entrent dans l'espace du noyau via des appels système. À ce stade, le processus de l'espace utilisateur doit transmettre de nombreuses variables et valeurs de paramètres au noyau. Lorsque le mode noyau est en cours d'exécution, il doit également enregistrer certaines valeurs de registre et variables du processus utilisateur. Le "contexte de processus" peut être considéré comme les paramètres transmis par le processus utilisateur au noyau, ainsi que l'ensemble complet des variables et des valeurs de registre​​à sauvegarder par le noyau et l'environnement à ce moment-là. .

Le matériel déclenche le signal, obligeant le noyau à appeler le gestionnaire d'interruption et à entrer dans l'espace du noyau. Au cours de ce processus, certaines variables et paramètres matériels doivent également être transmis au noyau, et le noyau utilise ces paramètres pour effectuer le traitement des interruptions. Le soi-disant « contexte d'interruption » peut en fait être considéré comme ces paramètres transmis par le matériel et certains autres environnements que le noyau doit sauvegarder (principalement l'environnement de processus actuellement interrompu).

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer