27 votes

Pourquoi Linux n'utilise-t-il pas le changement de contexte matériel via le TSS ?

J'ai lu la déclaration suivante :

L'architecture x86 inclut un type de segment spécifique appelé le Segment d'état de tâche (TSS), pour stocker les contextes matériels. Bien que Linux n'utilise pas les changements de contexte matériels, il est néanmoins contraint de mettre en place un TSS pour chaque CPU distinct dans le système.

Je me demande :

  • Pourquoi Linux n'utilise-t-il pas le support matériel pour les changements de contexte ?
  • L'approche matérielle n'est-elle pas beaucoup plus rapide que l'approche logicielle ?
  • Est-ce qu'il y a un OS qui tire parti du changement de contexte matériel ? Windows l'utilise-t-il ?

Enfin et comme toujours, merci pour votre patience et réponse.

-----------Ajouté--------------

http://wiki.osdev.org/Context_Switching a quelques explications.

Les personnes aussi confuses que moi pourraient y jeter un œil. 8^)

33voto

Earlz Points 19355

Le TSS x86 est très lent pour le multitâche matériel et offre presque aucun avantage par rapport à la commutation de tâches logicielle. (En fait, je pense que le faire manuellement bat le TSS la plupart du temps)

Le TSS est également connu pour être ennuyeux et fastidieux à utiliser et n'est pas portable, même pour x86-64. Linux vise à fonctionner sur plusieurs architectures, donc ils ont probablement choisi d'utiliser la commutation de tâches logicielle car elle peut être écrite de manière indépendante à la machine. De plus, la commutation de tâches logicielle offre beaucoup plus de flexibilité sur ce qui peut être fait et est généralement plus facile à configurer que le TSS ne l'est.

Je crois que Windows 3.1 utilisait le TSS, mais au moins le noyau NT >5 ne le fait pas. Je ne connais aucun système d'exploitation de type Unix qui utilise le TSS.

Notez que le TSS est obligatoire. Ce que font les systèmes d'exploitation cependant, c'est de créer une seule entrée TSS (par processeur) et à chaque fois qu'ils ont besoin de changer de tâches, ils changent simplement cette unique TSS. Et aussi les seuls champs utilisés dans le TSS par la commutation de tâches logicielle sont ESP0 et SS0. Cela sert à passer du code du niveau 3 au niveau 0 pour les interruptions. Sans un TSS, il n'y aurait pas de pile connue du niveau 0, ce qui conduirait bien sûr à une GPF et éventuellement un triple défaut.

13voto

Andy Grover Points 383

Linux utilisait autrefois une commutation basée sur le matériel, dans la période pré-1.3 de mémoire. Je crois que la commutation basée sur le logiciel s'est avérée être plus rapide et plus flexible.

Une autre raison pourrait avoir été la minimisation du code spécifique à l'architecture. Le premier port de Linux vers une architecture non-x86 était Alpha. Alpha n'avait pas de TSS, donc plus de code pouvait être partagé si toutes les architectures utilisaient la commutation SW. (Juste une supposition.) Malheureusement, les journaux de modifications du noyau pour la période de noyau 1.2-1.3 ne sont pas bien préservés, donc je ne peux pas être plus spécifique.

4voto

Andrew McGregor Points 7641

Linux n'utilise pas de modèle de mémoire segmentée, cette fonctionnalité spécifique à la segmentation n'est donc pas utilisée.

Les processeurs x86 disposent de nombreux types de support matériel pour le changement de contexte, donc la distinction n'est pas matériel vs logiciel, mais plutôt comment un OS utilise les différentes fonctionnalités matérielles disponibles. Il n'est pas nécessaire de toutes les utiliser.

Linux est tellement axé sur l'efficacité que vous pouvez parier que quelqu'un a profilé chaque option possible, et que les options actuellement utilisées sont le meilleur compromis disponible.

3voto

Pedro Points 31

@Andy - Le dernier noyau avec Hardware Task Switching était 2.1.108.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X