ES2302031T3 - Trazado de bibliotecas de enlace dinamico en un dispositivo informatico. - Google Patents

Trazado de bibliotecas de enlace dinamico en un dispositivo informatico. Download PDF

Info

Publication number
ES2302031T3
ES2302031T3 ES04769039T ES04769039T ES2302031T3 ES 2302031 T3 ES2302031 T3 ES 2302031T3 ES 04769039 T ES04769039 T ES 04769039T ES 04769039 T ES04769039 T ES 04769039T ES 2302031 T3 ES2302031 T3 ES 2302031T3
Authority
ES
Spain
Prior art keywords
functions
dll
extension
platform
library
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
ES04769039T
Other languages
English (en)
Inventor
Andrew Thoelke
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Symbian Software Ltd
Original Assignee
Symbian Software Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Symbian Software Ltd filed Critical Symbian Software Ltd
Application granted granted Critical
Publication of ES2302031T3 publication Critical patent/ES2302031T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44552Conflict resolution, i.e. enabling coexistence of conflicting executables

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Vehicle Body Suspensions (AREA)
  • Photoreceptors In Electrophotography (AREA)
  • Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Communication Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Un método para hacer funcionar un dispositivo informático que tiene un sistema operativo y una biblioteca de enlace dinámico que contiene una pluralidad de funciones accesibles por un programa ejecutable, caracterizado porque cada función de la biblioteca de enlace dinámico está asociada a un número ordinal, y el método comprende: proporcionar la biblioteca de enlace dinámico como una primera parte y parte de extensión, conteniendo la primera parte y la parte de la extensión cada una de ellas una o varias de la pluralidad de funciones; Hacer que el programa ejecutable enlace a las funciones de la primera parte directamente por medio de los números ordinales asociados; y Hacer que el programa ejecutable enlace con las funciones de la parte de la extensión indirectamente a través de otra biblioteca que contiene unas funciones adicionales.

Description

