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?
- ¿Por qué Android necesita una máquina virtual (DVM)?
- Intellij idea que muestra error: no se pudo crear la máquina virtual java
- ¿Es posible instalar java fx en un teléfono android?
- Serializar objetos entre Android y PC (Dalvik vs JVM)
- Android studio 1.1 - cambiar JRE utilizado para ejecutar el estudio
- ¿DalvikVM Vs JavaVM en Android?
- ¿Cuál es la diferencia entre los archivos .class y .dex?
- Android Studio se ejecuta en Windows 7 64bit falla
- Prueba de unidad Android no funciona para el proyecto de la biblioteca de Android
- Error al iniciar Android Studio: Error al crear JVM: código de error-6
- Error de Android Studio: "La variable de entorno no apunta a una instalación de JVM válida"
- Ejecución de bytecode Java en Android - Sun JVM en la parte superior de DalvikVM
- ¿Cómo la VM Dalvik guarda y restaura sus registros entre las llamadas de método?
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.