La arquitectura de máquinas virtuales se ha llamado también intérpretes basados en tablas. De hecho, todo intérprete involucra una máquina virtual implementada en software. Se puede decir que un intérprete incluye un seudo-programa a interpretar y una máquina de interpretación. El seudo-programa a su vez incluye el programa mismo y el análogo que hace el intérprete de su estado de ejecución (o registro de activación). La máquina de interpretación incluye tanto la definición del intérprete como el estado actual de su ejecución. De este modo, un intérprete posee por lo general cuatro componentes:
1.- Una máquina de interpretación que lleva a cabo la tarea
2.- Una memoria que contiene el seudo-código a interpretar.
3.- Una representación del estado de control de la máquina de interpretación.
4.- Una representación del estado actual del programa que se simula.
El estilo comprende básicamente dos formas o sub-estilos, que se han llamado intérpretes y sistemas basados en reglas. Ambas variedades abarcan, sin duda, un extenso espectro que va desde los llamados lenguajes de alto nivel hasta los paradigmas declarativos no secuenciales de programación, que todo el mundo sabe que implementan un proxy (una especie de nivel de impostura) que encubren al usuario operaciones que en última instancia se resuelven en instrucciones de máquinas afines al paradigma secuencial imperativo de siempre.
El estilo es su conjunto se utiliza habitualmente para construir máquinas virtuales que reducen el vacío que media entre el engine de computación esperado por la semántica del programa y el engine físicamente disponible. Las aplicaciones inscriptas en este estilo simulan funcionalidades no nativas al hardware y software en que se implementan, o capacidades que exceden a (o que no coinciden con) las capacidades del paradigma de programación que se está implementando. Dado que hasta cierto punto las máquinas virtuales no son una opción sino que devienen inevtiables en ciertos contextos, nadie se ha entretenido identificando sus ventajas y deméritos.
Las máquinas virtuales no son una invención reciente ligada a Java, sino que existen desde muy antiguo. En la década de 1950, los precursores de los ingenieros de software sugirieron una máquina virtual basada en un lenguaje de máquina universal de bytecodes (un ejemplo fue UNCOL), de manera que las aplicaciones podían escribirse en las capas más altas y ejecutarse donde fuere sin tener que recompilarse, siempre que hubiera una máquina virtual entre el programa por un lado y el sistema operativo y la máquina real por el otro. En 1968 Alan Kay implementó una máquina virtual vinculada a un sistema orientado a objetos y luego participó con Dan Ingalls en el desarrollo de la MV de Smalltalk hacia 1972. Numerosos lenguajes y ambientes de scripting utilizan máquinas virtuales: Perl, Javascript, Windows Script Host (WSH), Python, PHP, Pascal. WSH, por ejemplo, tolera programación en casi cualquier lenguaje de scripting que se atenga a ciertas especificaciones simples.
En la nueva estrategia arquitectónica de Microsoft la máquina virtual por excelencia guarda relación con el Common Language Runtime, acaso unas de las dos piezas esenciales del framework .NET (la otra es la biblioteca de clases). El CLR admite, en efecto, diversos paradigmas puros y templados: programación funcional (Lisp, Scheme, F#, Haskell), programación imperativa orientada a objetos (C#, J#, C++, Python) y estructurada en bloques (Oberon), ambientes de objetos puros (Smallscript / Smalltalk), programación lógica declarativa (Prolog, P#), diseño basado en contratos (Eiffel), modelado matemático (Fortran), scripting interpretado (Perl), meta-programación (SML, Mondrian), programación cercana a la semántica de negocios (Cobol), programación centrada en reportes (Visual ASNA RPG), además de todos los matices y composiciones heterogéneas a que haya lugar. Si bien el lenguaje final de implementación se encuentra en un punto del proceso bastante alejado de la ideación arquitectónica en que se despliegan los estilos, el efecto de la disponibilidad de estas capacidades en el diseño inicial de un sistema no es para nada trivial. Con una máquina virtual común el proceso evita la redundancia de motores compitiendo por recursos y unifica debuggers y profilers.
La congruencia entre la naturaleza semántica y sintáctica del modelo y la de los lenguajes de programación concretos ha sido, después de todo, una de las banderas del modelado orientado a objetos, desde OMT hasta UML, pasando por el modelado no sólo de las aplicaciones sino de las bases de datos.
- Sistemas de control de procesos: Desde el punto de vista arquitectónico, mientras casi todos los demás estilos se pueden definir en función de componentes y conectores, los sistemas de control de procesos se caracterizan no sólo por los tipos de componentes, sino por las relaciones que mantienen entre ellos. El objetivo de un sistema de esta clase es mantener ciertos valores dentro de ciertos rangos especificados, llamados puntos fijos o valores de calibración; el caso más clásico es el de los termostatos. Existen mecanismos tanto de retroalimentación (feedback) como de prealimentación(feedforward), y tanto reductores de oscilación como amplificadores; pero el tipo de retroalimentación negativa es el más común. En uno de los pocos tratamientos arquitectónicos de esta clase de modelos cibernéticos, Shaw y Garlan recomiendan separar los tres elementos del bucle de control (mecanismos para cambiar los valores de variables y algoritmos de control, elementos de datos; esquema del bucle). La ventaja señalada para este estilo radica en su elasticidad ante perturbaciones externas [SG96].
- Retroalimentación «Feed-back
- Esquematizacion de feedback: En la teoría de sistemas, en cibernética y en la teoría de control, entre otras disciplinas, la retroalimentación, cuyo término correcto es realimentación (en inglés feedback) es un mecanismo de control de los sistemas dinámicos por el cual una cierta proporción de la señal de salida se redirige a la entrada, y así regula su comportamiento. El feedback también está presente en numerosos espacios tecnológicos. En este sentido, gran parte de los aparatos y máquinas que utilizamos en nuestra vida cotidiana funcionan a través del sistema de feedback ya que suponen el intercambio y traspaso permanente de datos (de cualquier tipo). Un ejemplo claro de esta situación es la conexión a internet que, además de contar con un espacio virtual, necesita de un soporte técnico y físico a través del cual se mandan y reciben permanentemente datos de diverso tipo. Esta conexión, en este caso particular, se puede realizar a través de cables de fibra óptica que son los responsables de llevar y traer la información necesaria.1 Los ejemplos de la realimentación se pueden encontrar en la mayoría de los sistemas complejos, tales como ingeniería, arquitectura, economía, y biología y tiene su base en el proceso administrativo donde, el control es una etapa cualitativa y cuantitativa, que sirve de base para la fase de planeación. Arturo Rosenblueth, investigador mexicano y médico en cuya obra llamada “Behavior, Purpose and Teleology“ ("comportamiento, propósito y teleología"), de acuerdo con Norbert Wiener, fijó las bases para la nueva ciencia de la cibernética y propuso que el comportamiento controlado por la realimentación negativa, aplicada a un animal, al ser humano o a las máquinas era un principio determinante y directivo, en la naturaleza o en las creaciones humanas.
Existen dos tipos de sistemas principalmente. Los no realimentados o de lazo abierto y los realimentados o de lazo cerrado.
- El lazo cerrado: Funciona de tal manera que hace que el sistema se realimente, es decir que la salida vuelve al principio para que analice la diferencia y en una segunda opción ajuste más, así hasta que el error es 0. Cualquier concepto básico que tenga como naturaleza una cantidad controlada como por ejemplo temperatura, velocidad, presión, caudal, fuerza, posición, cuplas, etc. son parámetros de control de lazo cerrado.
- El Lazo abierto: Los sistemas de lazo abierto no se comparan a la variable controlada con una entrada de referencia. Cada ajuste de entrada determina una posición de funcionamiento fijo en los elementos de control.
- Re alimentación Negativa: Es la más utilizada en sistemas de control Se dice que un sistema está realimentado negativamente cuando tiende a estabilizarse, es decir cuando nos vamos acercando a la orden de consigna hasta llegar a ella.
- Ejemplos
- Un automóvil conducido por una persona en principio es un sistema realimentado negativamente; ya que si la velocidad excede la deseada, como por ejemplo en una bajada, se reduce la presión sobre el pedal, y si es inferior a ella, como por ejemplo en una subida, aumenta la presión, aumentando por lo tanto la velocidad del automóvil.
- Un sistema de calefacción está realimentado negativamente, ya que si la temperatura excede la deseada la calefacción se apagará o bajará de potencia, mientras que si no la alcanza aumentará de fuerza o seguirá funcionando.
- Realimentación positiva: Es un mecanismo de realimentación por el cual una variación en la salida produce un efecto dentro del sistema, que refuerza esa tasa de cambio. Por lo general esto hace que el sistema no llegue a un punto de equilibrio sino más bien a uno de saturación. Es un estímulo constante.
- Ejemplos
- En un sistema electrónico. Los dispositivos semiconductores conducen mejor la corriente cuanto mayor sea su temperatura. Si éstos se calientan en exceso, conducirán mejor, por lo que la corriente que los atraviese será mayor porque se seguirán calentando hasta su destrucción si no se evita con algún otro dispositivo que límite o impida el paso de corriente.
- Si intercambiamos conectándose una caldera de calefacción a un sistema preparado para aire acondicionado (frío), cuando la temperatura suba, el sistema intentará bajarla (se activará) a fin de llegar a la temperatura de consigna, que es más baja, pero encenderá la caldera en lugar del aire acondicionado, por lo que la temperatura subirá aún más en vez de estabilizarse, lo que volverá a provocar que la caldera siga funcionando cada vez con más fuerza.