MÉTODO Y APARATO PARA CREAR MÉTODOS NATIVOS EFICACES QUE EXTIENDEN UN INTÉRPRETE DE CÓDIGOS DE BYTE.

Método de ejecución de un método nativo en una máquina virtual Java que incluye una pila de Java,

comprendiendo el método:

determinar (202) si un método nativo (106, 108) va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas;

si el método nativo va a ser gestionado por la primera interfaz nativa, invocar al método nativo y posibilitar que el método nativo acceda a un estado interno de la máquina virtual Java mediante la obtención (204) de un puntero de función desde un bloque de método, la invocación a la función del método nativo y el traslado (206), a la función del método nativo, de datos que permiten el acceso a un estado de la máquina virtual Java que va a ser usado por el método nativo sin realizar retrollamadas a la máquina virtual Java, incluyendo dichos datos un puntero a argumentos en la pila de Java;

ejecutar (208) el método nativo en la máquina virtual Java; y

almacenar, por medio del método nativo, sus resultados en la pila de Java, y modificar (302) un puntero de pila de Java sobre la base de un código de retorno, ajustando (302, 304) de este modo el estado de la máquina virtual Java sobre la base de la ejecución del método nativo, con lo cual se minimiza la transición entre un bucle intérprete y el método nativo a través de la primera interfaz nativa.

Tipo: Patente Internacional (Tratado de Cooperación de Patentes). Resumen de patente/invención. Número de Solicitud: PCT/US2001/017126.

Solicitante: Oracle America, Inc.

Nacionalidad solicitante: Estados Unidos de América.

Dirección: 500 Oracle Parkway Redwood City, CA 94065 ESTADOS UNIDOS DE AMERICA.

Inventor/es: LONG,Dean R. E, PLUMMER,Christopher J, FRESKO,Nedim.

Fecha de Publicación: .

Clasificación Internacional de Patentes:

  • G06F9/40
  • G06F9/42
  • G06F9/455 FISICA.G06 CALCULO; CONTEO.G06F PROCESAMIENTO ELECTRICO DE DATOS DIGITALES (sistemas de computadores basados en modelos de cálculo específicos G06N). › G06F 9/00 Disposiciones para el control por programa, p. ej. unidades de control (control por programa para dispositivos periféricos G06F 13/10). › Emulación; Interpretación; Simulación delsoftware, p. ej. virtualización o emulación de motores de ejecución de aplicaciones o sistemas operativos.

PDF original: ES-2376191_T3.pdf

 


Fragmento de la descripción:

Método y aparato para crear métodos nativos eficaces que extienden un intérprete de códigos de byte.

Referencia cruzada a solicitudes relacionadas La presente solicitud reivindica prioridad con respecto a la solicitud de patente provisional presentada el 25 de mayo de 2000, número de solicitud 60/207.482, titulada “Method and Apparatus for Writing Time and Space Efficient Native Methods that Extend A Byte-Code Interpreter.”

Antecedentes de la invención

1. Campo de la invención

La presente invención se refiere en general a software informático y sistemas operativos. Más específicamente, se refiere a una interfaz para una máquina virtual Java que posibilita un uso más eficaz de componentes en la máquina virtual y permite una invocación eficaz de métodos nativos.

2. Descripción de la técnica relacionada

La necesidad de instalar un sistema Java o máquina virtual Java (“JVM”) en sistemas de consumo e integrados está creciendo. En el futuro, es más probable que los dispositivos, electrodomésticos, cajas de adaptación de televisores y similares contengan algún tipo de implementación del lenguaje Java. Como es sabido en el sector, una implementación típica del lenguaje Java es una JVM, que contiene un bucle intérprete (al que se hace referencia también como intérprete de códigos de bytes) que ejecuta repetidamente códigos de byte. El bucle intérprete se escribe típicamente en un lenguaje de bajo nivel, tal como el lenguaje de programación C, y ejecuta una representación intermedia, basada en pilas, del lenguaje Java denominada códigos de byte Java. Un sistema Java, tal como el presente en un dispositivo integrado o de consumo, contiene típicamente un conjunto de bibliotecas escritas en Java y un conjunto de métodos nativos, escritos en un lenguaje tal como el C. Para que los códigos de byte Java llamen a métodos nativos, la máquina virtual proporciona una interfaz de métodos nativos. Esta interfaz nativa es responsable de localizar un método nativo y de transferir un conjunto de argumentos de método desde la pila de códigos de byte Java a una pila nativa (a la que se hace referencia también como pila de C) antes de la ejecución del método nativo. La interfaz es responsable también de tomar un valor de retorno de un método nativo y de devolverlo a la pila de Java para su uso posterior por códigos de byte Java. Esencialmente, la interfaz de métodos nativos toma argumentos de la pila de Java y los coloca en la pila de C. Una interfaz de métodos nativos común para el Java es la Interfaz Nativa de Java o JNI.

