Estoy leyendo "El alma de una nueva máquina" de Tracy Kidder, donde un equipo de Data General diseña una nueva máquina (con el nombre clave "Eagle", más tarde llamado MV / 8000). Es una extensión de 32 bits de una arquitectura anterior (el Eclipse de 16 bits). Parece que uno de los temas giratorios es que no quieren crear una máquina con un bit de modo y que lo lograron.
Sin embargo, deja de lado cómo se logra esto técnicamente, y tampoco explica por qué era tan atractivo crear una máquina sin un bit de modo. El libro no es un libro técnico, por lo que podría ser que los detalles se distorsionaron de alguna manera. Sin embargo, tiene la sensación de leer ese libro que una solución de "bit de modo" era común (y por lo tanto factible) en ese momento, pero los ingenieros lo consideraron poco atractivo quizás por razones estéticas. El libro también hace que parezca una tarea inmensamente difícil crear un diseño sin un bit de modo, que de alguna manera fue superado por este equipo en particular.
Encontré esta descripción de cómo se logró:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Básicamente, se trata de usar una parte no utilizada previamente del espacio de código de operación para las nuevas instrucciones. Debo admitir que estaba un poco decepcionado de que fuera "solo eso". También creo que esto todavía deja algunas preguntas sin respuesta:
En primer lugar, ¿cómo vivían los procesos de 16 bits en el espacio de direcciones de 32 bits? Porque creo que ese es el desafío clave para hacer una extensión de 32 bits "sin un bit de modo". Extender el conjunto de instrucciones, por otro lado, es una tarea relativamente común. Como no hay una descripción de cómo sucedió, uno podría suponer que el código de 16 bits simplemente accede a la memoria como siempre lo hizo, tal vez ve algún tipo de vista virtualizada / almacenada de la memoria (con nuevos registros de CPU que controlan dónde está la primera dirección) o algo como eso. Pero no sé si hay más que eso. En ese caso, se podría argumentar que era una solución de "bit de modo". Los procesos en modo de 16 bits podrían ejecutarse junto con otros procesos en virtud de características especiales agregadas a la CPU.
En segundo lugar, ¿por qué fue tan atractivo crear una máquina sin un bit de modo? Muchos de los beneficios promocionados en el libro es que los clientes querían ejecutar software antiguo. Pero esto no parece hablar en contra de un bit de modo, ya que todo el propósito de usar un bit de modo es tener compatibilidad con versiones anteriores. Cuando AMD extendió x86 a 64 bits, al menos de acuerdo con mi comprensión de la palabra "bit de modo", lo que hicieron exactamente fue agregar un bit de modo. Un bit especial que haría que la CPU en modo de 64 bits. Y otro bit que haría que un proceso se ejecute en un "submodo" del modo de 64 bits (para permitir la compatibilidad con aplicaciones de 32 bits). La esencia del submodo es que la CPU interpreta el flujo de instrucciones como las antiguas instrucciones de 32 bits pero que los accesos a la memoria de 32 bits realizados se resuelven utilizando el nuevo formato de tablas de páginas (configurado por el sistema operativo compatible con 64 bits) y eventualmente mapeado al espacio completo de direcciones físicas. Además, el código de 32 bits puede ser reemplazado por el código de 64 bits. Al igual que la solución Data General, esto también permitió que un programa de 32 bits se ejecutara bajo programas de 64 bits (16 bits frente a 32 bits en el caso de DG). Entonces, desde el punto de vista del cliente, no parece haber ninguna diferencia. Por lo tanto, el único beneficio podría haber sido en la implementación, simplificando el diseño, pero el libro no lo hace sonar así, ya que el modo parecía ser común incluso en ese momento (y parece que las arquitecturas posteriores también lo han hecho). lo empleé como lo muestra el caso x64).
Estoy seguro de que hay algo que me perdí, por lo que sería genial si alguien pudiera discutir más sobre los detalles técnicos y las virtudes de este diseño "sin bits de modo".