Maison > Opération et maintenance > exploitation et maintenance Linux > qu'est-ce que le contexte sous Linux

qu'est-ce que le contexte sous Linux

青灯夜游
Libérer: 2022-11-10 20:09:31
original
2009 Les gens l'ont consulté

Sous Linux, le contexte est également appelé contexte CPU. Il s'agit de l'environnement sur lequel le CPU doit s'appuyer avant d'exécuter une tâche, y compris les registres CPU et les compteurs de programme ; la commutation de contexte consiste à modifier d'abord le contexte CPU de la tâche précédente (c'est-à-dire , registres CPU et compteur de programme), puis chargez le contexte de la nouvelle tâche dans ces registres et le compteur de programme, et enfin sautez vers le nouvel emplacement indiqué par le compteur de programme pour exécuter la nouvelle tâche.

qu'est-ce que le contexte sous Linux

L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.

1. Qu'est-ce que le contexte ?

Linux est un système d'exploitation multitâche. Il prend en charge des tâches bien plus importantes que le nombre de processeurs à exécuter en même temps. Bien sûr, ces tâches ne s'exécutent pas en même temps, mais le système. Le CPU leur est alloué à tour de rôle, donnant à l'utilisateur l'illusion que de nombreuses tâches s'exécutent simultanément.

Avant l'exécution de chaque tâche, le processeur doit savoir où la tâche est chargée et où elle commence à s'exécuter. En d'autres termes, le système doit configurer à l'avance le registre du processeur et le compteur de programme (compteur de programme, PC) : il s'agit d'une mémoire de petite capacité mais extrêmement rapide intégrée au compteur de programme du processeur : elle est utilisée pour. stocker l'emplacement de l'instruction en cours d'exécution par le CPU, ou l'emplacement de la prochaine instruction à exécuter

  • En résumé, nous avons la réponse

  • Qu'est-ce que le contexte :

    Le contexte que nous On parle généralement de contexte CPU. Il s'agit de l'environnement sur lequel le CPU doit s'appuyer avant d'exécuter une tâche, y compris les registres CPU et les compteurs de programme. tâche précédente (c'est-à-dire les registres CPU et le compteur de programme), puis chargez le contexte de la nouvelle tâche dans ces registres et ce compteur de programme, et enfin sautez vers le nouvel emplacement indiqué par le compteur de programme pour exécuter la nouvelle tâche.

2. Introduction détaillée au changement de contexte

Selon les différentes tâches de changement de CPU, il peut être divisé en changement de contexte de processus

, changement de contexte de thread code> <span class="md-plain">, <code>Changement de contexte d'interruption

Comprenons d'abord les deux points de connaissance suivants impliqués dans le changement de contexteAppel système, état d'exécution du processus

L'état d'exécution du processus :

Linux divise l'espace d'exécution du processus en espace noyau进程上下文切换线程上下文切换中断上下文切换

我们先了解下面2个上下文切换涉及的知识点系统调用、进程运行态

进程的运行态:

Linux 按照特权等级,把进程的运行空间分为内核空间用户空间 。在这两种空间中运行的进程状态分别称为内核态用户态

  • 内核空间(Ring 0):具有最高权限,可以直接访问所有资源(读取文件,)

    • 分配内存、IO操作、创建子进程……都是内核操作。这也表明,当IO操作频繁时,System参数会很高。

  • 用户空间(Ring 3):只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用进入到内核中,才能访问这些特权资源

    • 典型的用户态空间程序有:Shells、数据库、web服务器、PHP程序、Java程序……

在linux系统使用top命令查看cpu时,能看到user和system两项,对应的就是用户态和内核态占用的cpu资源

如上,我们的web服务是运行在用户态 et espace utilisateur selon le niveau de privilège. Les états de processus exécutés dans ces deux espaces sont appelés respectivement état du noyau et état utilisateur.

🎜Espace noyau (Ring 0) : possède les autorisations les plus élevées et peut accéder directement à toutes les ressources (lire des fichiers,) 🎜🎜🎜🎜🎜🎜Allouer de la mémoire, des opérations d'E/S, créer des processus enfants... all C'est une opération du noyau. Cela montre également que lorsque les opérations d'E/S sont fréquentes, les paramètres système seront très élevés. 🎜🎜🎜🎜🎜🎜🎜🎜Espace utilisateur (Ring 3) : ne peut accéder qu'à des ressources restreintes, ne peut pas accéder directement aux périphériques matériels tels que la mémoire et doit entrer dans le noyau via des appels système pour accéder à ces ressources privilégiées🎜🎜🎜🎜🎜🎜 Typique Les programmes de l'espace utilisateur incluent : Shells, bases de données, serveurs Web, programmes PHP, programmes Java...🎜🎜🎜🎜🎜🎜🎜🎜Lorsque vous utilisez la commande top pour afficher le processeur dans le système Linux, vous pouvez voir l'utilisateur et le système. éléments, qui correspondent aux ressources CPU occupées par le mode utilisateur et le mode noyau🎜🎜🎜🎜Comme ci-dessus, notre service Web fonctionne en mode utilisateur🎜, et n'a pas l'autorisation pour l'io de le fichier. Lorsque le fichier doit être lu, cela implique un 🎜appel système🎜🎜🎜🎜🎜🎜🎜🎜Appel système : 🎜🎜

La transition du mode utilisateur au mode noyau doit être effectuée via des appels système. Par exemple, lors de la visualisation d'un fichier, plusieurs appels système doivent être exécutés : ouvrir, lire, écrire, fermer, etc. Le processus de l'appel système est le suivant :

  • Enregistrez l'emplacement d'origine des instructions en mode utilisateur dans le registre CPU ;

  • Afin d'exécuter le code du noyau, le registre CPU doit être mis à jour ; vers le nouvel emplacement de l'instruction en mode noyau, et enfin passez au mode noyau pour exécuter les tâches du noyau

  • Une fois l'appel système terminé, les registres du processeur doivent être restaurés au mode utilisateur initialement enregistré, et puis passez à l'espace utilisateur pour continuer à exécuter le processus ;

Donc, une fois le système Le processus appelant implique en fait deux changements de contexte CPU.

Changement de contexte de processus ?

  • Lorsque l'exécution du processus se termine, le processeur qu'il utilisait précédemment sera libéré, puis le processus suivant en attente de la tranche de temps sera retiré de la file d'attente prête ; Lorsque la tranche de temps est épuisée, elle sera suspendue par le système et passera à d'autres processus en attendant que le CPU s'exécute

  • Un certain processus sera suspendu car il nécessite des ressources système relativement importantes (telles qu'une mémoire insuffisante ; ). Suspendre, le système planifiera l'exécution d'autres processus ;

  • Lorsqu'un processus avec une priorité plus élevée (processus d'exploitation du système) a besoin d'une tranche de temps, afin de garantir que le processus avec une priorité plus élevée puisse être exécuté ; , le processus en cours sera suspendu ;

  • S'il y a une fonction de veille dans le processus en cours, elle sera également suspendue ;

  • Changement de contexte des threads ?

Pour le système d'exploitation, les threads sont la plus petite unité d'exécution et les processus sont les plus petites unités de gestion des ressources. Pour parler franchement, ce que l'on appelle l'appel de tâche dans le noyau est en fait planifié par le thread et le processus ne fournit au thread que des ressources telles que la mémoire virtuelle et les variables globales. Ainsi, pour la scène et le processus, on peut le comprendre ainsi :

Lorsque le processus n'a qu'un seul thread, le processus peut être considéré comme égal au fil.

  • Lorsqu'un processus a plusieurs threads, ces threads partageront les ressources du processus parent (c'est-à-dire partageront les mêmes ressources telles que la mémoire virtuelle et les variables globales). Ces ressources n'ont pas besoin d'être modifiées lors du changement de contexte.

  • De plus, les threads ont également leurs propres données privées, telles que des piles et des registres, qui doivent également être enregistrées lors du changement de contexte.

  • Pour résumer, il existe deux situations de changement de contexte de thread :