Cuando se usan interfaces actuales de métodos nativos en sistemas con recursos limitados de CPU y de memoria surgen otros problemas. Uno de los problemas es que muchos métodos nativos críticos en cuanto al rendimiento se deben ejecutar frecuentemente. No obstante, el “protocolo” de la interfaz de métodos nativos consume un tiempo excesivo en la ejecución. Adicionalmente, con los retornos del método nativo para el bucle intérprete, es necesario desapilar un marco de la pila de Java. Otro problema es la cantidad de espacio utilizado por la pila nativa o pila de C. Para llamadas de métodos especiales, a saber, invocaciones de método debidas a la reflexión de Java (Method.invoke () y ejecución de constructores para Class.newInstance () ) y la ejecución del inicializador estático <clinit> de una clase en el primer uso de la clase, se produce un problema de uso de la pila nativa. Las funciones C que gestionan la invocación del método de reflexión y la invocación del método <clinit> llaman de manera recursiva al bucle intérprete (Java) para ejecutar el método objetivo especial. Esto significa que la pila nativa tiene un marco de intérprete nuevo apilado en la misma. Este proceso puede continuar de manera indefinida, desde el bucle intérprete al código nativo, de vuelta al bucle intérprete, y así sucesivamente. Este ciclo de llamadas recursivas puede consumir potencialmente excesivos recursos de la pila de C y ciclos del reloj del procesador puesto que la pila de C está típicamente pre-asignada y se hace suficientemente grande como para evitar el desbordamiento en un escenario del peor caso. Esta tara designada a pre-asignar una memoria de pila de C para adecuarse a un escenario del peor caso del uso de la pila es significativa para dispositivos de consumo e integrados que ejecutan una JVM que tiene recursos restringidos de memoria y de procesador. Por lo tanto, si al uso de la pila de C del peor caso contribuyen llamadas C recursivas, y dichas llamadas recursivas se pueden reducir o eliminar, entonces se puede reducir potencialmente el uso de la pila C del peor caso, permitiendo de este modo la reducción del tamaño de pilas C pre-asignadas.

Se requiere una interfaz nativa de función especializada que permita que una JVM minimice la cantidad de recursos de memoria y de procesador que consume la JVM. En ciertos casos, la interfaz nativa de función especializada usada conjuntamente con el bucle intérprete puede eliminar potencialmente la recursividad de C. Adicionalmente, resultaría deseable extender de forma eficaz el bucle intérprete en una JVM sin añadir uno o más códigos de byte nuevos y permitiendo que ciertos métodos nativos manipulen o accedan directamente el estado de la JVM. Más específicamente, se requiere una interfaz nativa que no necesite apilamiento o desapilamiento de marcos Java, que no necesite la ordenación de argumentos y resultados de método entre las pilas de Java y nativa, y que no necesite retrollamadas de funciones caras con el fin de permitir que el método nativo acceda a datos internos de la JVM.

“Compiling Java just in time”, Micro, IEEE, v17n13, junio de 1997, páginas 36 a 43, describe la llamada a métodos nativos en un entorno Java. Entre el intérprete y el código nativo se inserta una rutina intermediaria (stub routine) . Un método nativo lee de forma intermediaria los argumentos entrantes de la pila de Java y los coloca en registros o en la pila del hilo de acuerdo con la convención de llamada nativa. Cuando el método nativo devuelve valores de retorno, la rutina intermediaria almacena el valor de retorno de vuelta en la pila de Java.

Se describen métodos, sistemas y soportes legibles por ordenador para ejecutar un método nativo en un entorno virtual Java.

En un aspecto de la invención, se proporciona un método de ejecución de un método nativo en una máquina virtual Java que incluye una pila de Java, comprendiendo el método: determinar si un método nativo va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas; si el método nativo va a ser gestionado por la primera interfaz nativa, invocar al método nativo y posibilitar que el método nativo acceda a un estado interno de la máquina virtual Java mediante la obtención de un puntero de función desde un bloque de método, la invocación a la función del método nativo y el traslado, a la función del método nativo, de datos que permiten el acceso a una máquina virtual Java, incluyendo dichos datos un puntero a argumentos en la pila de Java; ejecutar el método nativo en la máquina virtual Java; y almacenar, por medio del método nativo, sus resultados en la pila de Java, y modificar un puntero de pila de Java sobre la base de un código de retorno, ajustando de este modo el estado de la máquina virtual Java sobre la base de la ejecución del método nativo, con lo cual se minimiza la transición entre un bucle intérprete y el método nativo a través de la primera interfaz nativa.

