¿Es una arquitectura de conjunto de instrucciones parte de un software o es hardware? Si es software, ¿por qué es parte de la arquitectura de la computadora?

Tradicionalmente se considera parte del hardware porque es inmutable y se obtiene como parte de la máquina y se implementa en silicio. Pero tiene razón en que su diseño y especificación es una abstracción que se parece más a un software.

Una forma de pensar en ello es mirar la máquina virtual Java, que en efecto es un conjunto de instrucciones implementado como software y puede considerarse un microprocesador de software. Este es el código de bytes que se asemeja al “lenguaje de máquina”. Como tal, puede ser maleable como cualquier abstracción de software de nivel superior. De hecho, mucho silicio se define mediante el uso de un lenguaje de descripción de hardware o HDL que “compila” a conjuntos definidos de transistores y patrones.

Por lo tanto, el conjunto de instrucciones puede considerarse correctamente como software en sentido abstracto, pero a efectos prácticos se considera hardware, ya que en uso común es inmutable.

El progreso tecnológico cambia la categoría de estudio, pero la clasificación lógica sigue siendo la misma. Por ejemplo, la ciencia fue considerada originalmente como “filosofía natural”. Los microprocesadores y los conjuntos de instrucciones eran hardware, pero ahora se comporta más como un software.

ISA define una interfaz genérica entre hardware y software. Es un acuerdo entre el software y el hardware sobre qué funciones serán compatibles, cómo se admiten, etc.

Tomando ejemplo de x86 ISA, se implementa de diferentes maneras por intel y amd. La diferencia viene en la microarquitectura, que es la forma en que las instrucciones se implementan o se admiten en el hardware. Por ejemplo, una operación de multiplicación puede implementarse usando un sumador y un registro de desplazamiento en lugar de tener un hardware multiplicador dedicado. Por lo tanto, cada vez que se invoca la instrucción de multiplicación, conduce a una serie de sumas y cambios que toman múltiples ciclos de reloj, mientras que un multiplicador dedicado da como resultado ciclos de reloj menores.

Hay ventajas y desventajas para admitir una función en hardware o software. Una característica compatible con el software puede ahorrar energía pero conducir a un mal rendimiento y viceversa. Las compensaciones se realizan en función de la importancia de la regla básica “Acelerar el caso común”.
Por ejemplo, la virtualización de hardware (máquinas virtuales) en los primeros días es una función de software y en procesadores posteriores estas instrucciones se implementan en hardware, es decir, se aceleran para un mejor rendimiento. En este momento puede ver una tendencia similar en seguridad, especialmente los motores de cifrado en hardware.

No es ninguno. La Arquitectura de conjunto de instrucciones es la definición de un contrato entre capas de abstracción (históricamente hardware y software).

Es un conjunto de promesas del implementador de la ISA para aquellos que lo usarían.

Tome el ejemplo de Intel x86 ISA.

En un antiguo microprocesador físico 8086, el x86 ISA se implementa en silicio. (“Es hardware”)

En un emulador Java 8086 (como Seksen, un emulador 8086, 80186 basado en GUI desarrollado en Java), se implementa en Java. (“Es software”)

O podría implementarse como un emulador 8086 en Java que se ejecuta en un procesador central ARM (“Es un software traducido a otro tipo de software que finge ser hardware sobre otro hardware físico, que por cierto tiene su propio ISA, que … “)

Entonces el ISA es una definición de interfaz. Una capa estandarizada de abstracción. Si se trata de software o hardware es realmente un detalle de implementación.

Y, de hecho, incluso cuando se implementa el “hardware”, muchas ISA se implementan (o estaban, según mi conocimiento) realmente implementadas en un software de nivel inferior y más primitivo (microcódigo) en el hardware físico.