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

J'ai lu la déclaration suivante:

L'architecture x86 comprend un type de segment spécifique appelé la tâche Segment d'état (TSS), pour stocker le matériel cadre. Bien que Linux n'utilise pas commutateurs de contexte matériel, il est néanmoins forcé de mettre en place un TSS pour chaque CPU distincte dans le système.

Je me demande:

  • pourquoi Linux n'utilise-t-il pas le support matériel pour context switch?
  • l'approche matérielle n'est-elle pas beaucoup plus rapide que approche du logiciel?
  • y a-t-il un système d'exploitation qui profite du commutateur de contexte matériel? Windows utiliser?

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

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

Http://wiki.osdev.org/Context_Switching j'ai une explication.

Des gens aussi confus que moi pourraient y jeter un oeil. 8^)

35
demandé sur smwikipedia 2010-04-26 07:46:33

3 réponses

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

Le TSS est également connu pour être ennuyeux et fastidieux à travailler avec et il n'est pas portable, même à x86-64. Linux vise à travailler sur plusieurs architectures, donc ils ont probablement choisi d'utiliser la commutation de tâches logicielles car elle peut être écrite de manière indépendante de la machine. En outre, tâche de logiciel la commutation fournit beaucoup plus de puissance sur ce qui peut être fait et est généralement plus facile à installer que le TSS est.

Je crois que Windows 3.1 a utilisé 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. la chose que font les OSs est de créer une seule entrée TSS (par processeur) et chaque fois qu'ils ont besoin de changer de tâche, ils changent simplement ce TSS unique. Et aussi les seuls champs utilisés dans le TSS par commutation de tâche logicielle est ESP0 et SS0. Ceci est utilisé pour obtenir l'anneau 0 à partir du code de l'anneau 3 pour les interruptions. Sans TSS, il n'y aurait pas de pile Ring 0 connue qui conduirait bien sûr à un GPF et éventuellement à un triple défaut.

39
répondu Earlz 2010-05-03 21:42:34

Linux utilisé pour utiliser la commutation basée sur HW, dans la période pré-1.3 IIRC. Je crois que la commutation de contexte basée sur sw s'est avérée plus rapide et plus flexible.

Une autre raison peut avoir été de minimiser le code spécifique à l'arche. Le premier port de Linux vers une architecture non-x86 était Alpha. Alpha n'avait pas de TSS, donc plus de code pourrait être partagé si tous les arcs utilisaient la commutation SW. (Juste une supposition.) Malheureusement, les changelogs du noyau pour la période du noyau 1.2-1.3 ne sont pas bien conservés, donc je ne peux pas l'être plus spécifique.

17
répondu Andy Grover 2010-05-03 21:34:50

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

Les processeurs X86 ont beaucoup de différents types de support matériel pour la commutation de contexte, donc la distinction n'est pas matériel vs logiciel, mais plus comment un système d'exploitation utilise-t-il les différentes fonctionnalités matérielles disponibles. Il n'est pas nécessaire de les utiliser tous.

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

6
répondu Andrew McGregor 2010-04-26 04:06:34