Búsqueda
Asistencia y descargas
Processors
procesador Intel® Pentium®
Instrucción no válida descripción errata

No válida instrucción hogar erratas Proveedor del software declaraciones Cómo comunicarse con nosotros
Aplicación software
Actualizado nov. 20 1997

Errata descripción técnica actualizado nov. 20 1997

Problema: La instrucción CMPXCHG8B compara un 8 valor de byte en EDX eax y con un 8 valor de byte en la memoria (el destino operando). La única información válida Operándoos destino de esta instrucción son memoria operándoos. Si el destino operando es un registro el procesador deben generar un opcode no válida excepción y ejecución de las CMPXCHG8B la instrucción debe ser detenido y el procesador debe ejecutar el opcode no válida excepción handler. Esta errata ocurre si el bloqueo prefix se utiliza con la instrucción CMPXCHG8B con una versión (no válido)registro destino operando. En este caso, del procesador no comience la ejecución del inválido opcode excepción handler debido a que el bus está bloqueado. Esto resulta en un sistema se bloquee.

Implicación: si una versión (no válido)registro destino operando es se utiliza con la instrucción CMPXCHG8B y el prefijo LOCK, es posible que el sistema se bloquee. No hay datos de la memoria se encuentra dañado y el usuario puede realizar un sistema restablecer para volver al funcionamiento normal. Nota que el código no válido secuencia necesaria para esta errata que ocurran no es normalmente generada en el curso de la programación ni tampoco tiene una secuencia generados por disponible en el mercado software.

Esta errata solamente se aplica a Pentium® procesadores, Pentium con tecnología MMX™, pentium OverDrive® procesadores Pentium y procesadores OverDrive con la tecnología MMX. Procesadores Pentium Pro, procesadores Pentium II y i486™ y anteriores no se ven afectados.

