Sistema y procedimiento de transformación de código objeto.
Un procedimiento implementado en un ordenador para combinar una pluralidad de ficheros (200,
230) de clase en un lote unificado (1200) de ficheros de clase que incluye los métodos (204, 205, 206, 234, 235, 236) y los campos (207, 208, 237, 238) de los ficheros (200, 230) de clase originales, comprendiendo el procedimiento: copiar los métodos (204, 205, 206, 235, 236) de los ficheros (200, 230) de clase originales al lote unificado (1200) de ficheros de clase, generando por ello una entrada (1208, 1209, 1236) de método global dentro del lote unificado (1200) de ficheros de clase para cada método (204, 205, 206, 234, 235, 236) dentro de la pluralidad de ficheros (200, 230) de clase; copiar los campos (207, 208, 237, 238) de los ficheros (200, 230) de clase originales al lote unificado (1200) de ficheros de clase, generando por ello una entrada (1210, 1238) de campo global dentro del lote unificado (1200) de ficheros de clase para cada campo (207, 208, 237, 238) dentro de la pluralidad de ficheros (200, 230) de clase; convertir las entradas (203, 242, 233, 241) del fondo común de constantes locales de los fondos comunes (202, 232) de constantes locales de cada uno entre la pluralidad de ficheros (200, 230) de clase que hacen referencia a los métodos (204, 205, 206; 234, 235, 236) y los campos (207, 208, 237, 238) de cada fichero (200, 230) de clase, en las entradas (1203, 1204) del fondo común de constantes globales dentro del lote unificado (1200) de ficheros de clase, en donde la conversión comprende eliminar las entradas (203, 242, 233, 241) redundantes del fondo común de constantes locales,
caracterizado porque la conversión comprende adicionalmente reemplazar las referencias que apuntan desde las entradas (263, 242, 233, 241) del fondo común de constantes locales a los métodos (236) y campos (237) por valores de desplazamiento proporcionados en ranuras, a las que se asignan números de ranura en base a desplazamientos desde el extremo superior de las entradas (1203, 1204) del fondo común de constantes globales, apuntando los valores de desplazamiento desde las ranuras a las entradas (1208, 1209, 1236) de métodos globales y a las entradas (1210, 1238) de campos, respectivamente, dentro del lote unificado (1200) de ficheros de clase.
Tipo: Patente Internacional (Tratado de Cooperación de Patentes). Resumen de patente/invención. Número de Solicitud: PCT/US2002/002316.
Solicitante: MICROSOFT CORPORATION.
Nacionalidad solicitante: Estados Unidos de América.
Dirección: ONE MICROSOFT WAY REDMOND, WASHINGTON 98052 ESTADOS UNIDOS DE AMERICA.
Inventor/es: SWETLAND,Brian.
Fecha de Publicación: .
Clasificación Internacional de Patentes:
- G06F9/445 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). › Carga o inicio de programas (arranque G06F 9/4401; disposiciones de seguridad para la carga o inicio de programas G06F 21/57).
- G06F9/45
PDF original: ES-2380175_T3.pdf
Fragmento de la descripción:
Sistema y procedimiento de transformación de código objeto Antecedentes de la invención Campo de la invención La presente invención se refiere, en general, al campo de la programación de ordenadores. Más específicamente, la invención se refiere a un sistema y procedimiento para transformar código de programas orientados a objetos.
Descripción de la técnica relacionada Java es un lenguaje de programación orientado a objetos que se usa para diseñar programas de ordenador que son independientes de las plataformas. Es decir, el mismo código objeto de Java puede usarse en numerosos sistemas operativos distintos, incluso, por ejemplo, Windows 95, Unix, Solaris y el Sistema Operativo Macintosh. Esta interoperabilidad hace de Java una elección ideal para programar aplicaciones de Internet.
Una vez que un programa está escrito en código fuente de Java, el compilador de Java generar un código objeto compacto, neutral para las arquitecturas (usualmente mencionado y conocido como código de octetos de Java) que puede ser ejecutado por un intérprete de tiempo de ejecución residente en el ordenador cliente. Este intérprete de tiempo de ejecución se denomina usualmente una "máquina virtual" de Java. La máquina virtual de Java interpreta el código objeto de modo tal que las instrucciones puedan ser ejecutadas por el microprocesador nativo del cliente. Las máquinas virtuales se incluyen en aplicaciones exploradoras de Internet usualmente disponibles, tal como el Navegador™ Netscape o el Explorador™ de Internet de Microsoft.
Java se generó a partir del popular lenguaje C++ de programación y retuvo muchas características significativas de ese lenguaje. Por ejemplo, Java, como C++, es orientado a objetos. En consecuencia, los programas de Java se desarrollan alrededor de "clases" y "objetos". Estos dos términos no son intercambiables, pero están directamente relacionados entre sí. Una clase puede concebirse como una plantilla o patrón a partir de la cual se hace un objeto. Un objeto puede contener algún número de "campos" en los cuales pueden almacenarse datos (tales como enteros, cadenas de caracteres o referencias a otros objetos) . Una clase define un cierto número de acciones ("métodos") que pueden operar sobre el objeto y que son implementadas bien en código de octetos, bien enlazadas a código nativo, o bien son abstractas. Cada objeto es una "instancia" de alguna clase específica, que contiene los campos descritos y que puede ser objeto de operaciones por parte de los métodos descritos.
Un "fichero de clase" es un objeto binario que describe una única clase: todos los campos, métodos, código objeto de esos métodos, etc. El formato de los ficheros de clase es descrito en detalle por el capítulo cuatro de la obra "La especificación de la máquina virtual de Java" (ISBN 0-201-43294-3) . El diseño básico de un fichero de clase se describirá más adelante.
El documento US 5.966.542 describe un procedimiento y sistema en los cuales un módulo ejecutable, tal como las clases de Java, se almacena en una memoria de sólo lectura. Un cargador estático de clases identifica métodos que contienen referencias simbólicas no resueltas y datos que varían durante la ejecución del módulo. Estos métodos y datos se identifican a fin de situarlos en el espacio de direcciones que reside en una memoria de acceso aleatorio. Al utilizar una memoria de sólo lectura para almacenar clases cargables estáticamente, la memoria de acceso aleatorio se deja disponible para otros usos. A fin de reducir la cantidad de memoria de sólo lectura usada, las constantes de las distintas clases se combinan en un fondo común de constantes, en dos segmentos. En un primer segmento del fondo común de constantes, que contiene a lo sumo 256 constantes, las constantes son objeto de referencia por operandos de 8 bits y, en el segundo segmento, las constantes son objeto de referencia por dos operandos de 8 bits (col. 6, líneas 10 a 33)
Los programadores combinan habitualmente grupos de ficheros de clase ya confeccionados, denominados "bibliotecas de clases", para escribir programas. Por ejemplo, una biblioteca de clases está habitualmente disponible para proporcionar funciones de interfaz gráfica de usuario ("GUI") , tales como rutinas de ventanas, botones, barras deslizables y otras características gráficas.
Según se ilustra en la Figura 1, un fichero 100 de clases ejemplar está compuesto por una cabecera 101, una pluralidad de entradas 102 del fondo común de constantes y uno o más métodos 103 a 105 y / o campos 106, 107. La cabecera 101 contiene datos para identificar un fichero de clase como un fichero de clase (p. ej., la información de revisión) . Cada una de las entradas 102 del fondo común de constantes está compuesta, respectivamente, por una parte 111, 121, 131, 141 de cabecera (una "etiqueta" de un único octeto) y una parte 113, 123, 133, 134 de datos de longitud variable. La parte 111, 121, 131, 141 de cabecera indica el tipo de entrada del fondo común de constantes. Según la especificación, las entradas pueden ser del tipo Clase, RefCampo, RefMétodo, RefMétodoInterfaz, Cadena, Entero, Flotante, Largo, Doble, NombreYTipo o Utf8. La parte 113, 123, 133, 143 de datos contiene la información efectiva del fondo común de constantes asociada a la entrada. Los tipos Utf8, Entero, Flotante, Largo y Doble encapsulan datos constantes sencillos, según lo indican sus nombres. Los otros tipos contienen referencias (por un índice con base) a otras entradas. Por ejemplo, una RefMétodo se refiere a una entrada de Clase y a una entrada de NombreYTipo, que identifican un método específico de una clase específica.
Por ejemplo, según se ilustra en la Figura 2, cada uno de los ficheros 200, 210 y 220 de clase contiene entradas del fondo común de constantes que se refieren a métodos y campos proporcionados por el fichero 230 de clase. Más específicamente, los ficheros 200, 210 y 220 de clase incluyen, respectivamente, las entradas 203, 213 y 223 del "RefMétodo Pepe" en sus fondos comunes 202, 212 y 222 de constantes, que se refieren al método Pepe 236 de la clase 230. Además, el mismo fichero 230 de clase incluye una entrada "RefMétodo Pepe" en su fondo común 232 de constantes que se refiere al método Pepe 236. De manera similar, cada uno de los fondos comunes de constantes de los ficheros 200, 220 y 230 de clase incluye una entrada "RefCampo Barra" que se refiere al campo Barra 238 en el fichero 230 de clase.
En consecuencia, cuando cada uno de los precedentes ficheros de clase se usa en un programa (p. ej., una miniaplicación o aplicación de Java) , tres entradas redundantes del fondo común de constantes, referidas al campo Barra 238, se cargan en la memoria (es decir, las entradas RefCampo 240, 241 y 242) y cuatro entradas redundantes del fondo común de constantes, referidas al método Pepe 236, se cargan en la memoria (es decir, las entradas RefMétodo 203, 213, 223, 233) . Considerando el hecho de que un programa puede utilizar veintenas de ficheros de clase y que cada fichero de clase puede contener cientos, o incluso miles, de entradas del fondo común de constantes, una significativa cantidad de memoria puede ser consumida por información redundante.
En consecuencia, lo que se necesita es un sistema y procedimiento para reducir los requisitos de memoria para programas orientados a objetos.
Resumen Un procedimiento implementado en un ordenador para combinar una pluralidad de ficheros de clase en un lote unificado de ficheros de clase que incluye los métodos y campos de los ficheros de clase originales. El procedimiento incluye:
copiar los métodos de los ficheros de clase originales en el lote unificado de ficheros de clase, generando por ello una entrada de método global dentro del lote unificado de ficheros de clase para cada método dentro de la pluralidad de ficheros de clase;
copiar los campos de los ficheros de clase originales en el lote unificado de ficheros de clase, generando por ello una entrada de campo global dentro del lote unificado de ficheros de clase para cada campo dentro de la pluralidad de ficheros de clase; y convertir las entradas locales del fondo común de constantes, de los fondos comunes locales de constantes de cada uno entre la pluralidad de ficheros de clase que hacen referencia a métodos y campos de cada fichero de clase, en entradas globales del fondo común de constantes dentro del lote unificado de ficheros de clase, en donde la conversión comprende eliminar entradas redundantes locales del fondo común de constantes y reemplazar las referencias, que apuntan desde las entradas... [Seguir leyendo]
Reivindicaciones:
1. Un procedimiento implementado en un ordenador para combinar una pluralidad de ficheros (200, 230) de clase en un lote unificado (1200) de ficheros de clase que incluye los métodos (204, 205, 206, 234, 235, 236) y los campos (207, 208, 237, 238) de los ficheros (200, 230) de clase originales, comprendiendo el procedimiento:
copiar los métodos (204, 205, 206, 235, 236) de los ficheros (200, 230) de clase originales al lote unificado (1200) de ficheros de clase, generando por ello una entrada (1208, 1209, 1236) de método global dentro del lote unificado (1200) de ficheros de clase para cada método (204, 205, 206, 234, 235, 236) dentro de la pluralidad de ficheros (200, 230) de clase;
copiar los campos (207, 208, 237, 238) de los ficheros (200, 230) de clase originales al lote unificado (1200) de ficheros de clase, generando por ello una entrada (1210, 1238) de campo global dentro del lote unificado (1200) de ficheros de clase para cada campo (207, 208, 237, 238) dentro de la pluralidad de ficheros (200, 230) de clase;
convertir las entradas (203, 242, 233, 241) del fondo común de constantes locales de los fondos comunes (202, 232) de constantes locales de cada uno entre la pluralidad de ficheros (200, 230) de clase que hacen referencia a los métodos (204, 205, 206; 234, 235, 236) y los campos (207, 208, 237, 238) de cada fichero (200, 230) de clase, en las entradas (1203, 1204) del fondo común de constantes globales dentro del lote unificado (1200) de ficheros de clase, en donde la conversión comprende eliminar las entradas (203, 242, 233, 241) redundantes del fondo común de constantes locales, caracterizado porque la conversión comprende adicionalmente reemplazar las referencias que apuntan desde las entradas (263, 242, 233, 241) del fondo común de constantes locales a los métodos (236) y campos (237) por valores de desplazamiento proporcionados en ranuras, a las que se asignan números de ranura en base a desplazamientos desde el extremo superior de las entradas (1203, 1204) del fondo común de constantes globales, apuntando los valores de desplazamiento desde las ranuras a las entradas (1208, 1209, 1236) de métodos globales y a las entradas (1210, 1238) de campos, respectivamente, dentro del lote unificado (1200) de ficheros de clase.
2. El procedimiento según la reivindicación 1, en el cual la combinación comprende adicionalmente convertir las entradas (203, 242, 233, 241) del fondo común de constantes locales de longitud variable, de cada uno de los ficheros (200, 230) de clase con entradas del fondo común de constantes de longitud fija dentro del lote unificado (1200) de ficheros de clase.
3. El procedimiento según la reivindicación 1, en el cual la combinación comprende adicionalmente:
para cada entrada (203, 242, 233, 241) del fondo común de constantes locales, determinar si ya existe una correspondiente entrada (1203, 1204) del fondo común de constantes globales; y si ya existe una correspondiente entrada (1203, 1204) del fondo común de constante globales, entonces usar la entrada existente (1203, 1204) del fondo común de constantes globales en lugar de la entrada (203, 242, 233, 241) del fondo común de constantes locales; y si no existe la entrada (1203, 1204) del fondo común de constantes globales, entonces generar una nueva entrada (1203, 1204) del fondo común de constantes globales a partir de la entrada (203, 242, 233, 241) del fondo común de constantes locales.
4. El procedimiento según la reivindicación 1, en el cual cada entrada (1208, 1209, 1236) de método global comprende un objeto de Información de Método, y en el cual la generación del objeto de Información de Método comprende copiar directamente datos de un primer tipo de cada método de cada fichero (200, 230) de clase y modificar datos de un segundo tipo antes de copiar los datos de cada método del fichero (200, 230) de clase.
5. El procedimiento según la reivindicación 1, en el cual los datos del primer tipo incluyen una referencia al nombre del método mediante el fondo común de constantes; una referencia a una firma de tipo mediante el fondo común de constante; indicadores de acceso o atributo; datos de máximas pilas; datos de máximos elementos locales; un total de argumentos y / o un total de retorno.
6. El procedimiento según la reivindicación 4, en el cual los datos del segundo tipo incluyen códigos de octeto de Método, tablas de excepciones y / o números de ranura de tabla virtual asociados al método.
7. El procedimiento según la reivindicación 1, en el cual cada entrada (1210, 1238) de campo global comprende un objeto de Información de Campo, y en el cual la generación del objeto de Información de Campo comprende copiar directamente datos de un primer tipo de cada campo de cada fichero (200, 230) de clase y modificar datos de un segundo tipo antes de copiar los datos de cada campo del fichero (200, 230) de clase.
8. El procedimiento según la reivindicación 5, en el cual los datos del primer tipo incluyen una referencia al nombre del
campo mediante un fondo común de constantes; una referencia a la firma del tipo de campo mediante el fondo común de constantes; e / o indicadores cualesquiera de acceso / atributo.
9. El procedimiento según la reivindicación 1, que comprende adicionalmente:
generar un objeto de Información de Clase dentro del lote unificado (1200) de ficheros de clase para cada cabecera (201, 231) de cada fichero (200, 230) de clase, conteniendo cada objeto de Información de Clase datos de cabecera de cada cabecera (201, 231) de fichero de clase.
10. El procedimiento según la reivindicación 7, que comprende adicionalmente:
generar un puntero relativo para cada entrada (1208, 1209, 1236) de método global y cada entrada (1210, 1238) de campo global, apuntando el puntero relativo a un objeto de Información de Clase con el que está asociada la entrada (1208, 1209, 1236) de método global o la entrada (1210, 1238) de campo global.
11. El procedimiento según la reivindicación 1, que comprende adicionalmente:
generar un puntero relativo para cada entrada (1208, 1209, 1236) de método global y cada entrada (1210, 1238) de campo global, apuntando el puntero relativo a una entrada (1203, 1204) del fondo común de constantes globales con la cual está asociada la entrada (1208, 1209, 1236) de método global o la entrada (1210, 1238) de campo global.
12. El procedimiento según la reivindicación 1, en el cual, para redisponer los elementos de los dos o más ficheros (200, 230) de clase, un módulo (920) de conversión de contenido combina entradas redundantes del fondo común de constantes de dichos dos o más ficheros (200, 230) de clase, para formar una entrada (1203, 1204) global del fondo común de constantes en un fondo común (1202) de constantes compartidas dentro de dicho lote unificado (1200) de ficheros de clase.
13. El procedimiento según la reivindicación 12, en el cual la combinación comprende adicionalmente:
reescribir dichas entradas (1203, 1204) del fondo común de constantes globales para apuntar a los elementos contenidos dentro de dicho lote unificado (1200) de ficheros de clase, correspondiendo dichos elementos a elementos contenidos en dichos uno o más ficheros (200, 230) de clase, y previamente identificados por dichas una o más entradas redundantes del fondo común de constantes.
14. El procedimiento según la reivindicación 13, en el cual una de dichas entradas (1203, 1204) del fondo común de constantes globales es una entrada de RefMétodo y dicho elemento identificado por la entrada del fondo común de constantes es un método copiado a dicho lote unificado (1200) de ficheros de clase desde uno o más ficheros (200, 230) de clase.
15. El procedimiento según la reivindicación 14, en el cual, para redisponer los elementos de los dos o más ficheros (200, 230) de clase, el módulo (920) de conversión de contenido convierte referencias numéricas en entradas locales dentro de un código de octeto en dicho método, o punteros a entradas (1203, 1204) del fondo común de constantes globales.
16. El procedimiento según la reivindicación 15, en el cual, para redisponer los elementos de los dos o más ficheros (200, 230) de clase, el módulo (920) de conversión de contenido convierte una tabla de excepciones asociada a dicho método en referencias a objetos de código operativo de Java ("objetos jop") , en lugar de referencias numéricas a direcciones de códigos de octeto.
17. El procedimiento según la reivindicación 13, en el cual una de dichas entradas (1203, 1204) del fondo común de constantes globales es una entrada RefCampo.
18. El procedimiento según la reivindicación 1, en el cual, para redisponer los elementos de los dos o más ficheros (200, 230) de clase, un módulo (920) de conversión de contenido valida dichos dos o más ficheros (200, 230) de clase antes de asociar dichos elementos para formar dicho lote unificado (1200) de ficheros de clase.
19. El procedimiento según la reivindicación 18, en el cual, para redisponer los elementos para los dos o más ficheros (200, 230) de clase, el módulo (920) de conversión de contenido convierte los ficheros (200, 230) de clase en un gráfico de objetos de código operativo de Java ("objetos jop") para rastrear a dónde apuntaban las operaciones antes de la modificación de dichos ficheros (200, 230) de clase; ajusta referencias del fondo común de constantes, de números locales a globales, en base a dicho gráfico; y combina los ficheros (200, 230) de clase en el lote unificado (1200) de ficheros de clase.
20. El procedimiento según la reivindicación 1, en el cual un servidor portal (110) extrae automáticamente los ficheros (200, 230) de clase de una sede de Internet, a nombre del dispositivo de procesamiento de datos, en respuesta a solicitudes por los ficheros (200, 230) de clase provenientes del dispositivo de procesamiento de datos.
21. El procedimiento según la reivindicación 1, en el cual un servidor portal (110) extrae manualmente ficheros (200, 230) de clase de una sede de Internet, en nombre de un dispositivo de procesamiento de datos, en respuesta a solicitudes por parte de una organización que gestiona el servidor portal (110) .
22. Un programa de ordenador que contiene una secuencia de código que, cuando es ejecutada por una máquina, hace que dicha máquina lleve a cabo el procedimiento de cualquiera de las reivindicaciones 1 a 21.
Patentes similares o relacionadas:
Procedimiento de gestión de módulos de software integrados para una computadora electrónica de un dispositivo de conmutación eléctrica, del 17 de Junio de 2020, de SCHNEIDER ELECTRIC INDUSTRIES SAS: Procedimiento de gestión de módulos de software integrados para una computadora electrónica integrada de un dispositivo eléctrico de conmutación de […]
Comunicación de datos de recompensa entre aplicaciones, del 10 de Junio de 2020, de Outfit7 Limited: Método de comunicación de datos de recompensa desde una primera aplicación que se ejecuta en un dispositivo de procesamiento de datos hasta una segunda aplicación […]
Compartición de objetos de primera clase a través de múltiples lenguajes de programación interpretados, del 29 de Abril de 2020, de THE BOEING COMPANY: Un método para compartir construcciones de lenguaje entre diferentes lenguajes de secuencias de comandos basados en Java, en el que las construcciones del […]
Sistema de control de acceso al servicio y procedimiento que usa un agente del navegador integrado, del 15 de Abril de 2020, de SAMSUNG ELECTRONICS CO., LTD.: Un sistema de control de acceso al servicio que usa un agente del navegador integrado, comprendiendo el sistema: un servidor que proporciona […]
Menú y configuración aumentada de búsqueda para aplicaciones informáticas, del 18 de Marzo de 2020, de Microsoft Technology Licensing, LLC: Un sistema, que comprende: un componente de referencia configurado para acceder a un conjunto de metadatos almacenados en un archivo […]
Sistemas y métodos para sincronización de datos y gestión de conmutación por error, del 19 de Febrero de 2020, de IEX Group, Inc: Un método para ejecutar una aplicación de forma expeditiva en al menos un procesador informático, comprendiendo el método: ejecutar simultáneamente una pluralidad de instancias […]
Aparatos y procedimientos de ampliación de servicios de aplicaciones, del 12 de Febrero de 2020, de QUALCOMM INCORPORATED: Un procedimiento para ampliar servicios de un dispositivo de usuario, que comprende: identificar una primera aplicación residente en el dispositivo […]
Método para transmitir y verificar la validez de los datos de configuración en un sistema electrónico, sistema electrónico asociado y producto de programa informático, del 29 de Enero de 2020, de ALSTOM Transport Technologies: Método para transmitir y verificar la validez de los datos de configuración en un sistema electrónico con almacenamiento centralizado de los […]