Los métodos nativos se pueden clasificar de manera que queden capacitados para ser gestionados por una interfaz nativa especial. Al método nativo especial se le pueden pasar un puntero a la parte superior de la pila de Java y un puntero a un puntero del bloque de método. El método nativo especial puede colocar un marco de transición correspondiente a un método nuevo en una pila en la máquina virtual. El método nativo especial también puede apilar argumentos asociados al marco de transición en la pila, y se puede retornar un código de resultado. La pila puede ser una pila de Java y el código de resultado indica que se ha apilado un marco de transición nuevo en la pila. Se puede minimizar la recursividad de la pila en la máquina virtual y se puede reducir la memoria utilizada por una pila mientras se está ejecutando la máquina virtual.

Otros aspectos de la invención proporcionan un sistema según la reivindicación 6 y un soporte legible por ordenador según la reivindicación 7.

Breve... [Seguir leyendo]

 


Reivindicaciones:

1. Método de ejecución de un método nativo en una máquina virtual Java que incluye una pila de Java, comprendiendo el método:

determinar (202) si un método nativo (106, 108) va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas;

si el método nativo va a ser gestionado por la primera interfaz nativa, invocar al método nativo y posibilitar que el método nativo acceda a un estado interno de la máquina virtual Java mediante la obtención (204) de un puntero de función desde un bloque de método, la invocación a la función del método nativo y el traslado (206) , a la función del método nativo, de datos que permiten el acceso a un estado de la máquina virtual Java que va a ser usado por el método nativo sin realizar retrollamadas a la máquina virtual Java, incluyendo dichos datos un puntero a argumentos en la pila de Java;

ejecutar (208) el método nativo en la máquina virtual Java; y almacenar, por medio del método nativo, sus resultados en la pila de Java, y modificar (302) un puntero de pila de Java sobre la base de un código de retorno, ajustando (302, 304) de este modo el estado de la máquina virtual Java sobre la base de la ejecución del método nativo, con lo cual se minimiza la transición entre un bucle intérprete y el método nativo a través de la primera interfaz nativa.

2. Método según la reivindicación 1, que comprende además clasificar uno o más métodos nativos de manera que el método o métodos nativos quedan capacitados para ser gestionados por la primera interfaz nativa.

3. Método según la reivindicación 1 ó 2, en el que la determinación de si un método nativo va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas comprende además examinar (202) un bloque de método del método nativo para determinar un tipo de método.

4. Método según cualquiera de las reivindicaciones 1 a 3, en el que la ejecución del método en un bucle intérprete comprende además:

apilar (402) un marco de transición correspondiente a un método particular en una primera pila en la máquina virtual Java;

apilando (404) el método nativo una pluralidad de argumentos asociados al marco de transición en la primera pila; y retornar (406) un código de resultado al bucle intérprete.

5. Método según la reivindicación 4, en el que la primera pila es una pila de Java y el código de resultado indica que se ha apilado un marco de transición nuevo en la pila de Java.

6. Sistema (700) para ejecutar un método nativo en una máquina virtual Java que incluye una pila de Java, comprendiendo el sistema:

un procesador (702) ; y un soporte legible por ordenador, que almacena un programa para su ejecución por parte del procesador, comprendiendo el programa:

un código de ordenador que determina si un método nativo va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas;

un código de ordenador que invoca al método nativo y posibilita que el método nativo acceda a un estado de la máquina virtual Java obteniendo (204) un puntero de función a partir de un bloque de método, invocando a la función de método nativo y pasando (206) , a la función de método nativo, datos que permiten el acceso a un estado de la máquina virtual Java a usar por el método nativo sin realizar retrollamadas a la máquina virtual Java, incluyendo dichos datos un puntero a argumentos en la pila de Java, si el método nativo va a ser gestionado por la primera interfaz nativa; y un código de ordenador que ejecuta el método en la Máquina Virtual Java; y un código de ordenador que provoca que el método nativo almacene sus resultados en la pila de Java, y que modifique un puntero de pila de Java sobre la base de un código de retorno, ajustando de este modo el estado de la Máquina Virtual Java sobre la base de la ejecución del método con lo cual se minimiza la transición entre un bucle intérprete y el método nativo a través de la primera interfaz nativa.