Trazado de bibliotecas de enlace dinámico en un dispositivo informático.
La presente invención se refiere a un método para acceder a los datos de un dispositivo informático y, en particular a un método para tener acceso a los datos guardados en una biblioteca de enlace dinámico del dispositivo informático. La presente invención también se refiere a un dispositivo informático controlado por el método.
El término dispositivo informático tal como se utiliza aquí se debe interpretar en un sentido amplio de manera que cubra cualquier forma de dispositivo eléctrico e incluya, los dispositivos de grabación de datos, tales como cámaras digitales fotográficas y de vídeo de cualquier factor de forma, ordenadores de cualquier tipo o forma, incluyendo los ordenadores manuales y personales, y los dispositivos de comunicación de cualquier factor de forma, incluyendo los teléfonos móviles, los teléfonos inteligentes, los equipos de comunicación que combinan diversos tipos de comunicaciones, los aparatos de grabación y/o de reproducción de imagen, y la funcionalidad informática dentro de un solo dispositivo, así como otras formas de dispositivos de tratamiento de la información inalámbricos o con hilos.
La mayoría de los dispositivos informáticos funcionan bajo el control de un sistema operativo. Se puede considerar el sistema operativo como el software que permite que se ejecuten todos los programas en el dispositivo informático y puede ser la clave de una mayor eficiencia en el funcionamiento y para un desarrollo más fácil de las aplicaciones.
Un sistema operativo gestiona los recursos de hardware y de software del dispositivo informático. Estos recursos incluyen cosas tales como la unidad central de proceso (CPU), la memoria, y el espacio de disco, si un disco forma parte del dispositivo informático o se utiliza conjuntamente con el mismo. Como tal, el sistema operativo proporciona un camino estable y consistente para que las aplicaciones que se ejecutan en el dispositivo informático traten los recursos de hardware del dispositivo informático sin que la aplicación necesite saber todos los detalles de los recursos físicos disponibles para el hardware.
Esta tarea de gestionar los recursos de hardware y de software es muy importante, porque los diversos programas y métodos de introducción compiten por la atención de la CPU y demandan recursos de memoria, de almacenamiento y de introducción-salida (I/O) para sus propios propósitos. En esta capacidad, el sistema operativo se asegura de que cada programa de aplicación está provisto de los recursos necesarios, pero tiene siempre la debida consideración a los recursos físicos finitos disponibles para el dispositivo. Un programa de aplicación se puede considerar como un programa completo, autónomo que realiza una función específica directamente para el usuario del dispositivo.
Otra tarea que se puede realizar por el sistema operativo es la de proporcionar una interfaz (API) consistente con el programa de la aplicación, o ejecutable. Esto es especialmente importante si hay más de un ordenador de un tipo concreto usando el sistema operativo, o si el hardware que constituye el ordenador está siempre abierto a cambios. Éste es particularmente el caso cuando el sistema operativo de núcleo tiene varios usuarios, tal como ocurre típicamente con los dispositivos informáticos que tienen forma de dispositivos inalámbricos de comunicaciones, tales como los teléfonos inteligentes.
Con estos dispositivos no es infrecuente que los diversos fabricantes de dispositivos y proveedores de dispositivos adopten ciertos componentes de un sistema operativo de núcleo como componentes comunes, pero que adapten los otros componentes del sistema operativo de núcleo a sus requisitos de dispositivo respectivos. Se destaca que una distinción entre un programa de aplicación y el sistema operativo es que las aplicaciones se ejecutan en "modo de usuario" (modo sin privilegios), mientras que los sistemas operativos y las utilidades relacionadas con ellos se ejecutan generalmente en "modo de supervisor" (modo con privilegios). Por lo tanto, aun en el ejemplo del teléfono inteligente anterior, hay ciertos componentes importantes del sistema operativo, referidos a menudo como componentes de núcleo, que se mantienen exclusivamente en el "modo de supervisor".
Una interfaz de programa de aplicación consistente (API) permite que un programa de aplicación para un dispositivo informático funcione en otro dispositivo informático del mismo tipo, a pesar de que la cantidad de memoria o la cantidad de almacenamiento sean diferentes en los dos dispositivos. Aun en el caso de que un dispositivo informático particular sea único, el sistema operativo puede garantizar que los programas de aplicación continúan funcionando cuando se producen mejoras y actualizaciones de hardware, porque el sistema operativo y no el programa de aplicación es responsable de gestionar el hardware y la distribución de sus recursos.
Para ir más lejos en el uso eficiente de los recursos del dispositivo, ciertas funciones y módulos que pueden ser comunes a un número determinado de programas de aplicación se puede almacenar en forma de una biblioteca de tal modo que estas funciones y módulos se guarden una sola vez y no se repliquen en cada uno de los programas de aplicación con los cuales se van a utilizar. El contenido de la biblioteca por lo tanto se enlaza selectivamente a los programas de aplicación cuando se cargan o ejecutan más biporque cuando son compilados dentro de los propios programas de aplicación individuales. De aquí sigue que el mismo bloque de código de biblioteca que representa una función o un módulo se pueda compartir entre varias tareas a ejecutar en el dispositivo en vez de que cada tarea contenga las copias de las rutinas que utiliza.
Estas bibliotecas enlazan dinámicamente los programas de aplicación mientras que se ejecutan los programas y por lo tanto las bibliotecas se conocen comúnmente como bibliotecas dinámicas de enlace (DLL). Por tanto, la mayoría de los sistemas operativos modernos de ordenador proporcionan una instalación de biblioteca de enlace dinámico que permite que sean dotados ciertos procedimientos y funciones ejecutables en forma de una biblioteca que esté separada de los programas de aplicación que se ejecutan en el dispositivo informático. Típicamente, un programa de aplicación se enlaza dinámicamente con la biblioteca en el tiempo de funcionamiento, así que el programa de aplicación puede requerir uno o varios de los procedimientos y de las funciones que son exportados desde la biblioteca. Los procedimientos exportados se denominan comúnmente puntos de entrada en la biblioteca.
A diferencia de los programas de aplicación regulares, que se ejecutan generalmente desde el principio, un DLL se puede incorporar en cualquier punto de entrada. Hay dos modos principales de identificar estos puntos de entrada en un DLL. La primera opción es referirse a los puntos de entrada por un nombre. La segunda opción es referirse a los puntos de entrada por un número ordinal. Esta última opción se denomina con frecuencia como trazado ordinal de la función o enlace ordinal de la función. Los nombres son posiblemente largos en comparación con los ordinales y requieren un código adicional para su definición. Por lo tanto, se considera generalmente que el uso de nombres es un derroche de los recursos de Memoria Sólo de Lectura (ROM) y de Memoria de Acceso Aleatorio (RAM) del dispositivo informático en comparación con la aplicación de números ordinales. El enlace ordinal de los puntos de acceso es por tanto la preferencia en ciertos sistemas operativos, y particularmente en aquellos sistemas operativos para su uso en teléfonos inteligentes porque estos tipos de dispositivos informáticos tienen recursos físicos muy restringidos en la comparación con los disponibles en dispositivos de PC de sobremesa o portátiles, y por lo tanto el uso eficiente de código es de importancia suprema.
Las DLL proporcionan, por tanto, una manera mediante la cual se pueden proporcionar los programas de aplicación en formato modular de modo que la funcionalidad pueda ser actualizada y reutilizada más fácilmente. También ayudan a reducir los gastos indirectos de memoria cuando diversas aplicaciones utilizan la misma funcionalidad al mismo tiempo, porque aunque cada aplicación es dotada de una copia de los datos, pueden compartir el código. Además, el enlace dinámico permite que un módulo incluya solamente la información que necesita para localizar una función exportada de la DLL en el tiempo de carga o en el tiempo de ejecución.
Hay una creciente exigencia de que los sistemas operativos proporcionen una combinación de compatibilidad capacidad de habituarse. Éste es particularmente el caso de los sistemas operativos del teléfono inteligente, tales como el sistema operativo de Symbian OSTM® provisto por Symbian Limited de Londres, Inglaterra. Típicamente, un sistema operativo de este tipo se suministra a los fabricantes del microteléfono, que proporcionan posteriormente la funcionalidad adicional del dispositivo para su funcionamiento bajo el control del sistema operativo. Esto significa que un sistema operativo de este tipo debe mantener Compatibilidad Binaria en sus API, mientras que permita al mismo tiempo que se agreguen plataformas y productos derivados innovadores y de funcionalidad a diferenciadora a estas API para adaptar el sistema operativo a los requisitos particulares a de los fabricantes de microteléfono respectivos.
Sin embargo, existen dificultades asociadas a la coordinación de los puntos de entrada de la DLL conforme evoluciona un sistema operativo de este tipo a partir desde un lanzamiento al siguiente.
Según un primer aspecto de la presente invención, se proporciona un método para hacer funcionar un dispositivo informático que tiene un sistema operativo y una biblioteca de enlace dinámico que contienen una pluralidad de funciones accesibles por un programa ejecutable, caracterizado porque cada función de la biblioteca de enlace dinámico está asociada a un número ordinal, y el método comprende: proporcionar la biblioteca de enlace dinámico como una primera parte y una parte de la extensión, conteniendo la primera parte y la parte de la extensión una o varias de la pluralidad de funciones; haciendo que el programa ejecutable enlace con las funciones de la primera parte directamente por medio de los números ordinales asociados; y haciendo que el programa ejecutable enlace con las funciones de la parte de la extensión indirectamente a través de otra biblioteca que contiene funciones adicionales.
Según un segundo aspecto de la invención se proporciona un dispositivo informático dispuesto para funcionar de acuerdo con el método definido anteriormente.
Según un tercer aspecto de la invención, se proporcionado un software dispuesto para hacer que un dispositivo informático funcione de acuerdo con el método definido anteriormente.
En las reivindicaciones dependientes se establecen las características preferidas de la invención.
Se describirá a continuación una realización de la presente invención, solamente a título de ejemplo adicional, haciendo referencia a los dibujos anexos, en los cuales:
la Figura 1 es un diagrama que muestra esquemáticamente la evolución de una plataforma de teléfono inteligente;
la Figura 2 es un diagrama que muestra esquemáticamente como puede presentarse un conflicto entre los ordinales de una DLL con la evolución de la plataforma paralela;
la Figura 3 es un diagrama que muestra esquemáticamente como un aplicación de un teléfono inteligente puede tener acceso a funciones originales de una DLL;
la Figura 4 es un diagrama que muestra como se puede proporcionar una DLL de acuerdo con el método de la presente invención; y
la Figura 5 es un diagrama que muestra cómo una aplicación puede tener acceso a una función de una DLL modificada usando una extensión de DLL proporcionada de acuerdo con el método de la presente invención.
Haciendo referencia a la Figura 1, se muestra un ejemplo de una evolución típica de un teléfono inteligente. En aras de la claridad, esta evolución se muestra en forma de un árbol de familia. La figura muestra una parte pequeña del "árbol de familia evolutivo", pero el punto clave en este ejemplo es que no existe en él ninguna trayectoria linear de evolución a partir de un lanzamiento de una entidad al siguiente.
Se puede ver en el ejemplo de la Figura 1 que el sistema operativo evoluciona de la versión X del OS (sistema operativo) a la versión X+l del OS. Pero, en paralelo la plataforma del dispositivo, la cual puede ser típicamente la interfaz de usuario del dispositivo, evoluciona desde la plataforma Y a la plataforma Y+1, estando basada la plataforma Y en la versión X de OS y estando basada la plataforma Y+1 en la versión X+1 del OS. El producto A evoluciona al producto B, y éstos dos se basan en la plataforma Y. El producto B evoluciona luego a la versión 2 del producto B, pero ésta se basa en la plataforma Y+1. Esto se debe a que en cada nivel de la evolución ha habido un requisito para agregar funcionalidad a la plataforma básica.
Existe un requisito adicional de mantener esa funcionalidad en las versiones futuras de ese nivel de la familia. Esto significa que hay múltiples rutas a través de las cuales puede tener lugar el crecimiento funcional. Por ejemplo, un producto particular necesitará heredar una funcionalidad adicional de la transición del OS, de la transición de plataforma, y de su predecesor de producto.
Unas rutas de herencia funcional múltiple causan la fragmentación inmediata de la plataforma si el sistema operativo utiliza un esquema de enlace ordinal para exportar las funciones de la DLL. Con este tipo de esquema, cada función exportada por la DLL es numerada secuencialmente. Una aplicación de cliente de la DLL invoca las funciones para su exportación por este número ordinal. Las operaciones de búsqueda entre las funciones y los ordinales se pueden definir en un archivo de definición (DEF) de la aplicación en cuestión. Sin embargo, este esquema secuencial de enumeración significa que si dos partes hacen adiciones respectivas de función a la misma API sin el conocimiento de la otra, la función agregada por cada parte recibirá el mismo número ordinal (al final del intervalo de números ordinales usado). Esto significa que el código del programa construido contra la DLL modificado por una primera de las dos partes (parte uno) utilizará ese número ordinal para tener acceso a la funcionalidad que se cree existe en el número ordinal en cuestión de la versión de la plataforma desarrollada por la parte uno.
Sin embargo, los problemas comienzan si ese código de programa se ejecuta siempre contra la versión de la plataforma desarrollada por la otra de las dos partes (parte dos), puesto que la función en ese número ordinal desarrollada por la parte uno no es igual a la función en el mismo número ordinal según lo desarrollado por la parte dos. Una vez que se haya producido este problema en un producto lanzado, no hay manera de corregirlo sin que se rompa la compatibilidad binaria en una u otra plataforma. La Figura 2 ilustra lo que sucede cuando se amplía una API independientemente por dos partes en paralelo, y como no se puede resolver el espacio ordinal resultante.
El uso de rutas múltiples de herencia funcional no plantea un problema siempre y cuando cada API tenga una sola ruta de herencia. Esto significa en la práctica un solo propietario para cada API. Se permite a un propietario agregar a una API respectiva; sólo a él. Esto significa que la API evoluciona de una manera lineal. Por ejemplo, tomando el sistema operativo Symbian OST® como ejemplo, las DLL poseídas y proporcionadas por Symbian serían solamente extensibles por Symbian, y no serían extensibles por los desarrolladores de plataformas o de productos derivados. Sin embargo, este ideal de no permitir la extensión de las interfaces con excepción las realizadas por el propietario de la interfaz está en la práctica en desacuerdo con la necesidad creciente de proporcionar la adaptación a requisitos particulares de las plataformas y de los productos de un sistema operativo de núcleo común.
Debido a la necesidad continua de desarrollar productos nuevos y de aportar éstos al mercado en el intervalo de tiempo más corto posible, es relativamente corriente que diversos productos estén en desarrollo por una primera parte, pero que han agregado funcionalidad a las interfaces poseídas por una o más partes diferentes. Por ejemplo, esto podría ocurrir si una plataforma desarrollada por una parte agrega una API a una o más bibliotecas poseídas por otra parte, o si un producto agrega una API a una o más bibliotecas de plataforma; el problema es el mismo en cualquier caso.
Se destaca que el problema no es que la compatibilidad con la plataforma subyacente haya sido rota. En cada caso el producto sería compatible con la plataforma actual del sistema operativo/ interfaz de usuario (OS/UI). El problema es que si se hace una revisión posterior del producto, basada en una versión más avanzada de ese OS/ plataforma de UI, solamente puede ser compatible con la nueva versión de la plataforma, o con la versión anterior del producto, pero no con ambas. Sin embargo, los requisitos son que la compatibilidad con ambas es esencial a fin de no fragmentar la plataforma. Tal fragmentación sería muy perjudicial para el sistema operativo y muy difícil recuperarse de la misma.
Por lo tanto, un proveedor de un OS se puede enfrentar con un panorama en el cual:
\bullet
el proveedor del OS está agregando una funcionalidad substancial a sus API en las nuevas versiones del OS (legítimamente);
\bullet
los proveedores de la plataforma UI están agregando funcionalidad considerable a sus API en las nuevas versiones (legítimamente)
\bullet
los fabricantes de producto están agregando funcionalidad a las APl de OS y plataforma de UI en sus productos, y esto no deja de ser razonable esperarlo porque estos productos requieren la diferenciación y la flexibilidad de la plataforma.
Sin embargo, debido a que las adiciones funcionales por cada una de las partes anteriores se agregan al final del intervalo de números ordinales, las adiciones funcionales de los fabricantes de producto tendrán lugar en el mismo espacio ordinal que el las adiciones de la plataforma introducidas por el proveedor de la plataforma de UI, las cuales estarán a su vez en el mismo espacio ordinal que la funcionalidad adicional proporcionada por el proveedor del OS. Así, existe un potencial para los conflictos dentro del espacio ordinal, de un alcance desconocido y de una fuente desconocida. La razón por la que el alcance es desconocido es que mucho del trabajo que se realiza en una plataforma por el fabricante del producto a fin de obtener nuevos productos no es necesariamente visible para los proveedores del OS o de la plataforma UI.
En realidad, esta situación no llega a ser perjudicial hasta que dos productos, o kits de desarrollo de software (SDK) a través de los que se desarrollan los productos, se hacen disponibles en el mercado con ordinales que están en conflicto. Hasta ese momento es posible corregir los productos y SDK que no hayan sido lanzados al mercado.
Por lo tanto, la presente invención intenta proporcionar un sistema que permita a los usuarios del sistema agregar funcionalidad a las API de una manera segura, extensible sin poner en peligro la compatibilidad futura. De este modo, una tercera parte pueden agregar funcionalidad a un API existente, y en particular a un API que esté enlazado por un ordinal, de una manera que no comprometa la evolución futura de esa API. Un segundo objetivo es que no pueda producirse ninguna evolución futura de la API original que comprometa la funcionalidad agregada por una tercera parte.
La presente invención es aplicable a cualquier situación en la que una tercera parte requiera agregar funcionalidad a una API existente que no sea poseída por esa parte. No se aplica cuando el propietario de una API esté ampliando esa API, porque por definición el propietario es el mantenedor de la API. Se puede también utilizar la presente invención para eliminar potencial adicional de conflicto en los casos en los que se ya hayan hecho adiciones a una API por una tercera parte.
La Figura 3 muestra un aplicación que enlaza a las Funciones Originales almacenadas contra una extensión de la biblioteca (LIB) de una plataforma DLL. La aplicación utiliza las funciones almacenadas en la DLL vía los ordinales de archivo de la LIB. Por lo tanto, cuando la aplicación invoca la función original 1, se proporciona un enlace al ordinal 1 de la extensión de la biblioteca que a su vez exporta la funcionalidad proporcionada por la Función Original 1 para su uso por la aplicación; y análogamente para las funciones originales restantes almacenadas en otros ordinales de la DLL. Éste es un patrón conocido del enlace de la DLL y se emplea, por ejemplo, en el sistema operativo de Symbian OSTM®.
La Figura 4 ilustra cómo se puede utilizar un patrón de la DLL de la extensión por una aplicación para algunas funciones de adición de producto que se han agregado a las funciones originales proporcionadas desde la DLL de la plataforma. Estas adiciones de producto se exportan desde la DLL de la plataforma a través de los ordinales adicionales 6 y 7. Sin embargo, estos ordinales adicionales 6 y 7 no están enlazados directamente por la aplicación sino mediante la DLL de la extensión. Se accede realmente a la DLL de la extensión a través de una biblioteca de la extensión que mantiene las direcciones ordinales para la DLL de la extensión, de una manera similar a la ruta de acceso para la DLL de la plataforma. Con la presente invención, no se permite que la aplicación utilice ordinales adicionales de la DLL de la plataforma directamente. Pero, como se puede ver en la Figura 4, se permite a la aplicación utilizar las funciones originales 1 a 5 exportándolas directamente de la DLL de la plataforma. Esto se debe a que se sabe que las Funciones Originales se pueden exportar tanto para el sistema operativo como para la aplicación a través, respectivamente, de los ordinales 1 a 5 para su uso por la aplicación.
Muchos sistemas operativos se escriben ahora usando un código de programación orientado al objeto, tal como C++. Con un sistema de este tipo, una manera preferida de llevar a cabo el método de la presente invención es poner en ejecución las funciones de adición de producto como miembros privados de clases. Esto significa que el recopilador de C++ hará cumplir el código de cliente para utilizar la DLL de la extensión. Además, es bien sabido en esta técnica que los cambios en el código escrito originalmente por otra parte se deberían mantener al mínimo. Por lo tanto, en armonía con la mejor práctica seguida en esta técnica, la DLL de la extensión no necesita ser proporcionada puramente como un adaptador para enlazar a la DLL de la plataforma, sino que se puede también disponer para contener la mayoría del código adicional requerido para proporcionar la funcionalidad adicional para los programas de aplicación. Por otra parte, se puede proporcionar la DLL de la extensión de una manera tal que no sea específica de una única DLL de plataforma. Por lo tanto, se considera que se puede proporcionar una única DLL de "Extensión de Producto" en la ROM del dispositivo informático, pero esta única DLL de la extensión se dispone para proporcionar la interfaz a la funcionalidad adicional de más de una, y quizás incluso de todas las DLL de la plataforma. A partir de esto, se destaca que el método de la presente invención no está restringido a la disposición de una DLL de la extensión respectiva para cada DLL de la plataforma. Se deduce que un fabricante de producto puede escoger agregar una sola DLL de la extensión para proporcionar un enlace a diversas DLL de plataforma, o que se puede proporcionar la funcionalidad adicional (funciones de la extensión) disponiendo la DLL de la extensión como una extensión real de una DLL de producto existente.
Alternativamente, se pueden agrupar las funciones de la extensión de una manera que no guarde ninguna relación con la disposición de las DLL originales de la plataforma.
En la disposición mostrada en la Figura 4, por tanto, la aplicación de la tercera parte se enlaza a los ordinales 1 a 5 de Plataform.lib, la extensión de biblioteca de la DLL de plataforma, y a los ordinales 1 y 2 de la extensión.lib, la extensión de la biblioteca de la DLL de la extensión. Por lo que se refiere a la aplicación, no tiene ninguna visibilidad de los ordinales 6 y 7 Plataform.lib. Consecuentemente, un SDK de tercera parte para el producto no necesita ni siquiera contener la versión extendida de Plataform.lib. Por lo tanto, con la presente invención es posible sustituir la versión original (ordinales 1 a 5) de la extensión de biblioteca Plataform.lib en el SDK, y usar solamente la versión extendida (ordinales l a 7) de la biblioteca para el desarrollo de la plataforma. Esto significa que no hay posibilidad de que un código producido por una tercera parte use los ordinales adicionales 6 y 7.
La Figura 5 muestra una versión posterior de la plataforma, cuando el propietario de la DLL de la plataforma ha agregado más funcionalidad de núcleo a la API de la DLL de la plataforma. En este caso, los ordinales 6 y 7 se han utilizado ahora por el propietario en la adición de las nuevas funciones. Ahora se presentarían problemas si la aplicación que enlaza a esta DLL de la plataforma esperaba ver las adiciones 1 y 2 de producto en estos ordinales, como en la versión de la plataforma mostrada en la Figura 4, porque ahora los ordinales 6 y 7 se utilizan, respectivamente, para exportar las Adiciones de Propietario 1 y 2. Sin embargo, en este caso se evitan los problemas puesto que las funciones 1 y 2 de adición de producto se invocan siempre a través de la DLL de la extensión. Por tanto es aceptable que estas funciones se muevan cada una a una posición ordinal diferente. En la Figura 5, las adiciones de producto se mueven, respectivamente, desde los ordinales 6 y 7 a los ordinales 8 y 9. El único componente del sistema que se enlaza a los ordinales para las Adiciones de Producto 1 y 2 es la DLL de la extensión, y por lo tanto debe ser reconstruida. No son necesarios cambios de código, simplemente volver a establecer un enlace para que la DLL de la extensión señale a las nuevas posiciones de ordinal 8 y 9 usadas para exportar las Adiciones de Producto l y 2 a la aplicación. Puesto que el código de la aplicación de la tercera parte se enlaza a Extensión.lib, y estos ordinales siguen siendo iguales, el código de la tercera parte no necesita ser reconstruido.
Un ejemplo de código de programa para la puesta en práctica de la realización de la presente invención según lo ilustrado en la Figura 5 puede ser el siguiente. Se destaca que el ejemplo siguiente es una indicación relativamente simple de cómo se puede lograr el código de fuente para poner en ejecución la presente invención.
El extracto de código siguiente muestra cómo se podría agregar una función a un archivo de encabezamiento de una DLL de plataforma. En este ejemplo, hay dos funciones agregadas al encabezamiento. La Función de la extensión pública será puesta en ejecución en la DLL de la extensión. Por lo tanto, no será exportada de Plataform.dll, sino de Extension.dll. La función privada DoExtensionFunction será puesta en ejecución en la Plataform.dll y por tanto será exportada desde la Plataform.dll. Esta función se hace privada de modo que el recopilador evite que un código de tercera parte invoque esta función a través de su exportación ordinal.
100
La puesta en práctica en la DLL de la plataforma consiste en agregar el código correspondiente a la DoextensionFunction. Éste debería contener el mínimo de código necesario para que esta función de la extensión fuera incluida en la DLL, de tal manera que se redujera al mínimo la cuantía del cambio requerido. Esta función será exportada a Platform.lib.
101
La puesta en ejecución en la extenson.dll se realiza sobretodo para permitir la invocación a través de la DoExtensionFunction privada en la DLL de la plataforma. DoExtensionFunction es privada, así que solamente se puede invocar dentro de la misma clase. Se debe observar que la invocación a DoExtensionFunction está rodeada de otro código que no necesita estar en la platform.dll, y por tanto se pone en ejecución aquí para reducir al mínimo el impacto en la DLL de la plataforma
102
103
Preferiblemente, el código debería también asegurar que solamente se realizan cambios esenciales en la DLL de la plataforma. Por lo tanto, toda cualquier funcionalidad adicional se debe poner en ejecución preferiblemente en la DLL de la extensión. Esto proporciona la ventaja adicional de que hay menos ocasión de colisión con una funcionalidad que surja de cambios subsiguientes en la plataforma, y de esta manera la futura integración de plataformas más recientes será menos problemática.
También, si se proporcionan algunas funciones de la extensión en la DLL de la plataforma, éstas se deberían hacer preferiblemente como funciones privadas. Esto hace más difícil que una tercera parte utilice inadvertidamente una función de la extensión en la API original en vez de en la DLL de la extensión. El recopilador ayudará entonces a hacer cumplir la regla que se ha establecido.
Además, sería también preferible que un SDK emitido públicamente incluyera solamente los archivos originales LIB según lo suministrado. Esto significaría que el código de los terceros no podría posiblemente invocar ninguno de los ordinales adicionales de la plataforma, pues no se encuentran presentes en los archivos de LIB. Una tercera parte por lo tanto no tendría ninguna opción salvo acceder a la funcionalidad de la extensión a través de la DLL de la extensión, y por lo tanto no encontraría problemas de compatibilidad con las plataformas futuras.
Haciendo funciones de la extensión privadas, y excluyendo las bibliotecas modificadas del SDK, se impide a un código de tercera parte invocar las funciones adicionales de producto creadas por el proveedor de la DLL de la plataforma. Sin embargo, es también preferible asegurarse de que el código de la ROM dentro de un dispositivo utilice también las DLL de la extensión. De este modo, restringiendo el SDK a los archivos originales de LIB resulta que no solamente las terceras partes deben utilizar la DLL de la extensión para tener acceso a las funciones adicionales, sino también todos los códigos, es decir el código de ROM, que se incorpora posteriormente al dispositivo. Aunque el código de ROM se puede reconstruir en algún punto futuro en tiempo contra nuevos archivos de LIB, es preferible y altamente deseable maximizar la compatibilidad binaria en los casos porque sea posible y en todo momento durante el ciclo de vida de cualquier dispositivo concreto. De aquí sigue que esta compatibilidad puede ser permitida si se utiliza la DLL de la extensión de la presente invención de la manera anteriormente indicada.
Aunque se ha descrito la presente invención haciendo referencia a realizaciones concretas, se apreciará que se pueden efectuar modificaciones mientras se permanece dentro del alcance de la presente invención según lo definido por las reivindicaciones anexas. Por ejemplo, aunque se ha descrito el método de la presente invención haciendo referencia a DLL con enlace ordinal, puede también utilizarse con DLL que se enlacen por nombre. Por otra parte, se pueden proporcionar las funciones adicionales para su uso por un programa de aplicación en parte dentro de la DLL de la plataforma y en parte dentro de la DLL de la extensión, y en este caso se puede disponer la DLL de la extensión para hacer que enlace a una función adicional bien en la DLL de la plataforma o bien dentro de la propia DLL de la extensión. Además, aunque la presente invención se ha descrito haciendo referencia a un dispositivo informático en la forma de un teléfono inteligente, se puede también utilizar la presente invención en otras formas de dispositivos informáticos, tales como PC portátiles o de sobremesa, agendas digitales personales (PDA), o sistemas informáticos de naturaleza general.