Solución: Existen dos soluciones para esta errata en modo protegido los sistemas operativos. Solución tanto genera un fallo de página cuando el opcode no válida excepción se produce. En ambos casos, el fallo de página Prestará servicios antes de que el opcode no válida excepción e impedir así la condición cerrojo situación. La implementación detalles variar dependiendo del sistema operativo. Utilice uno de los siguientes:

  1. La primera parte de esta solución transitoria establece los primeros 7 entradas (0-6) de la interrupción descriptor tabla (IDT)En un ambiente sin escritura página. Cuando el opcode no válida excepción (excepción 6) ocurre debido a los combinado CMPXCHG8B instrucción con un registro no válida destino (y sólo entonces), el procesador, se genera un fallo de página si no tiene acceso de escritura en la página que contiene entrada 6 de la idt. La segunda parte de esta solución transitoria modifica el fallo de página handler para reconocer correctamente y despachar del inválido opcode excepciones que ya están direcciona a través del fallo de página handler.

    Parte I, idt acceso página
    1. Marca la página que contiene los primeros siete entradas (0-6) de la idt como se lee sólo al establecer bit 1 de la página entrada de tabla en cero. Igualmente, el CR0.wp (16 bits) a 1. Ahora cuando el opcode no válida excepción se produce en el combinado CMPXCHG8B instrucción, el procesador funcionará activen un fallo de página ya que no tienen acceso de escritura en la página que contiene entrada 6 de la idt. Este fallo de página evita que el bus cerrojo condición y da al sistema operativo control completo para procesar los operando no válida excepción, como corresponda. Tenga en cuenta que excepción 6 es el opcode no válida excepción, de manera que con este esquema un sistema operativo ha control completo de cualquier programa ejecutar una no válida CMPXCHG8B instrucción.
    2. OPCIONAL: si las actualizaciones a las entradas 7 y 255 del idt se presentan durante el curso de funcionamiento normal , página fallos se debe evitar en escribe en estas entradas idt. Los fallos se pueden evitar al alineación de la idt a través de una página 4KB límite tal que la primera siete entradas (0-6) de la idt en la primera sólo lectura página y el resto entradas se en una lectura y escritura página.
    Parte II, fallo de página modificaciones handler
  • Modificar el fallo de página handler para calcular excepción que causó el fallo de página utilizando la dirección fault en CR2. Si el código de error en la pila indica se produjo la excepción de anillo 0 y si la dirección corresponde a la opcode no válida excepción, pop el código de error en el pila y ir a la invalidez opcode excepción handler. De lo contrario continuar con la página normal fault handler.
    O
    1. Esta solución transitoria tiene dos partes. Primero, la interrupción descriptor tabla (IDT) esté alineada que permita a cualquier no válida opcode excepción se producirá un fallo de página (debido a la página no se está presente). Segundo, el fallo de página handler es modificada para que reconozca correctamente y despachar del inválido opcode excepción y ciertas otras excepciones que ya están direcciona a través del fallo de página handler.
    Parte I, idt alineación:
      1. Alinee la interrupción descriptor tabla (IDT) tal que cubre un página 4KB límite al ubicar a la primera entrada partida 56 bytes de la terminación de la primera página 4KB. Esto coloca los primeros siete entradas (0-6) en la primera página 4KB, y el resto entradas en la segunda página.
      2. La página que contiene los primeros siete entradas de la idt no debe tener una asignación en la página SO tablas. Esto causa que cualquiera de excepciones 0-6 a generar una página no está presente fallo. Un fallo de página evita que el bus cerrojo condición y da al sistema operativo control completo para procesar estos excepciones, como corresponda. Tenga en cuenta que excepción 6 es el opcode no válida excepción, de manera que con este esquema un sistema operativo ha control completo de cualquier programa ejecutar una no válida CMPXCHG8B instrucción.
    Parte II, fallo de página handler modificaciones:
      1. Reconocer accesos a la primera página de la idt por las pruebas de los fault dirección en CR2. Esta página no está presente fallos en otras direcciones se puede procesar normalmente.
      2. Para esta página no está presente fallos de la primera página de la idt, el sistema operativo debe reconocer y despachar la excepción que causó la página no está presente fallo. Antes de continuar, prueba la dirección fault en CR2 a fin de determinar si es que está en el rango de direcciones correspondientes a las excepciones 0-6.
      3. Calcular excepción que causó la página no está presente la tolerancia a partir de la dirección fault en CR2.
      4. Según el sistema operativo, cierto nivel de privilegios comprueba se podría requerir, junto con ajustes para la interrupción pila.
      5. Ir a la normal handler para la adecuada excepción.

    Ambas soluciones sólo debe implementarse en procesadores Intel que devuelven familia=5 a través de la instrucción de CPUID.

    75/90/100/120/133/150/166/200 MHz Pentium® procesadores y 120/133/150/166/200/233 MHz procesadores Pentium con tecnología MMX™

    No.

    B1

    B3

    B5

    C2

    Ma1

    Cb1

    Mcb1

    Cc0

    Ma4

    Mcc0

    E0

    Xa3

    Mxa3

    Xb1

    Mxb1

    Mya0

    Erratas

    81

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    X

    No válida operando combinado con instrucción CMPXCHG8B

    60 MHz y 66 MHz Pentium® procesadores

    No.

    B1

    C1

    D1

    Erratas

    52

    X

    X

    X

    No válida operando combinado con instrucción CMPXCHG8B

    63/83/120/125/133/150/166 MHz Pentium® OverDrive® los procesadores y 125/150/166/180/200 MHz Pentium procesadores OverDrive con tecnología MMX™

    No.

    B1

    B2

    C0

    Ta0

    Ac0

    Oxa3

    Oxb1

    Erratas

    70

    X

    X

    X

    X

    X

    X

    X

    No válida operando combinado con instrucción CMPXCHG8B

    Esto se aplica a:
    procesador Intel® Pentium®
    procesador Intel® Pentium® con tecnología MMX™
    OverDrive® procesadores



    ID de solución: CS-013148
    Fecha de creación: 12-jul-2004
    Última modificación: 08-oct-2006
    al inicio de la página