MX2014009761A - Generacion y guardado en memoria cache de codigo de software. - Google Patents
Generacion y guardado en memoria cache de codigo de software.Info
- Publication number
- MX2014009761A MX2014009761A MX2014009761A MX2014009761A MX2014009761A MX 2014009761 A MX2014009761 A MX 2014009761A MX 2014009761 A MX2014009761 A MX 2014009761A MX 2014009761 A MX2014009761 A MX 2014009761A MX 2014009761 A MX2014009761 A MX 2014009761A
- Authority
- MX
- Mexico
- Prior art keywords
- code
- actions
- source code
- software
- source
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Los aspectos del tema aquí descrito se refieren a generar y guardar en memoria caché código de software. En aspectos, un dispositivo objetivo puede recibir software para instalar. El software puede incluir un código de fuente que no ha sido recopilado. El dispositivo objetivo puede instalar el software e indicar que el código de fuente del paquete se va a recopilar en código intermedio o ejecutable que es almacenado de manera persistente. Si el dispositivo objetivo recibe una solicitud para ejecutar el software antes que se recopile, el dispositivo objetivo puede recopilar y ejecutar el software sin retraso. Si el dispositivo objetivo recibe una solicitud para ejecutar el software después de que se recopiló, el dispositivo objetivo puede obtener y ejecutar el código recopilado. El comportamiento anterior también puede ser aplicado al código de guión obtenido de un servidor remoto al dispositivo objetivo.
Description
GENERACION Y GUARDADO EN MEMORIA CACHE DE CODIGO DE
SOFTWARE ANTECEDENTES
Pueden encontrarse lenguajes de guión en varios ambientes. Por ejemplo, muchos navegadores de Internet tienen un lenguaje de guión que permite a una página web personalizar su comportamiento basándose en entrada de usuario u otros datos. También pueden encontrarse lenguajes de guión e n ambientes fuera de navegadores de Internet. Un problema con lenguajes de guión es que pueden ser lentos, especialmente en el arranque y posiblemente con cada ejecución, comparados con programas convencionales que han sido recopilados.
El tema aquí reclamado no está limitado a modalidades que resuelven cualquiera de las ventajas o que operan únicamente en ambientes tales como aquellos descritos anteriormente. Más bien, se proporciona únicamente este antecedente para ilustrar un área de tecnología ilustrativa en donde pueden practicarse algunas modalidades aquí descritas.
BREVE DESCRIPCION DE LA INVENCION
Brevemente, los aspectos del tema aquí descrito se refieren a generar y guardar en memoria caché código de software. En
aspectos, un dispositivo objetivo puede recibir software para instalar. El software p uede incluir código de fuente que no ha sido recopilado. El dispositivo objetivo puede instalar el software e indicar el código de fuente del paquete que se va a recopilar en código intermedio o ejecutable que es almacenado persistentemente. Si un dispositivo objetivo recibe una solicitud para ejecutar el software antes de que éste se recopile, el dispositivo objetivo puede recopilar y ejecutar el software sin retraso. Si el dispositivo objetivo recibe una solicitud para ejecutar el software después que se recopiló, el dispositivo objetivo puede obtener y ejecutar el código recopilado. El comportamiento anterior también puede ser aplicado a código de guión obtenido de un servidor remoto al dispositivo objetivo.
Esta Breve Descripción se proporciona para identificar brevemente algunos aspectos del tema que se describe además a continuación en la Descripción Detallada. Esta Breve Descripción no pretende identificar características clave o esenciales del tema reclamado, ni pretende utilizarse para limitar el alcance del tema reclamado.
La frase "tema aquí descrito" se refiere al tema descrito en la
Descripción Detallada a menos que el contexto claramente lo indique de otra forma. El término "aspectos" debe leerse como "al menos un aspecto". Identificar aspectos del tema descrito en la Descripción Detallada no pretende identificar características clave o esenciales del tema reclamado.
Los aspectos descritos anteriormente y otros aspectos del tema aquí descrito se ¡lustran a manera de ejemplo y no están limitados en las figuras anexas en donde números de referencia similares indican elementos similares y en donde:
BREVE DESCRIPCION DE LOS DIBUJOS
La Figura 1 es un diagrama de bloques que representa un ambiente de cómputo y de propósito general ilustrativo en el cual pueden incorporarse aspectos del tema aquí descrito;
La Figura 2 es un diagrama de bloques que representa una disposición ilustrativa de componentes de un sistema en el cual pueden operar aspectos del tema aquí descrito;
La Figura 3 muestra una estructura de datos ilustrativa que puede utilizarse de acuerdo con aspectos del tema aquí descrito;
La Figura 4 es un diagrama de bloques que representa una disposición ilustrativa de componentes de un ambiente en el cual pueden operar aspectos del tema aquí descrito; y
Las Figuras 5-6 son diagramas de flujo que representan generalmente acciones ilustrativas que pueden ocurrir de acuerdo con aspectos del tema aquí descrito.
DESCRIPCION DETALLADA
DEFINICIONES
Como se utiliza aquí, el término "incluye" y sus variantes se
van a leer como términos de extremo abierto que significan "incluye, pero no está limitado a". El término "o" se va a leer como "y/o" a menos que el contexto claramente lo indique de otra forma. El término "basado en" se va a leer como "basado al menos en parte en". Los términos "una modalidad" y "una modalidad" s e van a leer como "al menos una modalidad". El término "otra modalidad" se va a leer como "al menos otra modalidad".
Como se utiliza aquí, los términos tales como "un", "uno", y "en" son inclusivos de uno o más del artículo o acción indicado. En particular, en las reivindicaciones una referencia a un artículo generalmente significa que está presente al menos uno de tales artículos y una referencia a una acción significa que se realiza al menos un caso de una acción.
Algunas veces aquí los términos "primero", "segundo", "tercero" y así sucesivamente pueden utilizarse. Sin contexto adicional, el uso de estos términos en las reivindicaciones no pretende implicar un orden sino más bien utilizarse para propósitos de identificación. Por ejemplo, las frases "primera versión" y "segunda versión" no necesariamente significan que la primera versión es la primera versión o se creó antes de la segunda versión o incluso que la primera versión es solicitada u operada antes de la segunda versión. Más bien, se utilizan estas frases para identificar diferentes versiones.
Los encabezados son para conveniencia únicamente; puede encontrarse información sobre un tema dado fuera de la sección cuyo
encabezado indica ese tema.
Otras definiciones, explícitas o implícitas, pueden incluirse a continuación.
AMBIENTE OPERATIVO ILUSTRATIVO
La Figura 1 ilustra un ejemplo de un ambiente de sistema de cómputo 100 adecuado en el cual pueden implementarse aspectos del tema aquí descrito. El ambiente de sistema de cómputo 100 es únicamente un ejemplo de un ambiente de cómputo adecuado y no pretende sugerir ninguna limitación al alcance de uso o funcionalidad de aspectos del tema aquí descrito. El ambiente de cómputo 100 tampoco debe interpretarse como teniendo cualquier dependencia o requisito que se refiera a cualquiera o combinación de componentes ilustrados en elemento operativo 100 ilustrativo.
Los aspectos del tema aquí descritos son operativos con numerosos otros ambientes o configuraciones de sistema de cómputo de propósito general o propósito especial. Ejemplos de sistemas, ambientes, o configuraciones de cómputo bien conocidos que pueden ser adecuados para usarse con aspectos del tema aquí descrito comprenden computadas personales, computadoras de servidor, dispositivos portátiles o laptop, sistemas de multiprocesador, sistemas basados en microcontrolador, cajas de tv por cable, electrónica de consumidor programable, PC de red, minicomputadoras, macrocomputadoras, asistentes digitales personales (PDA), dispositivos de juego, impresoras, aparatos
incluyendo caja de tv por cable, centro de medios, u otros aparatos, dispositivos de cómputo incorporados o fijados a un automóvil, otros dispositivos móviles, ambientes de cómputo distribuidos que incluyen cualquiera de los sistemas o dispositivos anteriores, y similares.
Los aspectos del tema aquí descrito pueden describirse en el contexto general de instrucciones ejecutables por computadora, tales como módulos de programa, que se ejecutan mediante una computadora. Generalmente, los módulos de programa incluyen rutinas, programas, objetos, componentes, estructuras de datos y así sucesivamente, que realizan tareas particulares o implementan tipos de datos abstractos particulares. Los aspectos del tema aquí descrito también pueden practicarse en ambientes de cómputo distribuidos en donde las tareas se realizan mediante dispositivos de procesamiento remoto que están enlazados a través de una red de comunicaciones. En un ambiente de cómputo distribuido, pueden localizarse módulos de programa tanto en medios de almacenamiento de computadora locales como remotos incluyendo dispositivos de almacenamiento de memoria.
Con referencia a la Figura 1, un sistema ilustrativo para implementar aspectos del tema aquí descrito incluye un dispositivo de cómputo de propósito general en la forma de una computadora 110. Una computadora puede incluir cualquier dispositivo electrónico que es capaz de ejecutar una instrucción. Los componentes de la computadora 110 pueden incluir una unidad de procesamiento 120, una memoria de sistema 130, y un conductor común de sistema 121
que acopla varios componentes de sistema incluyendo la memoria de sistema a la unidad de procesamiento 120. El conductor común de sistema 121 puede ser cualquiera de varios tipos de estructuras de conductor común incluyendo un conductor común de memoria o controlador de memoria, un conductor común periférico, y un conductor común local que utiliza cualquiera de una variedad de arquitecturas de conductor común. A manera de ejemplo, y no de limitación, tales arquitecturas incluyen un conductor común de Arquitectura de Estándar de Industria (ISA), conductor común de Arquitectura de Micro Canal (MCA), conductor común de ISA Mejorada (EISA), conductor común local de Asociación de Estándares de Electrónica de Video (VESA), conductor común de Interconexión de Componente Periférico (PCI) también conocido como conductor común de Mezzanine, conductor común Extendido de Interconexión de Componente Periférico (PCI-X), Puerto de Gráficos Avanzados (AGP), y PCI Express (PCIe).
La unidad de procesamiento 120 puede conectarse a un dispositivo de seguridad de hardware 122. El dispositivo de seguridad 122 puede almacenar y ser capaz de generar claves criptográficas que pueden utilizarse para asegurar varios aspectos de la computadora 110. En una modalidad, el dispositivo de seguridad 122 puede comprender un chip de Módulo de Plataforma Confiado (TPM), Dispositivo de Seguridad de TPM, o similares.
La computadora 110 típicamente incluye una variedad de medios legibles por computadora. Los medios legibles por
computadora pueden ser cualquier medio disponible que puede ser accedido por la computadora 110 e incluye tanto medios volátiles como no volátiles, y medios removibles y no removibles. A manera de ejemplo, y no de limitación, los medios legibles por computadora pueden comprender medios de almacenamiento por computadora y medios de comunicación.
El medio de almacenamiento por computadora incluye tanto medios volátiles como no volátiles, removibles y no removibles implementados en cualquier método o tecnología para almacenamiento de información tal como instrucciones legibles por computadora, estructuras de datos, módulos de programa, u otros datos. Los medios de almacenamiento por computadora incluyen RAM, ROM, EEPROM, almacenamiento de estado sólido, memoria flash u otra tecnología de memoria, CD-ROM, discos versátiles digitales (DVD) u otro almacenamiento de disco óptico, casetes magnéticos, cinta magnética, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que puede utilizarse para almacenar la información deseada y que puede accederse mediante la computadora 110.
El medio de comunicación típicamente representa instrucciones ejecutables por computadora, estructuras de datos, módulos de programa, u otros datos en una señal de datos modulada tal como una onda portadora u otro mecanismo de transporte e incluye cualquier medio de entrega de información. El término "señal de datos modulada" significa una señal que tiene una o más de sus
características establecidas o cambiadas de tal forma para codificar información en la señal. A manera de ejemplo, y no de limitación, el medio de comunicación incluye medios por cable tal como red por cable o conexión por cable directa, medios inalámbricos tales como medios acústicos, de RF, infrarrojos y otros inalámbricos. Combinaciones de cualquiera de los anteriores también deben incluirse dentro del alcance de medios legibles por computadora.
La memoria de sistema 130 incluye medios de almacenamiento por computadora en la forma de memoria volátil y/o no volátil tal como memoria de sólo lectura (ROM) 131 y memoria de acceso aleatorio (RAM) 132. Un sistema entrada/salida básico 133 (BIOS), que contiene las rutinas básicas que ayudan a transferir información entre elementos dentro de la computadora 110, tal como durante el arranque, se almacena típicamente en la ROM 131. La RAM 132 típicamente contiene datos y/o módulos de programa que son inmediatamente accesibles a y/o están siendo operados actualmente mediante la unidad de procesamiento 120. A manera de ejemplo, y no de limitación, la Figura 1 ilustra el sistema operativo 134, programas de aplicación 135, otros módulos de programa 136, y datos de programa 137.
La computadora 110 también puede incluir otros medios de almacenamiento por computadora removibles/no removibles, volátiles/no v olátiles. A manera de ejemplo únicamente, la Figura 1 ilustra una unidad de disco duro 141 que lee de o escribe a medios magnéticos no removibles, no volátiles, una unidad de disco
magnético 151 que lee de o escribe a un disco magnético removible, no volátil 152, y una unidad de disco óptico 155 que lee de o escribe a un disco óptico removible, no volátil 156 tal como un CD-ROM u otro medio óptico. Otros medios de almacenamiento por computadora removibles/no removibles, volátiles/no volátiles que pueden utilizarse en el ambiente operativo ilustrativo incluyen casetes de cinta magnética, tarjetas de memoria flash y otros dispositivos de almacenamiento de estado sólido, discos versátiles digitales, otros discos ópticos, cinta de video digital, RAM de estado sólido, ROM de estado sólido, y similares. La unidad de disco duro 141 puede conectarse al conductor común de sistema 121 a través de la interfase 140, y la unidad de disco magnético 151 y unidad de disco óptico 155 pueden conectarse al conductor común de sistema 121 mediante una interfase para memoria no volátil removible tal como la interfase 150.
Las unidades y sus medios de almacenamiento por computadora asociados, discutidos anteriormente e ilustrados en la Figura 1, proporcionan almacenamiento de instrucciones legibles por computadora, estructuras de datos, módulos de programa, y otros datos para la computadora 110. En la Figura 1, por ejemplo, la unidad de disco duro 141 es ilustrada como almacenando el sistema operativo 144, programas de aplicación 145, otros módulos de programa 146, y datos de programa 147. Observar que estos componentes pueden ser iguales o diferentes al sistema operativo 134, programas de aplicación 135, otros módulos de programa 136, y
datos de programa 137. El sistema operativo 144, programas de aplicación 145, otros módulos de programa 146, y datos de programa 147 se proporcionan aquí con números diferentes para ilustrar que, en un mínimo, son copias diferentes.
Un usuario puede ingresar comandos e información en la computadora 110 a través de dispositivos de entrada tal como un teclado 162 y dispositivo de señalamiento 161, comúnmente indicado como un ratón, seguibola, o panel táctil. Otros dispositivos de entrada (no mostrados) pueden incluir un micrófono, palanca de mandos, almohadilla de juegos, antena parabólica, escáner, una pantalla sensible al tacto, una tableta para escribir con un dispositivo de captura de gesto, o similares. Estos y otros dispositivos de entrada frecuentemente están conectados a la unidad de procesamiento 120 a través de una interfase de entrada de usuario 160 que está acoplada al conductor común de sistema, pero puede estar conectada mediante otra interfase y estructuras de conductor común, tal como un puerto paralelo, puerto de juegos o conductor común en serie universal (USB).
Un monitor 191 u otro tipo dispositivo de presentación también está conectado al conductor común de sistema 121 a través de la interfase, tal como una interfase de video 190. Además del monitor, las computadoras también pueden incluir otros dispositivos de salida periféricos tal como bocinas 197 e impresoras 196, que pueden conectarse a través de la interfase periférica de salida 195.
La computadora 110 puede operar en un ambiente en red
utilizando conexiones lógicas a una o más computadoras remotas, tal como una computadora remota 180. La computadora remota 180 puede ser una computadora personal, un servidor, un enrutador, una PC de red, un dispositivo par u otro nodo de red común, y típicamente incluye muchos o todos los elementos descritos anteriormente con relación a la computadora 110, aunque solamente se ha ilustrado un dispositivo de almacenamiento de memoria 181 en la Figura 1. Las conexiones lógicas ilustradas en la Figura 1 incluyen una red de área local (LAN) 171 y una red de área ancha (WAN) 173, pero también pueden incluir otras redes. Tales ambientes en red comúnmente están ubicados en oficinas, redes de computadora extendidas en empresa, intranets, e Internet.
Cuando se utiliza en un ambiente en red LAN, la computadora 110 está conectada en la LAN 171 a través de una interfase de red o adaptador 170. Cuando se utiliza en un ambiente en red WAN, la computadora 110 puede incluir un módem 172 u otros medios para establecer comunicaciones sobre la WAN 1 73, tal como el Internet. El módem 172, que puede ser interno o externo, puede conectarse al conductor común de sistema 121 a través de la interfase de entrada de usuario 160 u otro mecanismo apropiado. En un ambiente en red, los módulos de programa ilustrados relativos a la computadora 110, o porciones de la misma, pueden almacenarse en el dispositivo de almacenamiento de memoria remoto. A manera de ejemplo, y no de limitación, la Figura 1 ilustra programas de aplicación remotos 185 como residentes en el dispositivo de memoria 181. Se apreciará que
las conexiones de red mostradas son ilustrativas y pueden utilizarse otros medios para establecer un enlace de comunicaciones entre las computadoras.
Generación y Guardado en Memoria Caché de Código
Como se mencionó previamente, comparado con un programa convencional que ha sido recopilado, un lenguaje de guión puede parecer más lento para un usuario, especialmente en arranque inicial.
La Figura 2 es un diagrama de bloques que representa una disposición ilustrativa de componentes de un sistema en el cual pueden operar aspectos del tema aquí descrito. Los componentes ilustrados en la Figura 2 son ilustrativos y no pretenden ser todos inclusivos de componentes que pueden ser necesarios o incluidos. En otras modalidades, los componentes y/o funciones descritos en conjunto con la Figura 2 pueden incluirse en otros componentes (mostrados o no mostrados) o colocados en subcomponentes sin apartarse del espíritu o alcance de aspectos del tema aquí descrito. En algunas modalidades, los componentes y/o funciones descritos en conjunto con la Figura 2 pueden distribuirse a través de múltiples dispositivos.
Cambiando a la Figura 2, el sistema 205 puede incluir componentes de guión 210, un almacenamiento 220, un mecanismo de comunicaciones 225, y otros componentes (no mostrados). El sistema 205 puede comprender uno o más dispositivos de cómputo.
Tales dispositivos pueden incluir, por ejemplo, computadoras personales, computadoras de servidor, dispositivos móviles o laptop, sistemas de multiprocesador, sistemas basados en microcontrolador, caja de tv por cable, electrónica de consumidor programable, PC de red, minicomputadoras, macrocomputadoras, teléfonos celulares, asistentes digitales personales (PDA), dispositivos de juego, impresoras, aparatos incluyendo caja de tv por cable, centro de medios, y otros aparatos, dispositivos de cómputo incorporados o fijados a un automóvil, otros dispositivos móviles, ambientes de cómputo distribuidos que incluyen cualquiera de los sistemas o dispositivos anteriores, y similares.
En donde el sistema 205 comprende un dispositivo individual, un dispositivo ilustrativo que puede estar configurado para actuar como el sistema 205 comprende la computadora 110 de la Figura 1. En donde el sistema 205 comprende múltiples dispositivos, cada uno de los múltiples dispositivos puede comprender una computadora similar o distintamente configurada 110 de la Figura 1.
Los componentes de guión 210 pueden incluir un instalador 215, un generador de código 216, un administrador de memoria caché 217, un administrador de ejecución 218, y otros componentes (no mostrados). Como se utiliza aquí, el término componentes se va a leer para incluir todo o una porción de un dispositivo, una colección de uno o más módulos de software o porciones de los mismos, alguna combinación de uno o más módulos de software o porciones de los mismos y uno o más dispositivos y porciones de los
mismos, y similares.
El mecanismo de comunicaciones 225 permite que el sistema 205 se comunique con otras entidades. Por ejemplo, el mecanismo de comunicaciones 225 puede permitir que el sistema 205 se comunique con otras entidades para obtener paquetes y/o código de guión que puede ser guardado en memoria caché en el sistema 205. El mecanismo de comunicaciones 255 puede ser una interfase de red o adaptador 170, módem 172, o cualquier otro mecanismo para establecer comunicaciones como se describe en conjunto con la Figura 1.
El almacenamiento 220 es cualquier medio de almacenamiento capaz de proporcionar acceso a datos. El acceso como se utiliza aquí puede incluir datos de lectura, datos de escritura, datos de eliminación, datos de actualización, una combinación incluyendo dos o más de los anteriores, y similares. El almacenamiento puede incluir memoria volátil (por ejemplo, RAM, una memoria caché en memoria, o similares) y memoria no volátil (por ejemplo, un almacenamiento persistente).
El término dato se va a leer ampliamente para incluir cualquier cosa que pueda ser representada por uno o más elementos de almacenamiento por computadora. Lógicamente, los datos pueden ser representados como una serie de 1's y 0's e n memoria volátil y n o volátil. En computadoras que tienen un medio de almacenamiento no binario, los datos pueden representarse de acuerdo con las capacidades del medio de almacenamiento. Pueden organizarse
datos en diferentes tipos de estructuras de datos incluyendo tipos de datos simples tal como números, letras, y similares, tipos de datos jerárquicos, enlazados, u otros relacionados, estructuras de datos que incluyen múltiples estructuras de datos diferentes o tipos de datos simples, y similares. Algunos ejemplos de datos incluyen información, código de programa, estado de programa, datos de programa, otros datos, y similares.
El almacenamiento 220 puede comprender almacenamiento de disco duro, otro almacenamiento no volátil, memoria volátil tal como RAM, otro almacenamiento, alguna combinación de los anteriores, y similares y puede distribuirse a través de múltiples dispositivos. El almacenamiento 220 puede ser externo, interno, o incluir componentes que son tanto internos como externos para el sistema 205.
Para disminuir tiempos de arranque y de ejecución, reducir espacio de memoria, para permitir protección contra falsificación, y por otras razones, el generador de código 216 puede recopilar código de fuente en código de byte o algún otro código intermedio o código ejecutable. El código incluye instrucciones que indican acciones que va a tomar una computadora. El código también puede incluir datos, recursos, variables, definiciones, relaciones, asociaciones, y similares que incluyen información diferente a acciones que va a tomar la computadora. Por ejemplo, el código puede incluir imágenes, páginas web, HTML, XML, otro contenido, y similares. En una modalidad, el código puede incluirse en un
proyecto de software. El software puede incluir o hacer referencia a una o más porciones de código, datos, recursos, variables, definiciones, relaciones, asociaciones, y similares que incluyen información diferente a acciones que va a tomar la computadora, información de configuración, y similares.
Las acciones indicadas por código puede ser codificadas en un lenguaje de código de fuente que incluye lenguajes de guión y sin guión, lenguaje intermedio, lenguaje de ensamble, código binario, otro lenguaje, alguna combinación de los anteriores, y similares.
El instalador 215 puede instalar paquetes en el sistema 205. Un paquete puede incluir una o más aplicaciones de software. El instalador 215 puede incluir un controlador de extensión de despliegue que permite que se realicen acciones personalizadas basándose en el paquete instalado, la máquina objetivo en la cual se instala el paquete, si el paquete incluye código de guión, u otros criterios.
En una implementación, cuando el instalador 215 encuentra un paquete con código de guión ahí, el instalador 215 puede agregar elementos correspondientes a los componentes del paquete a una fila u otra estructura de datos para pre-recopilar el código del paquete.
El generador de código 216 puede tomar elementos de la estructura de datos y puede generar código de byte, código ejecutable, o algún otro código del código correspondiente a cada uno de los elementos. Un elemento puede incluir un archivo que
incluye guión, una porción de un archivo (por ejemplo, guión incorporado dentro de una página de HTML), código recopilado, o similares. Para simplicidad, el término código de byte frecuentemente se utiliza aquí para denotar el código que genera el generador de código 216. Sin embargo, se entenderá que el generador de código 216 no está limitado a generar y guardar en memoria caché código de byte y puede, en otras implementaciones, generar y guardar en memoria caché otros tipos de código incluyendo esos tipos de código que han sido mencionados previamente.
En una implementación, el generador de código 216 puede esperar hasta que se ha instalado completamente un paquete y elementos correspondientes al paquete colocado en la estructura de datos para recopilación antes de generar código de byte. En otra implementación, el generador de código 216 puede empezar a generar código de byte tan pronto como está disponible un elemento en la estructura de datos o tan pronto como se instala un módulo de código de fuente. En esta otra implementación, en un ejemplo, el generador de código 216 puede disponer del código de byte generado si la instalación de paquete falla. En otro ejemplo, el generador de código 216 puede reiniciar la generación desde el punto en el que la dejó (por ejemplo, después que se restaura energía y se reinicia la máquina). En una implementación, el generador de código 216 puede implementarse como un procedimiento para realizar cuando el sistema 205 está inactivo (por ejemplo, sin instalar paquetes o realizar otras tareas que consuman
el ancho de banda de procesamiento del sistema 205), cuando el sistema 205 está operando en energía de línea (por ejemplo, en lugar de energía de batería), en tiempos definidos o configurables del día, o similares.
El término "procedimiento" y sus variantes como se utilizan aquí pueden incluir uno o más procedimientos, secuencias, componentes, bibliotecas, objetos tradicionales que realizan tareas, y similares. Un procedimiento puede ser implementado en hardware, software o una combinación de hardware y software. En una modalidad, un procedimiento es cualquier mecanismo, sin embargo denominado, capaz de utilizar o realizar una acción. Un procedimiento puede implementarse en hardware, software, o una combinación de hardware y software. En una modalidad, un procedimiento es cualquier mecánico, sin embargo denominado, capaz de o utilizado al realizar una acción. Un procedimiento puede ser distribuido a través de múltiples dispositivos o un dispositivo individual.
En una implementación, el generador de código 216 también puede utilizarse para generar código al momento (por ejemplo, a medida que se encuentra el código). Por ejemplo, si un usuario instala software y desea ejecutar el software antes que se genere el código de byte para todo el paquete que incluye el software, el generador de código 216 puede ser empleado para generar código para el software. En otras palabras, no se requiere que el usuario espere a que el generador de código 216 genere el código de byte
para todo el paquete antes que se permita que el usuario ejecute el software del paquete. Además, puede haber otras situaciones en las cuales el código de fuente para un componente ha cambiado y en donde puede emplearse el generador de código 216 para generar código de byte para el componente sobre una base acelerada.
Además, el generador de código 216 puede ser empleado a demanda para recopilar código y guardar en memoria caché código. Por ejemplo, en una aplicación de navegador de Internet, pueden descubrirse dinámicamente enlaces a nuevo código. Por ejemplo, el documento web puede incluir enlaces a otro código que se va a descargar y a ejecutar. El generador de código 216 puede ser empleado para recopilar el código indicado por estos enlaces y guardar en memoria caché el código recopilado para acelerar ejecuciones subsecuentes del código.
El generador de código 216 puede ser implementado en o utilizar una "zona protegida" para generar código. Una zona protegida es un ambiente que tiene derechos limitados con respecto a datos a los que puede acceder. En una implementación, el generador de código 216 puede ser implementado como un procedimiento con derechos restringidos. El procedimiento puede ser pasado a un control para un archivo de código de byte que el procedimiento puede leer de y escribir a y puede ser otorgado con acceso sólo de lectura ai código de fuente. Para propósitos de seguridad, el procedimiento puede no tener acceso a otros recursos diferentes a aquellos mencionados anteriormente.
En una implementación, el generador de código 216 puede ser alojado en un ambiente virtual. Un ambiente virtual es un ambiente que es simulado o emulado por una computadora. El ambiente virtual puede simular o emular una máquina física, sistema operativo, grupo de una o más interfases, porciones de los anteriores, combinaciones de los anteriores, o similares. Cuando se simula o emula una máquina, la máquina algunas veces es denominada una máquina virtual. Una máquina virtual es una máquina que, para software que se ejecuta en la máquina virtual, parece ser una máquina física. El software puede guardar archivos en un dispositivo de almacenamiento virtual tal como una unidad dura virtual, disco flexible virtual, y similares, puede leer archivos de un CD virtual, puede comunicarse a través de un adaptador de red virtual, y así sucesivamente.
Un ambiente virtual puede tener acceso restringido o nulo a datos diferentes a recursos fuera del ambiente virtual. Como tal, un ambiente virtual puede proporcionar un ambiente adecuado para recopilar código no confiado sin preocuparse sobre si el código infectará al anfitrión del ambiente virtual.
Después de escribir el código de byte a un archivo, el procedimiento puede firmar electrónicamente o de otra forma "sellar" el archivo para que se puedan detectar cualquiera de las modificaciones al archivo. El sellado del archivo puede tomar muchas formas de sistema criptográficas y/o de archivo que se entenderán por aquellos expertos en la técnica. Por ejemplo, en una
implementación, un sistema de archivo puede establecer un atributo extendido sobre un archivo con sellado. Si el archivo es modificado después de eso, puede cambiarse el atributo extendido para indicar que el archivo ya no está sellado.
Escribir el código de byte en el almacenamiento 220 algunas veces es indicado aquí como guardar en memoria caché el código de byte. El administrador de memoria caché 217 puede operar para almacenar el código de byte en el almacenamiento 220 y proporcionar acceso al código de byte a demanda. El administrador de memoria caché 217 puede asegurar que el código de byte es almacenado de manera persistente en el almacenamiento 220 de manera que está disponible el código de byte después de un reinicio del sistema 205. El administrador de memoria caché 217 también puede almacenar una copia del código de byte en memoria principal, memoria caché de alta velocidad, memoria de video, otra memoria incluyendo memoria volátil y no volátil, o similares, si se desea, para acelerar acceso al código de byte.
Además, aunque el término archivo se utiliza aquí algunas veces, se entenderá que en otras implementaciones el código de byte puede ser escrito a memoria volátil y/o no volátil, una base de datos o porción de la misma (por ejemplo, un registro), o algún otro almacenamiento sin apartarse del espíritu o alcance de aspectos del tema aquí descrito.
Si más de un usuario instala un paquete, una implementación puede guardare n memoria caché múltiples copias o solo una copia
del código de byte para el paquete en el almacenamiento 220. En donde un paquete apunta a más de una arquitectura de procesador (por ejemplo, 32 bits y 64 bits), el generador de código 216 puede generar y g uardar en memoria caché código de byte a puntado para cada arquitectura del procesador.
En algunas implementaciones, puede haber múltiples activadores para regenerar el código de byte de un paquete. Por ejemplo, si el sello de un archivo que incluye el código de byte se ha roto (por ejemplo, se detecta alteración), medios de almacenamiento se han corrompido, u otros datos indican que la memoria caché puede ser inválida o no intacta, esto puede servir como un activador de que se va a regenerar el código de byte del paquete. En este caso, si el administrador de ejecución 218 determina que se ha roto el sello, el administrador de ejecución 218 puede instruir al generador de código 216 para regenerar el código de byte para el paquete. El generador de código 216 puede regenerar el código de byte en una forma similar a cómo el generador de código 216 generó primero el código de byte (por ejemplo, al colocar elementos correspondientes a los componentes de un paquete en una fila u otra estructura de datos que indica una necesidad para generar el código de byte).
Como otro ejemplo, si el ambiente que utiliza el código de byte ha sido actualizado a una nueva versión, esto puede activar la regeneración del código de byte. Por ejemplo, si se ha actualizado un navegador de Internet u otro ambiente de ejecución a una nueva
versión que tiene una gramática o sintaxis de código de byte diferente, esto puede activar r egenerar ei código de byte adecuado para la nueva versión. En este ejemplo, el activador puede ocurrir cuando un usuario intenta ejecutar el software asociado con el código de byte. Esto puede causar que el código de byte sea regenerado con el uso y puede evitar regenerar el código de byte para todos los paquetes instalados a la vez.
Como otro ejemplo, si una tarea de mantenimiento periódico detecta que el ambiente de ejecución ha sido actualizado a una nueva versión que tiene una gramática o sintaxis de código de byte diferente, esto puede activar regenerar el código de byte adecuado para la nueva versión.
Como otro ejemplo, si se va a instalar una nueva versión del paquete, esto puede servir como un activador para regenerar el código de byte.
Como otro ejemplo, si se elimina el código de byte por alguna razón, esto puede servir como un activador para regenerar el código de byte.
En el almacenamiento 220, el código de fuente y código de byte correspondiente pueden ser almacenados, en un ejemplo, como se ilustra en la Figura 3. La Figura 3 muestra una estructura de datos ilustrativa que puede utilizarse de acuerdo con aspectos del tema aquí descrito. En una implementación, la estructura de datos ilustrada en la Figura 3 puede tener un cuadro que indica los archivos de código de fuente y representaciones de código de byte
que están disponibles en la estructura de datos. El cuadro también puede incluir datos que indican que los archivos de código de fuente y las representaciones de código de byte están localizados en la estructura de datos. La estructura de datos puede ser almacenada en o representada como un archivo, en una base de datos, o en otro almacenamiento sin apartarse del espíritu y alcance de aspectos del tema aquí descrito.
Cambiando a la Figura 3, la estructura de datos 305 puede tener código de fuente y código de byte correspondiente colocados. Si el almacenamiento 220 es implementado como un sistema de archivo, la estructura de datos 305 puede mejorar la eficiencia de obtener datos ya que puede reducir el número de manejos de archivo o similares necesarios para acceder al código de byte. En donde reside el código de fuente en un paquete como opuesto a una o más páginas web o similares, colocar el código de fuente y el código de byte correspondiente puede ser el comportamiento predeterminado. Este comportamiento predeterminado puede ser anulado, si se desea.
En otra implementación, en donde se implementa el almacenamiento 220 como un sistema de archivo, puede haber un archivo de código de byte separado para cada uno de uno o más componentes de un paquete. Aunque esto puede ser menos eficiente en algunos escenarios, puede tener otras ventajas y usos. Esta implementación puede ser utilizada, por ejemplo, cuando el código de fuente pueda residir externamente a un paquete (por ejemplo, en
uno o más sitios web) y/o cuando el código de fuente pueda ser generado dinámicamente.
Como otro ejemplo, esto puede utilizarse en donde existan experiencias naturalmente aisladas en donde el anfitrión o usuario puede d esear purgar toda la información asociada con un sitio web individual.
Como otro ejemplo, esto puede utilizarse en escenarios en los cuales un navegador es pre-informado de los recursos sobre un sitio web dado. En este ejemplo, un navegador puede pre-buscar los recursos de sitio web de manera que el sitio web puede utilizarse incluso en donde no hay ninguna conexión de red. En este ejemplo, puede generarse código de byte incluso para páginas más profundas en el sitio web a pesar de no haber encontrado una referencia explícita a archivos de guión para las páginas en la marcación de HTML.
Determinar si se busca el código de fuente y código de byte correspondiente en un archivo individual o buscar un archivo separado para cada par de código de fuente/código de byte, puede basarse en el ambiente que está ejecutando de paquete. Si el ambiente e s un navegador web, el administrador de memoria caché puede buscar un archivo separado para código de byte correspondiente a cada componente de código de fuente. Si el ambiente es una estructura de aplicación u otro ambiente (por ejemplo, el ejemplo de sitio web pre-informado descrito anteriormente) en donde se conocen todos los componentes de
código de fuente por adelantado debido a que vienen de un paquete, el administrador de memoria caché puede buscar el código de byte para todo el paquete que se va a colocar en un archivo individual.
No todo el componente de código de fuente de un paquete puede tener código de byte correspondiente en la estructura de datos 305. Por ejemplo, por varias razones puede ser deseable crear el código de byte para uno o más componentes de un paquete. En tales casos, el código de fuente y código de byte p ara el componente(s) pueden omitirse de la estructura de datos 305.
Además, la estructura de datos 305 puede ser una memoria distribuida para compartir entre dos o más paquetes. Por ejemplo, en algunos casos, diferentes paquetes pueden tener uno o más componentes de fuente idénticos. En estos casos, la distribución de memoria puede u tilizarse para compartir el código de byte para los componentes de fuente idénticos de manera que no haya necesidad de copias múltiples del código de byte en memoria. Además, el código de byte en la estructura de datos 305 puede ser sólo de lectura de manera que no cambiará cuando se distribuye la memoria para compartir.
Haciendo referencia a las Figuras 2 y 3, en código de ejecución, el administrador de ejecución 218 puede encontrar una referencia (por ejemplo, un HTTP u otra referencia) que se refiere a código de fuente en un documento (por ejemplo, un HTML, XML, procesamiento de palabras, u otro documento) que está analizando el administrador de ejecución 218. El administrador de ejecución 218
puede revisar primero para ver si la versión actual del código de byte correspondiente a la referencia reside en la memoria caché a consultar la estructura de datos 305. Si el código de byte reside en la memoria caché, el administrador de ejecución 218 puede obtener el código de byte para ejecución. Si el código de byte no reside en la memoria caché, el administrador de ejecución 218 puede obtener el código de fuente de la ubicación de código de fuente y puede causar que el código de fuente sea recopilado y ejecutado sin retraso (por ejemplo, sin esperar a que el generador de código 216 complete cualquiera de las solicitudes de recopilación importantes encontradas en una fila).
En una implementación, el código de byte para el código de fuente puede residir en un directorio paralelo al código de fuente. Por ejemplo, si el código de fuente reside en C:/Nombre de paquete/Código de fuente/nombre de código de fuente. archivo de guión, el código de byte, si existe, puede residir en C:/Nombre de Paquete/Algún Nombre/nombre de código de byte. archivo de código de byte.
En otra implementación, el código de fuente puede residir en un dispositivo remoto.
La Figura 4 es un diagrama de bloques que representa una disposición ilustrativa de componentes de un ambiente en el cual puede operar el tema aquí descrito. Los componentes ilustrados en la Figura 4 son ilustrativos y no pretenden ser todos inclusivos de componentes que pueden ser necesarios o incluidos. En otras
modalidades, los componentes y/o funciones descritos en conjunto con la Figura 4 pueden incluirse en otros componentes (mostrados o no mostrados) o colocarse en subcomponentes sin apartarse del espíritu o alcance de los aspectos del tema aquí descrito. En algunas modalidades, los componentes y/o funciones descritas en conjunto con la Figura 4 pueden distribuirse a través de múltiples dispositivos.
Cambiando a la Figura 4, el ambiente 405 puede incluir un dispositivo objetivo 410, una red 415, un servidor de código 417, y otros componentes (no mostrados). El dispositivo objetivo 410 y el servidor de código 417 pueden comprender uno o más dispositivos de cómputo. Tales dispositivos pueden incluir, por ejemplo, computadoras personales, computadoras de servidor, dispositivos móviles o laptop, sistemas de multiprocesador, sistemas basados en microcontrolador, cajas de tv por cable, televisiones, electrónica de consumidor programable, PC de red, minicomputadoras, macrocomputadoras, teléfonos celulares, asistentes digitales personales (PDA), dispositivos de juego, impresoras, aparatos incluyendo caja de tv por cable, centro de medios, u otros aparatos, dispositivos de cómputo incorporados o fijados a un automóvil, otros dispositivos móviles, ambientes de cómputo distribuidos que incluyen cualquiera de los sistemas o dispositivos anteriores, y similares. Un dispositivo ilustrativo que puede estar configurado para actuar como el dispositivo objetivo 410 o el servidor de código 415 comprende la computadora 110 de la Figura 1.
En una modalidad, la red 415 puede comprender el Internet. En una modalidad, la red 415 puede comprender una o más redes de área local, redes de área ancha, conexiones directas, conexiones virtuales, redes privadas, redes privadas virtuales, alguna combinación de las anteriores, y similares.
El servidor de código 417 puede proporcionar código al dispositivo objetivo 410. En una modalidad, el servidor de código 417 puede ser un servidor web. En otra modalidad, el servidor de código 417 puede ser una máquina dentro de una red privada de organización que incluye código en él. En otras modalidades, el servidor de código 417 puede incluir cualquier dispositivo capaz de proporcionar código de fuente al dispositivo objetivo 410.
El dispositivo objetivo 410 es un dispositivo en el cual puede ejecutarse el código. El dispositivo objetivo 410 puede incluir un ambiente de recopilación 420, un ambiente de ejecución 425, un instalador 430, y un almacenamiento 435. El instalador 430 puede ser implementado y actuar similarmente al instalador 215 de la Figura 2 mientras el almacenamiento 435 puede ser implementado y actuar similarmente al almacenamiento 220 de la Figura 2.
El ambiente de recopilación 420 puede comprender un ambiente de derechos restringidos en el cual puede acoplarse el código de fuente en el código de byte. En una modalidad, el ambiente de recopilación 420 puede comprender un ambiente virtual como se describió anteriormente. En otra modalidad, el ambiente de recopilación 420 puede comprender un ambiente de derechos
restringidos diferente como se ha descrito previamente.
El ambiente de ejecución 425 puede comprender un ambiente en el cual se ejecuta software de un paquete. En una implementación, el ambiente de ejecución 425 puede comprender un navegador de Internet. En otra implementación, el ambiente de ejecución 425 puede comprender un procedimiento anfitrión que es capaz de ejecutar software de un paquete que puede incluir el código de fuente.
Las Figuras 5-6 son diagramas de flujo que generalmente representan acciones ilustrativas que pueden ocurrir de acuerdo con aspectos del tema aquí descrito. Para simplicidad de explicación, la metodología descrita en conjunto con las Figuras 5-6 se ilustra y describe como una serie de actos. Se entenderá y apreciará que los aspectos del tema aquí descrito no están limitados por los actos ilustrados y/o por el orden de actos. En una modalidad, los actos ocurren en un orden como se describe a continuación. En otras modalidades, sin embargo, los datos pueden ocurrir en paralelo, en otro orden, y/o con otros actos no presentados y descritos aquí. Además, no todos los actos ilustrados pueden requerirse para implementar la metodología de acuerdo con aspectos del tema aquí descrito. Además, aquellos expertos en la técnica entenderán y apreciarán que la metodología podría representarse alternativamente como una serie de estados interrelacionados a través de un diagrama de estado o como eventos.
Cambiando a la Figura 5, en el bloque 505, las acciones
comienzan.
En el bloque 510, se recibe un paquete que incluye el código de fuente de software para instalar en un dispositivo objetivo. Por ejemplo, haciendo referencia a la Figura 4, el dispositivo objetivo 410 puede obtener un paquete del servidor de código 417. Como otro ejemplo, el instalador 430 puede de ser instruido para instalar un paquete que sale del almacenamiento 435.
En el bloque 515, el paquete es instalado en el dispositivo objetivo. Por ejemplo, haciendo referencia a la Figura 2, el instalador 215 puede instalar el paquete en el almacenamiento 220.
En el bloque 520, se coloca un indicador en una estructura de datos tal como una fila o similares. El indicador de datos indica que el código de fuente del paquete se va a recopilar en código de byte. Puede haber un indicador separado colocado en la estructura de datos para cada archivo de código de fuente en el paquete. Por ejemplo, haciendo referencia a la Figura 2, el instalador 215 puede colocar uno o más indicadores en una estructura de datos almacenada en el almacenamiento 220.
En el bloque 525, se realizan acciones para recopilar inicialmente el código de fuente a menos que se reciba una solicitud para ejecutar el software del paquete antes de iniciar o completar las acciones. Estas acciones para recopilar el código de fuente pueden incluir, por ejemplo:
1. Repetir a través de la estructura de datos y encontrar el indicador(es) que indica que es necesaria la recopilación;
2. Recopilar cada elemento de código de fuente aplicable encontrado en el paso 1 a nterior e n el código de byte o algún otro código;
Por ejemplo, haciendo referencia a la Figura 2, el generador de código 216 puede repetir a través de la estructura de datos y recopilar archivos de código de fuente para indicadores encontrados dentro de la estructura de datos. Como otro ejemplo, el generador de código 216 puede repetir a través una lista de archivos y recopilar cualquier archivo que tenga una extensión dada (por ejemplo, ".js" u otra extensión que indica un archivo de fuente).
En el bloque 530, el código recopilado entonces puede ser persistido en memoria no volátil. Por ejemplo, haciendo referencia a la Figura 2, el administrador de memoria caché 217 puede almacenar el código generado mediante el generador de código 216 en el almacenamiento 220. El código puede ser almacenado en memoria volátil tal como una memoria caché en memoria o RAM para proporcionar carga y ejecución rápidas.
El bloque 535 es colocado en el lado de las acciones 520-530 para indicar que una solicitud para ejecutar el software del paquete pueda ocurrir antes, durante, o después de esas acciones. Si se recibe tal solicitud, pueden realizarse otras acciones antes de iniciar o completar las acciones de 520-530. Por ejemplo, si se recibe tal solicitud antes de iniciar o completar las acciones de los bloques 520-530, el código de fuente puede ser recopilado y ejecutado en una base acelerada. Otras acciones que describen lo que puede
ocurrir si se recibe tal solicitud se describen en conjunto con la Figura 6.
En el bloque 540, pueden realizarse otras acciones, si hay alguna. Por ejemplo, puede recibirse un evento de activación de regeneración. En respuesta, las acciones de bloque 520-530 pueden ser realizadas de nuevo potencialmente con diferente código de fuente (si el código de fuente ha cambiado) y segundo código diferente recopilado del código de fuente diferente.
Cambiando a la Figura 6, en el bloque 605, las acciones comienzan.
En el bloque 610, se recibe una solicitud para ejecutar software que incluye el código de fuente. Por ejemplo, haciendo referencia a la Figura 2, el administrador de ejecución 218 recibe una solicitud para ejecutar el software de un paquete instalado en el almacenamiento 220.
En el bloque 615, se hace una determinación sobre si el código ya ha sido recopilado y almacenado en el almacenamiento no volátil. Si es así, las acciones continúan en el bloque 640; de otra forma las acciones continúan en el bloque 620. Por ejemplo, haciendo referencia a la Figura 2, el administrador de ejecución 218 utiliza el administrador de memoria caché 217 para determinar si el paquete ya ha sido recopilado y almacenado en el almacenamiento 220.
Determinar si el código de fuente ya ha sido recopilado puede incluir revisar el código recopilado en la ubicación conocida del almacenamiento no volátil. La ubicación conocida puede
corresponder a un nombre u otro identificador de un paquete. Por ejemplo, una ubicación conocida puede ser un directorio nombrado después del paquete o un directorio descendente del directorio. Como otro ejemplo, una ubicación conocida puede ser una ubicación indicada en una estructura de datos que indica en donde está localizado código recopilado, si existe, para el código. Como otro ejemplo, una ubicación conocida puede ser una ubicación derivada de una referencia que identifica una ubicación de fuente (por ejemplo, un servidor de código) del código de fuente en donde se puede alcanzar la ubicación de fuente a través d e u na red. Incluso en otro ejemplo, determinar si el código de fuente ya ha sido recopilado puede involucrar revisar una estructura de datos almacenada en un archivo que coloca código de byte para el paquete con código de fuente para el paquete. La estructura de datos puede indicar si el segundo código ya ha sido generado y está almacenado en el archivo.
En el bloque 620, se obtiene el código de fuente. Por ejemplo, haciendo referencia a la Figura 2, el generador de código 216 obtiene el código de fuente del almacenamiento 220.
En el bloque 625, se genera el código de byte (u otro código) a partir del código de fuente. Por ejemplo, haciendo referencia a la Figura 2, el generador de código 216 crea un código de byte, código ejecutable por máquina, o algún otro código intermedio a partir del código de fuente obtenido anteriormente.
En el bloque 630, el código (o código derivado del mismo, tal
como código ejecutable u otro código intermedio) se ejecuta. Por ejemplo, haciendo referencia a la Figura 2, el administrador de ejecución 218 ejecuta el código generado anteriormente.
En el bloque 635, se persiste el código al almacenamiento no volátil. Las acciones representadas por el bloque 635 pueden ocurrir en conjunto con las acciones sobre o que se van a realizar en un período posterior. Por ejemplo, haciendo referencia a las Figuras 2 y 3, el generador de código 216 puede utilizar el administrador de memoria caché 217 para colocar código para un paquete en la estructura de datos 305 y almacenar esas estructura de datos 305 en el almacenamiento 220 para usarse en la ejecución subsecuente del software. Como otro ejemplo, en un tiempo posterior, el generador de código 216 puede volver a obtener el código de fuente y volver a generar el código recopilado y almacenar este código recopilado en el almacenamiento 220.
En el bloque 640, si el código ya ha sido recopilado, se obtiene el código recopilado. Por ejemplo, haciendo referencia a la Figura 2, el administrador de ejecución 218 puede obtener el código de byte del administrador de memoria caché 217.
En el bloque 645, se ejecuta el código obtenido (o código derivado del mismo tal como código binario). Por ejemplo, haciendo referencia a la Figura 4, el código puede ejecutarse en el ambiente de ejecución 425.
En el bloque 650, pueden realizarse otras acciones, si hay alguna. Por ejemplo, un archivo que incluye un código de byte puede
ser distribuido y compartido por memoria, a través de la distribución de memoria, con una pluralidad de procedimientos.
Como otro ejemplo, otras acciones pueden incluir revisar si el código recopilado fue modificado después de ser generado y si es así volver obtener el código de fuente (que puede ser diferente al código de fuente original), volver a recopilar el código de fuente, y almacenar el código recopilado en el almacenamiento no volátil para usarse en la ejecución subsecuente del software.
Como se puede observar a partir de la descripción detallada anterior, se han descrito aspectos relacionados con generar y guardar en memoria caché código de software. Aunque los aspectos del tema aquí descritos son susceptibles a varias modificaciones y construcciones alternativas, ciertas modalidades ilustradas de las mismas se muestran en los dibujos y se han descrito anteriormente con detalle. Sin embargo, se debe entender que no existe ninguna intención para limitar los aspectos del tema reclamado a las formas específicas descritas, sino por el contrario, la intención es cubrir todas las modificaciones, construcciones alternativas, y equivalentes que caen dentro del espíritu y alcance de varios aspectos del tema aquí descrito.
Claims (10)
1.- Un método ¡mplementado al menos en parte por una computadora, el método comprende: recibir un paquete que incluye código de fuente de software para instalar en un dispositivo objetivo; instalar el paquete en el dispositivo objetivo; y realizar un primer grupo de acciones para recopilar inicialmente el código de fuente antes de ejecutar el software a menos que se reciba una solicitud para ejecutar el software antes de iniciar o completar el primer grupo de acciones, el primer grupo de acciones incluyendo: recopilar el código de fuente en el segundo código, y persistir el segundo código en memoria no volátil.
2 - El método de acuerdo con la reivindicación 1, que además comprende, si se recibe una solicitud para ejecutar el software antes de iniciar o completar el primer grupo de acciones, realizar un segundo grupo de acciones antes de completar el primer grupo de acciones, el segundo grupo de acciones incluyendo: en el dispositivo objetivo, ejecutar el código de fuente o código ejecutable derivado del mismo.
3.- El método de acuerdo con la reivindicación 1, en donde el primer grupo de acciones además incluye memoria que distribuye el segundo código en memoria no volátil para compartir el segundo código para procedimientos que ejecutan dos o más paquetes.
4. - El método de acuerdo con la reivindicación 1, que además comprende colocar un indicador en una estructura de datos de que el código de fuente se va a recopilar en un segundo código para el dispositivo objetivo y encontrar el indicador dentro de la e structura de datos, y en donde la recopilación del código de fuente en el segundo código se realiza en respuesta a encontrar el indicador en la estructura de datos.
5. - El método de acuerdo con la reivindicación 1, que además comprende recibir una indicación de un evento de activación de regeneración y en respuesta a volver a realizar el primer grupo de acciones, potencialmente con diferente código de fuente y diferente segundo código recopilado del código de fuente diferente.
6. - Un medio de almacenamiento por computadora que tiene instrucciones ejecutables por computadora, que cuando se ejecutan realizan acciones, que comprenden: recibir una solicitud para ejecutar software que incluye código de fuente; en respuesta a la solicitud, determinar si ya se ha generado el segundo código a partir del código de fuente y se ha almacenado en el almacenamiento no volátil; si el segundo código ya ha sido generado antes de recibir la solicitud, realizar un primer grupo de acciones, que comprende. obtener el segundo código, y ejecutar el segundo código o código derivado del mismo; y si el segundo código no ha sido generado ya antes de recibir la solicitud, realizar un segundo grupo de acciones, que comprende: obtener el código de fuente, generar el segundo código del código de fuente, ejecutar el segundo código o código derivado del mismo, y si el segundo código no ha sido generado ya antes de recibir la solicitud, realizar un tercer grupo de acciones, que comprende: almacenar el segundo código en el almacenamiento no volátil para usarse en la ejecución subsecuente del software.
7. - El medio de almacenamiento por computadora de acuerdo con la reivindicación 6, en donde realizar el tercer grupo de acciones además comprende: volver a obtener el código de fuente; y volver a generar el segundo código del código de fuente.
8. - El medio de almacenamiento por computadora de acuerdo con la reivindicación 6, que además comprende revisar si el segundo código fue modificado después de ser generado y si es así, realizar acciones, que comprenden: volver a obtener el código de fuente; volver a generar el segundo código del código de fuente; y almacenar el segundo código en el almacenamiento no volátil para usarse en la ejecución subsecuente del software.
9. - En un amiente de cómputo, un sistema, que comprende: un almacenamiento operable para almacenar datos de un paquete, el paquete incluye código de fuente de software; un instalador operable para instalar el paquete en el almacenamiento, el instalador además operable para actualizar una estructura de datos para indicar que el código de fuente se va a recopilar en un segundo código; un generador de código operable para examinar la estructura de datos para identificar el código de fuente y para recopilar el código de fuente en el segundo código; un administrador de memoria caché operable para almacenar de manera persistente el segundo código en el almacenamiento y para proporcionar acceso al segundo código en el almacenamiento; un administrador de ejecución operable para recibir una solicitud para ejecutar el software y para determinar si el generador de código ya ha recopilado el código de fuente en el segundo código y, si es así, realizar acciones, que comprenden: obtener el segundo código, y ejecutar el segundo código o código derivado del mismo; y si no es así, para revisar acciones, que comprenden: obtener el código de fuente, hacer que el código de fuente sea recopilado en el segundo código, y ejecutar el código de fuente o código derivado del mismo.
10.- El sistema de acuerdo con la reivindicación 9, en donde el administrador de ejecución además es operable para hacer que el segundo código sea generado sin retraso si el generador de código no ha recopilado ya el código de fuente en el segundo código antes que se reciba la solicitud.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US13/371,479 US9110751B2 (en) | 2012-02-13 | 2012-02-13 | Generating and caching software code |
| PCT/US2013/024559 WO2013122758A1 (en) | 2012-02-13 | 2013-02-04 | Generating and caching software code |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| MX2014009761A true MX2014009761A (es) | 2014-09-12 |
| MX336964B MX336964B (es) | 2016-02-08 |
Family
ID=48946742
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| MX2014009761A MX336964B (es) | 2012-02-13 | 2013-02-04 | Generacion y guardado en memoria cache de codigo de software. |
Country Status (11)
| Country | Link |
|---|---|
| US (3) | US9110751B2 (es) |
| EP (1) | EP2815309B1 (es) |
| JP (1) | JP6195849B2 (es) |
| KR (1) | KR101966754B1 (es) |
| CN (1) | CN104137057B (es) |
| AU (1) | AU2013219875B2 (es) |
| BR (1) | BR112014019783B1 (es) |
| CA (1) | CA2861426C (es) |
| MX (1) | MX336964B (es) |
| RU (1) | RU2646329C2 (es) |
| WO (1) | WO2013122758A1 (es) |
Families Citing this family (35)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9110751B2 (en) | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
| US9104434B2 (en) | 2013-12-20 | 2015-08-11 | Microsoft Technology Licensing, Llc | Property accesses in dynamically typed programming languages |
| US9207914B2 (en) | 2013-12-20 | 2015-12-08 | Microsoft Technology Licensing, Llc | Execution guards in dynamic programming |
| US9442707B2 (en) * | 2014-06-25 | 2016-09-13 | Microsoft Technology Licensing, Llc | Incremental whole program compilation of code |
| US9772824B2 (en) * | 2015-03-25 | 2017-09-26 | International Business Machines Corporation | Program structure-based blocking |
| US9811324B2 (en) * | 2015-05-29 | 2017-11-07 | Google Inc. | Code caching system |
| US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
| US9690360B2 (en) * | 2015-08-13 | 2017-06-27 | Intel Corporation | Technologies for discontinuous execution by energy harvesting devices |
| US9696973B1 (en) * | 2016-02-24 | 2017-07-04 | Semmle Limited | Compilation cache with imports scanner |
| CN108304189B (zh) * | 2016-08-29 | 2021-03-12 | 迈普通信技术股份有限公司 | 多镜像设备软件编译方法、装置及设备 |
| US10311217B2 (en) * | 2016-12-09 | 2019-06-04 | Microsoft Technology Licensing, Llc | Application piracy prevention with secure enclave protection of automatically modularized functions |
| JP2018101240A (ja) * | 2016-12-20 | 2018-06-28 | 株式会社ミロク情報サービス | キャッシュ管理プログラム、キャッシュ管理装置及びキャッシュ管理方法 |
| JP7030426B2 (ja) * | 2017-05-31 | 2022-03-07 | キヤノン株式会社 | 画像形成装置及びその制御方法、並びにプログラム |
| CN107341007B (zh) * | 2017-06-20 | 2020-08-11 | 深圳创维-Rgb电子有限公司 | 显示终端及其定时开机方法、计算机可读存储介质 |
| US10749740B2 (en) * | 2017-10-31 | 2020-08-18 | Hewlett Packard Enterprise Development Lp | Deploying network-based cloud platforms on end equipment |
| US10606613B2 (en) | 2018-05-31 | 2020-03-31 | Bank Of America Corporation | Integrated mainframe distributed orchestration tool |
| WO2020013724A1 (ru) * | 2018-07-11 | 2020-01-16 | Михаил Сергеевич ГЕРМАН | Способ управления данными веб-сайта |
| CN108984183A (zh) * | 2018-08-28 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种软件跨地域构建方法、装置、设备及存储介质 |
| KR102663196B1 (ko) * | 2018-11-16 | 2024-05-07 | 삼성전자주식회사 | 사용자 단말장치, 서버, 사용자 단말장치의 제어방법 및 서버의 제어방법 |
| KR101967840B1 (ko) * | 2019-03-05 | 2019-08-13 | (주) 피플아이 | 패키지 소프트웨어 생성 장치 |
| US11150915B2 (en) | 2019-09-13 | 2021-10-19 | International Business Machines Corporation | Deferred bytecode class verification in managed runtime environments |
| CN110990019B (zh) * | 2019-11-20 | 2023-05-02 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
| US11403075B2 (en) | 2019-11-25 | 2022-08-02 | International Business Machines Corporation | Bytecode verification using class relationship caching |
| FR3105854B1 (fr) * | 2019-12-31 | 2024-07-19 | St Microelectronics Rousset | Système embarqué |
| FR3105853B1 (fr) | 2019-12-31 | 2023-01-06 | Proton World Int Nv | Système embarqué |
| CN111770170B (zh) | 2020-06-29 | 2023-04-07 | 北京百度网讯科技有限公司 | 请求处理方法、装置、设备和计算机存储介质 |
| CN112346734B (zh) * | 2020-11-06 | 2024-06-25 | 杭州和利时自动化有限公司 | 一种编译验证方法、装置、设备及计算机可读存储介质 |
| US11829751B1 (en) * | 2020-12-23 | 2023-11-28 | Synopsys, Inc. | System and method for automatically capturing source code and associated artifacts for static analysis |
| CN116635120A (zh) * | 2020-12-23 | 2023-08-22 | 索尼互动娱乐有限责任公司 | 用于将传统代码转换为更新代码的系统和方法 |
| CN112732245B (zh) * | 2021-01-11 | 2025-08-19 | 苏州众钺科技有限公司 | 跨平台应用的开发方法、装置及存储介质 |
| CN113326046B (zh) * | 2021-05-26 | 2023-09-26 | 网易(杭州)网络有限公司 | 获取编译时长的方法和装置 |
| CN113791770B (zh) * | 2021-11-15 | 2022-06-21 | 北京壁仞科技开发有限公司 | 代码编译器、代码编译方法、代码编译系统和计算机介质 |
| CN114281401B (zh) * | 2021-12-23 | 2025-01-28 | 数字广东网络建设有限公司 | 基于字节码确定修改功能点的方法、装置、设备及介质 |
| CN117130618B (zh) * | 2023-06-13 | 2024-07-09 | 东信和平科技股份有限公司 | 智能卡可执行文件的增量编译方法、装置、设备 |
| US20250077215A1 (en) * | 2023-09-05 | 2025-03-06 | Toshiba Tec Kabushiki Kaisha | Computer and software update method |
Family Cites Families (34)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5182806A (en) * | 1989-06-30 | 1993-01-26 | Digital Equipment Corporation | Incremental compiler for source-code development system |
| US6381742B2 (en) * | 1998-06-19 | 2002-04-30 | Microsoft Corporation | Software package management |
| DK1356381T3 (en) | 2001-02-02 | 2016-02-22 | Opentv Inc | Method and apparatus for a compilation of interpretation languages for interactive television |
| US7243346B1 (en) * | 2001-05-21 | 2007-07-10 | Microsoft Corporation | Customized library management system |
| US6715134B2 (en) * | 2002-03-04 | 2004-03-30 | Sun Microsystems, Inc. | Method and apparatus to facilitate generating simulation modules for testing system designs |
| DE60324171D1 (de) * | 2002-06-12 | 2008-11-27 | Telelogic North America Inc | Bereitstellung einer dynamischen modellcodeassoziativität |
| US7162628B2 (en) * | 2002-07-23 | 2007-01-09 | Cisco Technology, Inc. | Method, system, apparatus and program product for temporary personalization of a computer terminal |
| US7246346B2 (en) * | 2002-09-17 | 2007-07-17 | Microsoft Corporation | System and method for persisting dynamically generated code in a directly addressable and executable storage medium |
| US20040123278A1 (en) * | 2002-12-23 | 2004-06-24 | Murthi Nanja | Persistent cache apparatus and methods |
| US7103723B2 (en) * | 2003-02-25 | 2006-09-05 | Intel Corporation | Priority-based code cache management |
| US20040236824A1 (en) * | 2003-05-23 | 2004-11-25 | Millington Bradley D. | Post-cache substitution |
| KR100518584B1 (ko) * | 2003-07-12 | 2005-10-04 | 삼성전자주식회사 | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 |
| US7313792B2 (en) * | 2003-09-08 | 2007-12-25 | Microsoft Corporation | Method and system for servicing software |
| US7596554B2 (en) | 2003-12-09 | 2009-09-29 | International Business Machines Corporation | System and method for generating a unique, file system independent key from a URI (universal resource indentifier) for use in an index-less voicexml browser caching mechanism |
| CA2465155C (en) | 2004-04-21 | 2008-12-09 | Ibm Canada Limited-Ibm Canada Limitee | Recommendations for intelligent data caching |
| EP1669855A1 (en) | 2004-12-02 | 2006-06-14 | Deutsche Thomson-Brandt Gmbh | Method for generating multi-language menus |
| US20060136907A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Language-neutral and language-specific installation packages for software setup |
| US20060277250A1 (en) * | 2005-06-03 | 2006-12-07 | Sebastien Cherry | Methods and systems for checking accessibility of web applications |
| US9009688B2 (en) * | 2005-12-30 | 2015-04-14 | Intel Corporation | Type checking for object-oriented programming languages |
| US8225192B2 (en) * | 2006-10-31 | 2012-07-17 | Microsoft Corporation | Extensible cache-safe links to files in a web page |
| US9112808B2 (en) * | 2007-02-06 | 2015-08-18 | At&T Intellectual Property Ii, L.P. | Devices, systems, and methods for providing data |
| US9460229B2 (en) * | 2007-10-15 | 2016-10-04 | Viasat, Inc. | Methods and systems for implementing a cache model in a prefetching system |
| US8572065B2 (en) * | 2007-11-09 | 2013-10-29 | Microsoft Corporation | Link discovery from web scripts |
| CN101226472A (zh) * | 2008-02-03 | 2008-07-23 | 俞啟茂 | 一种遥控器代码生成方法 |
| US8046779B2 (en) | 2008-02-27 | 2011-10-25 | Sap Ag | Dynamic resolution of dependent components |
| KR100960111B1 (ko) | 2008-07-30 | 2010-05-27 | 한국전자통신연구원 | 리버스 캐싱 프록시를 이용한 웹 기반의 역추적 시스템 |
| US8752016B2 (en) * | 2008-12-15 | 2014-06-10 | Apple Inc. | Converting JavaScript into a device-independent representation |
| US20100299661A1 (en) * | 2009-05-25 | 2010-11-25 | International Business Machines Corporation | Load-Time Code Optimization In a Computing Environment |
| US20110087966A1 (en) * | 2009-10-13 | 2011-04-14 | Yaniv Leviathan | Internet customization system |
| US8984009B2 (en) | 2010-04-21 | 2015-03-17 | Salesforce.Com, Inc. | Methods and systems for utilizing bytecode in an on-demand service environment including providing multi-tenant runtime environments and systems |
| KR101689745B1 (ko) * | 2010-09-06 | 2016-12-27 | 삼성전자주식회사 | 스크립트에 의한 동적 리소스 정보를 처리하는 웹 브라우징 시스템 및 방법 |
| KR20120083803A (ko) * | 2011-01-18 | 2012-07-26 | 삼성전자주식회사 | 가상머신을 위한 추가코드 생성장치 및 방법 |
| US8880991B2 (en) * | 2011-04-21 | 2014-11-04 | Qualcomm Innovation Center, Inc. | Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code |
| US9110751B2 (en) | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
-
2012
- 2012-02-13 US US13/371,479 patent/US9110751B2/en active Active
-
2013
- 2013-02-04 KR KR1020147022492A patent/KR101966754B1/ko not_active Expired - Fee Related
- 2013-02-04 RU RU2014133160A patent/RU2646329C2/ru active
- 2013-02-04 CA CA2861426A patent/CA2861426C/en active Active
- 2013-02-04 BR BR112014019783-0A patent/BR112014019783B1/pt not_active IP Right Cessation
- 2013-02-04 CN CN201380009208.3A patent/CN104137057B/zh active Active
- 2013-02-04 JP JP2014557678A patent/JP6195849B2/ja not_active Expired - Fee Related
- 2013-02-04 AU AU2013219875A patent/AU2013219875B2/en not_active Ceased
- 2013-02-04 EP EP13748809.4A patent/EP2815309B1/en active Active
- 2013-02-04 WO PCT/US2013/024559 patent/WO2013122758A1/en not_active Ceased
- 2013-02-04 MX MX2014009761A patent/MX336964B/es active IP Right Grant
-
2015
- 2015-07-16 US US14/801,488 patent/US9940120B2/en active Active
-
2018
- 2018-04-10 US US15/949,177 patent/US10963233B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| US20150324183A1 (en) | 2015-11-12 |
| BR112014019783A2 (pt) | 2021-05-18 |
| MX336964B (es) | 2016-02-08 |
| KR20140124774A (ko) | 2014-10-27 |
| EP2815309A1 (en) | 2014-12-24 |
| CN104137057B (zh) | 2017-10-24 |
| EP2815309A4 (en) | 2015-11-04 |
| EP2815309B1 (en) | 2020-10-07 |
| US20130212567A1 (en) | 2013-08-15 |
| CA2861426A1 (en) | 2013-08-22 |
| CN104137057A (zh) | 2014-11-05 |
| BR112014019783A8 (pt) | 2017-07-11 |
| AU2013219875B2 (en) | 2018-05-31 |
| US9940120B2 (en) | 2018-04-10 |
| US9110751B2 (en) | 2015-08-18 |
| AU2013219875A1 (en) | 2014-08-28 |
| BR112014019783B1 (pt) | 2021-11-23 |
| JP6195849B2 (ja) | 2017-09-13 |
| US10963233B2 (en) | 2021-03-30 |
| JP2015507310A (ja) | 2015-03-05 |
| KR101966754B1 (ko) | 2019-04-08 |
| WO2013122758A1 (en) | 2013-08-22 |
| CA2861426C (en) | 2020-07-07 |
| RU2014133160A (ru) | 2016-03-10 |
| RU2646329C2 (ru) | 2018-03-02 |
| US20190108008A1 (en) | 2019-04-11 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US10963233B2 (en) | Generating and caching software code | |
| US20250307397A1 (en) | Automatic mitigation of corrupted or compromised compute resources | |
| JP5985631B2 (ja) | 信頼レベルのアクティブ化 | |
| CN102279765B (zh) | 预编译托存托管代码 | |
| US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
| US8316120B2 (en) | Applicability detection using third party target state | |
| US10831892B2 (en) | Web browser script monitoring | |
| US8930894B2 (en) | Method and system for executing an executable file | |
| CN114222975A (zh) | 使用存储器孔径冲刷顺序的数据保存 | |
| CN104205049B (zh) | 混合模拟和内核函数处理系统和方法 | |
| JP6328632B2 (ja) | 実行可能コード・データのロック・フリー・ストリーミング | |
| Zhang et al. | BLAFS: A Bloat Aware File System | |
| US20130132061A1 (en) | Just-in-time static translation system for emulated computing environments |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FG | Grant or registration |