La máquina basada en la pila depende de una máquina basada en registro?

Las CPUs normales (por ejemplo, dispositivos Android) son máquinas basadas en registros. La máquina virtual Java es una máquina basada en la pila. Pero ¿una máquina basada en la pila depende de una máquina basada en registros para funcionar? ¿No pueden funcionar las máquinas basadas en pila solas, porque no es un sistema operativo? ¿Existen ejemplos de máquinas basadas en la pila excepto la JVM? Algunos dicen 1 operando, 2 operando; ¿Por qué necesitas esto?

La JVM no menciona la existencia de registros en ninguna parte. Desde su perspectiva, la memoria existe en sólo unos pocos lugares, como la pila por hilo, el área de método, piscinas constantes de tiempo de ejecución, etc. Dicho esto, si realmente querías implementar un dispositivo físico que se adhirió a la JVM, d ciertamente necesitan registros para contener algunos de los valores temporales generados al ejecutar determinados bytecodes, o para mantener una cierta información adicional del rasguño en el lado. Por ejemplo, intente buscar la instrucción multianewarray y vea si podría implementarla sin registros. Todos los derechos reservados

Una paralela que se puede encontrar en CPUs reales en estos días es que, si bien hay un conjunto dedicado de registros disponibles para los programadores, la mayoría de las CPUs tienen sustancialmente más registros que se utilizan internamente para diversos fines. Por ejemplo, la mayoría de los chips MIPS tienen un gran número de registros utilizados para el pipelining. Tienen cosas como los bits de control de instrucciones anteriores. Me sorprendería si x86 fuera diferente.

Lo que hay que recordar es que no son los registros los que realmente definen cómo funciona una máquina basada en registros en comparación con una máquina basada en pilas. En la mayoría de las arquitecturas, tiene O (1) registros dedicados para uso interno. Incluso la JVM tiene estos – cada método tiene una "matriz de variables locales" que originalmente contienen los parámetros de la función, pero también se puede utilizar como espacio de rayado si es necesario. La parte más importante sobre las máquinas de pila que las diferencia de otras máquinas es cómo funciona la memoria extensible. En la mayoría de las computadoras, la memoria es de acceso aleatorio y se puede leer desde cualquier ubicación que desee en cualquier momento. Es decir, con n ubicaciones de memoria, tiene memoria O (n) legible en cualquier momento. En las máquinas basadas en pila, sólo tiene acceso a los primeros lugares de la pila, por lo que sólo tiene O (1) lugares de memoria legibles en cualquier momento.

En teoría, debido a que se supone que la JVM representa una máquina virtual completa, podrías tener una computadora que arrancara y ejecutaría una JVM sin ningún sistema operativo (o mejor dicho, la JVM sería el sistema operativo, y tus "programas" serían simplemente Java bytecodes y archivos de clase).

Hay algunos otros lenguajes basados ​​en pila, de los cuales el primero que salta a la mente es Forth . Menciono Forth porque es explícitamente un lenguaje basado en pila; todo lo que haces se expresa en términos de manipulación de una pila de operandos. Cuál es fresco sobre esto con respecto a su pregunta original es que Forth solía ser extremadamente popular entre los aficionados porque usted podría realmente fácilmente el puerto él a los dispositivos encajados. Para conseguir un intérprete Forth completo, no necesita un sistema operativo realmente potente, solo necesita el intérprete de comandos. Forth no es tan popular en estos días, pero sigue siendo un lenguaje muy cool.

Otro lenguaje basado en pila que está en uso amplio es PostScript , que ha perdido mucho terreno para PDF, pero todavía se utiliza ampliamente en entornos en los que es necesario crear gráficos escalables en una variedad de plataformas. Técnicamente es un lenguaje de programación de Turing-completo, aunque pocas personas lo usan de esa manera.

Sé que ya ha seleccionado su respuesta, pero me gustaría referirme a toda la " máquina de la pila".

Aunque la mayoría de las CPUs físicas son, de hecho, máquinas de registro, ha habido máquinas de pila como CPU físicas. Por ejemplo, las máquinas Burroughs de las series B5000 y B6000 , o los chips de la serie RTX2000 utilizados en el vuelo espacial (originalmente implementado por Chuck Moore en la lógica del array de puertas y posteriormente comercializado). El UCSD Pascal p-Machine fue implementado directamente en hardware, así como por una variedad de implementadores.

En términos de potencia computacional, las máquinas registradoras y apiladoras son aproximadamente equivalentes. (Depende, por supuesto, de qué modelos exactos de máquinas de registro o de pila se trata.) Las máquinas apiladas tienen la ventaja de simplicidad, tamaño pequeño y capacidad de expansión. Las máquinas de registro tienden a ser más rápidas. Las máquinas de registro pueden emular pilas de máquinas (eso es lo que los registros de BP y SP en la arquitectura x86 son para, después de todo!) Y las máquinas de pila pueden imitar las máquinas de registro si es necesario.


editado para agregar

Casi me había olvidado de señalarle a un libro que discute las computadoras de la pila en profundidad. Koopman es un poco fanboi para las computadoras de pila y su predicción de que eran "la nueva ola" estaba lamentablemente equivocada, pero es una lectura interesante.

  • JAVA_OPTS para aumentar el tamaño del montón
  • Lenguaje basado en JVM sin tiempo de ejecución de lenguaje
  • Android Studio Gradle proyecto "No se puede iniciar el proceso de daemon / inicialización de VM"
  • Cadena de byte con UTF-8 da diferentes resultados en Android que en Windows JVM
  • ¿Cuál es la diferencia entre DVM y JVM?
  • Instalación de Android Studio, no apunta a un error de instalación de JVM válido
  • Programación funcional pura en android
  • AssembleDebug error en Android Studio
  • Android Studio Emulator - Instancia de Java no admite JVM de 32 bits
  • ¿Qué no puedes hacer en la VM de Dalvik (VM de Android) que puedes usar en Sun VM?
  • ¿Llevar la Java VM de Android al iPhone?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.