ES2209969T3 - Protocolo de gestion, procedimiento de verificacion y de transformacion de un fragmento de programa descargado y sistemas correspondientes. - Google Patents
Protocolo de gestion, procedimiento de verificacion y de transformacion de un fragmento de programa descargado y sistemas correspondientes.Info
- Publication number
- ES2209969T3 ES2209969T3 ES00958714T ES00958714T ES2209969T3 ES 2209969 T3 ES2209969 T3 ES 2209969T3 ES 00958714 T ES00958714 T ES 00958714T ES 00958714 T ES00958714 T ES 00958714T ES 2209969 T3 ES2209969 T3 ES 2209969T3
- Authority
- ES
- Spain
- Prior art keywords
- instruction
- program
- stack
- types
- verification
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Communication Control (AREA)
- Maintenance And Management Of Digital Transmission (AREA)
Abstract
Protocolo de gestión de un fragmento de programa descargado en un sistema portable reprogramable, tal como una tarjeta con microprocesador provisto de una memoria de lectura - escritura, el mencionado fragmento de programa está constituido por un código objeto, secuencia de instrucciones, ejecutable por el microprocesador del sistema portable por medio de una máquina virtual provista de una pila de ejecución y de registros o variables locales manipulados por estas instrucciones y que permiten interpretar este código objeto, el mencionado sistema portable está interconectado a un terminal, caracterizado por el hecho de que este protocolo consiste al menos, al nivel del mencionado sistema portable: a) en detectar un comando de descarga de este fragmento de programa; y con una respuesta positiva en esta etapa que consiste en detectar un comando de descarga, b) en leer el código objetivo que constituye este fragmento de programa y en memorizar temporalmente este código objeto; c) en someter elconjunto del código objeto memorizado temporalmente a un proceso de verificación instrucción por instrucción, este proceso de verificación consiste al menos en una etapa de inicialización de la pila de los tipos en un estado de vacío y de la tabla de los tipos de registros a un tipo que representa la intersección de todos los tipos de datos, que representan el estado de la mencionada máquina virtual al principio de la ejecución del código objeto memorizado temporalmente y en una sucesión de etapas de verificación, instrucción por instrucción, por discriminación de la existencia, para cada instrucción corriente, de un objetivo, objetivo de instrucción de conexión, objetivo de una llamada de un gestor de excepciones u objetivo de una llamada de sub-rutina y por una verificación y una actualización del efecto de la mencionada instrucción corriente sobre la pila de los tipos y sobre la tabla de los tipos de registros, y, en el caso de una verificación lograda del mencionado código objeto, d) enregistrar el fragmento de programa descargado en un repertorio de fragmentos de programas disponibles, y, en el caso de una verificación no lograda del mencionado código objeto, e) en inhibir la ejecución, en el sistema portable, del mencionado fragmento de programa.
Description
Protocolo de gestión, procedimiento de
verificación y de transformación de un fragmento de programa
descargado y sistemas correspondientes.
La invención se refiere a un protocolo de
gestión, un procedimiento de comprobación, un procedimiento de
transformación de un fragmento de programa descargado y los
sistemas correspondientes, más particularmente destinados a los
sistemas informáticos portables que disponen de débiles recursos de
memoria y de potencia de cálculo.
De un modo general, con referencia a la figura
1a, se recuerda que los sistemas informáticos portables (10)
constan de un microprocesador (11), una memoria permanente, tal
como una memoria no de lectura - escritura (12) que contiene el
código del programa ejecutable, una memoria permanente, no volátil,
de lectura - escritura (13) del tipo EEPROM que contiene los datos
almacenados en el sistema, una memoria viva, volátil (14), en la
cual el programa almacena sus resultados intermedios durante su
ejecución, y unos dispositivos de entrada / salida (15) que
permiten al sistema de interactuar con su entorno. En el caso en que
el sistema informático portable está constituido por una tarjeta
con microprocesador, del tipo de tarjeta bancaria, el dispositivo
de entrada / salida (15) consiste en una unión en serie que permite
a la tarjeta comunicar con un terminal, tal como un terminal lector
de tarjetas.
En los sistemas informáticos portables clásicos,
el código del programa ejecutado por el sistema está fingido
durante la construcción del sistema, o, como muy tarde, durante la
personalización de este último antes de la entrega al usuario
final.
Sin embargo, se han puesto en práctica unos
sistemas informáticos portables más evolucionados, estos sistemas
son reprogramables, como por ejemplo las tarjetas con
microprocesador del tipo JavaCard. Estos sistemas programables
añaden, en relación con los precedentes, la posibilidad de
enriquecer el programa después de la puesta en servicio del
sistema, por una operación de descarga de fragmentos de programas.
Estos fragmentos de programas, comúnmente designados por
"applets" en el lenguaje anglo-sajón, serán
designados de modo indiferente por aplicaciones o fragmentos de
programas en la presente descripción. Para una descripción más
detallada de los sistemas JavaCard, se podrá de modo útil referirse
a la documentación editada por la sociedad SUN MICROSYSTEMS INC. Y
en particular a la documentación disponible electrónicamente,
capítulo tecnología JavaCard en el lugar W.W.W. (World Wide Web)
http://java.sun.com/products/javacard/index.html, junio 1999.
La figura 1b ilustra la arquitectura de tal
sistema informático portable reprogramable. Esta arquitectura es
similar a la de un. sistema portable clásico, con la diferencia que
el sistema portable reprogramable puede además recibir aplicaciones
por medio de uno de sus dispositivos de entrada / salida, luego
almacenar estos últimos en su memoria permanente (13) a partir de la
que a continuación se pueden ejecutar como complemento al programa
principal.
Por motivos de portabilidad entre los diferentes
sistemas informáticos portables, las aplicaciones se presentan en
forma de código para una máquina virtual standard. Este código no
es directamente ejecutable por el microprocesador (11) pero debe
ser interpretado del modo lógico por una máquina virtual (16), que
está constituida por un programa residente en memoria permanente
no de lectura - escritura (12). En el ejemplo anteriormente citado
de las tarjetas JavaCard, la máquina virtual utilizada es un
sub-conjunto de la máquina virtual Java. Para una
descripción de las especificaciones en relación con la máquina
virtual Java y de la máquina virtual utilizada, se podrá útilmente
referirse a la obra publicada por Tim LINDHOLM y Frank YELLIN,
titulada "The Java Virtual Machine Specificacion",
Addison-Wesley 1996, y a la documentación editada
por la Sociedad SUN MICROSYSTEMS INC. "JavaCard 2.1. Virtual
Machine Specification", documentación disponible electrónicamente
en el lugar W.W.W.
http://java.sun.com/products/javacard/JCVMSpec.pdf, marzo 1999.
La operación de descarga de la aplicación en un
sistema informático portable en servicio presenta importantes
problemas de seguridad. Una aplicación mal escrita de modo
involuntario, hasta voluntario, puede modificar de modo incorrecto
unos datos presentes en el sistema, impedir que el programa
principal se ejecute correctamente o en un tiempo deseado, o aún
modificar otras aplicaciones descargadas anteriormente, haciéndoles
inutilizables o dañinas.
Una aplicación escrita por un pirata informático
puede igualmente divulgar informaciones confidenciales almacenadas
en el sistema, informaciones tales como el código de acceso en el
caso de una tarjeta bancaria por ejemplo.
En la actualidad, se han propuesto tres
soluciones con vistas a remediar el problema de seguridad de las
aplicaciones.
Una primera solución consiste en utilizar unas
firmas criptográficas con el fin de solo aceptar unas aplicaciones
procedentes de personas o de organismos de confianza. En el ejemplo
de una tarjeta bancaria anteriormente citado, solo las aplicaciones
que llevan la firma criptográfica del banco que haya emitido la
tarjeta son aceptadas y ejecutadas por la tarjeta, toda otra
aplicación no firmada es rechazada en el transcurso de la operación
de descarga. Un usuario mal intencionado de la tarjeta, que no
tiene claves numéricas del banco, no será por tanto capaz de hacer
ejecutar una aplicación no firmada y peligrosa en la tarjeta. Esta
primera solución está bien adaptada al caso en que todas las
aplicaciones proceden de una misma fuente única, el banco en el
ejemplo anteriormente citado. Esta solución es difícilmente
aplicable al caso en que las aplicaciones proceden de varias
fuentes, como, en el ejemplo de una tarjeta bancaria, el fabricante
de la tarjeta, el banco, los organismos de gestión de los servicios
por la tarjeta bancaria, los grandes organismos de distribución
comercial que ofrecen a la clientela unos programas de fidelización
y que proponen, legítimamente, descargar unas aplicaciones
específicas en la tarjeta. La compartición y la detención entre
estos diferentes actores económicos de las claves numéricas
necesarias para la firma electrónica de las aplicaciones presentan
unos problemas técnicos, económicos y jurídicos principales.
Una segunda solución consiste en llevar a cabo
unos controles dinámicos de acceso y de tipo durante la ejecución
de las aplicaciones.
En esta solución, la máquina virtual durante la
ejecución de las aplicaciones lleva a cabo una cierta cantidad de
controles, tales como:
- -
- el control de acceso a la memoria: en cada lectura o escritura de una zona de memoria, la máquina virtual comprueba el derecho de acceso de la aplicación a los datos correspondientes;
- -
- la comprobación dinámica de los tipos de datos: en cada instrucción de la aplicación, la máquina virtual comprueba que se satisfacen las restricciones en los tipos de datos. A título de ejemplo, la máquina virtual puede tratar especialmente los datos tales como unas direcciones de memoria válidas e impedir que la aplicación engendre unas direcciones de memoria inválidas por medio de conversiones entera / dirección o de operaciones aritméticas en las direcciones:
- -
- la detección de los desbordamientos de pila y de los accesos ilegales en la pila de ejecución de la máquina virtual, que, en ciertas condiciones, son susceptibles de perturbar el funcionamiento de la última, al punto de eludir los mecanismos de control precedentes.
Esta segunda solución permite la ejecución de una
gran gama de aplicaciones en unas condiciones de seguridad
satisfactorias. Sin embargo presenta el inconveniente de una
reducción considerable de la velocidad de la ejecución, provocada
por el conjunto de las verificaciones dinámicas. Para obtener una
reducción de esta reducción de velocidad, una parte de estas
comprobaciones puede ser llevada a cabo por el microprocesador
mismo, sin embargo al precio de un aumento de la complejidad de
este último y por tanto en el precio de coste del sistema portable.
Tales verificaciones aumentan además las necesidades de memoria
viva y permanente del sistema, a razón de las informaciones
suplementarias de tipo que es necesario asociar a los datos
manipulados.
Una tercera solución consiste en llevar a cabo
una comprobación estática del código de la aplicación durante la
descarga. En esta solución, esta comprobación estática simula la
ejecución de la aplicación al nivel de los tipos de datos y
establece, una vez por todas, que el código de la aplicación respeta
la regla de los tipos de datos y de control de acceso impuesta por
la máquina virtual y no provoca desbordamiento de pila. Si esta
verificación estática se logra, la aplicación puede entonces ser
ejecutada sin que sea necesario comprobar de modo dinámico que esta
norma sea respetada. En el caso en que el proceso de comprobación
estática falla, el sistema portable rechaza la "aplicación" y
no permite su ejecución ulterior. Para una descripción más
detallada de la tercera solución anteriormente citada, se podrá de
modo útil referirse a la obra editada por Tim LINDHOLM y Frank
YELLIN, anteriormente citada, al artículo publicado por James A.
GOSLING, titulado "Java Intermediate Byte Codes", Documentos de
ACM SIGPLAN, Taller sobre Representaciones Intermedias (IR '95),
páginas 111-118, enero 1995, y a la patente US
5.748.964 entregada el 05/05/1998.
En relación con la segunda solución, la tercera
solución presenta la ventaja de una ejecución de las aplicaciones
de modo mucho más rápido, ya que la máquina virtual no lleva a cabo
ninguna comprobación durante la ejecución. Sin embargo, la tercera
solución presenta el inconveniente de un proceso de verificación
estática del código complejo y costoso, tanto en tamaño del código
necesario para conducir este proceso, como en el tamaño de la
memoria viva necesaria para contener los resultados intermedios de
la comprobación, y en el tiempo de cálculo. A título de ejemplo de
ilustración, la comprobación del código integrado en el sistema
Java JDK comercializado por SUN MICROSYSTEMS representa del orden
de 50 k-octetos de código de máquina, y su consumo
de memoria viva es proporcional a (Tp + Tr) x Nb donde, (Tp)
designa el espacio máximo de pila, Tr designa la cantidad máxima de
registros y (Nb) designa la cantidad máxima de objetivos de unas
conexiones utilizadas por un sub-programa, aún
comúnmente designado por método, de la aplicación. Estas
necesidades de memoria sobrepasan ampliamente las capacidades de
los recursos de la mayoría de los sistemas informáticos portables
actuales, notablemente de las tarjetas con microprocesador
comercialmente disponibles. Se han propuesto varias variantes de la
tercera solución, en las cuales el editor de la aplicación transmite
al comprobador, aparte del código de la aplicación, un cierto
número de informaciones suplementarias específicas tales como los
tipos de datos calculados previamente o prueba establecida
previamente de la tipificación de datos correcta. Para una
descripción más detallada de los modos de operación
correspondientes, se podrá de modo útil referirse a los artículos
publicados por Eva ROSE y Kristoffer HOGSBRO ROSE, "Lightweight
Bytecode Vérification", Documentos del Workshop Formal
Underspinning de Java, Octubre 1998, y por George C. NECULA,
"Proof-Carrying Code", Documentos del 24^{e}
ACM Principios de Simposio de Lenguajes de Programación, páginas
106-119 respectivamente. Estas informaciones
suplementarias permiten comprobar el código con mayor rapidez y
reducir ligeramente el tamaño del código del programa de
verificación pero sin embargo no permiten reducir las necesidades
de memoria viva, hasta las aumentan, de modo muy importante, en el
caso de informaciones de prueba establecidas previamente de la
tipificación de datos correcta.
La presente invención tiene como objeto remediar
los inconvenientes anteriormente citados del tipo previo.
En particular, es un objeto de la presente
invención la puesta en práctica de un protocolo de gestión de un
fragmento de programa, o aplicación, descargado que permite una
ejecución de este último por un sistema informático portable que
dispone de débiles recursos, tal como una tarjeta de
microprocesador.
Es igualmente otro objeto de la presente
convención la puesta en práctica de un procedimiento de
comprobación de un programa, o aplicación, descargado, en el cual
se lleva a cabo un proceso de comprobación estática del código de la
aplicación durante su descarga, este proceso puede ser aproximado,
al menos en su principio, de la tercera solución anteriormente
descrita, pero en la cual se introducen unas nuevas técnicas de
comprobación, con el fin de permitir la ejecución de esta
comprobación en los límites de valores de talla de memoria y de
velocidad de cálculo impuestos por las tarjetas con microprocesador
y otros sistemas informáticos portables poco potentes.
Otro objeto de la presente invención es
igualmente la puesta en práctica de procedimientos de
transformación de fragmentos de programas de tipo clásico obtenidos
por ejemplo por la puesta en práctica de un compilador Java en
fragmentos de programa, o aplicaciones, normalizados, que satisfacen
a priori a los criterios de comprobación del procedimiento
de verificación objeto de la invención, con vistas a acelerar el
proceso de comprobación y de ejecución de estos últimos a nivel de
los sistemas informáticos portables o tarjetas con microprocesador
actuales.
Finalmente, es otro objeto de la invención, la
realización de sistemas informáticos portables que permiten la
puesta en práctica del protocolo de gestión y del procedimiento de
verificación de un fragmento de programa descargado, anteriormente
mencionados, así como de sistemas informáticos que permiten la
puesta en práctica de los procedimientos de transformación de
fragmentos de programas, o aplicaciones, clásicos en fragmentos de
programas, o aplicaciones, normalizados previamente
mencionados.
El protocolo de gestión de un fragmento de
programa descargado en un sistema portable reprogramable, objeto de
la presente invención, se aplica notablemente a una tarjeta con
microprocesador provisto de una memoria de lectura - escritura. El
fragmento de programa está constituido por un código objeto,
secuencia de instrucciones, ejecutable por el microprocesador del
sistema portable por medio de una máquina virtual provista de una
pila de ejecución y de registros o variables locales manipulados
por estas instrucciones y que permiten interpretar este código
objeto. El sistema portable está interconectado con un terminal. Es
notable en que consiste al menos, al nivel del sistema portable,
para detectar un comando de descarga del fragmento del programa. En
una respuesta positiva en la etapa que consiste en detectar un
comando de descarga, consiste además en leer el código objeto que
constituye el fragmento de programa y en memorizar temporalmente
este código objeto en la memoria de lectura - escritura. El
conjunto del código objeto memorizado está sometido a un proceso de
comprobación, instrucción por instrucción. El proceso de
verificación consiste al menos en una etapa de inicialización de la
pila de los tipos y de la tabla de los tipos de registros que
representa el estado de la máquina virtual al principio de la
ejecución del código objeto memorizado temporalmente y en una
sucesión de etapas de verificación instrucción por instrucción de la
existencia, para cada instrucción corriente, de un objetivo,
objetivo de instrucción de conexión, objetivo de un gestor de
excepciones, y en una verificación y una actualización del efecto
de la instrucción corriente en la pila de los tipos y en la tabla
de los tipos de registros. En el caso de una verificación no lograda
del código objeto, el protocolo objeto de la invención consiste en
borrar el fragmento de programa registrado temporalmente, en la
ausencia de registro de este último en el repertorio de fragmentos
de programas disponibles, y a dirigir al lector un código de
error.
El procedimiento de comprobación de un fragmento
de programa descargado en un sistema portable, objeto de la
invención, se aplica notablemente a una tarjeta con microprocesador
provista de una memoria de lectura - escritura. El fragmento de
programa está constituido por un código objeto y consta al menos de
un sub-programa, secuencia de instrucciones,
ejecutable por el microprocesador del sistema portable por medio de
una máquina virtual provista de una pila de ejecución y de
registros de operandos manipulados por estas instrucciones y que
permite interpretar este código objeto. El sistema portable está
interconectado a un lector. Es notable por el hecho de que, como
continuación a la detección de un comando de descarga y a la puesta
en memoria del código objeto que constituye el fragmento de
programa en la memoria de lectura - escritura, consiste, para cada
sub-programa, en llevar a cabo una etapa de
inicialización de la pila de los tipos y de la tabla de los tipos
de registros por unos datos que representan el estado de la máquina
virtual al principio de la ejecución del código objeto memorizado
temporalmente, a llevar a cabo una comprobación del código objeto
memorizado temporalmente, instrucción por instrucción, por
discriminación de la existencia, para cada instrucción corriente,
de un objetivo de instrucción de conexión, de un objetivo de un
aparato de un gestor de excepciones o de un objetivo de una llamada
de sub-rutina y a llevar a cabo una verificación y
una actualización del efecto de la instrucción corriente sobre los
tipos de datos de la pila de los tipos y de la tabla de los tipos
de registros, en función de la existencia de un objetivo de
instrucción de conexión, de un objetivo de una llamada de
sub-rutina o de un objetivo de una llamada de gestor
de excepciones. La comprobación se ha logrado cuando la tabla de
los tipos de registros no se modifica a lo largo de una
comprobación de todas las instrucciones, el proceso de verificación
es seguido, instrucción por instrucción hasta que la tabla de los
tipos de registros sea estable, en ausencia de modificación. Si no
el proceso de verificación se interrumpe.
El procedimiento de transformación de un código
objeto de un fragmento de programa en un código objeto normalizado
para este mismo fragmento de programa, objeto de la presente
invención, se aplica a un código objeto de un fragmento de programa
en el cual los operandos de cada instrucción pertenecen a los tipos
de datos manipulados por esta instrucción, la pila de ejecución no
presente un fenómeno de desbordamiento y para cada instrucción de
conexión el tipo de variables de la pila al nivel de esta conexión
es el mismo que al nivel de los objetivos de esta conexión. El
código objeto normalizado obtenido es tal que los operandos de cada
instrucción pertenecen a los tipos de datos manipulados por esta
instrucción, la pila de ejecución no presenta un fenómeno de
desbordamiento y la pila de ejecución está vacía en cada
instrucción de objetivo de conexión. Es notable por el hecho de que
consiste, para el conjunto de las instrucciones del código objeto,
en anotar cada instrucción corriente por el tipo de datos de la
pila de ejecución antes y después de la ejecución de esta
instrucción, los datos de anotación se calculan por medio de un
análisis del flujo de datos relativos a esta instrucción, a
detectar en el seno de las instrucciones, y de cada instrucción
corriente, la existencia de conexiones para las cuales la pila de
ejecución no está vacía, la operación de detección es llevada a
partir de los datos de anotación del tipo de variables de pila
permitidas a cada instrucción corriente. En la presencia de una
detección de una pila de ejecución no vacía, consiste además en
insertar unas instrucciones de transferencia de las variables de
pila por una y otra parte de estas conexiones o de estos objetivos
de conexión con el fin de vaciar el contenido de la pila de
ejecución en unos registros temporales antes de esta conexión y
restablecer la pila de ejecución a partir de los registros
temporales después de esta conexión y si no de no insertar ninguna
instrucción de transferencia. Este procedimiento permite así
obtener un código de objeto normalizado para este mismo fragmento de
programa, en el cual la pila de ejecución está vacía en cada
instrucción de conexión y de objetivo de conexión, en ausencia de
toda modificación de la ejecución del fragmento de programa.
El procedimiento de transformación de un código
objeto de un fragmento de programa, en un código objeto normalizado
para este mismo fragmento de programa, objeto de la presente
invención, se aplica, además, a un código objeto de un fragmento de
programa en el cual los operandos de cada instrucción pertenecen a
los tipos de datos manipulados por esta instrucción, y un operando
de tipo determinado escrito en un registro por una instrucción de
este código objeto es leído de nuevo desde ese mismo registro por
otra instrucción de este código objeto con el mismo tipo de dato
determinado. El código objeto normalizado obtenido es tal que los
operandos pertenecen a los tipos de datos manipulados por esta
instrucción, un solo y mismo tipo de datos está asignado a un mismo
registro en todo el código objeto normalizado. Es notable por el
hecho de que consiste, para el conjunto de las instrucciones del
código objeto, en anotar cada instrucción corriente por el tipo de
datos de los registros antes y después de la ejecución de esta
instrucción, los datos de anotación son calculados por medio de un
análisis del flujo de datos en relación con esta instrucción, y en
llevar a cabo una nueva asignación de los registros de origen
empleados con unos tipos diferentes, por división de estos
registros de origen en registros normalizados distintos. Un
registro normalizado es permitido para cada tipo de dato utilizado.
Se lleva a cabo una nueva actualización de las instrucciones que
manipulan los operandos que emplean los registros normalizados.
El protocolo de gestión de un fragmento de
programa, el procedimiento de verificación de un fragmento de
programa, los procedimientos de transformación de código objeto de
fragmentos de programas en código objeto normalizado y los sistemas
correspondientes, objetos de la presente invención, encuentran
aplicación en el desarrollo de los sistemas portables
reprogramables, tales como tarjetas con microprocesador,
notablemente en el entorno Java.
Se comprenderá mejor con la lectura de la
descripción y con la observación de los dibujos seguidamente
indicados, aparte de las figuras 1a y 1b relativas al tipo previo,
en los cuales:
- la figura 2 representa un organigrama
ilustrativo del protocolo de gestión de un fragmento de programa
descargado en un sistema portable reprogramable,
- la figura 3a representa, a título de
ilustración, un organigrama de un procedimiento de comprobación de
un fragmento de programa descargado conforme al objeto de la
presente invención,
- la figura 3b representa un diagrama ilustrativo
de los tipos de datos y de las relaciones de
sub-tipo puesta en práctica por el procedimiento de
gestión y el procedimiento de verificación de un fragmento de
programa descargado, objeto de la presente invención,
- la figura 3c representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de una instrucción de conexión.
- la figura 3d representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de una instrucción de llamada de
sub-rutina.
- la figura 3e representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de un objetivo de un gestor de
excepciones
- la figura 3f representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de un objetivo de conexiones
incompatibles,
- la figura 3g representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de una ausencia de un objetivo de
conexión.
- la figura 3h representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión del efecto de la instrucción corriente
sobre la pila de tipos,
- la figura 3i representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de una instrucción de lectura de un
registro,
- la figura 3j representa un detalle del
procedimiento de comprobación de acuerdo con la figura 3a en
relación con la gestión de una instrucción de escritura de un
registro.
- la figura 4a representa un organigrama
ilustrativo de un procedimiento de transformación de un código
objeto de un fragmento de programa en un código objeto normalizado
para este mismo fragmento de programa con instrucción de conexión
respectivamente del objetivo de conexión con pila vacía,
- la figura 4b representa un organigrama
ilustrativo de un procedimiento de transformación de un código
objeto de un fragmento de programa en un código objeto normalizado
para este mismo fragmento de programa haciendo uso de unos
registros tipificados, a cada registro está atribuido un solo tipo
de dato específico,
- la figura 5a representa un detalle de puesta en
práctica del procedimiento de transformación ilustrado en la figura
4a,
- la figura 5b representa un detalle de puesta en
práctica del procedimiento de transformación ilustrado en la figura
4b,
- la figura 6 representa un esquema funcional de
la arquitectura completa de un sistema de desarrollo de un
fragmento de programa normalizado, y de una tarjeta con
microprocesador reprogramable que permite la puesta en práctica del
protocolo de gestión y del procedimiento de verificación de un
fragmento de programa conforme al objeto de la presente
invención.
De un modo general, se indica que el protocolo de
gestión, el procedimiento de verificación y de transformación de un
fragmento de programa descargado, objeto de la presente invención,
así como los sistemas correspondientes, están puestos en práctica
gracias a una arquitectura lógica para la descarga y la ejecución
con seguridad de aplicaciones en un sistema informático portable que
dispone de débiles recursos, tal como notablemente las tarjetas con
microprocesador.
De un modo general, se indica que la descripción
que sigue se refiere a la aplicación de la invención en el contexto
de las tarjetas con microprocesador reprogramables del tipo
JavaCard, véase documentación disponible electrónicamente ante la
sociedad SUN MICROSYSTEMS INC. rubrica JavaCard Technology
anteriormente mencionada en la descripción.
Sin embargo, la presente invención es aplicable a
todo sistema portable reprogramable por medio de una descarga de
una aplicación escrita en el código de una máquina virtual que
consta de una pila de ejecución, de registros o variables locales y
cuyo modelo de ejecución está fuertemente tipificado, cada
instrucción del código de la aplicación solo se aplica a unos tipos
de datos específicos. El protocolo de gestión de un fragmento de
programa descargado en un sistema portable reprogramable, objeto de
la presente invención, se describirá ahora de modo más detallado en
relación a la figura 2.
En relación con la figura anteriormente citada,
se indica que el código objeto que constituye el fragmento del
programa o aplicación está constituido por una secuencia de
instrucciones ejecutables por el microprocesador del sistema
portable por medio de la máquina virtual anteriormente mencionada.
La máquina virtual permite interpretar el código objeto
anteriormente citado. El sistema portable está interconectado con
un terminal por medio de un enlace de serie por ejemplo.
Con referencia a la figura 2 anteriormente
mencionada, el protocolo de gestión objeto de la presente invención
consiste al menos, al nivel del sistema portable, para detectar en
una etapa (100a, 100b) un comando de descarga de este fragmento de
programa. De esta forma, la etapa (100a) puede consistir en una
etapa de lectura del comando anteriormente citado y la etapa (100b)
en una etapa de prueba de comando leído y de verificación de la
existencia de un comando de descarga.
Con una respuesta positiva en la etapa de
detección (100a, 100b) anteriormente citada de un comando de
descarga, el protocolo objeto de la presente invención consiste a
continuación en leer en la etapa (101) el código objeto que
constituye el fragmento de programa considerado y memorizar
temporalmente el código objeto anteriormente citado en la memoria
del sistema informático portable. La operación de memorización
temporal anteriormente citada puede ser ejecutada, bien en la
memoria de lectura - escritura, o en caso contrario, en la memoria
viva del sistema portable, cuando esta última presenta una capacidad
suficiente. La etapa de lectura del código objeto y de memorización
temporal de este último en la memoria de lectura - escritura está
designada por carga del código de aplicación en la figura 2.
La etapa anteriormente citada va seguida entonces
de una etapa (102) que consiste en someter el conjunto del código
objeto memorizado temporalmente a un proceso de verificación,
instrucción por instrucción, del código objeto anteriormente
citado.
El proceso de verificación consiste al menos en
una etapa de inicialización de la pila de los tipos y de la tabla
de los tipos de datos que representan el estado de la máquina
virtual al principio de la ejecución del código objeto memorizado
temporalmente, así como en una sucesión de etapas de verificación,
instrucción por instrucción por discriminación de la existencia,
para cada instrucción corriente, anotado con (I_{i}), de un
objetivo tal como un objetivo de instrucción de conexión anotado
con (CIB), un objetivo de llamada de un gestor de excepciones o un
objetivo de sub-rutina. Se lleva a cabo una
verificación y una actualización del efecto de instrucción corriente
(I_{i}) en la pila de los tipos y en la tabla de los tipos de
registros.
Cuando la verificación se ha logrado en la etapa
(103a), el protocolo objeto de la presente invención consiste en
registrar en la etapa (104) el fragmento de programa descargado en
un repertorio de fragmentos de programas disponibles y enviar a la
etapa (105) del lector un acuse de recibo positivo.
Por lo contrario, en el caso de una comprobación
no lograda del código objeto en la etapa (103b), el protocolo
objeto de la invención consiste en inhibir, en una etapa (103c),
toda ejecución, en el sistema portable del fragmento de programa
registrado de momento. La etapa de inhibición (103c) puede ser
puesta en práctica de unos modos diferentes. Esta etapa puede, a
título de ejemplo no limitativo, consistir en borrar en la etapa
(106) el fragmento de programa registrado de momento en ausencia de
registro de este fragmento de programa en el repertorio de
fragmentos de programas disponibles y, en una etapa (107), dirigir
al lector un código de error. Las etapas (107 y 105) pueden ser
llevadas a cabo bien secuencialmente después de las etapas (106) y
respectivamente (104), o en una operación de tarea múltiple con
éstas.
Con referencia a la misma figura 2, con una
respuesta negativa en la etapa que consiste en detectar un comando
de descarga en la etapa (100b), el protocolo objeto de la presente
invención consiste en detectar, en una etapa (108), un comando de
selección de un fragmento de programa disponible en un repertorio de
fragmentos de programas y, con una respuesta positiva en la etapa
(108), detectar la selección de un fragmento de programa
disponible, y pedir a la etapa (109) este fragmento de programa
disponible seleccionado con vistas a su ejecución. La etapa (109)
es entonces seguida por una etapa de ejecución (110) del fragmento
de programa disponible pedido por medio de la máquina virtual en
ausencia de toda comprobación dinámica de tipos de variables, de los
derechos de acceso a los objetos manipulados por el fragmento de
programa disponible pedido o del desbordamiento de la pila de
ejecución durante la ejecución de cada instrucción.
En el caso en que se obtiene una respuesta
negativa en la etapa (108), esta etapa consiste en detectar un
comando de selección de un fragmento de programa disponible pedido,
el protocolo objeto de la presente invención consiste en proceder,
en una etapa (111), al tratamiento de los comandos standard del
sistema portable.
En lo que concierne a la ausencia de comprobación
dinámica de tipo o de derecho de acceso a los objetos de tipo
JavaCard por ejemplo, se indica que esta ausencia de comprobación
no compromete la seguridad de la tarjeta porque el código de la
aplicación ha pasado necesariamente la verificación con éxito.
De un modo más específico, se indica que la
verificación de código llevada a cabo, conforme al procedimiento
objeto de la invención, en la tarjeta con microprocesador o en el
sistema informático portable es más selectiva que la comprobación
habitual de códigos para la máquina virtual Java del modo que está
descrito en la obra titulada "The Java Virtual Machine
Specification" anteriormente mencionada en la descripción.
Sin embargo, todo código de la máquina virtual
Java correcto en el sentido del verificador Java tradicional puede
ser transformado en un código equivalente susceptible de pasar con
éxito la verificación de código llevada a cabo en la tarjeta con
microprocesador.
Mientras que es posible prever la escritura
directa de códigos Java que satisfacen a los criterios de
verificación anteriormente mencionados en el marco de la puesta en
práctica del protocolo objeto de la presente invención, un objeto
notable de ésta es igualmente la puesta en practica de un
procedimiento de transformación automática de todo código Java
standard en un código normalizado para el mismo fragmento de
programa que satisface necesariamente a los criterios de
verificación puestos en práctica anteriormente citados. El
procedimiento de transformación en código normalizado y el sistema
correspondiente se describirán ulteriormente en la descripción de
modo detallado.
Una descripción más detallada del procedimiento
de verificación de un fragmento de programa o aplicación, conforme
al objeto de la presente invención, se dará ahora en relación con
la figura (3a) y las figuras siguientes.
De un modo general, se indica que el
procedimiento de comprobación objeto de la presente invención puede
ser puesto en práctica o bien en el marco del protocolo de gestión
de un fragmento de programa objeto de la invención anteriormente
descrito en relación con la figura 2, o de modo independiente, con
el fin de asegurar todo proceso de verificación juzgado
necesario.
De un modo general, se indica que un fragmento de
programa está constituido por un código objeto que consta al menos
de un sub-programa, más comúnmente designado por
método, y constituido por una secuencia de instrucciones
ejecutables por el microprocesador del sistema portable por medio de
la máquina virtual.
Del modo representado en la figura 3a, el
procedimiento de comprobación consiste, para cada
sub-programa, en llevar a cabo una etapa (200) de
inicialización de la pila de los tipos y de la tabla de los tipos de
registros de la máquina virtual por unos datos que representan el
estado de esta máquina virtual al principio de la ejecución del
código objeto, objeto de la verificación. Este código objeto puede
ser memorizado temporalmente del modo descrito anteriormente en
relación con la puesta en práctica del protocolo objeto de la
presente invención.
La etapa (200) anteriormente citada es entonces
seguida por una etapa (200a) que consiste en posicionar la lectura
de la instrucción corriente (I_{i}), índice i, en la primera
instrucción del código objeto. La etapa (200a) es seguida por una
etapa (201) que consiste en llevar a cabo una verificación del
código objeto anteriormente citado, instrucción por instrucción, por
discriminación para cada instrucción corriente con referencia
(I_{i}) de la existencia de un objetivo de instrucción de
conexión (CIB), de un objetivo de llamada de gestor de excepciones,
con referencia (CEM), o de un objetivo de una llamada de
sub-rutina (CSR).
La etapa de verificación (201) es seguida por una
etapa de verificación (202) de actualización del efecto de la
instrucción corriente (I_{i}) en los tipos de datos de la pila de
los tipos y de la tabla de los tipos de registros en función de la
existencia, para la instrucción corriente indicada por otra
instrucción, de un objetivo de instrucción de conexión (CIB), de un
objetivo de una llamada de sub-rutina (CSR) o de un
objetivo de una llamada de gestor de excepciones (CEM).
La etapa (202) para la instrucción corriente
I_{i} es seguida de una etapa de prueba (203) de alcance de la
última instrucción, prueba con referencia
I_{i} = última instrucción del código
objeto?
Con una respuesta negativa en la prueba (203), el
proceso pasa a la instrucción siguiente (204), con referencia i =
i+1, y retorna a la etapa (201).
Se indica que la verificación anteriormente
citada, en la etapa (202), se ha logrado cuando la tabla de los
tipos de registros no se modifica en el transcurso de una
verificación de todas las instrucciones (I_{i}) que constituyen
el código objeto. En este objetivo, una prueba (205) de existencia
de un estado estable de la tabla de los tipos de registros está
previsto. Esta prueba tiene referencia:
3? estado estable de la tabla de los tipos de
registro.
Con una respuesta positiva en la prueba (205), se
ha logrado la verificación.
En el caso en que por lo contrario no se constata
ninguna ausencia de modificación, el proceso de verificación se
repite y se relanza por retorno a la etapa (200a). Se demuestra que
el final del proceso está garantizado después de al menos Nr x H
iteraciones donde (Nr) designa la cantidad de registros utilizados
y (H) una constante que depende de la relación de
sub-tipo.
Diferentes indicaciones en relación con los tipos
de variables manipuladas en el transcurso del proceso de
verificación descrito anteriormente en relación con la figura 3a se
darán ahora en relación con la figura 3b.
Los tipos de variables anteriormente citadas
constan al menos de los identificadores de clases correspondientes
a las clases de objetos definidos en el fragmento de programa
sometido a la verificación, de los tipos de variables numéricas que
constan al menos de un tipo short, entero codificado en p
bits, p puede tomar el valor de p = 16, y un tipo de dirección de
retorno de una instrucción de salto (JSR), este tipo de dirección
lleva referencia retaddr, un tipo null en relación
con unas referencias de objetos nulos, un tipo object en
relación con los objetos propiamente dichos, un tipo específico
\bot que representa la intersección de todos los tipos y
que corresponde con el valor cero nul, otro tipo específico
T que representa la unión de todos los tipos y que
corresponde con todo tipo de valores.
Con referencia a la figura 3b, se indica que el
conjunto de los tipos de variables anteriormente citadas verifican
una relación de sub-tipos:
object\gamma T;
short,retaddr\gamma T
\bot\gammanull, short,
retaddr
Un ejemplo más específico de un proceso de
verificación tal como el ilustrado en la figura 3a se dará ahora en
unión con un primer ejemplo de estructura de datos ilustrado en la
tabla T1 adjunta en anexo.
El ejemplo anteriormente citado se refiere a una
aplicación escrita en código Java.
El proceso de verificación accede al código del
sub-programa que constituye la aplicación sometida
a comprobación por medio de un puntero en la instrucción (I_{i})
que se está verificando.
El proceso de verificación registra el tamaño y
el tipo de la pila de ejecución al nivel de la instrucción
corriente (I_{i}) correspondiente a (saload) en el ejemplo de la
tabla T1 anteriormente mencionada.
El proceso de verificación registra entonces el
tamaño y el tipo de pila de ejecución al nivel de la instrucción
corriente en la pila de los tipos por medio de su puntero de pila
de los tipos.
De la forma mencionada anteriormente en la
descripción, esta pila de tipos refleja el estado de la pila de
ejecución de la máquina virtual al nivel de la instrucción
corriente (I_{i}). En el ejemplo representado en la tabla T1,
durante la ejecución futura de la instrucción (I_{i}), la pila
contendrá tres entradas: una referencia hacia un objeto de la clase
(C), una referencia hacia una tabla de enteros codificados en p =
16 bits, el tipo short[], y un entero de p = 16 bits de tipo
short. Esto está igualmente representado en la pila de los
tipos que contiene también tres entradas: (C), el tipo de objetos de
la clase (C), short[], el tipo de las tablas de enteros p =
16 bits y short, el tipo de enteros p = 16 bits.
Otra estructura de datos notable está constituida
por una tabla de tipos de registros, esta tabla refleja el estado
de los registros, es decir unos registros que memorizan las
variables locales, de la máquina virtual.
Continuando con el ejemplo indicado en la tabla
T1, se indica que la entrada (0) de la tabla de los tipos de
registros contiene el tipo (C), es decir que durante la ejecución
futura de la instrucción corriente I_{i} = (saload), está
asegurado que el registro (0) contiene una referencia hacia un
objeto de la clase (C).
Los diferentes tipos manipulados en el transcurso
de la verificación y almacenados en la tabla de tipos de registros
y en la pila de tipos están representados en la figura 3b. Estos
tipos constan de:
- -
- unos identificadores de la clase CB correspondientes a las clases de objetos especificados definidos en la aplicación;
- -
- unos tipos de base, tales como short entero codificado en p = 16 bits, int1 e int2, p bits los más y los menos significativos respectivamente de enteros codificados en 2 p bits por ejemplo, o retaddr dirección de retorno de una instrucción, del modo mencionado anteriormente;
- -
- el tipo null que representa las referencias de objetos nulos.
En lo que se refiere a la relación de
sub-tipos, se indica que un tipo (T1) es
sub-tipo de un tipo (T2) si todo el valor válido del
tipo (T1) es igualmente un valor válido del tipo (T2). Los
sub-tipos entre identificador de clases reflejan la
jerarquía de herencia entre clases de la aplicación. En los otros
tipos, el sub-tipo está definido por el enrejado
representado en la figura 3b, siendo \bot
sub-tipo de todos los tipos y todos los tipos son
sub-tipos de (T).
El desarrollo del proceso de verificación de un
sub-programa que constituye una aplicación es el
siguiente, con referencia a la tabla T1 anteriormente
mencionada.
El proceso de verificación se lleva a cabo de
modo independiente en cada sub-programa de la
aplicación. Para cada sub-programa, el proceso lleva
a cabo uno o varios pasos de verificación en las instrucciones del
sub-programa considerado. El
seudo-código del proceso de verificación se da en la
tabla T2 adjunta en anexo.
El proceso de comprobación de un
sub-programa empieza por la inicialización de la
pila de los tipos y de la tabla de los tipos de registros
representados en la tabla T1, esta inicialización refleja el estado
de la máquina virtual al principio de la ejecución del
sub-programa examinado.
La pila de los tipos está vacía inicialmente, el
puntero de pila es igual a cero, y los tipos de registros se
inicializan con los tipos de los parámetros del
sub-programa que ilustran el hecho de que la máquina
virtual pasa los parámetros de este sub-programa en
estos registros. Los tipos de registros permitidos por el
sub-programa se inicializan en los tipos de datos
\bot que ilustran el hecho de que la máquina virtual
inicializa estos registros a cero al principio de la ejecución del
sub-programa.
A continuación, se llevan a cabo uno o varios
pasos de verificación en las instrucciones y en cada instrucción
corriente (I_{i}) del sub-programa.
Al final del paso de verificación puesto en
práctica o de una sucesión de pasos por ejemplo, el proceso de
verificación determina si los tipos de registros contenidos en la
tabla de los tipos de registros representados en la tabla T1 del
anexo han cambiado durante el paso de verificación. Con la ausencia
de cambio, la verificación se termina y un código de éxito se
reenvía al programa principal, el cual permite enviar el acuse de
recibo positivo a la etapa (105) del protocolo de gestión
representado en la figura 2.
En presencia de una modificación de la tabla de
los tipos de registros anteriormente citada, el proceso de
verificación reitera el paso de comprobación hasta que los tipos de
registros contenidos en la tabla de los tipos de registros estén
estables.
El desarrollo propiamente dicho de un paso de
verificación llevado a cabo una o varias veces hasta la estabilidad
de la tabla de los tipos de registros se describirá ahora en
relación con las figuras 3c hasta 3j.
Para cada instrucción corriente (I_{i}), se
llevan a cabo las verificaciones siguientes:
En relación con la figura 3a en la etapa (201),
el proceso de verificación determina si la instrucción corriente
(I_{i}) es el objetivo de una instrucción de conexión, de llamada
de sub-rutina o de un gestor de excepción, del modo
mencionado anteriormente. Esta comprobación se lleva a cabo por
examen de las instrucciones de conexión contenidas en el código del
sub-programa y de los gestores de excepciones
asociados a este sub-programa.
Con referencia a la figura 3c abierta por la
etapa (201), cuando la instrucción corriente (I_{i}) es el
objetivo de una instrucción de conexión, esta condición se lleva a
cabo por una prueba (300) designado por I_{i} = CIB, esta
conexión es incondicional o condicional, el proceso de verificación
asegura que la pila de los tipos está vacía en este punto del
sub-programa por una prueba (301). Con una
respuesta positiva a la prueba (301), el proceso de comprobación
continua por una etapa secuencia de contexto con referencia
secuencia (A). Con una respuesta negativa a la prueba (301), la
pila de los tipos no está vacía, la verificación falla y la
aplicación es rechazada. Este fallo se representa por la etapa
(Echec).
Con referencia a la figura 3d abierta por la
etapa secuencia (A), cuando la instrucción (I_{i}) es el objetivo
de una llamada de sub-rutina, esta condición se
lleva a cabo por una prueba (304) I_{i} = CSR, el proceso de
verificación comprueba en una prueba (305) que la instrucción
precedente (I_{i-1}) no continua en secuencia.
Esta verificación se lleva a cabo por una etapa de prueba (305)
cuando la instrucción precedente constituye una conexión
incondicional, un retorno de sub-rutina o una
llamada de excepción. La prueba en la etapa (305) se anota de la
siguiente forma:
I_{i-1} = IB_{incondicional},
retorno RSR o llamada L-EXCEPT.
Con una respuesta negativa en la prueba (305), el
proceso de verificación falla en una etapa (Echec). Por lo
contrario, con una respuesta positiva a la prueba (305), el proceso
de comprobación reinicializa la pila de los tipos de modo que ésta
contenga exactamente una entrada de tipo retaddr, dirección
de retorno de la sub-rutina mencionada
anteriormente. Si la instrucción corriente (I_{i}) en la etapa
(304) no es el objetivo de una llamada de
sub-rutina, el proceso de verificación continua en
el contexto en la etapa secuencia (B).
Con referencia a la figura 3e, cuando la
instrucción corriente (I_{i}) es el objetivo de un gestor de
excepciones, esta condición se lleva a cabo por una prueba (307)
con referencia I_{i}= CEM, CEM designa el objetivo de un gestor
de excepciones, esta condición se lleva a cabo por medio de una
prueba (307), con referencia:
I_{i} = CEM.
El proceso, con una respuesta positiva a la
prueba (307) verifica que la instrucción precedente constituye una
ramificación incondicional, un retorno de
sub-rutina o una llamada de excepciones por medio de
una prueba (305) con referencia:
I_{i-1} = IB_{incondicional},
retorno RSR o llamada L-EXCEPT.
Con una respuesta positiva en la prueba (305), el
proceso de comprobación procede a una reactualización de la pila de
los tipos, en una etapa (308), por una entrada de tipos de las
excepciones, con referencia tipo EXCEPT, la etapa (308) es seguida
por con una etapa de secuencia de contexto, secuencia (C). Con una
respuesta negativa a la prueba (305), el proceso de verificación
falla por la etapa marcada (Echec). El fragmento de programa se
rechaza entonces.
Con referencia a la figura 3f, cuando la
instrucción corriente (I_{i}) es el objetivo de una pluralidad de
conexiones incompatibles, esta condición se lleva a cabo por una
prueba (309), que lleva referencia:
I_{i} = XIB incompatibles
las conexiones incompatibles son por ejemplo una
conexión incondicional y una llamada de sub-rutina
o aún dos gestores de excepciones diferentes. Con una respuesta
positiva a la prueba (309), siendo las conexiones incompatibles, el
proceso de comprobación falla por una etapa con referencia (Echec) y
el fragmento de programa es rechazado. Con una respuesta negativa a
la prueba (309), el proceso de verificación continua con una etapa
de referencia secuencia (D). La prueba (309) se abre por la etapa
secuencia (C) anteriormente mencionada en la
descripción.
Con referencia a la figura 3g, cuando la
instrucción corriente (I_{i}) no es el objetivo de ninguna
conexión, esta condición se lleva a cabo por una prueba (310)
abierta por la secuencia (D) anteriormente mencionada, esta prueba
tiene referencia
I_{i} \phi? objetivos de conexión,
\phi designa el símbolo de existencia,
el proceso de verificación continua con respuesta
negativa en la prueba (310) por el paso a una actualización de la
pila de los tipos en una etapa (311), la etapa (311) y la respuesta
positiva a la prueba (310) son seguidas por una etapa de secuencia
de contexto en la etapa (202), descrita anteriormente en la
descripción en relación con la figura
3a.
Una descripción más detallada de la etapa de
verificación del efecto de la instrucción corriente en la pila de
los tipos en la etapa (202) anteriormente mencionada se dará ahora
en relación con la figura 3h.
De acuerdo con la figura anteriormente
mencionada, esta etapa puede constar al menos de una etapa (400) de
verificación que la pila de ejecución de los tipos contiene al
menos tantas entradas como la instrucción corriente consta de
operandos. Esta etapa de prueba (400) lleva la referencia:
Nbep \geq NOpi
donde (Nbep) designa la cantidad de entradas de
la pila de los tipos y (FOPI) designa la cantidad de operandos
contenidos en la instrucción corriente. Con una respuesta positiva
a la prueba (400), esta prueba va seguida de una etapa (401a) de
desapilamiento de la pila de los tipos y de comprobación (401b) que
los tipos de las entradas en la cumbre de la pila son
sub-tipos de los tipos de los operandos de la
instrucción corriente anteriormente mencionada. En la etapa de
prueba (401a), los tipos de los operandos de la instrucción (i) se
anotan (TOpi) y los tipos de las entradas en la cumbre de la pila
llevan la referencia
(Targs).
En la etapa (401b), la comprobación corresponde a
una verificación de la relación de sub-tipos Targs
sub-tipo de TOpi.
Con una respuesta negativa a la prueba (400) y a
la prueba (401b), el proceso de comprobación falla, lo que se
ilustra por el acceso a la etapa (Echec). Por lo contrario, con una
respuesta positiva a la prueba (401b), el proceso de verificación
es continuado y consiste en llevar a cabo:
- -
- una etapa de comprobación de la existencia de un espacio de memoria suficiente en la pila de los tipos, para proceder al apilamiento de los resultados de la instrucción corriente. Esta etapa de comprobación se lleva a cabo por una prueba (402), con referencia:
Esp-pila \geq
Esp-resultado.
donde cada miembro de desigualdad designa el
espacio memoria correspondiente. Con una respuesta negativa a la
prueba (402), el proceso de comprobación falla, lo que se ilustra
por la etapa (Echec). Por lo contrario, con una respuesta positiva
a la prueba (402), el proceso de verificación procede entonces al
apilamiento de los tipos de datos atribuidos a los resultados en una
etapa (403), el apilamiento se lleva a cabo en la pila de los tipos
de datos atribuida a estos
resultados.
A título de ejemplo no limitativo, se indica que
para la puesta en práctica de la figura 3h de comprobación del
efecto de la instrucción corriente sobre la pila de los tipos, para
una instrucción corriente constituida por una instrucción Java
saload correspondiente a la lectura de un elemento entero
codificado en P = 16 bits en una tabla de enteros, esta tabla de
enteros está definido por la tabla de enteros y un índice entero en
esta tabla, y el resultado por el entero leído en este índice en
esta tabla, el proceso de verificación asegura que la pila de los
tipos contiene al menos dos elementos, que los dos elementos en la
cumbre de la pila de los tipos son sub-tipos de
short[] respectivamente short, procede al proceso de
desapilamiento y a continuación al proceso de apilamiento del tipo
de datos short como tipo del
resultado.
resultado.
Además, con referencia a la figura 3i, para la
puesta en práctica de la etapa de comprobación del efecto de la
instrucción corriente sobre la pila de los tipos, cuando la
instrucción corriente (I_{i}) es una instrucción de lectura, con
referencia (IR), de un registro de dirección (n), esta condición se
lleva a cabo por una prueba (404) de referencia I_{i} = IR_{n},
con una respuesta positiva a la prueba (404) anteriormente
mencionada, el proceso de verificación consiste en comprobar el
tipo de datos del resultado de esta lectura, en una etapa (405),
por consulta de la entrada (n) de la tabla de los tipos de
registros, para luego determinar el efecto de la instrucción
corriente (I_{i}) sobre la pila de los tipos por una operación
(406a) de desapilamiento de las entradas de la pila correspondiente
a los operandos de esta instrucción corriente y por apilamiento
(406b) del tipo de datos de este resultado. Los operandos de la
instrucción (I_{i}) llevan la referencia (OP_{i}). Las etapas
(406a y 406b) van seguidas de un retorno a la secuencia de contexto
secuencia (F). Con una respuesta negativa a la prueba (404), el
proceso de verificación continua con la secuencia de
contexto
secuencia (F).
secuencia (F).
Con referencia a la figura 3j, cuando la
instrucción corriente (I_{i}) es una instrucción de escritura,
con referencia (IW), de un registro de dirección (n), esta
condición se lleva a cabo por una prueba con referencia I_{i} =
IW_{m}, el proceso de verificación consiste, con una respuesta
positiva a la prueba (407), en determinar en una etapa (408) el
efecto de la instrucción corriente sobre la pila de los tipos y el
tipo (t) del operando escrito en el registro de dirección (n),
luego, en una etapa (409), a sustituir la entrada del tipo de la
tabla de los tipos de registros a la dirección (n) por el tipo
inmediatamente superior al tipo anteriormente almacenado y al tipo
(t) del operando escrito en el registro de dirección (n). La etapa
(409) es seguida por un retorno a la secuencia de contexto serie
(204). Con una respuesta negativa a la prueba (407), el proceso de
verificación es seguido por una secuencia de contexto secuencia
(204).
A título de ejemplo, cuando la instrucción
corriente (I_{i}) corresponde a la escritura de un valor de tipo
(D) en un registro de dirección (1) y que el tipo del registro (1)
antes de la verificación de la instrucción era (C), el tipo del
registro (1) es sustituido por el tipo objeto que es el tipo
superior más pequeño de (C y D) en el enrejado de los tipos
representado en la figura 3b.
De la misma forma, a título de ejemplo, cuando la
instrucción corriente (I_{i}) es una lectura de una instrucción
(aload-0) que consiste en apilar el contenido del
registro (0) y que la entrada (0) de la tabla de los tipos de
registros es (C), el verificador apila (C) sobre la pila de los
tipos.
Un ejemplo de verificación de un
sub-programa escrito en entorno Java se dará ahora
en relación con las tablas T3 y T4 introducidas en anexo.
La tabla T3 representa un código JavaCard
específico correspondiente al sub-programa Java
incluido en esta tabla.
La tabla T4 ilustra el contenido de la tabla de
los tipos de registros y de la pila de los tipos antes de la
verificación de cada instrucción. Las restricciones de tipos sobre
los operandos de las diferentes instrucciones se respetan todas. La
pila está vacía tanto después de la instrucción de conexión (5) -
en la instrucción (9) simbolizada por la flecha, como antes del
objetivo de conexión (9) anteriormente citado. El tipo de registro
(1) que era inicialmente \bot se convierte en null,
el borne superior de null y de \bot, durante la
instrucción (1) de almacenaje de un valor de tipo null en el
registro (1) se examina, luego se convierte en tipo short[],
el borne superior del tipo short[] y del tipo null,
cuando se trata la instrucción (8), de almacenaje de un valor de
tipo short[] en el registro (1). El tipo del registro (1)
que ha cambiado durante el primer paso de verificación, un segundo
paso se lleva a cabo partiendo de nuevo de los tipos de registros
obtenidos al final de la primera. Este segundo paso de verificación
se logra al igual que el primero y no modifica los tipos de los
registros. El proceso de verificación se termina por tanto con
éxito.
Diferentes ejemplos de casos de fallo del proceso
de verificación en cuatro ejemplos de código incorrecto se darán
ahora en relación con la tabla T5 introducida en anexo:
- -
- En el punto a) de la tabla T5, el código dado como ejemplo tiene por objeto intentar fabricar una referencia de objeto inválido al utilizar un proceso aritmético en los punteros. Es rechazado por la verificación de los tipos de los argumentos de la instrucción (2 sadd), que exige que estos dos argumentos sean de tipo short.
- -
- En los puntos b) y c) de la tabla T5, el código tiene por objeto llevar a cabo dos intentos de convertir un entero cualquiera en una referencia de objeto. En el punto b), el registro (0) se usa a la vez con el tipo short, instrucción (0) y con el tipo null, instrucción (5). En consecuencia, el proceso de verificación atribuye el tipo T al registro (0) y detecta un error de tipo cuando el registro (0) es re-enviado como resultado de tipo objeto a la instrucción (7).
- -
- En el punto c) de la tabla T5, un conjunto de conexiones del tipo "if ... then ... else ..." se usa para dejar en la cumbre de la pila un resultado que está constituido bien por un entero o por una referencia de objeto. El proceso de verificación rechaza este código porque detecta que la pila no está vacía al nivel de la conexión de la instrucción (5) hacia la instrucción (9) simbolizada por la flecha.
- -
- Finalmente, en el punto d) de la tabla T5, el código contiene un lazo que, en cada iteración, tiene como efecto apilar un entero más en la cumbre de la pila y provocar por tanto un desbordamiento de la pila después de una cierta cantidad de iteraciones. El proceso de verificación rechaza este código al constatar que la pila no está vacía al nivel de la conexión trasera de la instrucción (8) hacia la instrucción (0), simbolizado por la flecha de retorno, al no estar vacía la pila en un punto de conexión.
Los diferentes ejemplos dados anteriormente en
relación con las tablas T3, T4 y T5 muestran que el proceso de
verificación, objeto de la presente invención, es particularmente
eficaz y que se aplica a unas aplicaciones y en particular a los
sub-programas de estas últimas, para las cuales las
condiciones de tipo de pila respectivamente de carácter vacío de la
pila de los tipos anteriores y las instrucciones de conexión o de
objetivos de conexión se satisfacen.
Está claro que tal proceso de comprobación
implica la escritura de códigos objeto que satisfacen a estos
criterios, estos códigos objeto pueden corresponder al
sub-programa introducido en la tabla T3
anteriormente mencionado.
Sin embargo, y con el fin de asegurar la
verificación de aplicaciones y de sub-programas de
aplicaciones existentes que no satisfacen necesariamente los
criterios de verificación del procedimiento objeto de la presente
invención, en particular en lo que se refiere a las aplicaciones y
los sub-programas escritos en entorno Java, la
presente invención tiene por objeto establecer unos procedimientos
de transformación de estas aplicaciones o
sub-programas en aplicaciones o fragmentos de
programa normalizados que permiten sufrir con éxito las pruebas de
verificación del procedimiento de verificación objeto de la
presente invención y del protocolo de gestión, poniendo en práctica
tal procedimiento.
En este objetivo, la invención tiene por tanto
por objeto la puesta en práctica de un procedimiento y de un
programa de transformación de un código objeto clásico que
constituye una aplicación, este procedimiento y este programa de
transformación pueden ser puestos en práctica fuera de un sistema
portable o de una tarjeta con microprocesador durante la creación
de la aplicación en consideración.
El procedimiento de transformación de código en
código normalizado objeto de la presente invención, se describirá
ahora en el marco del entorno Java a título de ejemplo puramente
ilustrativo.
Los códigos (JVM) producidos por los compiladores
Java existentes satisfacen a diferentes criterios, que se enuncian
a continuación:
- C1:
- los argumentos de cada instrucción pertenecen a los tipos esperados por esta instrucción;
- C2:
- la pila no se desborda;
- C'3:
- para cada instrucción de conexión, el tipo de la pila al nivel de esta conexión es el mismo que en el nivel de los objetivos posibles para esta conexión;
- C'4:
- un valor de tipo t escrito en un registro en un punto del código y releído desde este mismo registro en otro punto del código siempre se vuelve a leer con el mismo tipo t;
La puesta en práctica del procedimiento de
verificación objeto de la presente invención, implica que los
criterios (C'3 y C'4) comprobados por el código objeto sometidos a
verificación sean sustituidos por los criterios (C3 y C4)
seguidamente indicados:
- C3:
- la pila está vacía en cada instrucción de conexión y en cada objetivo de conexión;
- C4:
- un mismo registro se usa con un solo y mismo tipo en todo el código de un sub-programa.
Con referencia a los criterios anteriormente
citados, se indica que los compiladores Java garantizan solo los
criterios más débiles (C'3 y C'4), el proceso de verificación
objeto de la presente invención y el protocolo de gestión
correspondiente garantizan de hecho unos criterios (C3 y C4) más
restringentes que permiten asegurar la seguridad de ejecución y de
gestión de las aplicaciones.
La noción de normalización que recubre la
transformación de los códigos en códigos normalizados puede
presentar diferentes aspectos, en la medida en que la sustitución
de los criterios (C'3 y c'4) por los criterios (C3 y C4), conforme
al proceso de verificación objeto de la presente invención, puede
ser llevada a cabo de modo independiente para asegurar que la pila
está vacía en cada instrucción de conexión y en cada objetivo de
conexión, respectivamente que los registros abiertos por la
aplicación son tipificados, en cada registro abierto le corresponde
un solo tipo de dato atribuido para la ejecución de la aplicación
considerada, o por lo contrario, de modo conjunto, con el fin de
satisfacer al conjunto del proceso de verificación objeto de la
presente invención.
El procedimiento de transformación de un código
objeto en un código objeto normalizado de acuerdo con la invención
se describirá en consecuencia de acuerdo con dos modos de puesta en
práctica diferentes, un primer modo de puesta en práctica
correspondiente con la transformación de un código objeto que
satisface a los criterios (C1, C2, C'3, C'4) en un código
normalizado que satisface a Los criterios (C1, C2, C3, C'4)
correspondiente con un código normalizado de instrucción de
conexión u objetivo de conexión vacío, luego de acuerdo con un
segundo modo de realización, en el cual el código objeto clásico que
satisface a los mismos criterios de partida, es transformado en un
código normalizado que satisface a los criterios (C1, C2, C'3,C4)
por ejemplo correspondiente con un código normalizado que recurre a
unos registros tipificados.
El primer modo de realización del procedimiento
de transformación de código, objeto de la presente invención, se
describirá ahora en relación con la figura 4a. En el modo de
realización ilustrado en la figura 4a, el código clásico de partida
está reputado de satisfacer a los criterios (C1 + C2 + C'3) y el
código normalizado obtenido por el hecho de la transformación está
reputado de satisfacer a los criterios (C1 + C2 + C3).
De acuerdo con la figura anteriormente citada, el
procedimiento de transformación consiste, para cada instrucción
corriente (I_{i}) del código o del sub-programa,
en anotar cada instrucción, en una etapa (500), por el tipo de
datos de la pila antes y después de la ejecución de esta
instrucción. Los datos de anotación se observan (AI_{i}) y están
asociados por la relación I_{i} 76 AI_{i} en instrucción
corriente considerada. Los datos de anotación se calculan por medio
de un análisis del flujo de los datos en relación con esta
instrucción. Los tipos de datos antes y después de la ejecución de
la instrucción llevan la referencia (tbe_{i} y tae_{i})
respectivamente. El cálculo de los datos de anotación por análisis
del flujo de datos es un cálculo clásico conocido por el hombre del
oficio y, a este título, no se describirá en detalle.
La operación llevada a cabo en la etapa (500) se
ilustra en la tabla T6 adjuntado en anexo en el cual para una
aplicación o sub-programa de aplicación que consta
de 12 instrucciones, se introducen los datos de anotación (AI_{i})
constituidos por los tipos de los registros y los tipos de la
pila.
La etapa (500) anteriormente citada es entonces
seguida por una etapa (500a) que consiste en posicionar el índice i
en la primera instrucción I_{i} = I_{1}. La etapa (500a) es
seguida por una etapa (501) que consiste en detectar, en el seno de
las instrucciones y de cada instrucción corriente (I_{i}), la
existencia de conexiones con referencia (IB) o de objetivos de
conexión (CIB) para los cuales la pila de ejecución no está vacía.
Esta detección (501) es llevado a cabo por una prueba llevada a
cabo a partir de los datos de anotación (AI_{i}) del tipo de las
variables de pila asignadas a cada instrucción corriente, la prueba
se anota para la instrucción corriente:
I_{i} es un IB o CIB y pila (AI)\neq
vacío.
En una respuesta positiva a la prueba (501), es
decir en la presencia de una detección de una pila de ejecución no
vacía, la prueba anteriormente mencionada es seguida por una etapa
que consiste en insertar unas instrucciones de transferencia de los
variables de pila por una y otra parte de estas conexiones (IB) o
de estos objetivos de conexión (CIB), con el fin de vaciar el
contenido de la pila de ejecución en unos registros temporales
antes de esta conexión y de restablecer la pila de ejecución a
partir de los registros temporales después de esta conexión. La
etapa de inserción lleva la referencia (502) en la figura 4a. Es
seguida por una etapa de prueba (503) de alcance de la última
instrucción de referencia
I_{i} = última instrucción?
Con una respuesta negativa a la prueba (503), un
incremento (504) i = i+1 se lleva a cabo para el paso a la
instrucción siguiente y retorno a la etapa (501). Con una respuesta
positiva a la prueba (503), se lanza una etapa de Fin. Con una
respuesta negativa a la prueba (501), el procedimiento de
transformación es seguido por una conexión hacia la etapa (503) en
ausencia de inserción de instrucción de transferencia. La puesta en
práctica del procedimiento de transformación de un código clásico
en un código normalizado con instrucción de conexión a una pila
vacía del modo representado en la figura 4a, permite obtener un
código objeto normalizado para el mismo fragmento de programa de
partida en el cual la pila de las variables de pila está vacía en
cada instrucción de conexión y en cada instrucción de objetivo de
conexión, en la ausencia de modificación de la ejecución del
fragmento de programa. En el caso de un entorno Java, las
instrucciones de transferencia de datos entre pila y registro son
las instrucciones load y store de la máquina virtual
Java.
Al volver a tomar el ejemplo introducido en la
tabla T6, el procedimiento de transformación detecta un objetivo de
conexión donde la pila no está vacía al nivel de la instrucción
(9). Por tanto se procede con la inserción de una instrucción
istore 1 antes de la instrucción de conexión (5) que lleva a
la instrucción (9) anteriormente mencionada con el fin de salvar el
contenido de la pila en el registro (1) y de asegurar que la pila
está vacía durante la conexión. Simétricamente, la inserción de una
instrucción iload 1 se lleva a cabo antes del objetivo de
instrucción (9) para restablecer el contenido de la pila de modo
idéntico a lo que era antes de la conexión. Finalmente, una
instrucción istore 1 se inserta después de la instrucción (8)
para garantizar el equilibrio de la pila en los dos caminos que
llevan a la instrucción (9). El resultado de la transformación
operada de esta forma en un código normalizado está representado en
la tabla T7.
El segundo modo de realización del procedimiento
de transformación objeto de la presente invención se describirá
ahora en relación con la figura 4b en el caso en que el código
objeto clásico de partida satisface a los criterios (C1 + C'4) y el
código objeto normalizado satisface a los criterios (C1 + C4).
Con referencia a la figura 4b anteriormente
citado, se indica que el procedimiento, en este modo de
realización, consiste en anotar, de acuerdo con una etapa (500)
sensiblemente idéntica a la representada en la figura 4a, cada
instrucción corriente (I_{i}) por el tipo de datos de los
registros antes y después de la ejecución de esta instrucción. De
la misma forma, los datos de anotación (AI_{i}) se calculan por
medio de un análisis del flujo de datos en relación con esta
instrucción.
La etapa de anotación (500) es entonces seguida
por una etapa que consiste en llevar a cabo una nueva asignación de
los registros, etapa con referencia (601), por detección de los
registros de origen empleados con unos tipos diferentes, división
de estos registros de origen en registros normalizados diferentes,
un registro normalizado está asignado a cada tipo de datos
utilizado. La etapa (601) es seguida por una etapa (602) de
reactualización de las instrucciones que manipulan los operandos
que hacen uso de los registros normalizados anteriormente
mencionados. La etapa (602) es seguida por una etapa de secuencia
de contexto (302).
Con referencia al ejemplo dado en la tabla T6, se
indica que el procedimiento de transformación detecta que el
registro de gama (0), referencia (r0), se usa con los dos tipos
objeto, instrucciones (0 y 1), e int, instrucción (9)
y siguientes. Entonces se procede a una división del registro de
origen (r0) en dos registros, el registro (0) para el uso de los
tipos objeto y el registro (1) para los usos de tipo
int. Las referencias en el registro (0) de tipo int
se vuelven a escribir entonces al transformarlos en unas referencias
a los registros (1), el código normalizado obtenido se introduce en
la tabla T8 adjuntada en anexo.
Se observa de modo no limitativo que en el
ejemplo introducido en relación con la tabla T8 anteriormente
mencionada, el nuevo registro (1) se usa a la vez para la
normalización de la pila como para la creación de registros
tipificados por división del registro (0) en dos registros.
El procedimiento de transformación de un código
clásico en un código normalizado con instrucción de conexión a pila
vacía tal como se describe en la figura 4a se describirá ahora de
modo más detallado en un modo de realización preferencial no
limitativo, en relación con la figura 5a.
Este modo de realización se refiere a la etapa
(501) que consiste en detectar en el seno de las instrucciones y de
cada instrucción corriente (I_{i}) la existencia de conexión (IB)
respectivamente de objetivo de conexión (CIB) para la cual la pila
no está vacía.
Como continuación a la determinación de las
instrucciones objetivo donde la pila no está vacía, esta condición
se observa en la etapa (504a), I_{i} pila\neq vacío, el proceso
de transformación consiste en asociar, en la etapa (504a)
anteriormente mencionada, a estas instrucciones un conjunto de
nuevos registros, uno por emplazamiento de pila activa al nivel de
estas instrucciones. De esta forma, si (i) designa el rango de un
objetivo de conexión cuyo tipo de pila asociada no está vacío y es
del tipo (tpI_{i}) a (tpn_{i}) con n > 0, pila no vacía, el
proceso de transformación asigna (n) nuevos registros, (r_{1}) a
(r_{n}) aún no utilizados y los asocia a la instrucción (i)
correspondiente. Esta operación se lleva a cabo en la etapa
(504a).
La etapa (504a) es seguida por una etapa (504)
que consiste en examinar cada instrucción detectada de rango (i) y
discriminar en una etapa de prueba (504) la existencia de un
objetivo de conexión (CIB) o de una conexión (IB). La etapa (504)
está representada en forma de una prueba designada por:
\phi? CIB, IB e I_{i} = CIB.
En el caso en que la instrucción de rango (i) es
un objetivo de conexión (CIB) representado por la igualdad
precedente, y que la pila de las variables de pila al nivel de esta
instrucción no está vacía, es decir con una respuesta positiva a la
prueba (504), para toda instrucción precedente del rango
(i-1) constituida por una conexión, una llamada de
excepciones o un retorno de programa, esta condición se lleva a
cabo en la etapa de prueba (505) designada por:
I_{i-1} = IB, llamada EXCEPT,
retorno Prog.
La instrucción detectada de rango (i) solo es
accesible por una conexión. Con una respuesta positiva a la prueba
(505) anteriormente citada, el proceso de transformación consiste
en llevar a cabo una etapa (506) que consiste en insertar un
conjunto de instrucciones de carga del tipo load a partir del
conjunto de nuevos registros anteriormente a la instrucción
detectada del rango (i) considerada. La operación de inserción
(506) es seguida por una redirección (507) de todas las conexiones
hacia la instrucción detectada del rango (i), hacia la primera
instrucción de carga load insertada. Las operaciones de
inserción y de redirección están representadas en la tabla T9
adjuntada en anexo.
Para toda instrucción anterior del rango
(i-1) que continua en secuencia, es decir cuando la
instrucción corriente del rango (i) es accesible a la vez por una
conexión y a partir de la instrucción precedente, esta condición se
lleva a cabo por la prueba (508) y está simbolizada por las
relaciones:
I_{i-1} 6 I_{i}
\hskip0,5cme
\hskip0,5cmIB 6 I_{i}
el proceso de transformación consiste en una
etapa (509) que inserta un conjunto de instrucciones de almacenaje
store hacia el conjunto de nuevos registros anteriormente a
la instrucción detectada de rango (i), y un conjunto de
instrucciones de carga load a partir de este conjunto de
nuevos registros. La etapa (509) es entonces seguida por una etapa
(510) de redirección de todas las conexiones hacia la instrucción
detectada de rango (i) hacia la primera instrucción de carga
load
insertada.
En el caso en que la instrucción detectada de
rango (i) es una conexión hacia una instrucción determinada, para
toda instrucción detectada de rango (i) constituida por una
conexión incondicional, esta condición se lleva a cabo por una
prueba (511) indicada:
I_{i} = IB_{incondit}
el proceso de transformación tal como está
representado en la figura 5a consiste en insertar en una etapa
(512), con una respuesta positiva a la prueba (511), anteriormente
a la instrucción detectada de rango (i), una pluralidad de
instrucciones de almacenaje store. El proceso de
transformación inserta antes de la instrucción (i) las (n)
instrucciones store del modo representado en el ejemplo en
la tabla T11. Las instrucciones store dirigen los registros
(r_{1} a r_{n}), donde (n) designa la cantidad de registros. En
cada nuevo registro se asocia así la instrucción de
almacenaje.
Para toda instrucción detectada de rango (i)
constituida por una conexión condicional y para una cantidad (mOp)
superior a (0) de operandos manipulados por esta instrucción de
conexión condicional, esta condición se lleva a cabo por la prueba
(513) de referencia:
I_{i} = IB_{condit}
con mOp > 0
el proceso de transformación, con una respuesta
positiva a la prueba (513) anteriormente citada, consiste en
insertar en una etapa (514) anteriormente a esta instrucción
detectada de rango (i), una instrucción de permutación de
referencia (swap_x) en la cumbre de la pila de las variables de pila
de los (mOp) operandos de la instrucción detectada de rango (i) y
de los (n) valores siguientes. Esta operación de permutación
permite llevar a la cumbre de la pila de las variables de pila los
(n) valores a salvar el conjunto de los nuevos registros (r_{1} a
r_{n}). La etapa (514) es seguida por una etapa (515) que
consiste en insertar anteriormente a la instrucción de rango (i) un
conjunto de instrucciones de almacenaje store hacia el
conjunto de los nuevos registros (r_{1} a r_{n}). La etapa
(515) de inserción anteriormente mencionada es ella misma seguida
por una etapa (516) de inserción posteriormente a la instrucción
detectada de rango (i) de un conjunto de instrucciones de carga
load a partir del conjunto de los nuevos registros (r_{1} a
r_{n}). El conjunto de las operaciones de inserción
correspondientes está representado en la tabla 12 introducida en
anexo.
Por motivos de estar completo y con referencia a
la figura 5a, se indica que, con una respuesta negativa a la prueba
(504), la continuación del proceso de transformación se lleva a
cabo por una etapa de secuencia de contexto, secuencia (503), que
la respuesta negativa a las pruebas (505, 508, 511 y 513) es ella
misma seguida por una continuación del proceso de transformación por
medio de una etapa de secuencia de contexto, secuencia (503) y que
es lo mismo en lo que se refiere a la continuación de las
operaciones después de las etapas de redirección (507 y 510) y de
inserción (512 y 516) anteriormente citadas.
Una descripción más detallada del procedimiento
de normalización y de transformación de un código objeto en un
código objeto normalizado que hace uso de unos registros
tipificados del modo descrito en la figura 4b, se dará ahora en
relación con la figura 5b. Este modo de realización se refiere más
particularmente a un modo de realización preferencial no limitativo
de la etapa (601) de nueva asignación de los registros por
detección de los registros de origen empleados con unos tipos
diferentes.
Con referencia a la figura 5b anteriormente
citada, se indica que la etapa (601) anteriormente citada consiste
en determinar en una etapa (603) los intervalos de duración, de
referencia (ID_{j}) de cada registro (r_{j}). Estos intervalos
de duración, designados por "live range" o "webs" en el
idioma anglo-sajón, están definidos para un
registro (r) como un conjunto máximo de trazas parciales, tal como
el registro (r), es vivo en todos los puntos de estas trazas. Para
una definición más detallada de estas anotaciones, se podrá
útilmente referirse a la obra editada por Steven S. MUCHNICK
titulada "Advanced Compiler Design and Implementation",
Sección 16.3, Morgah KAUFMANN, 1997. La etapa 603 está representada
por la relación:
ID_{j} 76 r_{j}
de acuerdo con la cual a cada registro (r_{j})
está asociado un intervalo de duración (ID_{j})
correspondiente.
La etapa (603) anteriormente citada es seguida
por una etapa (604) que consiste en determinar, en la etapa (604),
el tipo de datos principal, de referencia (tp_{j}), de cada
intervalo de duración (ID_{j}). El tipo principal de un intervalo
de duración (ID_{j}), para un registro (r_{j}), está definido
por el borne superior de los tipos de datos almacenados en este
registro (r_{j}) por las instrucciones de almacenaje store
que pertenecen al intervalo de duración anteriormente citado.
La etapa (604) en sí es seguida por una etapa
(605) que consiste en establecer un gráfico de interferencias entre
los intervalos de duración anteriormente definidos en las etapas
(603 y 604), este gráfico de interferencias consiste en un gráfico
no orientado del cual cada cumbre está constituida por un intervalo
de duración y cuyos arcos, con referencias (a_{j1j2}) en la figura
5b, entre dos cumbres (ID_{j1} e ID_{j2}), existen si una
cumbre contiene una instrucción de almacenaje dirigida al registro
de la otra cumbre o recíprocamente. En la figura 5b, la
construcción del gráfico de interferencias está representada
simbólicamente, esta construcción puede ser llevada a cabo a partir
de técnicas de cálculo conocidas por el hombre del oficio. Para una
descripción más detallada de la construcción de este tipo de
gráfico, se podrá útilmente referirse a la obra publicada por
Alfred V. AHO, Ravi SETHI y Jeffrey D. ULLMAN titulada
"Compilers: principles, techniques, and tools",
Addison-Wesley 1986, sección 9.7.
Como continuación a la etapa (605), el
procedimiento de normalización del modo representado en la figura
5b consiste en traducir en una etapa (606) la unicidad de un tipo
de dato asignado a cada registro (r_{i}) en el gráfico de
interferencias al añadir unos arcos entre todos los pares de cumbres
del gráfico de interferencias mientras que dos cumbres de un par
de cumbres no tienen el mismo tipo de datos principal asociado. Se
comprende que la traducción del carácter de unicidad de un tipo de
dato asignado a cada registro corresponde, claro está, a la
traducción y a la toma en cuenta del criterio (C4) en el gráfico de
interferencias, criterio mencionado anteriormente en la descripción.
La etapa (606) anteriormente citada es seguida entonces por una
etapa (607) en la cual se lleva a cabo una instanciación del
gráfico de interferencias, instanciación más comúnmente designada
por etapa de coloreado del gráfico de interferencias de acuerdo con
las técnicas habituales. En el transcurso de la etapa (607), el
proceso de transformación atribuye a cada intervalo de duración
(ID_{jk}) un número de registro (rk) de tal forma que dos
intervalos adyacentes en el gráfico de interferencias reciben unos
números de registros diferentes.
Esta operación se puede llevar a cabo a partir de
todo proceso adaptado. A título de ejemplo no limitativo, se indica
que un proceso preferencial puede consistir en:
- a)
- elegir una cumbre de grado mínimo en el gráfico de interferencias, el grado mínimo está definido como un número mínimo de cumbres adyacentes, y retirarlo del gráfico. Esta etapa puede ser repetida hasta que el gráfico esté vacío.
- b)
- Cada cumbre anteriormente retirada es introducida de nuevo en el gráfico de interferencias en el orden inverso de su retirada, la última sacada es la primera en ser introducida de nuevo y sucesivamente en el orden inverso del orden de retirada. De esta forma, a cada cumbre reintroducida, se puede atribuir el número más pequeño de registro que es diferente de los números atribuidos a todas las cumbres adyacentes.
Finalmente por la etapa (602), representada en la
figura 4b, el proceso de transformación y de nueva asignación
reescribe las instrucciones de acceso a los registros que figuran
en el código de sub-programa de la aplicación
considerada. Un acceso a un registro dado en el intervalo de
duración correspondiente es sustituido por un acceso a un registro
diferente cuyo número ha sido atribuido durante la fase de
instanciación aún designada por la fase de coloreado.
Una descripción más detallada de un sistema
informático portable que permite la puesta en práctica del
protocolo de gestión y del proceso de verificación de un fragmento
de programa o aplicación conforme al objeto de la presente invención
y de un sistema de desarrollo de una aplicación se dará ahora en
relación con la figura 6.
En lo que se refiere al sistema portable
correspondiente que lleva la referencia (10), se recuerda que este
sistema portable es un sistema del tipo reprogramable que consta de
los elementos esenciales del modo representados en la figura 1b. Se
conoce el sistema portable anteriormente citado interconectado a un
terminal por una unión en serie, el terminal está él mismo unido
por ejemplo por medio de una red local, en caso contrario de una
red lejana, a un ordenador de desarrollo de la aplicación que lleva
la referencia (20). En el sistema portable (10) funciona un
programa principal que lee y ejecuta los comandos enviados en la
unión en serie por el terminal. Además, los comandos standard para
una tarjeta con microprocesador, tales como por ejemplo los
comandos standard del protocolo ISO 7816, pueden ser puestos en
práctica, el programa principal reconoce además dos comandos
suplementarios, uno para la descarga de una aplicación y el otro
para la selección de una aplicación anteriormente cargada en la
tarjeta con microprocesador.
Conforme al objeto de la presente invención, la
estructura del programa principal se ha llevado a cabo de modo que
consta al menos de un módulo de programa de gestión y de
verificación de un fragmento de programa descargado de acuerdo con
el protocolo de gestión de un fragmento de programa descargado
previamente descrito en la descripción en relación con la figura
2.
Además, el módulo de programa consta igualmente
de un módulo de sub-programa de verificación de un
fragmento de programa descargado de acuerdo con el procedimiento de
verificación del modo descrito anteriormente en la descripción en
relación con las figuras 3a a 3j.
En este objetivo, la estructura de las memorias,
en particular de la memoria permanente no de lectura - escritura,
memoria ROM, está modificada de modo que consta notablemente,
además del programa principal, de un módulo (17) de gestión de
protocolo y de verificación, del modo mencionado anteriormente.
Finalmente, en lo que se refiere a la memoria no volátil de lectura
- escritura de tipo EEPROM, ésta consta de modo ventajoso de un
repertorio de aplicaciones, con referencia (18), que permite la
puesta en práctica del protocolo de gestión y del proceso de
verificación objetos de la presente invención.
Con referencia a la misma figura 6, se indica que
el sistema de desarrollo de la aplicación conforme al objeto de la
presente invención, que permite de hecho la transformación de un
código objeto clásico del modo mencionado anteriormente en la
descripción y que satisface a los criterios (C1 + C2 + C'3 + C'4) en
el marco del entorno Java en un código objeto normalizado para el
mismo fragmento de programa consta, asociado a un compilador
clásico Java (21), de un módulo de transformación de código, con
referencia (22), el cual procede a la transformación de código en
un código normalizado de acuerdo con el primer y el segundo modo de
realización anteriormente descritos en la descripción en relación
con las figuras 4a, 4b y 5a, 5b. Se comprende de hecho que, por una
parte, la normalización del código objeto de origen en un código
objeto normalizado de instrucción de conexión con pila vacía y en
un código normalizado que hace referencia a unos registros
tipificados, por otra parte, del modo mencionado anteriormente en
la descripción, permite satisfacer a los criterios de verificación
(C3 y C4) impuestos por el procedimiento de verificación objeto de
la presente invención.
El módulo de transformación de código (22) es
seguido por un convertidor JavaCard (23), el cual permite asegurar
la transmisión por una red distante o local hacia el terminal y,
por medio de la unión en serie, hacia la tarjeta con
microprocesador (10). De esta forma, el sistema de desarrollo de la
aplicación (20) representada en la figura 6 permite transformar los
ficheros de clase compilados producidos por el compilador Java (21)
a partir de los códigos fuente Java de la aplicación en ficheros de
clase equivalentes pero que respetan las restricciones
suplementarias (C3, C4) impuestas por el protocolo de gestión y el
módulo de verificación (17) portables en la tarjeta con
microprocesador (10). Estos ficheros de clase transformados se
convierten en una aplicación descargable en la tarjeta por el
convertidor JavaCard standard (23).
Diferentes elementos particularmente notables del
conjunto de los elementos del protocolo, de los procedimientos y de
los sistemas objetos de la presente invención, se darán ahora a
título indicativo.
En relación con unos procesos de verificación del
tipo anterior del modo mencionado en la introducción a la
descripción, el procedimiento de verificación objeto de la presente
invención aparece notable por el hecho de que concentra el
esfuerzo de comprobación en relación con las propiedades de
tipificación de los operandos que son esenciales para la seguridad
de la ejecución de cada aplicación, es decir del respeto de las
restricciones de tipo asociadas a cada instrucción y la ausencia de
desbordamiento de pila. Otras verificaciones no aparecen esenciales
en términos de seguridad, en particular la comprobación que el
código inicializa correctamente cada registro antes de leerlo por
primera vez. El procedimiento de verificación objeto de la presente
invención opera por lo contrario por inicialización a cero de todos
los registros a partir de la máquina virtual durante la
inicialización del método con el fin de garantizar que la lectura
de un registro no inicializado no puede comprometer la seguridad de
la tarjeta.
Además, la exigencia impuesta por el
procedimiento de verificación objeto de la presente invención de
acuerdo con la dual la pila debe estar vacía en cada instrucción de
conexión o de objetivo de conexión, garantiza que la pila está en
el mismo estado, vacía, después de la ejecución de la conexión y
antes de la ejecución de la instrucción a la que el programa se ha
conectado. Este modo de operación garantiza que la pila está en un
estado coherente, sea cual sea el camino de ejecución seguido a
través del código de sub-programa o de la
aplicación considerada. La coherencia de la pila se garantiza de
esta forma, incluso en la presencia de conexión o de objetivo de
conexión. Contrario a los procedimientos y a los sistemas del tipo
previo, en los cuales es necesario conservar en memoria viva el
tipo de la pila en cada objetivo de conexión, lo que necesita una
cantidad de memoria viva proporcional a (Tp x Nb), producida de la
talla máxima de pila de ejecución utilizada y del número de
objetivos de conexión en el código, el procedimiento de
verificación, objeto de la presente invención, solo tiene necesidad
del tipo de la pila de ejecución durante la instrucción en curso de
verificación y no conserva en memoria el tipo de esta pila en otros
puntos del código. En consecuencia, el procedimiento objeto de la
invención se contenta con una cantidad de memoria viva proporcional
a (Tp) pero independiente de (Nb), y en consecuencia de la longitud
del código del sub-programa o de la aplicación.
La exigencia de acuerdo con el criterio (C4), de
acuerdo con el cual un registro dado debe ser utilizado con un solo
y mismo tipo en todo el código de un sub-programa,
garantiza que el código anteriormente mencionado no utiliza un
programa de modo incoherente, por ejemplo al escribir un entero
short en un punto del programa y al volver a leerlo como una
referencia de objeto en otro punto del programa.
En los procesos de verificación descritos en el
tipo previo, en particular en la especificación Java titulada
"The Java Virtual Machine Specification" editada por Tim
LONDHOLM y Frank YELLIN, ya mencionada, para garantizar la
coherencia de los usos anteriormente citados a través de las
instrucciones de conexión, es necesario conservar en memoria viva
una copia de la tabla de los tipos de registros en cada objetivo de
conexión. Esta operación necesita una cantidad de memoria viva
proporcional a (T_{r} x N_{b}) donde (T_{r}) designa la
cantidad de registros utilizados por el sub-programa
y (N_{b}) la cantidad de objetivos de conexión en el código de
este sub-programa.
Por lo contrario, el proceso de verificación
objeto de la presente invención, opera en una tabla global de tipos
de registros con la ausencia de conservación en memoria viva de
copia en diferentes puntos del código. En consecuencia, la memoria
viva necesaria para llevar a cabo el proceso de verificación es
proporcional a (T_{r}), pero independiente de (N_{b}) y por
tanto de la longitud del código del sub-programa en
cuestión.
La restricción de acuerdo con la cual un registro
dado se usa con el mismo tipo en todos los puntos, es decir en toda
instrucción del código en cuestión, simplifica sensiblemente y de
modo significativo la comprobación de los
sub-programas. Por lo contrario, en los procesos de
verificación del tipo previo, con la ausencia de tal restricción,
el proceso de verificación debe establecer que los
sub-programas respetan una disciplina de pila
estricta y debe comprobar el cuerpo de los
sub-programas de modo polimorfo en lo que se refiere
al tipo de ciertos registros.
En conclusión, el proceso de verificación objeto
de la presente invención en relación con las técnicas del tipo
previo permite, por una parte, reducir el tamaño del código del
programa permitiendo conducir el procedimiento de verificación y
por otra parte, reducir el consumo de memoria viva durante unas
operaciones de verificación, el grado de complejidad es de la forma
(O (T_{p} + P_{r})) en el caso del proceso de verificación
objeto de la presente invención, en lugar de (O (T_{p} + P_{r})
x N_{b}) en lo que se refiere a los procesos de comprobación del
tipo anterior, al ofrecer sin embargo las mismas garantías en
relación con la seguridad de la ejecución del código
verificado.
Finalmente, el proceso de transformación de un
código clásico de origen en un código normalizado se lleva a cabo
por transformación localizada del código con la ausencia de
transmisión de informaciones suplementarias al órgano comprobador,
es decir a la tarjeta con microprocesador o al sistema informático
portable.
En lo que se refiere al procedimiento de
reasignación de los registros del modo descrito en las figuras 4b y
5b, este procedimiento se distingue de los procedimientos conocidos
del tipo previo descritos notablemente por la patente US 4.571.678
y por la patente US 5.249.295, por el hecho de que:
- -
- la reasignación de registro asegura que un mismo registro no puede ser atribuido a dos intervalos que tienen unos tipos principales diferentes, lo que garantiza de esta forma que un registro dado es utilizado con el mismo tipo en todo el código, y
- -
- que los algoritmos de asignaciones de registros existentes y descritos en los documentos anteriormente mencionados suponen una cantidad fija de registros e intentar reducir al mínimo las transferencias designadas por "spills" en idioma anglo-sajón, entre registros y pila, cuando la reasignación de los registros conforme con el objeto de la presente invención opera en un marco donde la cantidad total de registros es variable, en consecuencia de lo cual no hay lugar de llevar a cabo unas transferencias entre registros y pilas cuando un proceso de minimización del número total de registros se pone en práctica.
El protocolo de gestión de un fragmento de
programa descargado en un sistema portable y los procedimientos de
comprobación de este fragmento de programa descargado,
respectivamente de transformación de este código objeto de fragmento
de programa descargado, objetos de la presente invención, pueden,
claro está, ser puestos en práctica de modo lógico.
A este título, la invención se refiere igualmente
a un producto de programa de ordenador cargable directamente en la
memoria interna de un sistema portable reprogramable, este sistema
portable permiten la descarga de un fragmento de programa
constituido por un código objeto, secuencia de instrucciones,
ejecutable por el microprocesador del sistema portable por medio de
una máquina virtual provista de una pila de ejecución y de
registros o variables locales manipulados por estas instrucciones
con el fin de permitir la interpretación de este código objeto. El
producto programa de ordenador correspondiente consta de las
porciones de código objeto para la ejecución del protocolo de
gestión de un fragmento de programa descargado en este sistema
portable, del modo ilustrado en la figura 2 y en la figura 6,
anteriormente descritos en la descripción, cuando este sistema
portable está interconectado a un terminal y que este programa está
ejecutado por el microprocesador de este sistema portable por medio
de la máquina virtual.
La invención se refiere igualmente a un producto
programa de ordenador cargable directamente en la memoria interna
de un sistema portable reprogramable, tal como una tarjeta con
microprocesador provista de una memoria de lectura - escritura, del
modo ilustrado en relación con la figura 6. Este producto programa
de ordenador que consta de las porciones de código objeto para la
ejecución de las etapas de comprobación de un fragmento de un
programa descargado en este sistema portable, del modo ilustrado y
descrito anteriormente en la descripción en relación con las
figuras 3a a 3j. Esta verificación se ejecuta cuando este sistema
portable está interconectado a un terminal y que este programa es
ejecutado por el microprocesador de este sistema portable por medio
de la máquina virtual.
La invención se refiere igualmente a un producto
programa de ordenador; este producto programa de ordenador consta
de las porciones de código objeto para ala ejecución de las etapas
del procedimiento de transformación del código objeto de un
fragmento de programa en un código objeto normalizado para este
mismo fragmento de programa, del modo ilustrado y representado en
las figuras 4a, 4b, respectivamente 5a, 5b, así como en la figura 6
y descritos anteriormente en la descripción.
La presente invención se refiere igualmente a un
producto programa de ordenador registrado en un soporte utilizable
en un sistema portable reprogramable, una tarjeta con
microprocesador provista de una memoria de lectura - escritura por
ejemplo, este sistema portable que permite la descarga de un
fragmento de programa constituido por un código objeto ejecutable
por este microprocesador, por medio de una máquina virtual provista
de una pila de ejecución y de registros o variables locales
manipulados por estas instrucciones, con el fin de permitir la
interpretación de este código objeto. El producto programa de
ordenador anteriormente mencionado consta, al menos, de un módulo de
programa legible por el microprocesador del sistema portable por
medio de la máquina virtual, para mandar la ejecución de un
procedimiento de gestión de la descarga de un fragmento de programa
descargado, del modo representado en la figura 2 y descrito
anteriormente en la descripción, un módulo de programas legibles por
el microprocesador por medio de la máquina virtual para mandar la
ejecución de un procedimiento de verificación, instrucción por
instrucción, del código objeto que constituye el fragmento del
programa, del modo ilustrado y descrito en relación con las figuras
3a a 3j en la descripción anterior, y un módulo de programas
legibles por el microprocesador de este sistema portable por medio
de la máquina virtual para mandar la ejecución de un fragmento de
programa descargado como continuación a o en la ausencia de una
transformación del código objeto de este fragmento de programa en
código objeto normalizado para este mismo fragmento de programa,
del modo representado en la figura 2.
El producto programa de ordenador anteriormente
citado consta igualmente de un módulo de programas legibles por el
microprocesador por medio de la máquina virtual para mandar la
inhibición de la ejecución, en el sistema portable, del fragmento
de programa en el caso de un procedimiento de verificación no
lograda de fragmento de programa anteriormente mencionado, del modo
ilustrado y descrito anteriormente en la descripción en relación
con la figura 2.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
(Tabla pasa a página
siguiente)
\newpage
Anexos
\vskip1.000000\baselineskip
Tabla
2
Variables globales utilizadas: | |
T_{r} | Número de registros declarado por el método corriente |
T_{p} | Tamaño máximo de pila declarado por el método corriente |
tr[T_{r}] | Tabla de tipos de registros (402 en la figura 4) |
tp[T_{p}] | Tipo de pila (403 en la figura 4) |
pp | Puntero de pila (404 en la figura 4) |
chg | Bandera que indica si tr ha cambiado. |
Inicializar pp 7 0
Inicializar tp[0] ...
tp[n-1] a partir de los tipos de n argumentos
del método
Inicializar tp[n] ... tp[T_{r}
-1] a \bot
Inicializar chg a verdadero
Mientras que chg es verdadero:
- Volver a poner chg a falso
- Situarse en la primera instrucción del método
- Mientras que el fin del método no se haya alcanzado:
- Si la instrucción corriente es el objetivo de una instrucción de conexión:
- si pp\neq 0, fallo de la verificación
- Si la instrucción corriente es el objetivo de una llamada de sub-rutina:
- Si la instrucción anterior continua en secuencia, fallo
- Tomar tp[0] 7 retaddr y pp 7 1
- Si la instrucción corriente es un gestor de excepciones de la clase C:
- Si la instrucción precedente continua en secuencia, fallo
- Hacer tp[0] 7 C y pp 7 1
- Si la instrucción corriente es un objetivo de clases diferentes:
- Fallo de la verificación
- Determinar los tipos a_{1}, ..., a_{n} de los argumentos de la instrucción
- Si pp < n, fallo (desbordamiento de pila)
- Para i = 1, ..., n;
- Si tp[pp-n-i-l] no es sub-tipo de a_{i}, fallo
- Hacer pp 7 pp – n
- Determinar los tipos r_{1}, ..., r_{m} de los resultados de la instrucción
- Si pp + m \geq T_{p}, fallo (desbordamiento de pila) para i = 1, ..., m, hacer tp [pp ) i - l] 7 r_{i}
- Hacer pp 7 pp ) m
- Si la instrucción corriente es una escritura en un registro r:
- Determinar el tipo t del valor escrito en el registro
- Hacer tr[r] 7 borne inferior (t, tr[r])
- Si tr[r] ha cambiado, hacer chg 7 verdadero
- Si la instrucción corriente es una conexión:
- Si pp\neq 0, fallo de la verificación
- Avanzar a la próxima instrucción
Reenviar un código de éxito de la
verificación
Tabla T3
- static sort [] meth (short [] tabla)
{
- short [ ] resultado = null;
- if (tabla . longitud \geq 2) resultado = tabla;
- Return tabla;
}
\newpage
Segunda iteración sobre el código del
método
\vskip1.000000\baselineskip
(a) Violación de las restricciones de tipos
sobre los argumentos de una
instrucción
\newpage
(b) Utilización incoherente de un
registro
\vskip1.000000\baselineskip
(c) Conexiones introduciendo unas
incoherencias al nivel de la
pila
\vskip1.000000\baselineskip
(d) Desbordamiento de pila en el interior de
un
lazo
\newpage
\vskip1.000000\baselineskip
(a) Código inicial del método, anotado por los
tipos de registros y de la
pila
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
(b) Código del método después de la
normalización de la pila al nivel de la conexión 5 6
9
\vskip1.000000\baselineskip
\newpage
(c) Código del método después de la
reasignación de los
registros
(a) Objetivo de conexión, instrucción
precedente no continua en
secuencia
\vskip1.000000\baselineskip
(b) Objetivo de conexión, instrucción
precedente continua en
secuencia
(c) Conexión incondicional sin
argumentos
(d) Conexión condicional a un
argumento
Claims (27)
1. Protocolo de gestión de un fragmento de
programa descargado en un sistema portable reprogramable, tal como
una tarjeta con microprocesador provisto de una memoria de lectura
- escritura, el mencionado fragmento de programa está constituido
por un código objeto, secuencia de instrucciones, ejecutable por el
microprocesador del sistema portable por medio de una máquina
virtual provista de una pila de ejecución y de registros o
variables locales manipulados por estas instrucciones y que
permiten interpretar este código objeto, el mencionado sistema
portable está interconectado a un terminal, caracterizado por
el hecho de que este protocolo consiste al menos, al nivel del
mencionado sistema portable:
a) en detectar un comando de descarga de este
fragmento de programa; y con una respuesta positiva en esta etapa
que consiste en detectar un comando de descarga,
b) en leer el código objetivo que constituye este
fragmento de programa y en memorizar temporalmente este código
objeto;
c) en someter el conjunto del código objeto
memorizado temporalmente a un proceso de verificación instrucción
por instrucción, este proceso de verificación consiste al menos en
una etapa de inicialización de la pila de los tipos en un estado de
vacío y de la tabla de los tipos de registros a un tipo que
representa la intersección de todos los tipos de datos, que
representan el estado de la mencionada máquina virtual al principio
de la ejecución del código objeto memorizado temporalmente y en una
sucesión de etapas de verificación, instrucción por instrucción,
por discriminación de la existencia, para cada instrucción
corriente, de un objetivo, objetivo de instrucción de conexión,
objetivo de una llamada de un gestor de excepciones u objetivo de
una llamada de sub-rutina y por una verificación y
una actualización del efecto de la mencionada instrucción corriente
sobre la pila de los tipos y sobre la tabla de los tipos de
registros, y, en el caso de una verificación lograda del
mencionado código objeto,
d) en registrar el fragmento de programa
descargado en un repertorio de fragmentos de programas disponibles,
y, en el caso de una verificación no lograda del mencionado código
objeto,
e) en inhibir la ejecución, en el sistema
portable, del mencionado fragmento de programa.
2. Protocolo de acuerdo con la reivindicación 1,
caracterizado por el hecho de que la mencionada etapa e) de
inhibición de la ejecución consiste:
f) en borrar el fragmento de programa registrado
momentáneamente, en la ausencia de registro, de este último en el
mencionado repertorio de fragmentos de programas disponibles, y
g) en dirigir al mencionado lector un código de
error.
3. Protocolo de acuerdo con la reivindicación 1 ó
2, caracterizado por el hecho de que con una respuesta
negativa a la mencionada etapa a) que consiste en detectar un
comando de descarga, este consiste:
b') en detectar un comando de selección de un
fragmento de programa dispohible en un repertorio de fragmentos de
programas; y, con una respuesta positiva en esta etapa que consiste
en detectar un comando de selección de un fragmento de programa
disponible;
c') en pedir el mencionado fragmento de programa
disponible seleccionado;
d') en ejecutar el mencionado fragmento de
programa disponible pedido por medio de la máquina virtual, en
ausencia de toda verificación dinámica de tipos de variables, de
los derechos de acceso a los objetos manipulados por el fragmento
de programa disponible pedido, del desbordamiento de la pila de
ejecución durante la ejecución de cada instrucción, y, con una
respuesta negativa en esta etapa que consiste en detectar un
comando de selección de un fragmento de programa disponible,
e') en proceder al tratamiento de los comandos
standard del sistema portable.
4. Procedimiento de comprobación de un fragmento
de programa descargado en un sistema portable reprogramable, tal
como una tarjeta con microprocesador provisto de una memoria de
lectura - escritura, el mencionado fragmento de programa está
constituido por un código objeto y que consta de al menos un
sub-programa, secuencia de instrucciones, ejecutable
por el microprocesador del sistema portable por medio de una
máquina virtual provista de una pila de ejecución y de registros de
operandos manipulados por estas instrucciones y que permite
interpretar este código objeto, el mencionado sistema portable está
interconectado a un lector, caracterizado por el hecho de que
el mencionado procedimiento consiste, después de la detección de un
comando de descarga y de la memorización del mencionado código
objeto que se constituye de este fragmento de programa en la
mencionada memoria de lectura - escritura, para cada
sub-programa:
\alpha en llevar a cabo una etapa de
inicialización de la pila de los tipos en un estado vacío y de la
tabla de los tipos de registros en un tipo que representa la
intersección de todos los tipos de datos, que representan el estado
de la máquina virtual al principio de la ejecución del código objeto
memorizado temporalmente;
\beta en llevar a cabo una verificación del
mencionado código objeto memorizado temporalmente, instrucción por
instrucción, por discriminación de la existencia, para cada
instrucción corriente, de un objetivo, objetivo de instrucción de
conexión, objetivo de una llamada de un gestor de excepciones u
objetivo de una llamada de sub-rutina;
\nu en llevar a cabo una verificación y una
actualización del efecto de la mencionada instrucción corriente en
los tipos de datos de la mencionada pila de los tipos y de la
mencionada tabla de los tipos de registros, en función de la
existencia de un objetivo, de un objetivo de instrucción de
conexión, de un objetivo de una llamada de
sub-rutina o de un objetivo de una llamada de gestor
de excepciones, la mencionada verificación se logra cuando la tabla
de los tipos de registros no es modificada en el transcurso de una
comprobación de todas las instrucciones y el proceso de
verificación está continuado instrucción por instrucción hasta que
la tabla de los tipos de registros esté estable, en la ausencia de
modificación, el proceso de verificación está si no
interrumpido.
5. Procedimiento de verificación de acuerdo con
la reivindicación 4, caracterizado por el hecho de que los
tipos de variables manipuladas en el transcurso del proceso de
verificación constan al menos:
- de los identificadores de clases
correspondientes a las clases de objetos definidos en el fragmento
de programa,
- de los tipos de variables numéricas que constan
al menos de un tipo short, entero codificado en p bits, y un
tipo retaddr de dirección de retorno de una instrucción de
salto JSR;
- de un tipo null en relación con unas
referencias de objetos nulos;
- de un tipo objeto relativo a los
objetos;
- de un primer tipo específico \bot, que
representa la intersección de todos los tipos y que corresponde al
valor 0, nil;
- de un segundo tipo específico T, que
representa la unión de todos los tipos y que corresponde a todo
tipo de valor.
6. Procedimiento de acuerdo con la reivindicación
5, caracterizado por el hecho de que el conjunto de los
mencionados tipos de variables verifica una relación de
sub-tipos:
object\gamma T;
short, retaddr \gamma T;
\bot\gammanull, short,
retaddr.
7. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 6, caracterizado por el hecho de que
cuando la mencionada instrucción corriente es el objetivo de una
Instrucción de conexión, el mencionado procedimiento de
verificación consiste en comprobar que la pila de los tipos está
vacía, el proceso de verificación es continuado para la instrucción
siguiente en el caso de una comprobación positiva, y si no el
proceso de verificación falla y el fragmento de programa es
rechazado.
8. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 7, caracterizado por el hecho de que
cuando la mencionada instrucción corriente es el objetivo de una
llamada de sub-rutina, el mencionado proceso de
verificación comprueba que la instrucción precedente constituye una
conexión incondicional, un retorno de subrutina o una llamada de
excepción, el mencionado proceso de verificación, en el caso de una
verificación positiva, procede a una reactualización de la pila de
los tipos de variables por una entidad de tipo retaddr,
dirección de retorno de la sub-rutina, y, si no el
proceso de verificación falla y el fragmento de programa es
rechazado.
9. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 8, caracterizado por el hecho de que
cuando la instrucción corriente es el objetivo de un gestor de
excepciones, el mencionado proceso de verificación comprueba que la
instrucción precedente constituye una conexión incondicional, un
retorno de sub-rutina o una llamada de excepción, el
mencionado proceso de verificación, en caso de verificación
positiva, procede a una reactualización de la pila de los tipos por
una entrada del tipo de excepciones, y si no el proceso de
verificación falla y el fragmento de programa es rechazado.
10. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 9, caracterizado por el hecho de que
cuando la instrucción corriente es el objetivo de una pluralidad de
conexiones incompatibles, el proceso de verificación falla y el
fragmento de programa es rechazado.
11. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 10, caracterizado por el hecho de
que cuando la mencionada instrucción corriente no es el objetivo de
ninguna conexión, el proceso de verificación continua por el paso a
una reactualización de la pila de los tipos.
12. Procedimiento de acuerdo con una de las
reivindicaciones de 4 a 11, caracterizado por el hecho de
que la etapa de verificación del efecto de la instrucción corriente
sobre la pila de los tipos consta al menos:
- de una etapa de verificación que la pila de
ejecución de los tipos contiene al menos tantas entradas como la
instrucción corriente contiene operandos;
- de una etapa de desapilamiento y de
verificación que los tipos de las entradas en la cumbre de la pila
son sub-tipos de los tipos de los operandos de esta
instrucción;
- de una etapa de verificación de la existencia
de un espacio de memoria suficiente en la pila de los tipos para
proceder al apilamiento de los resultados de la instrucción
corriente;
- de una etapa de apilamiento en la pila de los
tipos de datos atribuidos a estos resultados.
13. Procedimiento de acuerdo con la
reivindicación 12, caracterizado por el hecho de que cuando
la instrucción corriente es una instrucción de lectura de un
registro de dirección (n), el proceso de verificación consiste:
- en comprobar el tipo de datos del resultado de
esta lectura por consulta de la entrada (n) de la tabla de los
tipos de registros;
- en determinar el efecto de la instrucción
corriente sobre la pila de los tipos por desapilamiento de las
entradas de la pila que corresponde a los operandos de esta
instrucción corriente y por apilamiento del tipo de datos de este
resultado.
14. Procedimiento de acuerdo con la
reivindicación 12, caracterizado por el hecho de que cuando
la instrucción corriente es una instrucción de escritura de un
registro de dirección (m), el proceso de verificación consiste:
- en determinar el efecto de la instrucción
corriente sobre la pila de los tipos y el tipo t del operando
escrito en este registro de dirección (m);
- en sustituir la entrada de tipo de la tabla de
los tipos de registros en la dirección (m) por el tipo
inmediatamente superior al tipo anteriormente almacenado y al tipo
(t) del operando escrito en este registro de dirección (m);
15. Procedimiento de transformación de un código
objeto de un fragmento de programa, en el cual los operandos de
cada instrucción pertenecen a los tipos de datos manipulados por
esta instrucción, la pila de ejecución no representa un fenómeno de
desbordamiento, para cada instrucción de conexión el tipo de las
variables de pila al nivel de esta conexión es el mismo que en el
nivel de los objetivos de esta conexión, en un código objeto
normalizado para este mismo fragmento de programa, en el cual los
operandos de cada instrucción pertenecen a los tipos de datos
manipulados por esta instrucción, la pila de ejecución no presenta
un fenómeno de desbordamiento, la pila de ejecución está vacía en
cada instrucción de conexión, y en cada instrucción de objetivo de
conexión, caracterizado por el hecho de que este
procedimiento consiste, para el conjunto de las instrucciones del
mencionado código
objeto:
objeto:
- en anotar cada instrucción corriente por el
tipo de datos de la pila antes y después de la ejecución de esta
instrucción, los datos de anotación se calculan por medio de un
análisis del flujo de los datos relativo a esta instrucción;
- en detectar en el seno de las mencionadas
instrucciones y de cada instrucción corriente la existencia de
conexiones respectivamente de objetivos de conexiones para los que
la mencionada pila de ejecución no está vacía, la operación de
detección es llevada a partir de los datos de anotación del tipo de
variables de pila asignadas a cada instrucción corriente, y en
presencia de una detección de una pila de ejecución no vacía,
- en insertar unas instrucciones de transferencia
de las variables de pila por una y por otra parte de estas
conexiones respectivamente de estos objetivos de conexiones con el
fin de vaciar el contenido de la pila de ejecución en unos
registros temporales antes de esta conexión y de restablecer la pila
de ejecución a partir de los mencionados registros temporales
después de esta conexión, y si no a no insertar ninguna instrucción
de transferencia, lo que permite obtener un código objeto
normalizado para este mismo fragmento de programa, en el cual la
pila de ejecución está vacía en cada instrucción de conexión y en
cada instrucción de objetivo de conexión, en la ausencia de
modificación de la ejecución del mencionado fragmento de
programa.
16. Procedimiento de transformación de un código
objeto de un fragmento de programa, en el cual los operandos de
cada instrucción pertenecen a los tipos de datos manipulados por
esta instrucción, y un operando del tipo determinado escrito en un
registro por una instrucción de este código objeto y leído de nuevo
desde este mismo registro por otra instrucción de este código objeto
con el mismo tipo de dato determinado, en un código objeto
normalizado para este mismo fragmento de programa, en el cual los
operandos de cada instrucción pertenecen a los tipos de datos
manipulados por esta instrucción, un solo y mismo tipo de dato está
asignado a un mismo registro en todo el mencionado código objeto
normalizado, caracterizado por el hecho de que este
procedimiento consiste, para el conjunto de las instrucciones del
mencionado código objeto:
- en anotar cada instrucción corriente por el
tipo de datos de los registros antes y después de la ejecución de
esta instrucción, los datos de anotación se calculan por medio de
un análisis del flujo de datos relativo a esta instrucción;
- en llevar a cabo una reasignación de los
registros por detección de los registros de origen empleados con
unos tipos diferentes, división de estos registros de origen en
registros normalizados distintos, un registro normalizado para cada
tipo de dato utilizado, y una reactualización de las instrucciones
que manipulan los operandos que hacen uso de los mencionados
registros normalizados.
17. Procedimiento de acuerdo con la
reivindicación 15, caracterizado por el hecho de que la
etapa que consiste en detectar en el seno de las mencionadas
instrucciones y de cada instrucción corriente la existencia de
conexiones respectivamente de objetivos de conexión para la cual la
pila de ejecución no está vacía consiste, después de la detección
de cada instrucción de rango (i) correspondiente:
- en asociar a cada instrucción de rango (i) un
conjunto de nuevos registros, un nuevo registro está asociado a
cada variable de pila activa al nivel de esta instrucción;
- en examinar cada instrucción detectada de rango
(i) y en discriminar la existencia de un objetivo de conexión
respectivamente de una conexión, y en el caso donde la instrucción
de rango (i) es un objetivo de conexión y que la pila de ejecución
al nivel de esta instrucción no está vacía,
* para toda instrucción precedente, de rango
(i-1), constituido por una conexión, una llamada de
excepción o un retorno de programa, la instrucción detectada de
rango (i) solo es accesible por una conexión,
- \ae
- a insertar un conjunto de instrucciones de carga load a partir del conjunto de nuevos registros anteriormente a la mencionada instrucción detectada de rango (i), con redirección de todas las conexiones hacia la instrucción detectada de rango (i) hacia la primera instrucción de carga load insertada; y
* para toda instrucción precedente, de rango
(i-1), que continua en secuencia la instrucción
detectada de rango (i) que es accesible a la vez por medio de una
conexión y de una instrucción precedente de rango
(i-1),
- \ae
- a insertar un conjunto de instrucciones de almacenaje store hacia el conjunto de nuevos registros anteriormente a la mencionada instrucción detectada de rango (i) y un conjunto de instrucciones de carga load a partir de este conjunto de nuevos registros, con redirección de todas las conexiones hacia la instrucción detectada de rango (i) hacia la primera instrucción de carga load insertada, y en el caso donde la mencionada instrucción detectada de rango (i) es una conexión hacia una instrucción determinada,
* para toda instrucción precedente de rango (i)
constituida por una conexión incondicional,
- \ae
- a insertar anteriormente a la instrucción detectada de rango (i) una pluralidad de instrucciones de almacenaje store, en cada nuevo registro que está asociado una instrucción de almacenaje, y
* para toda instrucción de rango (i) constituida
por una conexión condicional y para una cantidad m > 0 de
operandos manipulados por esta instrucción de conexión
condicional,
- \ae
- a insertar anteriormente a esta instrucción, detectada de rango (i) una instrucción de permutación, swap-x, en la cumbre de la pila de ejecución de los (m) operandos de la instrucción detectada de rango (i) y de los (n) valores siguientes, esta operación de permutación permite llevar a la cumbre de la pila de ejecución los n valores a salvar en el conjunto de los nuevos registros, y
- \ae
- a insertar anteriormente a la instrucción de rango (i) un conjunto de instrucciones de almacenaje store hacia el conjunto de nuevos registros, y
- \ae
- a insertar posteriormente a la instrucción detectada de rango (i) un conjunto de instrucciones de carga load a partir del conjunto de los nuevos registros.
18. Procedimiento de acuerdo con la
reivindicación 16, caracterizado por el hecho de que la
etapa que consiste en llevar a cabo una reasignación de los
registros por detección de los registros de origen empleados con
unos tipos diferentes consiste:
- en determinar los intervalos de duración de
cada registro;
- en determinar el tipo de dato principal de cada
intervalo de duración, el tipo de datos principal de un intervalo
de duración (j) para un registro (r) que está definido por el borne
superior de los tipos de datos almacenados en este registro (r) por
las instrucciones de almacenaje store que pertenecen al
intervalo de duración (j);
- en establecer un gráfico de interferencias
entre los intervalos de duración, este gráfico de interferencias
consiste en un gráfico no orientado del cual cada cumbre está
constituida por un intervalo de duración y cuyos arcos entre dos
cumbres (j_{1} y j_{2}) existen si una cumbre contiene una
instrucción de almacenaje dirigida al registro de la otra cumbre o
recíprocamente;
- en traducir la unicidad de un tipo de dato
asignado a cada registro en el gráfico de interferencias al añadir
unos arcos entre todo par de cumbres del gráfico de interferencias
mientras que dos cumbres de un par de cumbres no tengan el mismo
tipo de dato principal asociado;
- en llevar a cabo una instanciación del gráfico
de interferencias, por atribución a cada intervalo de duración de
un número de registro de tal forma que a dos intervalos adyacentes
en el gráfico de interferencias estén atribuidos unos números de
registros diferentes.
19. Sistema portable reprogramable por descarga
de fragmentos de programas, que consta de al menos un
microprocesador, una memoria viva, un módulo de entradas / salidas,
una memoria no volátil reprogramable eléctricamente y una memoria
permanente en la cual están implantados un programa principal y una
máquina virtual que permiten la ejecución del programa principal y
de al menos un fragmento de programa por medio del mencionado
microprocesador, caracterizado por el hecho de que el
mencionado sistema portable consta de al menos un módulo de
programa de gestión y de verificación de un estado vacío de pila de
filos tipos para cada instrucción de conexión de un fragmento de
programa descargado, el módulo de programa indicado de gestión y de
verificación está implantado en la memoria permanente.
20. Sistema portable reprogramable por descarga
de fragmentos de programas, que consta de al menos un
microprocesador, una memoria viva, un módulo de entradas / salidas,
una memoria no volátil reprogramable eléctricamente y una memoria
permanente en la cual están implantados un programa principal y una
máquina virtual que permiten la ejecución del programa principal y
de al menos un fragmento de programa por medio del mencionado
microprocesador, caracterizado por el hecho de que el
mencionado sistema portable consta de al menos un módulo de
programa de gestión y de verificación de un fragmento de programa
descargado de acuerdo con el protocolo de gestión de un fragmento de
programa descargado de acuerdo con una de las reivindicaciones de 1
a 3, el mencionado módulo de programa de gestión y de comprobación
está implantado en la memoria permanente.
21. Sistema portable de acuerdo con la
reivindicación 20, caracterizado por el hecho de que éste
consta al menos de un módulo de sub-programa de
verificación de un fragmento de programa portable, de acuerdo con el
proceso de verificación de acuerdo con una de las reivindicaciones
de 4 a 14.
22. Sistema de transformación de un código objeto
de un fragmento de programa, en el cual los operandos de cada
instrucción pertenecen a los tipos de datos manipulados por esta
instrucción, la pila de ejecución no presenta fenómeno de
desbordamiento, para cada instrucción de conexión el tipo de
variables de pila al nivel de esta conexión es el mismo que al
nivel de los objetivos de esta conexión y un operando de tipo
determinado escrito en un registro por una instrucción de este
código objeto es leído de nuevo desde este mismo registro por otra
instrucción de este código objeto con el mismo tipo de dato
determinado, en un código objeto normalizado para este mismo
fragmento de programa en el cual los operandos de cada instrucción
pertenecen a los tipos de datos manipulados por esta instrucción,
la pila de ejecución no presenta fenómeno de desbordamiento, la
pila de ejecución está vacía en cada instrucción de conexión y en
cada instrucción de objetivo de conexión, un solo y mismo tipo de
dato está asignado a un mismo registro en todo el mencionado código
objeto normalizado, caracterizado por el hecho de que el
mencionado sistema de transformación consta al menos, implantado en
la memoria de trabajo de un ordenador de desarrollo o de una
estación de trabajo, un módulo de programa de transformación de
este código objeto en un código objeto normalizado según el
procedimiento de acuerdo con una de las reivindicaciones de 15 a 18,
lo que permite engendrar un código objeto normalizado para el
mencionado fragmento de programa que satisface a los criterios de
verificación de este fragmento de programa descargado.
23. Un producto programa de ordenador cargable
directamente en la memoria interna de un sistema portable
reprogramable, tal como una tarjeta con microprocesador provisto de
una memoria de lectura - escritura, este sistema portable permite
la descarga de un fragmento de programa constituido por un código
objeto, secuencia de instrucciones, ejecutable por el
microprocesador del sistema portable por medio de una máquina
virtual provista de una pila de ejecución y de registros o
variables locales manipulados por estas instrucciones y que
permiten interpretar este código objeto, este producto programa de
ordenador que consta de las porciones de código objeto para la
ejecución del protocolo de gestión de un fragmento de programa
descargado en este sistema portable de acuerdo con una de las
reivindicaciones de 1 a 3, cuando este sistema portable está
interconectado a un terminal y que este programa es ejecutado por
el microprocesador de este sistema portable por medio de la
mencionada máquina virtual.
24. Un producto programa de ordenador cargable
directamente en la memoria interna de un sistema portable
reprogramable, tal como una tarjeta con microprocesador provisto de
una memoria de lectura - escritura, este sistema portable permite
la descarga de un fragmento de programa constituido por un código
objeto, secuencia de instrucciones, ejecutable por el
microprocesador del sistema portable por medio de una máquina
virtual provista de una pila de ejecución y de registros de
operandos manipulados por estas instrucciones y que permiten
interpretar este código objeto, este producto programa de ordenador
que consta de las porciones de código objeto para la ejecución de
las etapas de verificación de un fragmento de programa descargado
en este sistema portable de acuerdo con una de las reivindicaciones
de 4 a 14, cuando este sistema portable está interconectado a un
terminal y que este programa es ejecutado por el microprocesador de
este sistema portable, por medio de la mencionada máquina
virtual.
25. Un producto programa de ordenador que consta
de las porciones de código objeto para la ejecución de las etapas
del procedimiento de transformación de un código objeto de un
fragmento de programa descargado en un código objeto normalizado
para este mismo fragmento de programa de acuerdo con una de las
reivindicaciones de 15 a 18.
26. Un producto programa de ordenador registrado
en un soporte utilizable en un sistema portable reprogramable, tal
como una tarjeta con microprocesador provisto de una memoria de
lectura - escritura, este sistema portable permite la descarga de
un fragmento de programa constituido por un código objeto, secuencia
de instrucciones, ejecutable por el microprocesador del sistema
portable por medio de una máquina virtual provista de una pila de
ejecución y de registros o variables locales manipulados por estas
instrucciones y que permiten interpretar este código objeto, este
producto programa de ordenador que consta al menos:
- de unos medios de programas legibles por el
microprocesador de este sistema portable por medio de la mencionada
máquina virtual, para mandar la ejecución de un procedimiento ce
gestión de la descarga de un fragmento de programa descargado;
- de los medios de programas legibles por el
microprocesador de este sistema portable por medio de la mencionada
máquina virtual, para ordenar la ejecución de un procedimiento de
verificación, instrucción por instrucción, de un estado vacío de
pila de los tipos para cada instrucción de conexión del código
objeto que constituye en mencionado fragmento de programa;
- de unos medios de programas legibles por el
microprocesador de este sistema portable por medio de la mencionada
máquina virtual para mandar la ejecución de un fragmento de
programa descargado como continuación a o en ausencia de una
transformación del código objeto de este fragmento de programa y en
código objeto normalizado para este mismo fragmento de
programa.
27. Un producto programa de ordenador de acuerdo
con la reivindicación 26, que consta además de los medios de
programas legibles por el microprocesador de este sistema portable
por medio de la mencionada máquina virtual para ordenar la
inhibición de la ejecución, en el mencionado sistema portable, del
mencionado fragmento de programa en el caso de un procedimiento de
verificación no logrado de este fragmento de programa.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9910697A FR2797963B1 (fr) | 1999-08-23 | 1999-08-23 | Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants |
FR9910697 | 1999-08-23 |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2209969T3 true ES2209969T3 (es) | 2004-07-01 |
Family
ID=9549281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES00958714T Expired - Lifetime ES2209969T3 (es) | 1999-08-23 | 2000-08-21 | Protocolo de gestion, procedimiento de verificacion y de transformacion de un fragmento de programa descargado y sistemas correspondientes. |
Country Status (11)
Country | Link |
---|---|
US (1) | US7720939B1 (es) |
EP (1) | EP1212678B1 (es) |
JP (1) | JP2003507811A (es) |
CN (1) | CN1220939C (es) |
AT (1) | ATE252742T1 (es) |
AU (1) | AU769363B2 (es) |
CA (1) | CA2382003C (es) |
DE (1) | DE60006141T2 (es) |
ES (1) | ES2209969T3 (es) |
FR (1) | FR2797963B1 (es) |
WO (1) | WO2001014958A2 (es) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092147A (en) | 1997-04-15 | 2000-07-18 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US7158993B1 (en) | 1999-11-12 | 2007-01-02 | Sun Microsystems, Inc. | API representation enabling submerged hierarchy |
US7010786B2 (en) | 1999-11-12 | 2006-03-07 | Sun Microsystems, Inc. | Predictive arithmetic overflow detection |
US7107581B2 (en) | 1999-11-12 | 2006-09-12 | Sun Microsystems, Inc. | Overflow predictive arithmetic instruction optimization using chaining |
US7207037B2 (en) | 1999-11-12 | 2007-04-17 | Sun Microsystems, Inc. | Overflow sensitive arithmetic instruction optimization using chaining |
US6363523B1 (en) | 1999-11-12 | 2002-03-26 | Sun Microsystems, Inc. | Optimization of N-base typed arithmetic expressions |
US8453133B2 (en) | 1999-11-12 | 2013-05-28 | Oracle America, Inc. | Optimization of N-base typed arithmetic instructions via rework |
US6986132B1 (en) | 2000-04-28 | 2006-01-10 | Sun Microsytems, Inc. | Remote incremental program binary compatibility verification using API definitions |
US6883163B1 (en) | 2000-04-28 | 2005-04-19 | Sun Microsystems, Inc. | Populating resource-constrained devices with content verified using API definitions |
US6651186B1 (en) | 2000-04-28 | 2003-11-18 | Sun Microsystems, Inc. | Remote incremental program verification using API definitions |
US6981245B1 (en) | 2000-09-14 | 2005-12-27 | Sun Microsystems, Inc. | Populating binary compatible resource-constrained devices with content verified using API definitions |
US20100174717A1 (en) * | 2002-02-28 | 2010-07-08 | Olivier Fambon | Interative serialisation procedure for structured software objects |
FR2840084A1 (fr) * | 2002-05-27 | 2003-11-28 | Gemplus Card Int | Procede de verification de codes pour microcircuits a ressources limitees |
US20040003380A1 (en) * | 2002-06-26 | 2004-01-01 | Microsoft Corporation | Single pass intermediate language verification algorithm |
US20040163087A1 (en) * | 2003-02-14 | 2004-08-19 | Carl Sandland | Computer program code and method for delivering external data to a process running on a virtual machine |
AU2004237808B2 (en) * | 2003-02-14 | 2010-08-12 | Actividentity (Australia) Pty Ltd | System and method for delivering external data to a process running on a virtual machine |
FR2853741B1 (fr) | 2003-04-14 | 2005-09-09 | Gemplus Card Int | Procede de gestion d'un code executable telecharge dans un systeme embarque reprogrammable |
US7574695B2 (en) * | 2003-12-23 | 2009-08-11 | Ntt Docomo, Inc. | Performing checks on the resource usage of computer programs |
US7908653B2 (en) * | 2004-06-29 | 2011-03-15 | Intel Corporation | Method of improving computer security through sandboxing |
FR2884994A1 (fr) * | 2005-04-22 | 2006-10-27 | Gemplus Sa | Procede de verification de pseudo-code charge dans un systeme embarque, notamment une carte a puce |
DE102005026384A1 (de) * | 2005-06-08 | 2006-12-14 | Giesecke & Devrient Gmbh | Validierung eines zur nativen Ausführung durch einen Prozessor eines Datenträgers vorgesehenen Programms |
CN101321353B (zh) * | 2008-07-14 | 2011-08-24 | 中兴通讯股份有限公司 | 一种支持Java应用下载空间检测的方法 |
CN102479155B (zh) * | 2010-11-30 | 2014-07-02 | 国际商业机器公司 | 用于网络应用服务器系统的内存过载管理的方法和系统 |
CN102063371A (zh) * | 2010-12-29 | 2011-05-18 | 大唐微电子技术有限公司 | 验证芯片处理器逻辑设计的方法和系统 |
CN102591696A (zh) * | 2011-01-14 | 2012-07-18 | 中国科学院软件研究所 | 一种手机软件行为数据提取方法及系统 |
US8874688B1 (en) | 2012-01-11 | 2014-10-28 | Amazon Technologies, Inc. | Securing execution of customer-supplied network page generation code |
US8819477B1 (en) | 2012-02-01 | 2014-08-26 | Amazon Technologies, Inc. | Error handling in a network page generation environment |
US9800455B1 (en) | 2012-02-08 | 2017-10-24 | Amazon Technologies, Inc. | Log monitoring system |
KR101412576B1 (ko) * | 2012-06-27 | 2014-06-27 | 한국과학기술원 | 가상 보드 플랫폼, 시스템-온-칩 시뮬레이션 장치, 시스템-온-칩 시뮬레이션 방법 및 시스템-온-칩 검증 방법 |
US10089089B2 (en) * | 2015-06-03 | 2018-10-02 | The Mathworks, Inc. | Data type reassignment |
US10409600B1 (en) | 2016-01-25 | 2019-09-10 | Apple Inc. | Return-oriented programming (ROP)/jump oriented programming (JOP) attack protection |
US9977725B2 (en) * | 2016-08-26 | 2018-05-22 | Cisco Technology, Inc. | Automatic classification and parallel processing of untested code in a protected runtime environment |
EP3435270B1 (de) * | 2017-07-27 | 2020-09-23 | Siemens Aktiengesellschaft | Vorrichtung und verfahren zum kryptographisch geschützten betrieb einer virtuellen maschine |
CN109968359A (zh) * | 2019-03-28 | 2019-07-05 | 台州九牛慧联机器人技术有限公司 | 一种工业机器人控制系统 |
CN112905196A (zh) * | 2019-11-19 | 2021-06-04 | 广州汽车集团股份有限公司 | 软件更新的方法、装置及存储介质 |
CN111679945A (zh) * | 2020-06-12 | 2020-09-18 | 地平线(上海)人工智能技术有限公司 | 处理器的检测方法、装置及计算机可读存储介质 |
CN113127285B (zh) * | 2021-06-17 | 2021-10-08 | 北京燧原智能科技有限公司 | 一种错误数据调试方法、装置、芯片及计算机设备 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4571678A (en) | 1982-11-05 | 1986-02-18 | International Business Machines Corporation | Register allocation and spilling via graph coloring |
US5249295A (en) * | 1990-06-20 | 1993-09-28 | Rice University | Digital computer register allocation and code spilling using interference graph coloring |
US5276881A (en) * | 1990-06-25 | 1994-01-04 | Hewlett-Packard Company | ANDF producer using the HPcode-Plus compiler intermediate language |
US5694539A (en) * | 1994-08-10 | 1997-12-02 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
US5668999A (en) * | 1994-12-20 | 1997-09-16 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
US6275976B1 (en) * | 1996-03-15 | 2001-08-14 | Joseph M. Scandura | Automated method for building and maintaining software including methods for verifying that systems are internally consistent and correct relative to their specifications |
EP0932865B1 (en) * | 1996-10-25 | 2002-08-14 | SCHLUMBERGER Systèmes | Using a high level programming language with a microcontroller |
US6128774A (en) * | 1997-10-28 | 2000-10-03 | Necula; George C. | Safe to execute verification of software |
AU1809599A (en) * | 1997-12-11 | 1999-06-28 | Digits Corp. | Object code analysis and remediation system and method |
US6223337B1 (en) * | 1997-12-12 | 2001-04-24 | Hewlett-Packard Company | Random test generation for compiler optimization |
US6195774B1 (en) * | 1998-08-13 | 2001-02-27 | Xilinx, Inc. | Boundary-scan method using object-oriented programming language |
-
1999
- 1999-08-23 FR FR9910697A patent/FR2797963B1/fr not_active Expired - Fee Related
-
2000
- 2000-08-21 WO PCT/FR2000/002349 patent/WO2001014958A2/fr active IP Right Grant
- 2000-08-21 CN CN00811932.5A patent/CN1220939C/zh not_active Expired - Fee Related
- 2000-08-21 ES ES00958714T patent/ES2209969T3/es not_active Expired - Lifetime
- 2000-08-21 JP JP2001519256A patent/JP2003507811A/ja active Pending
- 2000-08-21 DE DE60006141T patent/DE60006141T2/de not_active Expired - Lifetime
- 2000-08-21 AU AU70150/00A patent/AU769363B2/en not_active Ceased
- 2000-08-21 EP EP00958714A patent/EP1212678B1/fr not_active Expired - Lifetime
- 2000-08-21 US US10/069,670 patent/US7720939B1/en not_active Expired - Fee Related
- 2000-08-21 AT AT00958714T patent/ATE252742T1/de not_active IP Right Cessation
- 2000-08-21 CA CA002382003A patent/CA2382003C/fr not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE60006141T2 (de) | 2004-08-26 |
WO2001014958A3 (fr) | 2001-12-13 |
AU769363B2 (en) | 2004-01-22 |
EP1212678A2 (fr) | 2002-06-12 |
FR2797963A1 (fr) | 2001-03-02 |
CN1220939C (zh) | 2005-09-28 |
DE60006141D1 (de) | 2003-11-27 |
CA2382003C (fr) | 2008-12-23 |
EP1212678B1 (fr) | 2003-10-22 |
FR2797963B1 (fr) | 2002-11-29 |
WO2001014958A2 (fr) | 2001-03-01 |
US7720939B1 (en) | 2010-05-18 |
CN1370294A (zh) | 2002-09-18 |
AU7015000A (en) | 2001-03-19 |
ATE252742T1 (de) | 2003-11-15 |
JP2003507811A (ja) | 2003-02-25 |
CA2382003A1 (fr) | 2001-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2209969T3 (es) | Protocolo de gestion, procedimiento de verificacion y de transformacion de un fragmento de programa descargado y sistemas correspondientes. | |
Leroy | Bytecode verification on Java smart cards | |
Yellin | Low level security in Java | |
US5999732A (en) | Techniques for reducing the cost of dynamic class initialization checks in compiled code | |
US7263693B2 (en) | Combined verification and compilation of bytecode | |
US7051343B2 (en) | Module-by-module verification | |
US7444648B2 (en) | Fully lazy linking with module-by-module verification | |
US6618855B1 (en) | Caching untrusted modules for module-by-module verification | |
JP2003141488A (ja) | 高級プログラミング言語を用いたマイクロコントローラ | |
US20090165149A1 (en) | Method for Making Secure the Execution of an Intermediate Language Software Code in a Portable Device | |
US7991953B2 (en) | Method of verifying pseudo-code loaded in an embedded system, in particular a smart card | |
Costan et al. | The trusted execution module: Commodity general-purpose trusted computing | |
Zhao et al. | Haepg: An automatic multi-hop exploitation generation framework | |
US6763397B1 (en) | Fully lazy linking | |
CZ423598A3 (cs) | Přenosný bezpečný transakční systém pro programovatelná inteligentní zařízení | |
Lancia et al. | Java card virtual machine compromising from a bytecode verified applet | |
Agesen et al. | Finding references in Java stacks | |
US6978451B2 (en) | Method for fast compilation of preverified JAVA bytecode to high quality native machine code | |
Farhadi et al. | Chronicle of a Java Card death | |
Coglio | Improving the official specification of Java bytecode verification | |
CA2309768C (en) | Dataflow algorithm for symbolic computation of lowest upper bound type | |
WO2008043647A2 (en) | Defending smart cards against attacks by redundant processing | |
US6793143B2 (en) | Data carrier | |
Bernardeschi et al. | A space-aware bytecode verifier for Java cards | |
Bernardeschi et al. | Using control dependencies for space-aware bytecode verification |