Claims (7)

1. Un método para hacer funcionar un dispositivo informático que tiene un sistema operativo y una biblioteca de enlace dinámico que contiene una pluralidad de funciones accesibles por un programa ejecutable, caracterizado porque cada función de la biblioteca de enlace dinámico está asociada a un número ordinal, y el método comprende:
proporcionar la biblioteca de enlace dinámico como una primera parte y parte de extensión, conteniendo la primera parte y la parte de la extensión cada una de ellas una o varias de la pluralidad de funciones;
Hacer que el programa ejecutable enlace a las funciones de la primera parte directamente por medio de los números ordinales asociados; y
Hacer que el programa ejecutable enlace con las funciones de la parte de la extensión indirectamente a través de otra biblioteca que contiene unas funciones adicionales.
2. Un método según la reivindicación 1 en el que la biblioteca adicional está dispuesta para enlazar a una pluralidad de bibliotecas de enlace dinámico del dispositivo informático.
3. Un método según la reivindicación 1 ó la reivindicación 2, en el que el código de memoria sólo de lectura (ROM) para su uso dentro del dispositivo informático es accesible solamente a través de la biblioteca adicional.
4. Un método según una cualquiera de las reivindicaciones precedentes, en el que las funciones dentro de la parte de la extensión son proporcionadas como funciones privadas.
5. Un método según una cualquiera de las reivindicaciones precedentes, en el que la una o varias funciones de la primera parte están integradas en el sistema operativo.
6. Un dispositivo informático dispuesto para funcionar de acuerdo con un método según una cualquiera de las reivindicaciones 1 a 5.
7. Producto de programa informático dispuesto para hacer que un dispositivo informático funcione de acuerdo con un método según una cualquiera de las reivindicaciones 1 a 5.
ES04769039T 2003-10-28 2004-10-28 Trazado de bibliotecas de enlace dinamico en un dispositivo informatico. Expired - Lifetime ES2302031T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0325145 2003-10-28
GB0325145A GB2407655B (en) 2003-10-28 2003-10-28 Mapping of dynamic link libraries in a computing device

Publications (1)

Publication Number Publication Date
ES2302031T3 true ES2302031T3 (es) 2008-07-01

Family

ID=29725515

Family Applications (1)

Application Number Title Priority Date Filing Date
ES04769039T Expired - Lifetime ES2302031T3 (es) 2003-10-28 2004-10-28 Trazado de bibliotecas de enlace dinamico en un dispositivo informatico.

Country Status (8)

Country Link
US (1) US7690007B2 (es)
EP (1) EP1678607B1 (es)
JP (1) JP2007510210A (es)
AT (1) ATE386976T1 (es)
DE (1) DE602004011974T2 (es)
ES (1) ES2302031T3 (es)
GB (1) GB2407655B (es)
WO (1) WO2005052790A1 (es)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0607068D0 (en) * 2006-04-07 2006-05-17 Symbian Software Ltd Improvement relating to method of embedding software in computing devices
US9098316B2 (en) * 2008-09-22 2015-08-04 International Business Machines Corporation Routing function calls to specific-function dynamic link libraries in a general-function environment
JP6078515B2 (ja) * 2014-11-13 2017-02-08 京セラドキュメントソリューションズ株式会社 電子機器およびプログラム

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2143488C (en) * 1995-02-27 2000-01-11 Robert Paul Duncan Dynamic link libraries without linker or loader support
US6052778A (en) * 1997-01-13 2000-04-18 International Business Machines Corporation Embedded system having dynamically linked dynamic loader and method for linking dynamic loader shared libraries and application programs
JPH11110194A (ja) * 1997-10-06 1999-04-23 Toshiba Corp 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
US6865735B1 (en) * 1997-10-07 2005-03-08 University Of Washington Process for rewriting executable content on a network server or desktop machine in order to enforce site specific properties
US6292843B1 (en) * 1998-01-16 2001-09-18 International Business Machines Corporation Quick loading of run time dynamic link library for OS/2
US6324687B1 (en) * 1998-12-03 2001-11-27 International Business Machines Corporation Method and apparatus to selectively control processing of a method in a java virtual machine
US6351779B1 (en) * 1999-03-12 2002-02-26 Agilent Technologies, Inc. Extension library to standard visa library for support of complex I/O functions
US6442752B1 (en) * 1999-08-26 2002-08-27 Unisys Corporation Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner
US6567093B1 (en) * 1999-09-09 2003-05-20 Novatek Microelectronics Corp. Single semiconductor chip for adapting video signals to display apparatus
GB2354851B (en) * 1999-10-01 2004-07-21 Ibm Web browser extension and method for processing data content of web pages
US6658658B1 (en) * 2000-02-17 2003-12-02 International Business Machines Corporation Implicit forwarding and resolving of a reference made by an importing module to an exporting module for a specified export
US6874148B1 (en) * 2000-06-14 2005-03-29 National Instruments Corporation System and method for exporting a graphical program to a shared library
FR2820221B1 (fr) * 2001-02-01 2004-08-20 Cimai Technology Procede et systeme pour gerer des executables a bibliotheques partagees
US6804709B2 (en) * 2001-02-20 2004-10-12 Microsoft Corporation System uses test controller to match different combination configuration capabilities of servers and clients and assign test cases for implementing distributed testing
US7191184B2 (en) * 2001-05-02 2007-03-13 National Instruments Corporation Optimized storage for measurement data
US7769823B2 (en) * 2001-09-28 2010-08-03 F5 Networks, Inc. Method and system for distributing requests for content
US7013423B2 (en) * 2002-06-27 2006-03-14 International Business Machines Corporation Omitting forwarder pages in a history list in a browser
US20040077309A1 (en) * 2002-10-18 2004-04-22 Richard Brass Wireless signal forwarder
US20040123308A1 (en) * 2002-12-20 2004-06-24 Siemens Information And Communication Networks, Inc. Hybird of implicit and explicit linkage of windows dynamic link labraries
US7308684B2 (en) * 2003-06-16 2007-12-11 Microsoft Corporation Classifying software and reformulating resources according to classifications
US7210124B2 (en) * 2003-06-16 2007-04-24 Microsoft Corporation Reformulating resources with nodes reachable from defined entry points
US7590736B2 (en) * 2003-06-30 2009-09-15 Microsoft Corporation Flexible network load balancing

Also Published As

Publication number Publication date
ATE386976T1 (de) 2008-03-15
US7690007B2 (en) 2010-03-30
EP1678607B1 (en) 2008-02-20
DE602004011974T2 (de) 2009-02-12
US20070220508A1 (en) 2007-09-20
JP2007510210A (ja) 2007-04-19
WO2005052790A1 (en) 2005-06-09
GB2407655A (en) 2005-05-04
GB2407655B (en) 2009-08-05
EP1678607A1 (en) 2006-07-12
GB0325145D0 (en) 2003-12-03
DE602004011974D1 (de) 2008-04-03

Similar Documents

Publication Publication Date Title
KR101581796B1 (ko) 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
US9207918B2 (en) Firmware extension method and firmware builder
US7644406B2 (en) Update system capable of updating software across multiple FLASH chips
US9710396B2 (en) Sharing virtual memory-based multi-version data between the heterogeneous processors of a computer platform
ES2209947T3 (es) Metodo y sistema para la distribucion de programas de ordenador orientados a objetos.
US8719839B2 (en) Two way communication support for heterogenous processors of a computer platform
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
US10353717B2 (en) Build-time memory management for multi-core embedded system
CN106796521B (zh) 独立于产品发布的api版本控制
Pemstein et al. The Scythe statistical library: An open source C++ library for statistical computation
US20120017067A1 (en) On-demand predicate registers
ES2302031T3 (es) Trazado de bibliotecas de enlace dinamico en un dispositivo informatico.
US10620916B2 (en) Read-only communication operator
JP2012099155A (ja) 実行時多態性
TW201527976A (zh) 積體電路無線電
CN101853154A (zh) 简化具有动态库的接口的方法
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
Hoemmen Purging reliance on UVM from Tpetra & downstream solvers.
Edmonds et al. Extensible PGAS semantics for C++
CN117492761A (zh) 应用于多项目的软件开发编译方法、装置、设备及介质
DASH GRAPHICAL LCD DEVICE DRIVER DEVELOPMENT AND OPTIMIZATION OF BOOT TIME FOR EMBEDDED DEVICE
Tao Texas Instruments DSP Dynamic Run-Time Loader
Häkkinen et al. C++ coding guidelines