2010-04-26 649 views
34

que lea la siguiente declaración:¿Por qué Linux no utiliza el conmutador de contexto de hardware a través del TSS?

La arquitectura x86 incluye un tipo de segmento específico denominado el Grupo de Estado segmento (TSS), para almacenar hardware contextos. Aunque Linux no utiliza los conmutadores de contexto de hardware , es , no obstante forzado a configurar un TSS para cada CPU distinta en el sistema.

Me pregunto:

  • ¿Por qué no usar Linux del soporte de hardware para cambio de contexto?
  • ¿No es el enfoque de hardware mucho más rápido que el enfoque de software?
  • ¿Hay algún sistema operativo que aproveche el cambio de contexto de hardware? ¿Windows lo usa?

Por fin y como siempre, gracias por su paciencia y respuesta.

----------- -------------- Añadido

http://wiki.osdev.org/Context_Switching tiene alguna explicación.

Las personas tan confundidas como yo podrían echarle un vistazo. 8 ^)

+1

Podría haber jurado que estaba leyendo los foros de OSDev y leí esto;) – Earlz

Respuesta

37

El x86 TSS es muy lento para la multitarea de hardware y ofrece casi ningún beneficio en comparación con la conmutación de tareas de software. (De hecho, creo que hacerlo manualmente supera al TSS muchas veces)

El TSS también es conocido por ser molesto y tedioso de trabajar y no es portátil, incluso para x86-64. Linux apunta a trabajar en múltiples arquitecturas, por lo que probablemente optó por utilizar el cambio de tareas de software porque puede escribirse de una manera independiente de la máquina. Además, la conmutación de tareas de software proporciona mucha más potencia sobre lo que se puede hacer y, en general, es más fácil de configurar que el TSS.

Creo que Windows 3.1 usaba el TSS, pero al menos el kernel NT> 5 no. No sé de ningún sistema operativo tipo Unix que use TSS.

Tenga en cuenta que el TSS es obligatorio. Lo que hacen los sistemas operativos es crear una sola entrada TSS (por procesador) y cada vez que necesitan cambiar tareas, simplemente cambian este único TSS. Y también los únicos campos utilizados en el TSS mediante la conmutación de tareas de software son ESP0 y SS0. Esto se usa para obtener el timbre 0 del código del anillo 3 para interrupciones. Sin un TSS, no se conocería ninguna pila Ring 0 que conduciría, por supuesto, a un GPF y eventualmente a una falla triple.

+0

Gracias Earlz. Marco tu respuesta como la respuesta. También gracias a las otras personas. : D – smwikipedia

+2

La conmutación basada en TSS proporciona administración de estado a nivel de hardware (leer: seguridad) que no es un conmutador de software. El TSS y el sistema de privilegios presentados a la IA en la década de los 80 AMBOS juegan un papel en asegurar procesos entre sí. Por lo tanto, para resumir, "algunos sistemas operativos no usan conmutación de tareas basada en hardware porque prefieren el rendimiento y la portabilidad por encima de la seguridad". Parece legitimo. –

+1

Como un aparte, NT utiliza un modelo de subprocesamiento M: N, a diferencia de "otros sistemas", no existe una relación 1: 1 entre subprocesos de hardware y software, esto resuelve más que solo el "problema de rendimiento del conmutador de tarea". No todos los sistemas pueden implementar un modelo M: N (debido a su estrecha vinculación de hilos de hardware con una CPU y un proceso en particular, por ejemplo) y en su lugar sufren penalizaciones de rendimiento al intentar hacerlo (ya que dichos sistemas carecen de hardware adecuado => mecanismo de señalización en modo usuario que no vincula también el hilo de ejecución original.) –

6

Linux no utiliza un modelo de memoria segmentada, por lo que esta característica específica de segmentación no se utiliza.

x86 Las CPU tienen diferentes tipos de soporte de hardware para el cambio de contexto, por lo que la distinción no es hardware vs software, sino más cómo utiliza un OS las diversas características de hardware disponibles. No es necesario usarlos todos.

Linux está tan enfocado en la eficiencia que puede apostar que alguien ha perfilado cada opción que es posible, y que las opciones actualmente utilizadas son el mejor compromiso disponible.

+0

Gracias Andrew. ¿Podría decirme qué otro hardware admite para el cambio de contexto que proporciona una CPU x86? Solo escuché hablar del TSS. – smwikipedia

+0

La mayoría de las características de MMU solo tienen sentido en un entorno multiproceso, por ejemplo. Parece que no estaba del todo bien: la CPU obliga a Linux a usar un TSS para el registro ESP, a pesar de que no se usa ninguno de los otros campos. Supongo que la sección sobre cambio de tareas de software aquí tiene sugerencias para la mayoría de lo que necesita: http://wiki.osdev.org/Task_State_Segment –

+0

Aprovechando el último comentario de Andrew: se requiere el TSS para cosas como ring3 -> ring0 transitions donde recoge el valor ESP0. Esto evita que el kernel use la pila ring3 al ingresar ring0 - una característica de seguridad. Linux usa un TSS por CPU para esta transición. –

17

Linux se usa para usar la conmutación basada en HW, en el marco de tiempo anterior a 1.3 iirc. Creo que el cambio de contexto basado en sw resultó ser más rápido y más flexible.

Otra razón puede haber sido la de minimizar el código específico del arco. El primer puerto de Linux para una arquitectura que no era x86 fue Alpha. Alpha no tenía TSS, por lo que se podía compartir más código si todos los archs usaban conmutación SW. (Solo una suposición). Lamentablemente, los registros de cambios del núcleo para el período 1.2-1.3 del kernel no están bien conservados, por lo que no puedo ser más específico.

+0

Gracias Andy por la información histórica. : D – smwikipedia

3

@Andy - El último kernel con Hardware Task Switching fue 2.1.108.

+1

Downvoted porque debería haber sido un comentario (a la respuesta de Andys), no la respuesta propia. – amn

Cuestiones relacionadas