Les processus ont-ils des priorités sous Linux ?

青灯夜游
Libérer: 2023-03-30 13:46:05
original
1328 Les gens l'ont consulté

Les processus sous Linux ont des priorités. Linux est un système d'exploitation multi-utilisateurs et multitâches. Il existe généralement de nombreux processus en cours d'exécution dans le système, mais le processeur ne peut exécuter qu'une seule instruction par cycle d'horloge. Quel processus doit fonctionner en premier et qui doit fonctionner en dernier ? Cela doit être déterminé par la priorité du processus. Dans le système Linux, il existe deux paramètres qui représentent la priorité du processus : Pri et Nice ; la priorité du processus est la valeur PRI, pas la valeur Nice, mais la valeur Nice affectera la priorité.

Les processus ont-ils des priorités sous Linux ?

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

Linux-Process Priority

Linux est un système d'exploitation multi-utilisateurs et multitâche, et de nombreux processus sont généralement en cours d'exécution dans le système. Cependant, le processeur ne peut exécuter qu'une seule instruction dans un cycle d'horloge (le processeur actuel utilise une technologie multithread et multicœur, il peut donc exécuter plusieurs instructions dans un cycle d'horloge. Cependant, le nombre d'instructions pouvant être exécutées en même temps même temps est bien inférieur à celui du système (le nombre total de processus), alors la question se pose : qui doit calculer en premier et qui doit calculer en dernier ? Cela doit être déterminé par la priorité du processus.

  • L'ordre dans lequel le processeur alloue les ressources est la priorité

  • Les processus avec une priorité élevée ont le droit de s'exécuter en premier

  • permet au processus de s'exécuter sur le processeur désigné et d'améliorer les performances globales du système

    .

De plus, lorsque le processeur calcule des données, il n'effectue pas un calcul intégré puis effectue le calcul du processus suivant. Au lieu de cela, il calcule d'abord le processus 1, puis le processus 2, puis le processus 3, puis le processus 1. jusqu'à ce que la tâche de processus se termine. De plus, en raison de l'existence d'une priorité de processus, les processus ne sont pas calculés séquentiellement, mais le processus ayant une priorité plus élevée sera calculé plusieurs fois au cours d'un cycle de calcul.

C’est difficile à comprendre de cette façon, disons les choses autrement. Supposons que j'ai maintenant 4 enfants (processus) qui doivent être nourris (calculés). Je préfère l'enfant 1 (le processus 1 a une priorité plus élevée) et l'enfant 2, l'enfant 3 et l'enfant 4 sont traités de la même manière (processus 2, processus 3 et le processus 4 est prioritaire). Maintenant, je commence à nourrir. Je ne peux pas nourrir l'enfant 1 en premier, puis nourrir les autres enfants. Au lieu de cela, je dois nourrir la nourriture en boucle (tous les processus sont en boucle pendant le fonctionnement du processeur). Ensuite, lorsque je nourrirai (calcul), je donnerai d'abord à l'enfant une bouchée de riz, puis je nourrirai les autres enfants. Et dans un cycle, donnez d'abord deux bouchées de nourriture à l'enfant 1, car je préfère l'enfant 1 (haute priorité), et donnez aux autres enfants une bouchée de nourriture. De cette façon, l'enfant 1 sera nourri en premier (le processus 1 calcule plus rapidement) car j'aime davantage l'enfant 1.

Afficher la priorité du processus

1. Utilisez ps-al pour voir la priorité du processus

Les processus ont-ils des priorités sous Linux ?

2. PRI et NI

Dans les systèmes Linux, représente la priorité du processus en a deux. paramètres : Prioritaire et Nice.

[root@localhost ~]# ps -le
F S UID PID PPID C PRI NI ADDR  SZ WCHAN TTY    TIME  CMD
4 S   0   1    0 0  80  0    - 718     -   ? 00:00:01 init
1 S   0   2    0 0  80  0    -   0     -   ? 00:00:00 kthreadd
...省略部分输出...
Copier après la connexion

Parmi eux, PRI signifie Priorité et NI signifie Nice. Les deux valeurs représentent la priorité. Plus la valeur est petite, plus le processus sera traité par le CPU. Cependant, la valeur PRI est ajustée dynamiquement par le noyau et ne peut pas être modifiée directement par l'utilisateur. Nous ne pouvons donc affecter la valeur PRI qu'en modifiant la valeur NI et en ajustant indirectement la priorité du processus. La relation entre

PRI et NI est la suivante :

PRI (valeur finale) = PRI (valeur d'origine) + NI

En fait, tout le monde doit juste se rappeler qu'on peut changer la priorité du processus en modifiant la valeur de NI. Plus la valeur NI est petite, la valeur PRI du processus diminuera et le processus sera traité en premier par le CPU, à l'inverse, plus la valeur NI est grande, la valeur PRI du processus augmentera et le processus sera traité plus tard ; par le processeur.

Il y a plusieurs choses à noter lors de la modification de la valeur NI :

  • La plage NI est de -20~19.

  • Les utilisateurs ordinaires peuvent ajuster la valeur NI dans la plage de 0 à 19, et ils ne peuvent ajuster que leurs propres processus.

  • Les utilisateurs ordinaires ne peuvent qu'augmenter la valeur NI, pas la diminuer. Si la valeur NI d'origine est 0, elle ne peut être ajustée que pour être supérieure à 0.

  • Seul l'utilisateur root peut définir la valeur NI du processus sur une valeur négative et peut ajuster le processus de n'importe quel utilisateur.

Affichez la commande pour afficher et modifier la belle valeur

1. Utilisez la commande supérieure pour afficher et modifier la belle valeur

Entrez en haut et appuyez sur r, entrez le pid du processus, entrez la belle valeur. . (S'il indique que l'élévation est refusée, utilisez sudo pour élever les autorisations de la commande supérieure).

2. Autres concepts

  • Concurrence : Il existe de nombreux systèmes, mais seulement un petit nombre de CPU, voire un seul, il y a donc concurrence entre les processus. Afin d'accomplir les tâches efficacement et de rivaliser plus raisonnablement pour les ressources associées, la priorité est donnée.

  • Indépendance : le fonctionnement multi-processus nécessite l'utilisation exclusive de diverses ressources, de sorte que les multi-processus n'interfèrent pas les uns avec les autres.

  • Parallèle : plusieurs processus exécutés sur plusieurs processeurs en même temps sont appelés parallélisme.

  • Concurrence : plusieurs processus utilisent la commutation de processus sur un processeur pour faire avancer plusieurs processus sur une période de temps, ce que l'on appelle la concurrence.

La priorité du processus est la valeur PRI, pas la valeur Nice, mais la valeur Nice affectera la priorité

PRI est également relativement facile à comprendre, c'est-à-dire la priorité du processus, ou dans En termes simples, le programme est exécuté par le CPU. Plus la valeur est petite, plus la priorité du processus est élevée. Et NI ? C'est la belle valeur dont nous parlons, qui représente la valeur modifiée de la priorité à laquelle le processus peut être exécuté. Comme mentionné précédemment, plus la valeur PRI est petite, plus elle sera exécutée rapidement. Après avoir ajouté la valeur nice, le PRI deviendra : PRI(new)=PRI(old)+nice.

Jusqu'à présent, ce qu'il faut souligner, c'est que la belle valeur d'un processus n'est pas la priorité du processus. Ce n'est pas un concept, mais la belle valeur du processus affectera le changement de priorité du processus.

Modifiez la priorité du processus en ajustant la valeur agréable. La plage de réglage agréable est de -20 à 19.

Facteurs d'influence et principes de priorité et de changement des processus

Stratégie de planification : les processus de planification RR et FIFO sont des processus en temps réel, et les processus de planification en temps partagé (AUTRES) sont des processus non en temps réel.

FIFO (premier entré, premier sorti) et RR (rotation des tranches de temps) sont utilisés pour les processus en temps réel, et OTHER (planification en temps partagé) est utilisé pour les processus non en temps réel qui préempteront ; les processus ordinaires ; FIFO fera en sorte que les processus en temps réel de même priorité occupent toujours le CPU et RR garantira que les processus en temps réel de même priorité sont exécutés à tour de rôle selon des tranches de temps.

La priorité des processus en temps réel est supérieure à celle des processus ordinaires. Les processus en temps réel utilisent une planification de priorité statique, et les processus non en temps réel utilisent une planification de priorité dynamique. ajusté par nice et peut être affecté par le bonus.

Les processus Linux ont deux priorités : la priorité de processus normale (en utilisant la politique de planification SCHED_NORMAL) et la priorité de processus en temps réel (en utilisant la politique de planification SCHED_FIFO ou SCHED_RR)

Les processus en temps réel avec des politiques de planification différentes n'ont que la même priorité. comparable.À tout moment, la priorité des processus en temps réel est supérieure à celle des processus ordinaires. Linux utilise une planification de priorité statique pour les processus en temps réel, et les processus ordinaires (processus non temps réel) sont planifiés selon des priorités dynamiques.

Le processus en temps réel n'a qu'une priorité statique (entre 0~MAX_RT_PRIO-1, la valeur par défaut MAX_RT_PRIO est 100), le noyau n'ajustera plus sa priorité statique en fonction du sommeil et d'autres facteurs

Priorité du processus en temps réel 0- ; 99 Chaque priorité correspond à une file d'attente prioritaire (liste chaînée), et la liste chaînée correspondante avec une valeur plus élevée est exécutée en premier (le numéro 0 est le plus bas). La priorité peut être modifiée par le chrt et les fonctions correspondantes décrites plus loin ; la priorité statique des processus non temps réel peut être ajustée par une valeur intéressante (-20~19) : static_prio=MAX_RT_PRIO + nice + 20.

nice n'affecte que les processus non temps réel (la priorité statique est comprise entre 100 et 139). Plus la valeur nice est grande, plus la valeur de priorité statique est grande et plus la priorité est faible.

La priorité dynamique des processus non temps réel est calculée en fonction de la priorité statique et du bonus :dynamic_prio = max (100, min (static_prio - bonus + 5, 139))

bonus reflète le temps de sommeil moyen du processus (plage 0 ~ 10), temps de veille Plus il est probable qu'il s'agisse d'un processus interactif, plus il est probable qu'il n'utilisera pas la tranche de temps avant de libérer le processeur à chaque fois que ce sera son tour de s'exécuter.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!