tag kid3 easytag linux x86 linux-kernel low-level

linux - easytag - kid3



¿Por qué Linux no usa el interruptor de contexto de hardware a través del TSS? (3)

El x86 TSS es muy lento para la multitarea de hardware y ofrece casi ningún beneficio en comparación con el cambio 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 usó 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 OS es crear una sola entrada TSS (por procesador) y cada vez que necesitan cambiar tareas, simplemente cambian este TSS único. 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.

Leí la siguiente declaración:

La arquitectura x86 incluye un tipo de segmento específico llamado Segmento de estado de tareas (TSS) para almacenar contextos de hardware. Aunque Linux no utiliza conmutadores de contexto de hardware, no obstante se ve obligado a configurar un TSS para cada CPU distinta en el sistema.

Me pregunto:

  • ¿Por qué Linux no usa el soporte de hardware para el 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.

-----------Adicional--------------

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

La gente tan confundida como yo podría echarle un vistazo. 8 ^)


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

Las CPU x86 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 bien cómo un sistema operativo usa las diversas funciones de hardware disponibles. No es necesario usarlos todos.

Linux está tan centrado 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.


Linux solía usar conmutación basada en HW, en el iirc time-frame pre-1.3. Creo que el cambio de contexto basado en sw resultó ser más rápido y más flexible.

Otro motivo puede haber sido 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.