7. Soporte legible por ordenador, que contiene instrucciones programadas dispuestas para ejecutar un método nativo en una máquina virtual Java que incluye una pila de Java, incluyendo, el soporte legible por ordenador, instrucciones programadas, para:

determinar si un método nativo va a ser gestionado por una primera interfaz nativa o una de una pluralidad de otras interfaces nativas;

si el método va a ser gestionado por la primera interfaz nativa, invocar al método nativo y posibilitar que el método nativo acceda a un estado de la máquina virtual Java mediante la obtención de un puntero de función desde un bloque de método, la invocación a la función del método nativo y el traslado, a la función del método nativo, de datos que permiten el acceso a un estado de la máquina virtual Java que va a ser usado por el método nativo sin realizar retrollamadas a la máquina virtual Java, incluyendo dichos datos un puntero a argumentos en la pila de Java;

ejecutar el método en la Máquina Virtual Java; y almacenar, por medio del método nativo, sus resultados en la pila de Java, y modificar un puntero de pila de Java sobre la base de un código de retorno, ajustando de este modo el estado de la JVM sobre la base de la ejecución del método, con lo cual se minimiza la transición entre un bucle intérprete y el método nativo a través de la primera interfaz nativa.


 

Patentes similares o relacionadas:

UNA DISPOSICION Y UN METODO PARA SOPORTAR EL CONTROL DE PROCESOS/APLICACIONES., del 1 de Diciembre de 2006, de TELEFONAKTIEBOLAGET LM ERICSSON (PUBL): Una disposición para controlar/soportar el control de procesos de un sistema, en la que un número de procesos son provistos/definidos para soportar la ejecución de un […]

UNIDAD DE CONSTRUCCION DE TRAZAS, del 1 de Abril de 2003, de UNIVERSIDAD POLITECNICA DE CATALUNYA: "Unidad de construcción de trazas" Las trazas que solamente constan de instrucciones consecutivas pueden ser proporcionadas desde la caché de […]

SISTEMA DE COMUNICACION ENTRE SISTEMAS DE ORDENADOR DE UN SISTEMA DE TRATAMIENTOS DE DATOS, del 16 de Diciembre de 1981, de FUJITSU LIMITED: PROCEDIMIENTO DE COMUNICACION ENTRE SUBSISTEMAS DE TRATAMIENTO DE DATOS EN UN ORDENADOR, QUE FUNCIONAN BAJO EL CONTROL DE UN SISTEMA DE ACCIONAMIENTO INDEPENDIENTE […]

Imagen de 'SERVIDOR WEB CON FUNCION DE AUTOMATIZACION INTEGRADA Y ACCESO…'SERVIDOR WEB CON FUNCION DE AUTOMATIZACION INTEGRADA Y ACCESO DIRECTO ADICIONAL AL NIVEL DE COMUNICACION EN TIEMPO REAL DE LA ETHERNER EN TIEMPO REAL, del 16 de Octubre de 2008, de SIEMENS AKTIENGESELLSCHAFT: Servidor web con módulos de software de ampliación integrados en el servidor web , - en donde al menos uno de los módulos […]

METODO, SISTEMA Y APARATO, PARA UN CONTROLADOR LOGICO PROGRAMABLE., del 16 de Diciembre de 2006, de SIEMENS ENERGY & AUTOMATION, INC.: Un aparato de segmentación para su uso en un bloque de salida de impulsos , utilizable en un modo PWM o un en modo PTO, para proporcionar […]

Imagen de 'ARQUITECTURA PARA GENERAR REPRESENTACIONES INTERMEDIAS PARA LA…'ARQUITECTURA PARA GENERAR REPRESENTACIONES INTERMEDIAS PARA LA CONSERVACION DE CODIGOS DE PROGRAMAS, del 18 de Junio de 2010, de INTERNATIONAL BUSINESS MACHINES CORPORATION: Un método para generar una representación intermedia durante la traducción de código sujeto a código de objetivo , que comprende las […]

Virtualización de funciones de red en grupos a medida, del 17 de Junio de 2020, de TELEFONAKTIEBOLAGET LM ERICSSON (PUBL): Un método para virtualizar una función de red entre un grupo a medida que comprende una pluralidad de terminales móviles ubicados unos […]

Ejecución del programa sobre plataforma heterogénea, del 29 de Abril de 2020, de UNIVERSITEIT GENT: Un método puesto en práctica por ordenador que comprende: - obtener un objeto de código informático intermedio que comprende, al menos, un […]

Utilizamos cookies para mejorar nuestros servicios y mostrarle publicidad relevante. Si continua navegando, consideramos que acepta su uso. Puede obtener más información aquí. .