Les deux threads avant et après appartiennent à des processus différents. Parce que les ressources ne sont pas partagées, le processus de changement est le même que le processus. changement de contexte ;

  • Les deux threads avant et après appartiennent au même processus, car la mémoire virtuelle est partagée, donc lors du changement, les ressources de mémoire virtuelle restent inchangées, et seules les données privées, registres et autres non du thread -les données partagées doivent être commutées.

  • Interruption du changement de contexte ?

La gestion des interruptions interrompra la planification et l'exécution normales du processus. Lors de l'interruption d'autres processus, l'état actuel du processus doit être enregistré. Une fois l'interruption terminée, le processus peut toujours reprendre son exécution à partir de son état d'origine.

Le changement de contexte d'interruption n'implique pas le mode utilisateur du processus. Par conséquent, même si le processus d'interruption interrompt un processus qui est en mode utilisateur, il n'est pas nécessaire de sauvegarder et de restaurer les ressources du mode utilisateur telles que la mémoire virtuelle et les variables globales de ce processus. Le contexte d'interruption inclut en fait uniquement l'état nécessaire à l'exécution du programme de service d'interruption en mode noyau, y compris les registres du processeur, la pile du noyau, les paramètres d'interruption matérielle, etc.

Résumé

Selon le rapport de test de Tsuna, chaque changement de contexte nécessite des dizaines de nanosecondes à plusieurs microsecondes de temps CPU, ce qui est assez considérable.

Peu importe le scénario qui provoque le changement de contexte, vous devez savoir :

  • Le changement de contexte du processeur est l'une des fonctions essentielles pour assurer le fonctionnement normal du système Linux. Généralement, nous n'avons pas besoin de payer de frais spéciaux. attention à cela.

  • Cependant, un changement de contexte excessif consommera du temps CPU pour sauvegarder et restaurer des données telles que les registres, les piles de noyau et la mémoire virtuelle, raccourcissant ainsi le temps d'exécution réel du processus et provoquant une baisse significative des performances globales de le système.

Recommandations associées : "Tutoriel vidéo Linux"

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal