Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático.

Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático.

Procedimiento para virtualizar recursos de hardware asociado a un sistema informático por parte de una pieza de código ejecutable adaptada para ser inyectada en un proceso perteneciente a una aplicación que se ejecuta sobre un sistema operativo que comprende al menos una API que se ejecuta sobre el sistema informático

, que comprende interceptar una llamada del proceso a un servicio de una API relacionado con la gestión del flujo de datos producido entre el proceso y el recurso de hardware; gestionar el flujo de datos producido entre el proceso y el recurso de hardware por parte de la pieza de código, a partir de la interceptación de la llamada del proceso al servicio de la API relacionado con la gestión del flujo de datos producido entre el proceso y el recurso de hardware.

Tipo: Patente de Invención. Resumen de patente/invención. Número de Solicitud: P201230581.

Solicitante: UNIVERSITAT POLITECNICA DE CATALUNYA.

Nacionalidad solicitante: España.

Inventor/es: JAVIER,Verdú Mulá, PAJUELO GONZÁLEZ,Manuel Alejandro.

Fecha de Publicación: .

Clasificación Internacional de Patentes:

  • SECCION G — FISICA > COMPUTO; CALCULO; CONTEO > TRATAMIENTO DE DATOS DIGITALES ELECTRICOS (computadores... > Disposiciones para el control por programa, p. ej.... > G06F9/455 (Emulación; Simulación de software)
google+ twitter facebookPin it
Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático.

Fragmento de la descripción:

Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático La presente invención se refiere a un procedimiento para virtualizar un recurso de hardware asociado a un sistema informático mediante una pieza de código ejecutable adaptada para ser inyectada en un proceso perteneciente a una aplicación que se ejecuta sobre un sistema operativo que comprende al menos una interfaz de programación de aplicaciones (API) y que se ejecuta sobre el sistema informático.

La invención se refiere también a un sistema y a la pieza de código ejecutable adecuados para llevar a cabo este procedimiento.

Antecedentes de la invención Desde hace ya algunos años, principalmente desde la consolidación del modelo de computación en la nube, el concepto de “virtualización” está tomando una posición destacada dentro del mundo de la informática.

Básicamente, la virtualización puede definirse como la creación mediante software de una versión virtual de un recurso tecnológico, tal como una plataforma de hardware, un sistema operativo, un dispositivo de almacenamiento de datos u otros recursos de red, de manera que este recurso pueda dividirse en uno o más entornos de ejecución. Es importante destacar que también puede darse el caso en el que este software esté asistido por tecnología hardware de virtualización, tal como Intel-VT o AMD-V (ver, por ejemplo, Wikipedia en español http://es.wikipedia.org/wiki/Virtualización) .

Uno de los recursos tecnológicos que más comúnmente se virtualiza es un sistema informático (por ejemplo, un ordenador personal o un servidor) , que permite a este sistema informático ejecutar múltiples instancias de diferentes sistemas operativos de forma concurrente. De este modo, el sistema informático es capaz de ejecutar diferentes aplicaciones que requieren diferentes sistemas operativos.

Es conocido también un tipo de virtualización que permite emular los recursos de hardware del sistema informático. Para ello es necesario instalar en el sistema informático un software de virtualización que tiene como objetivo hacer accesibles los recursos de hardware del sistema informático a todos los sistemas operativos instalados. Además, este software de virtualización tiene también como objetivo coordinar el acceso a los recursos de hardware virtualizados por parte de los diferentes sistemas operativos instalados en el sistema informático.

La virtualización de recursos de hardware de un sistema informático (aunque también es aplicable a cualquier otro tipo de virtualización) , a pesar que presenta algunas ventajas (por ejemplo, como se ha comentado anteriormente, permite la ejecución de varios sistemas operativos de forma concurrente sobre un mismo sistema informático) , también presenta un número importante de inconvenientes.

Así, por ejemplo, este tipo de virtualización puede suponer una disminución en el rendimiento del sistema informático, como resultado de la sobrecarga que supone la ejecución del software de virtualización sobre el sistema informático. Entre otras, puede verse afectada la ejecución de las aplicaciones, las cuales pueden correr más lentas que en sistemas que no son virtuales.

Relacionado con el inconveniente anterior, en muchos casos este tipo de virtualización puede virtualizar recursos que en ningún caso van a ser usados o necesitan ser virtualizados. Así, por ejemplo, si se pretende virtualizar el teclado de un sistema informático para que cada aplicación en ejecución disponga de un teclado virtual, sería necesario, de acuerdo con el estado de la técnica, crear tantos sistemas informáticos virtuales (máquina virtual más sistema operativo) como teclados virtuales sean requeridos por las diferentes aplicaciones en ejecución. Ello supone un consumo innecesario de recursos del sistema que, tal como se ha descrito anteriormente, repercute en el rendimiento del mismo.

Descripción de la invención Por lo tanto, es un objetivo de la presente invención proporcionar un procedimiento para virtualizar un recurso de hardware determinado asociado a un sistema informático, sin necesidad de virtualizar la totalidad de sus recursos de hardware del sistema.

Este objetivo se consigue de acuerdo con la reivindicación 1 proporcionando un procedimiento para virtualizar un recurso de hardware asociado a un sistema informático por parte de una pieza de código ejecutable adaptada para ser inyectada en un proceso perteneciente a una aplicación que se ejecuta sobre un sistema operativo que comprende al menos una interfaz de programación de aplicaciones (API) y que se ejecuta sobre el sistema informático, comprendiendo el procedimiento:

- Interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una API relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware;

- Gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware por parte de la pieza de código, a partir de la interceptación de la llamada del proceso al servicio de la API relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware.

De este modo, a diferencia del estado de la técnica, cada aplicación que se ejecuta sobre el sistema operativo del sistema informático, mediante la pieza de código inyectada, puede virtualizar aquellos dispositivos de hardware requeridos para su ejecución, sin necesidad de virtualizar la totalidad de los recursos de hardware asociados al sistema. Esto supone una reducción en el consumo de recursos del sistema, al no virtualizarse recursos (por ejemplo, el sistema operativo o cualquier recurso de hardware del sistema informático) que en ningún caso van a ser usados o necesitan ser virtualizados. Realmente, en la presente invención no existe un software de virtualización de la totalidad de los recursos del sistema informático tal como sucede en el estado de la técnica, sino que es la pieza de código inyectada a cada aplicación que se ejecuta sobre el sistema informático la que decide o tiene previamente establecido qué recursos de hardware debe virtualizar para la correcta ejecución de la aplicación.

Siguiendo con el ejemplo de la virtualización del teclado de un sistema informático, con la presente invención sólo es necesario crear el teclado virtual, en lugar de todo el sistema informático. De esta forma, se consigue que la aplicación se ejecute directamente en la máquina real, no en la virtualizada, reduciendo mucho la sobrecarga introducida por la virtualización: sólo se produce una sobrecarga, aunque muy reducida, cuando se leen datos del teclado, en lugar de una sobrecarga importante en la ejecución de cada instrucción del programa.

Por otro lado, es importante destacar que la expresión “gestión del flujo de datos” se refiere a la transmisión y/o control del flujo de datos, de manera que los servicios que el proceso llama están relacionados con la gestión del flujo de datos. De este modo, cuando la pieza de código inyectada intercepta la llamada, es la pieza de código la que controla esta gestión, enviando por ejemplo el contenido de un búfer virtual.

Para conseguir el objetivo descrito anteriormente es necesario en primer lugar interceptar las llamadas que el proceso perteneciente a la aplicación realiza a los servicios relacionados con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware. Por el término “interceptar” se entiende el hecho que la llamada del proceso al servicio de la API supone una redirección a un servicio comprendido en la pieza de código, de manera que es la propia pieza de código la que recibe la llamada del proceso...

 


Reivindicaciones:

1. Procedimiento para virtualizar un recurso de hardware asociado a un sistema informático por parte de una pieza de código ejecutable adaptada para ser inyectada en un proceso perteneciente a una aplicación que se ejecuta sobre un sistema operativo que comprende al menos una interfaz de programación de aplicaciones y que se ejecuta sobre el sistema informático, comprendiendo el procedimiento:

- Interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware, cuya interceptación supone redireccionar el servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código;

- Gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware por parte de la pieza de código, a partir de la interceptación de la llamada del proceso al servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware.

2. Procedimiento según la reivindicación 1, en el que el servicio de la interfaz de programación de aplicaciones es una función, y en el que redireccionar un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código comprende:

• Cargar en memoria la librería de enlace dinámico que comprende la función de la interfaz de programación de aplicaciones a redireccionar;

• Sustituir, en la tabla de punteros a las funciones de la interfaz de programación de aplicaciones comprendidas en la librería de enlace dinámico cargada, la dirección de memoria inicial en la que se almacena la función de la interfaz de programación de aplicaciones a redireccionar por la dirección de memoria inicial en la que se almacena la función correspondiente comprendida en la pieza de código.

3. Procedimiento según la reivindicación 2, en el que redireccionar un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código comprende:

• Almacenar en una primera variable la dirección de memoria inicial en la que se almacena la función de la interfaz de programación de aplicaciones a redireccionar.

4. Procedimiento según una cualquiera de las reivindicaciones 1 a 3, en el que el servicio de la interfaz de programación de aplicaciones es un método de un objeto, y en el que redireccionar un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código comprende:

• Cargar en memoria la librería de enlace dinámico que comprende el método del objeto a redireccionar;

• Verificar si el objeto asociado al método a redireccionar se crea por primera vez;

• En caso de resultado positivo en la verificación,

o Sustituir, en la tabla de punteros a los métodos del objeto comprendidos en la librería de enlace dinámico cargada, la dirección de memoria inicial en la que se almacena el método del objeto a redireccionar, por la dirección de memoria inicial en la que se almacena el método correspondiente comprendido en la pieza de código.

5. Procedimiento según la reivindicación 4, en el que redireccionar un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código comprende:

• Almacenar en una segunda variable la dirección de memoria inicial en la que se almacena el método del objeto a redireccionar.

6. Procedimiento según una cualquiera de las reivindicaciones 1 a 5, en el que interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Recibir una llamada del proceso al servicio comprendido en la pieza de código correspondiente al servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware.

7. Procedimiento según una cualquiera de las reivindicaciones 1 a 6, en el que el proceso perteneciente a la aplicación se ha iniciado en estado de suspensión, y que comprende:

-Reanudar la ejecución del proceso perteneciente a la aplicación que se encuentra en estado de suspensión.

8. Procedimiento según una cualquiera de las reivindicaciones 1 a 7, en el que gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Verificar si se ha generado un recurso de hardware virtualizado que se corresponde con el recurso de hardware;

• En caso de resultado negativo en la verificación, generar el recurso de hardware virtualizado.

9. Procedimiento según la reivindicación 8, en el que generar el recurso de hardware virtualizado comprende:

o Generar un búfer que virtualiza el búfer asociado al recurso de hardware.

10. Procedimiento según una cualquiera de las reivindicaciones 8 ó 9, en el que generar el recurso de hardware virtualizado comprende:

o Generar un hilo de ejecución que emula el comportamiento del recurso de hardware.

11. Procedimiento según una cualquiera de las reivindicaciones 9 ó 10, en el que gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Almacenar en el búfer virtualizado los datos enviados por el proceso al recurso de hardware.

12. Procedimiento según la reivindicación 11, en el que gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Parar durante un tiempo predeterminado el hilo de ejecución generado que emula el comportamiento del recurso de hardware;

• Obtener los datos almacenados en el búfer virtualizado, previamente enviados por el proceso al recurso de hardware;

• Procesar los datos obtenidos.

13. Procedimiento según la reivindicación 12, en el que gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Enviar los datos procesados a un primer sistema informático remoto.

14. Procedimiento según la reivindicación 8, que comprende:

- Gestionar el flujo de datos que se produce desde el recurso de hardware virtualizado al proceso perteneciente a la aplicación.

15. Procedimiento según una cualquiera de las reivindicaciones 9 a 13, que comprende:

- Gestionar el flujo de datos que se produce desde el recurso de hardware virtualizado al proceso perteneciente a la aplicación, que comprende:

• Recibir datos desde un segundo sistema informático remoto;

• Procesar los datos recibidos;

• Almacenar los datos procesados en el búfer virtualizado.

16. Procedimiento según la reivindicación 15, en el que interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• Interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce desde el recurso de hardware al proceso;

y en el que gestionar el flujo de datos que se produce desde el recurso de hardware virtualizado al proceso perteneciente a la aplicación comprende:

• Recuperar los datos almacenados en el búfer virtualizado;

• Enviar los datos recuperados al proceso.

17. Procedimiento según la reivindicación 16, en el que interceptar una llamada del proceso a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce desde el recurso de hardware al proceso comprende:

• Recibir una llamada del proceso al servicio comprendido en la pieza de código correspondiente al servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce desde el recurso de hardware al proceso.

18. Procedimiento según una cualquiera de las reivindicaciones 16 ó 17, en el que gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware comprende:

• gestionar el flujo de datos que se produce desde el recurso de hardware al proceso, que comprende:

o Verificar si existen datos en el búfer procedentes del recurso de hardware;

o En caso de resultado positivo en la verificación, eliminar estos datos.

19. Pieza de código ejecutable que comprende instrucciones para ejecutar un procedimiento para virtualizar un recurso de hardware asociado a un sistema informático según una cualquiera de las reivindicaciones 1 a 18, estando esta pieza

de código adaptada para ser inyectada en un proceso perteneciente a una aplicación, cuando esta aplicación se ejecuta sobre un sistema operativo que comprende al menos una interfaz de programación de aplicaciones (API) y que se ejecuta sobre el sistema informático.

20. Pieza de código ejecutable según la reivindicación 19, que está almacenada en unos medios de almacenamiento.

21. Pieza de código ejecutable según la reivindicación 19, que es portada por una onda portadora.

22. Sistema para virtualizar un recurso de hardware asociado a un sistema informático sobre el que se ejecuta un sistema operativo que comprende al menos una interfaz de programación de aplicaciones y sobre el que se ejecuta una aplicación que comprende un proceso, comprendiendo el sistema:

- Medios informáticos para interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware, cuya interceptación supone redireccionar el servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código;

- Medios informáticos para gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware por parte de la pieza de código, a partir de la interceptación de la llamada del proceso al servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware.

23. Sistema informático sobre el que se ejecuta un sistema operativo que comprende al menos una interfaz de programación de aplicaciones y sobre el que se ejecuta al menos una aplicación, comprendiendo el sistema informático una memoria y al menos un procesador, almacenando esta memoria instrucciones ejecutables por el procesador correspondientes a una pieza de código ejecutable según una cualquiera de las reivindicaciones 19 a 21 inyectada en un proceso perteneciente a la aplicación, comprendiendo las instrucciones funcionalidades para:

- Interceptar una llamada del proceso perteneciente a la aplicación a un servicio de una interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware, cuya interceptación supone redireccionar el servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware hacia un servicio correspondiente comprendido en la pieza de código;

- Gestionar el flujo de datos que se produce entre el proceso y el recurso de hardware por parte de la pieza de código, a partir de la interceptación de la llamada del proceso al servicio de la interfaz de programación de aplicaciones relacionado con la gestión del flujo de datos que se produce entre el proceso y el recurso de hardware.

24. Sistema informático según la reivindicación 23, en el que se ejecutan al menos dos aplicaciones sobre el sistema operativo, y en el que la memoria almacena instrucciones ejecutables por el procesador correspondientes a una pieza de código para cada aplicación en ejecución.

25. Aplicación ejecutable sobre un sistema operativo que se ejecuta sobre un sistema informático, comprendiendo esta aplicación una pieza de código ejecutable según una cualquiera de las reivindicaciones 19 a 21.