APARATO PARA ENTREGAR DATOS FORMATEADOS A UNIDADES DE PROCESAMIENTO CENTRAL La presente invención se refiere a aparatos de multimedia tales como un sistema de transmisión de televisión interactivo, para entregar datos que tienen un formato común a unidades de procesamiento central (CPUs) operando de manera de "little endian" o de "big endian". Casi todos los sistemas de computadora incluyen actualmente un sistema de memoria que proporciona posiciones direccionables separadamente para bytes (unidades de 8-bits) de datos, significando que el byte es la unidad de datos mínima direccionable. Las unidades de datos mayores, que se pueden denominar como palabras (16 bits) y/o las palabras largas (32 bits) , son accesadas, procesadas y almacenadas por unidades de procesamiento central como secuencias de bytes en posiciones de memoria adyacentes. Las unidades de procesamiento central emplean uno de dos métodos para accesar y almacenar dichas unidades de datos más largas en memoria. Un primer método es almacenar una unidad de datos más larga desde su byte menos significativo hasta su byte más significativo en direcciones de memoria que se incrementan. Una unidad de procesamiento central usando este método para accesar y almacenar unidades de datos más largas opera de una manera generalmente denominada "little endian". Un segundo método es almacenar una unidad de datos más larga desde su byte más significativo hasta su byte menos significativo en direcciones de memoria que se incrementan. Una unidad de procesamiento central que usa este método para accesar y almacenar unidades de datos más largas opera en una manera generalmente denominada "big endian". Dirección "little endian" "big endian" 0x1000 0x78 0x12 0x1 001 0x56 0x54 0x1 002 0x34 0x56 0x1 003 0x 1 2 0x78 TA BLA I La TABLA I ilustra un ejemplo del almacenamiento de la variable de palabra larga (32 bits) 0x12345678 en la posición 0x1000 en memoria, tanto en la configuración de "little endian" como en la de "big endian". El sistema ilustrado en la TABLA I , incluye una memoria direccionable a un nivel de byte. Es decir, el byte es la unidad de datos mínima direccionable, o, puesto de otra manera, cada byte es almacenado en una posición direccionable separadamente. La variable de palabra larga 0x12345678 es almacenada en posiciones de memoria secuenciales comenzando en la posición 0x1000. En un sistema "little endian", el byte menos significativo (es decir 0x78) es almacenado en la posición de memoria más baja (es decir 0x1000) , con bytes sucesivamente más significativos almacenados en posiciones de memoria sucesivas. En un sistema "big endian", el byte más significativo (es decir, 0x12) es almacenado en la posición de memoria más baja (es decir 0x1000) , con bytes sucesivamente menos significativos almacenados en posiciones de memoria sucesivas. Es importante para la ejecución adecuada de un programa que los datos que sean almacenados en la memoria en la configuración adecuada para la unidad de procesamiento central que ejecute el programa. En los sistemas actuales esto no es un problema porque cada unidad de procesamiento central incluye herramientas de desarrollo de programa para traducir programas fuente (por ejemplo, lenguaje de ensamblaje o lenguaje de nivel superior) en el código de la máquina nativa para esa unidad de procesamiento central, incluyendo colocar datos variables iniciales o constantes en la memoria en el formato adecuado. Si la unidad de procesamiento central es una unidad de procesamiento central de "little endian", entonces estas herramientas emiten datos en el formato "little endian" apropiados para esa unidad de procesamiento central. De igual manera, si la unidad de procesamiento central es una unidad de procesamiento central de "big endian", entonces estas herramientas emiten datos en el formato "big endian" apropiado para esa unidad de procesamiento central. Sin embargo, recientemente, se han propuesto sistemas distribuidos tales como sistemas de multimedia (interactivos) en los cuales los programas de computadora son transmitidos desde una posición central a posiciones remotas. La unidad de procesamiento central remota, y en particular el formato "endian" usado por la unidad de procesamiento central remota para unidades de datos más largas, no es conocida a la posición central. De hecho, se espera que las unidades de procesamiento central que usan ambos formatos "endian" sean capaces de recibir y ejecutar el programa de computación transmitido. Específicamente, se han propuesto sistemas de televisión interactivos en los cuales los componentes de programa de computadora, audio y vídeo serán transmitidos desde una posición central , a través de un enlace de satélite, a posiciones de suscriptores individuales. Cada posición de suscriptor incluirá un receptor de televisión para exhibir la información de audio y vídeo recibida, y una unidad de procesamiento central para ejecutar la información de programa de computación recibida. Las posiciones de suscriptor diferentes pueden tener diferentes unidades de procesamiento central usando diferentes formatos "endian". Se prevé que la porción de código de los programas de computación será un código intermedio el cual será interpretado por un intérprete implementado en la unidad de procesamiento central en la posición del suscriptor. Sin embargo, se esperará que la unidad de procesamiento central en cada posición del suscriptor tenga disponible para la misma, ciertas rutinas previamente codificadas para realizar tareas comunes. Estas rutinas serán implementadas en el código nativo de la unidad de procesamiento central en la posición del suscriptor para maximizar la velocidad de ejecución. Cualesquiera datos accesados por estas rutinas de código nativo, deben ser almacenados en el formato "endian" de esa unidad de procesamiento central .
Una solución podría ser transmitir dos versiones del programa de computadora desde la posición central: uno para unidades de procesamiento central de "big endian" y un segundo para unidades de procesamiento central de "little endian". Sin embargo, esta solución requiere que todos los datos del programa de computadora sean transmitidos dos veces en el enlace de satélite, una vez en formato "big endian" y una segunda vez en formato "little endian". Esto es un desperdicio de ancho de banda. Es deseable transmitir datos sólo una vez en el enlace de satélite, pero hacer esos datos útiles a las unidades de procesamiento central usando tanto el formato "big endian" como el formato "little endian". De conformidad con los principios de la presente invención , un sistema de computadora distribuido incluye una posición central y una pluralidad de posiciones remotas. Un sistema de computadora de posición central genera un programa de computadora consistente de uno o más módulos, cada uno de los cuales incluye una sección de datos conteniendo una pluralidad de unidades de datos. Cada una de las unidades de datos es ya sea una unidad de datos mínima direccionable o una unidad de datos más larga. Cada unidad de datos más larga contiene una pluralidad de unidades de datos mínimas direccionables. El módulo también incluye una sección de intercambio conteniendo datos identificando posiciones de unidades de datos más largas dentro de la sección de datos. Un sistema de computadora de posición remota recibe un módulo, y contiene un cargador. El cargador intercambia las unidades de datos mínimas direccionables de las unidades de datos más largas en la sección de datos. Un enlace de transmisión transmite el módulo desde el sistema de computadora de la posición central al sistema de computadora de posición remota. BREVE DESCRIPCIÓN DE LOS DI BUJOS En los dibujos: La Figura 1 es un diagrama de bloques de un sistema de computadora distribuido empleando la presente invención; La Figura 2 es un diagrama de configuración de memoria que ilustra la configuración de una sección de datos, y secciones de datos de intercambio correspondientes alternativas; La Figura 3 es un diagrama de configuración de memoria ilustrando la codificación de una sección de intercambio de conformidad con una modalidad de la presente invención; y La Figura 4 es un diagrama de configuración de memoria ilustrando un ejemplo de una sección de datos y correspondiente sección de intercambio codificada de conformidad con la Figura 3. La Figura 1 es un diagrama de bloques de un sistema de computadora distribuido empleando la presente invención. En la Figura 1 , una posición central incluye un sistema de computadora para preparar datos y código de programa de computadora para transmisión a posiciones remotas. El sistema de computadora incluye una unidad de procesamiento central (CPU), memoria de leer/escribir (RAM), memoria de sólo lectura (ROM) , y dispositivos de entrada y salida tales como terminales de tubos de rayos catódicos (CRT) e impresoras, acoplados conjuntamente de una manera vía un conductor del sistema, ninguno de los cuales se muestran . El sistema de computadora adicionalmente incluye un dispositivo de almacenamiento de masa 10, también operando de manera conocida y acoplado al conductor del sistema de una manera conocida. En operación , el sistema de computadora es usado por un programador para generar programas de computadora para ser distribuidos desde la posición central a un pluralidad de posiciones remotas. Como es usual en el desarrollo de programas, el programador de la aplicación usa el sistema de computadora en una manera conocida para generar un documento fuente (no mostrado), que puede consistir de uno o más archivos de control y/o fuente (no mostrados). El documento fuente es procesado de una manera conocida por varios programas (por ejemplo, compiladores), ejecutados en el sistema de computadora, cada uno de los cuales puede producir resultados intermedios, para generar módulos finales, listos para ser distribuidos a las posiciones remotas. El dispositivo de almacenamiento de masa 10 mantiene datos representando los resultados intermedios del proceso de desarrollo del programa, es decir uno o más archivos objeto tal como un archivo objeto 12; y uno o más módulos finales del proceso de desarrollo del programa, tal como un módulo 14. En la Figura 1 , una rutina de post-enlazador 20 toma como entrada el módulo objeto 12 y genera como salida el módulo 14, de una manera que se describirá con más detalle a continuación.
En un sistema de televisión interactivo, por ejemplo, los programas de aplicación para influenciar la interacción de los observadores con señales de televisión transmitidas son desarrollados por programadores de aplicación usando herramientas de desarrollo de programa en la posición central. Uno de los resultados intermedios de las herramientas de desarrollo de programa es el archivo objeto 12. El archivo objeto 12 incluye datos representado código ejecutable (no mostrado), y una tabla de símbolo 122. La tabla de símbolo 122 contiene datos referentes a cada nombre de variable, su tipo de datos, y la dirección en memoria en la cual esa variable será almacenada cuando el programa sea ejecutado. La tabla de símbolo 122 adicionalmente contiene información referente a cada tipo de datos en la tabla de símbolo 122 a tipos de datos básicos, tales como byte, palabra y palabra larga, como se describió anteriormente. El post-enlazador 20 procesa, de una manera conocida, los datos en el archivo objeto 12 representando el código ejecutable (no mostrado) y genera código intermedio de una estructura conocida en una sección de código intermedio 142 del módulo 14. El post-enlazador 20, adicionalmente analiza de una manera conocida la información en la tabla de símbolo 122 del módulo objeto 12, y genera una sección de datos 144 incluyendo datos representando una imagen de los datos en la tabla de símbolo 122 como serían almacenados en una memoria cuando el código de programa contenido en la sistema de sección de código 142 el módulo 14 sea ejecutado en una posición remota. El módulo 14 (y todos los demás módulos, no mostrados) son transmitidos a la pluralidad de posiciones remotas vía el enlace de transmisión 30. El enlace de transmisión 30 consiste de elementos conocidos tales como adaptadores de salida acoplados al conductor del sistema del sistema de computadora de posición central, programadores, formadores de paquetes, mutiplexores, enlaces ascendentes de satélite de RF, respondedores de satélite, enlaces descendentes de satélite de RF, desmultiplexores, y adaptadores de entrada acoplados a un conductor del sistema de un sistema de computadora en la posición remota (ninguno de los cuales se muestra). El enlace de transmisión opera de una manera conocida para transferir el módulo 14 desde la posición central a la posición remota como sea requerido. En un sistema de televisión interactivo, la posición central también contiene una fuente de señales de audio y vídeo de televisión para acompañar el programa de computadora representado por el módulo 14 (y todos los demás módulos, no mostrados). Las señales de audio y vídeo de televisión son formadas en paquetes y multiplexadas junto con el módulo 14 para formar una señal de televisión interactiva compuesta. Esta señal compuesta es transmitida a todas las posiciones remotas, por ejemplo, vía un enlace de satélite de una manera conocida. Las posiciones remotas tienen receptores incluyendo detectores para detectar/proporcionar esta señal compuesta, y por ejemplo, procesadores de transporte inverso para desmultiplexar el o los módulos de las señales de audio y vídeo de televisión . Las señales de audio y vídeo de televisión son procesadas de una manera conocida y presentadas a sistemas que pueden utilizar estas señales. Por ejemplo, las señales de audio y vídeo de televisión pueden ser suministradas a un receptor de televisión o una reproductora de vídeo casetes en una posición del suscriptor. Además, es adicionalmente posible para el sistema de computadora de posición remota ejecutar el programa de computadora representado por el o los módulos, y, como resultado de la ejecución del programa, generar señales de vídeo de imagen y señales de audio de sonido. Estas señales de audio y vídeo generadas por computadora se pueden combinar con las señales de audio y vídeo de televisión , respectivamente para generar una presentación combinada de multimedia de computadora/televisión . Adicionalmente, es posible para un usuario interactuar con el programa de computadora ejecutándose (por ejemplo, mediante el uso de una unidad de control remoto) para interactuar con la presentación de multimedia exhibida. Los expertos en la técnica del diseño de sistemas de televisión interactiva comprenderán cómo se puede realizar todo lo anterior. Como se describió anteriormente, cada posición remota tiene un sistema de computadora incluyendo una unidad de procesamiento central 70, una RAM 50, una ROM 60, y varios dispositivos de entrada y salida (no mostrados), todos acoplados conjuntamente de una manera conocida vía un conductor del sistema (no mostrado), y operando de una manera conocida. Un dispositivo de entrada (no mostrado) acopla la salida del enlace de transmisión 30 al conductor del sistema. U na rutina de procesamiento del cargador 40, ejecutando en la unidad de procesamiento central, controla la operación de este dispositivo de entrada. Cuando un módulo deseado es recibido desde el enlace de transmisión 30, el cargador 40 transfiere la sección de código 52 y la sección de datos 54 a la RAM 50. Cuando el módulo recibido ha sido transferido completamente a la RAM 50, una rutina de intérprete 62, almacenada permanentemente en la ROM 60, accesa el código intermedio (arriba descrito) en la sección de código 52, y lo ejecuta interpretándolo de una manera conocida. Algunas instrucciones en la sección de código 52 se referirán a los datos almacenados en la sección de datos 54. Al ejecutar estas instrucciones, el intérprete 62 accesa los datos deseados en la sección de datos 54 y ejecuta el programa. Es bien conocido que los intérpretes son medios muy lentos para ejecutar programas. Aunque la velocidad no es siempre importante, existen funciones para las cuales es deseable. Para realizar dichas funciones, el sistema de computadora en la posición remota incluye una biblioteca 64 de rutinas codificadas en el código activo de la unidad de procesamiento central en la posición remota. Sin embargo, como se describió anteriormente, las unidades de procesamiento central respectivas en diferentes posiciones remotas pueden operar de conformidad a diferentes formatos "endian". Es decir, algunas unidades de procesamiento central remotas pueden operar de acuerdo al formato "big endian", mientras que otras pueden operar de acuerdo al formato "little endian". Si la sección de datos es generada y transportada en uno de los formatos "endian", por ejemplo en el formato "big endian", las bibliotecas nativas 64 para unidades de procesamiento central remotas operando de acuerdo al formato "big endian" pueden accesar unidades de datos más largas almacenadas en la sección de datos 54 usando directamente las instrucciones nativas de escritura y lectura de múltiples bytes más eficientes disponibles. Pero las bibliotecas nativas 64 de las unidades de procesamiento central remotas operando de acuerdo al formato "little endian" deben accesar unidades de datos más largas un byte a la vez, y reconfigurar los bytes intercambiándolos del formato "big endian" al formato "little endian" antes de que los datos mismos puedan ser procesados. Esto agrega sobrecarga sustancial a estas rutinas, las cuales se deben ejecutar lo más rápido posible. De conformidad con los principios de la presente invención, el módulo 14, generado en la posición central, incluye adicionalmente una sección de intercambio 146. La sección de intercambio 146 incluye datos indicando donde, dentro de la sección de datos 144 se almacenan las unidades de datos más largas. El post-enlazador 20, mientras analiza la tabla de símbolo 122 en el archivo objeto 12, puede determinar en donde en la sección de datos estas unidades de datos más largas son almacenadas. El post-enlazador 20, cuando identifica una unidad de datos más larga, hace una entrada en una tabla para indicar la posición relativa dentro de la sección de datos 144 en la cual reside la unidad de datos más larga. Cuando el archivo objeto 12 ha sido analizado completamente, los datos representando esta tabla son almacenados en la sección de intercambio 146 del módulo 14, y transmitidos en el enlace de transmisión 30 a las posiciones remotas junto con la sección de código intermedia 142 y la sección de datos 144. En la modalidad ilustrada, los datos son almacenados en la sección de datos 144 en el formato "big endian", exclusivamente. La sección de intercambio 146 contiene datos indicando en donde, en la sección de datos 144 son almacenadas las unidades de datos más largas. En la posición remota, el cargador 40 almacena la sección de código 52, la sección de datos 54 y la sección de intercambio 56 del módulo recibido en la RAM 50. Si la unidad de procesamiento central en la posición remota opera de acuerdo al formato "big endian", entonces las posiciones de la RAM 50 conteniendo la sección de intercambio 56 no se necesitan, y pueden ser liberadas para ser usadas para otros propósitos. Entonces, el cargador 40 puede reportar la terminación de su función, y el intérprete 62 y la biblioteca nativa 64 pueden cada uno accesar los datos en el formato "big endian" usado por la unidad de procesamiento central remota. Si, por otro lado, la unidad de procesamiento central en la posición remota opera de acuerdo con el formato "little endian", entonces el cargador 40, antes de terminar su proceso, analiza los datos en la sección de intercambio 56. En cada posición dentro de la sección de datos 54 la cual la sección de intercambio 56 indica que contiene una unidad de datos más larga, el cargador 40 intercambia los bytes de esta unidad de datos, convirtiendo así esa unidad de datos al formato "little endian" del formato "big endian". Después que todas las unidades de datos más largas han sido convertidas al formato "little endian", las posiciones de la RAM 50 conteniendo la sección de intercambio 56 ya no se necesitan y pueden ser liberadas para ser usadas para otros propósitos. Entonces el cargador 40 puede reportar la terminación de su función, permitiendo al intérprete 62 y a la biblioteca nativa 64 comenzar su ejecución . Debido a que todos los datos en esta posición remota están ahora en el formato "little endian", las rutinas en la biblioteca nativa 64 pueden operar usando la instrucción nativa de escritura y lectura de múltiples bytes más eficiente disponible. Un sistema de televisión interactivo de conformidad con la presente invención, permite que las unidades de procesamiento central en posiciones remotas operando en los formatos "big endian" y "little endian" accesen datos transmitidos en sus modos nativos, sin requerir la transmisión de los datos dos veces desde la posición central , una vez en formato "big endian" y una segunda vez en formato "little endian". Todo lo que se requiere es la generación de una pequeña sección de intercambio en cada módulo por una rutina de post-enlazador en la posición central; y un paso adicional en la rutina del cargador de las posiciones remotas conteniendo unidades de procesamiento central operando en el formato "endian" diferente del de los datos transmitidos, para intercambiar las unidades de datos más largas antes de la terminación de la carga. La Figura 2 es un diagrama de configuración de memoria ilustrando la configuración de una sección de datos 144, y secciones de datos de intercambio correspondientes alternativas 146a y 146b . En la Figura 2, la sección de datos 144 es ilustrada como una columna en la mitad de la figura. Cada variable es ilustrada como un rectángulo dentro de esta columna con el tamaño del rectángulo correspondiendo al tamaño de la variable. Específicamente, cada una de las dos variables superiores es una variable de byte; la tercera variable es una variable de palabra, ilustrada como consistiendo de dos bytes consecutivos; la cuarta variable es una variable de byte; la quinta variable es una variable de palabra larga, ilustrada como consistiendo de cuatro bytes consecutivos; la sexta variable es una variable de byte; y la séptima variable es una variable de palabra, ilustrada como consistiendo de dos bytes consecutivos. Por supuesto que puede haber otras variables en la sección de datos 144, que pueden ser variables de byte, variables de palabra o variables de palabra larga. La columna en el lado de la izquierda de la figura ilustra una primera implementación de una sección de datos de intercambio 146a. En esta implementación, hay una entrada para cada variable en la sección de datos 144, en el orden que aparecen en la sección de datos, cada entrada indicando el tamaño de la variable correspondiente. En la sección de intercambio 146a, existen siete entradas correspondientes a las siete variables ilustradas en la sección de datos 144. Los contenidos de cada entrada son ilustrados por una letra para indicar el tipo de la variable correspondiente. Específicamente, las primeras dos entradas contienen la indicación "B" para indicar que las primeras dos variables son variables de byte. La siguiente entrada contiene la indicación "W" para indicar que la tercera variable es una variable de palabra. La siguiente entrada contiene la indicación "B" para indicar que la cuarta variable es una variable de byte. La siguiente entrada contiene la indicación "L" para indicar que la quinta variable es una variable de palabra larga, y así sucesivamente. Como se puede ver, en esta implementación hay tres posibles longitudes para una variable (B, W o L), de manera que la longitud puede ser representada por dos bits, y cuatro de tales indicaciones pueden ser empacadas dentro de un solo byte. Alternativamente, sólo la posición de las unidades de datos más largas dentro de la sección de datos puede ser contenida en la sección de intercambio. Esto se ilustra en la sección de intercambio 146b ilustrada en el lado derecho de la Figura 2. En la porción ilustrada de la sección de datos 144, hay tres unidades de datos más largas en la sección de datos 144 que se necesitarían intercambiar de un formato "endian" al otro. Cada entrada en la sección de intercambio ilustrada en 146b, contiene un valor de desplazamiento que apunta a la posición dentro de la sección de datos 144 de una unidad de datos más larga, y un tipo de esa unidad. Específicamente, la primera entrada en la sección de intercambio 146b contiene un indicador a la posición de la tercera variable, y una indicación de que es una variable de palabra (dos bytes). La siguiente entrada indica a la quinta variable en la sección de datos 144, y contiene una indicación de que esa variable es una variable de palabra larga (cuatro bytes) . La siguiente entrada indica a la séptima variable, y contiene una indicación de que esa variable es una variable de palabra (dos bytes). Cada entrada en una sección de intercambio de acuerdo con esta implementación debe ser suficientemente grande para contener el indicador de desplazamiento a la posición dentro de la sección de datos, y la indicación del tipo en esa posición . Pero existen entradas sólo para las unidades de datos más largas, no cada unidad de datos. Alternativamente, puede haber listas separadas para cada tipo de variable; es decir, una lista para las variables de palabra y una lista separada para las variables de palabra larga. Cada entrada en cada dicha lista necesita contener sólo el indicador de desplazamiento a la posición de la variable en la sección de datos 144. En cualquiera de tales implementaciones, el post-enlazador 20
(de la Figura 1 ) analiza la tabla de símbolo, y genera la sección de intercambio 146 para identificar las posiciones en la sección de datos 144 de las unidades de datos más largas como se describió anteriormente. El cargador 40, primero carga la sección de intercambio 56 entonces, si es necesario cambiar el formato "endian" de las unidades de datos más largas en la sección de datos 54, recorre los datos en la sección de intercambio 56, identifica las posiciones en la sección de datos 54 de las unidades de datos más largas, e intercambia los bytes en esas posiciones. Para una sección de intercambio como la ilustrada en 146a, toda la sección de datos 144 es explorada, y si la entrada en la sección de intercambio 146a indica que la posición contiene una unidad de datos más larga (una variable de palabra o de palabra larga) esos bytes son intercambiados. Para la sección de intercambio como la ilustrada en 146b, cada entrada en la sección de intercambio es procesada intercambiando los bytes en la posición indicada en la sección de datos 144. En los lenguajes de programación modernos, las variables son generalmente variables complejas formadas desde las variables de byte básico, palabra, y palabra larga, arriba descritas, y configuradas en estructuras, matrices, matrices de estructuras, y/o estructuras conteniendo matrices. Tales configuraciones de datos dan como resultado repeticiones de datos del mismo tipo, o repeticiones de patrones de tipos de datos. El tamaño de la sección de intercambio puede ser reducida mediante codificación especial para permitir la representación eficiente de tipos de variables repetidas, o patrones de variables. La Figura 3, es un diagrama de configuración de memoria ilustrando la codificación de porciones respectivas de una sección de intercambio 146, de conformidad con la presente invención. La configuración de la sección de intercambio 146 ilustrada en la Figura 3, corresponde a la sección de intercambio 146a (de la Figura 2) en la cual hay una entrada en la sección de intercambio para cada byte en la sección de datos. La compresión adicional se logra en una sección de intercambio 146, como la ilustrada en la Figura 3, tomando ventaja de la repetición de datos del mismo tipo y repeticiones de patrones de tipos de datos. En la Figura 3, las posiciones remotas contienen unidades de procesamiento central que tienen tres tipos variables básicos: byte, palabra y palabra larga; y los cuales requieren que las unidades de datos más largas (palabra y palabra larga) sean alineadas. Esto significa que las variables de byte pueden ser almacenadas en cualquier posición dentro de la memoria, las variables de palabra sólo pueden ser almacenadas en posiciones de byte que tienen direcciones nones, y las variables de palabra larga sólo pueden ser almacenadas en posiciones de byte que tiene direcciones divisibles entre cuatro. Dichas configuraciones son bien conocidas, y serán comprendidas por los expertos en la técnica del diseño de sistemas de computadora. Las palabras largas especiales, llamadas indicadores, son designados separadamente "P" en la Figura 3. Los indicadores son construcciones de programación bien conocidas, y son tratados espacialmente durante el proceso de carga. Tienen el mismo tamaño que las palabras largas, es decir, cuatro bytes, deben ser almacenadas sólo en posiciones de byte que tengan direcciones divisibles entre cuatro, y se deben intercambiar sus bytes si es necesario para cambiar el formato "endian". Además, su valor se debe cambiar para reflejar la posición absoluta en la RAM de la posición remota en la cual la sección de datos es almacenada, un proceso conocido como reposicionamiento. El proceso de reposicionamiento es bien conocido, y no será descrito con más detalle aquí. La configuración de datos en la sección de datos es representada en la sección de intercambio 146 como una serie de bytes codificados en la manera abajo descrita. El esquema para codificar una sección de intercambio 146 ilustrada en la Figura 3 considera primero la sección de datos (no mostrada) siendo dividida en palabras largas alineadas. La Figura 3 incluye una tabla 202 en la parte superior izquierda indicando las únicas configuraciones permisibles de variables de byte (designadas "B"), variables de palabra alineadas (designadas "W") y variables de palabra larga alineadas (designadas "L" para palabras largas o "P" para indicadores) dentro de una palabra larga alineada en memoria. Las direcciones en el lado izquierdo de la tabla 202 son ilustrativas de direcciones alineadas de palabras largas (divisibles entre cuatro) en la sección de datos, y no tienen la intención de indicar la dirección real en la sección de datos. Como se puede ver, existen seis configuraciones permisibles de variables dentro de una palabra larga alineada. La entrada superior, numerada "0" en el lado derecho, ilustra que una palabra larga alineada puede contener cuatro variables de byte separadas (B). La segunda entrada, numerada "1 ", ilustra que una palabra larga alineada puede contener dos variables de byte (B) seguidas por una variable de palabra (W). La tercera entrada, numerada "2", ilustra que una palabra larga alineada puede contener una variable de palabra (W) seguida por dos variables de byte (B). La cuarta entrada, numerada "3", ilustra que una palabra larga alineada puede contener dos variables de palabra (W). La quinta entrada, numerada "4", ilustra que una palabra larga alineada puede contener una variable de palabra larga (L); y la sexta entrada, numerada "5", ilustra que una palabra larga alineada puede contener un indicador (P). Ninguna otra configuración es permisible. Haciendo referencia a la Figura 3a, una palabra larga alineada en la sección de datos puede ser representada por una entrada en la sección de intercambio 146. El número en el lado derecho de la entrada en la tabla 202, representando el patrón de variables dentro de dicha palabra larga alineada, esta codificado de manera binaria en tres bits en una manera conocida. Estos tres bits son insertados en los tres bits más significativos (bits 7:6:5) 206 de la entrada 204 en la sección de intercambio 146 correspondiendo a esa palabra larga alineada. Una medida de compresión se logra en la sección de intercambio permitiendo que cada entrada 204 en la sección de intercambio represente un número de palabras largas alineadas consecutivas en memoria, conteniendo cada una el mismo patrón de variables. Los bits restantes (bits 4:3:2 : 1 :0) 208 contienen un valor numérico codificado binario N representando un número de repeticiones del patrón representado por los tres bits más significativos. El valor numérico N puede tener un valor de 0 a 31. Este valor numérico N representa el número de repeticiones del patrón - 1 . Un valor numérico N de "0" representa un valor de repetición de 1 , es decir, una sola ocurrencia del patrón 206 en la sección de datos. Un valor numérico N de "1 " representa un valor de repetición de 2 , y un valor numérico N de "31 " representa un valor de repetición de 32. De manera que, el número de repeticiones del patrón representado por el valor codificado binario 206 que puede ser representado por una sola entrada de byte 204 en la sección de intercambio 146 puede correr de 1 a 32. Como se describió anteriormente, las variables en un programa pueden ser combinaciones complejas de los tipos de datos básicos, incluyendo estructuras, matrices, matrices de estructuras y/o estructuras conteniendo matrices. Estas combinaciones complejas son construidas de secuencias de tipos de datos básicos configurados en una manera específica. Los valores binarios no utilizados para codificar patrones de la tabla 202, es decir, "6" y "7" , son usados para codificar secuencias de tipos de datos básicos, y repeticiones de patrones definidos previamente, respectivamente, tal como puede resultar de las instancias repetidas de dichas estructuras y matrices. La Figura 3b ilustra la codificación de una porción de la sección de intercambio 146 representando una secuencia repetitiva de patrones de la tabla 202. Cuando una secuencia de este tipo es identificada (por ejemplo de la tabla de símbolo 122 por el post- enlazador 20 de la Figura 1 ) , un valor codificado de manera binaria de "6" es colocado en los tres bits más significativos (7:6:5) de un primer byte 210 en la sección de intercambio 146 para indicar que esta entrada en la sección de intercambio 146 representa una secuencia, y no un patrón de tipos de datos básicos, como en la Figura 3a. Como en la Figura 3a, los cinco bits menos significativos en el primer byte 210 es un valor codificado binario N representando el número de repeticiones de la secuencia especificada. En este caso, el valor numérico N codificado binario, representa el número de repeticiones - 2 de la secuencia. De manera que, el número de repeticiones de la secuencia identificada puede correr de 2 a 33. El siguiente byte 212 en la sección de intercambio contiene la longitud - 1 de la secuencia en la sección de intercambio 146 y está determinado de una manera que se describirá a continuación. Siguiendo la longitud de secuencia el byte 212 es una serie de bytes 214, codificada como se describió anteriormente con respecto a la Figura 3a. El número de bytes en la serie 214 es determinado y un número N igual al número de bytes - 1 en la serie es codificado de manera binaria e insertado en el byte de la longitud de secuencia 212 , como se describió anteriormente. Cuando se define una estructura compleja, por ejemplo en la tabla de símbolo 122 (de la Figura 1 ) la configuración de tipos de datos básica necesaria para representar esa estructura puede ser determinada por el post-enlazador 20. Cada vez que una instancia de tal estructura de datos es definida en la tabla de símbolo 122, se realiza una entrada como la ilustrada en la Figura 3b en la sección de intercambio 146. Una matriz de tales estructuras puede ser representada por un número de repeticiones de esa estructura de datos, especificada por un número codificado binario N representando el número de repeticiones - 2, como se describió anteriormente. Si, otra instancia de tipo de datos es definida más tarde en la tabla de símbolo 122 (de la Figura 1 ) , entonces, en lugar de reinsertar la entrada de secuencia previamente insertada como en la Figura 3b, una entrada separada , denominada entrada de indicador posterior, es insertada en la sección de intercambio 146 haciendo referencia de regreso a la entrada de secuencia previa. La Figura 3c ilustra la codificación de una entrada de indicador posterior. En una entrada de indicador posterior, un valor binario "7" es codificado en los tres bits más significativos del primer byte 216. Como en la Figura 3a y la Figura 3b, los cinco bits menos significativos del primer byte 216 contienen un número codificado binario N representando el número de repeticiones de la secuencia previamente definida representada por la entrada de indicador posterior. En la Figura 3c, el número N es el número de repeticiones - 2, y representa un número de repeticiones de 2 a 33. El siguiente byte 218 representa un desplazamiento en la sección de intercambio 146 de regreso a la entrada de secuencia previamente insertada, como se describe en la Figura 3b. El desplazamiento representa el número de bytes entre la entrada de indicador posterior actual, y la entrada de secuencia previamente definida. Este desplazamiento indica al byte de longitud de secuencia 212 en la entrada de secuencia previamente definida, como se ilustra mediante la flecha desde el byte de desplazamiento del indicador posterior 218 en la Figura 3c al byte de longitud de secuencia 212 en la Figura 3b. Usando el esquema de codificación ilustrado en la Figura 3, las posiciones de los tipos de datos básicos: bytes, palabras y palabras largas dentro de la sección de datos; pueden ser determinados fácilmente mediante el cargador 40 (de la Figura 1 ) recorriendo las entradas en la sección de intercambio 146. Las unidades de datos más largas: palabras, palabras largas e indicadores, se pueden encontrar e intercambiar en bytes, si esto es necesario para cambiar el formato "endian" de esas unidades de datos. La Figura 4 es un diagrama de configuración de memoria ilustrando un ejemplo de una sección de datos 144 y la correspondiente sección de intercambio 146 codificada de conformidad con la Figura 3. En la Figura 4, las porciones de la sección de datos son ilustradas en el lado derecho de la figura, y las secciones correspondientes de la sección de intercambio 146 están ilustradas en el lado izquierdo de la figura. Los bytes que forman las entradas en la tabla de intercambio se ilustran como rectángulos horizontales. Algunos de los bytes están divididos lógicamente en porciones, indicadas mediante líneas verticales dentro de los rectángulos. Los bits comprendiendo cada porción se ilustran arriba de la sección de intercambio 146. Cada rectángulo horizontal en la sección de datos 144 corresponde a una palabra larga alineada en memoria que contiene cuatro bytes. Estos bytes, B 1 , B2 , B3, y B4 son ilustrados arriba de la sección de datos 144. Las direcciones en la izquierda de cada una de las primeras seis palabras largas alineadas tienen el propósito de ilustrar sólo que las palabras largas están alineadas, y no para indicar una posición absoluta en la sección de datos. La configuración de los tipos de variable básicos dentro de cada palabra larga alineada ilustrada es indicada por una "B" para una variable de byte; una "W" para una variable de palabra, consistiendo de dos bytes adjuntos; una "L" para una variable de palabra larga, consistiendo de cuatro bytes adjuntos; una "P" para un indicador, también consistiendo de cuatro bytes adjuntos. Las primeras seis palabras largas alineadas en la sección de datos 144 de la Figura 4, contienen variables en los mismos patrones de tipos de datos básicos como los ilustrados en la tabla 202 en la Figura 3a. Las designaciones "0" a "5" en la derecha de las primeras seis palabras largas, son el número en el patrón en la palabra larga correspondiente, también como se ilustra en la tabla 202. La primera entrada en la sección de intercambio 146 corresponde a la primera palabra larga alineada en la sección de datos 144. Esa palabra larga alineada está en la dirección 0x0000, y contiene cuatro variables de bytes "B". La representación codificada binaria para este patrón es "O", la cual es codificada en los tres bits más significativos, 7:6: 5. Sólo hay un patrón consecutivo, de manera que el número de repeticiones es 1 . El número N , codificado en los cinco bits menos significativos, 4:3:2: 1 : 0, es el número de repeticiones (1 ) - 1 , ó 0. Las siguientes cinco entradas en la sección de intercambio 146 corresponden a las siguientes cinco palabras largas alineadas en la sección de datos 144 y están codificadas similarmente. La siguiente entrada ilustrada en la sección de intercambio 146 corresponde a un patrón en la sección de datos 144 que es repetida tres veces. En este caso, el patrón repetido es una variable de palabra W seguida por dos variables de byte consecutivas B. Este patrón es representado por un valor codificado binario "2", como el ilustrado en la tabla 202 de la Figura 3. El valor codificado binario "2" es almacenado en los tres bits más significativos 7:6: 5. El número de repeticiones, en este caso es tres. El número N , codificado en los cinco bits menos significativos, 4:3:2: 1 : 0. Es el número de repeticiones (3) - 1 ó 2. La siguiente entrada ilustrada en la sección de intercambio 146 consiste de cinco bytes consecutivos y representa una secuencia repetida de patrones. Esta secuencia consiste de dos palabras largas alineadas consecutivas conteniendo el mismo patrón: una variable de palabra W seguida por dos variables de bytes consecutivas B. Esto es seguido por una palabra larga alineada conteniendo el patrón de dos variables de palabras consecutivas W;
y esto es seguido por una palabra larga alineada conteniendo el patrón de una variable de palabra larga L. Esta secuencia es repetida dos veces. En la entrada correspondiente en la sección de intercambio 146, el primer byte contiene un valor binario "6" en sus tres bits más significativos 7:6: 5, como en la Figura 3b. Los cinco bits menos significativos están codificados con un número N , igual al número de repeticiones de la secuencia -2, como se ilustra en la Figura 3b. En este caso, el número N es el número de repeticiones (2) - 2, ó 0. El siguiente byte contiene el número binario codificado de entradas representando la longitud de la secuencia - 1. En este caso, existen tres entradas siguientes describiendo la secuencia (como se describirá a continuación), de manera que el valor almacenado en el byte de longitud de secuencia es el número de entradas (3) - 1 , ó 2. Los tres siguientes bytes describen la secuencia en sí, codificada como se ilustra en la Figura 3a. La secuencia ilustrada en la sección correspondiente de la sección de datos 144 comienza con dos palabras largas alineadas consecutivas, conteniendo cada una el patrón de una variable de palabra W seguida por dos variables de bytes B. Esto es dos repeticiones del patrón numerado 2. De manera que, el primer byte describiendo la secuencia en la sección de intercambio 146 tiene un 2 en los tres bits más significativos 7:6:5, y un 1 (número de repeticiones (2) - 1 ) en los cinco bits menos significativos 4:3:2: 1 :0. La siguiente palabra larga alineada en la secuencia en la sección de datos 144 contiene el patrón de dos variables de palabras consecutivas W. Esto es una repetición del patrón numerado 3. El byte describiendo este patrón en la sección de intercambio 146 tiene un 3 en los tres bits más significativos 7:6:5, y un 0 en los cinco bits menos significativos 4:3:2: 1 :0. La palabra larga alineada final en la secuencia en la sección de datos 144 contiene el patrón de una variable de palabra larga sencilla L. Esto es una repetición del patrón numerado 4. El byte describiendo este patrón en la sección de intercambio 146 tiene un 4 en los tres bits más significativos 7:6:5, y un 0 en los cinco bits menos significativos 4:3:2: 1 :0. La siguiente entrada ilustrada en la sección de intercambio 146 consiste de dos bytes, y representa tres repeticiones de la secuencia recién descrita en la sección de datos 144. Esta entrada en la sección de intercambio 146 comienza con un byte conteniendo un "7" en los tres bits más significativos 7:6:5. Los cinco bits menos significativos 4:3:2: 1 :0 contienen el número de repeticiones (3) -2, ó 1. El siguiente byte contiene un desplazamiento representando un indicador posterior al byte de longitud de secuencia de la entrada en la sección de intercambio 146 en la cual la secuencia fue descrita originalmente, ilustrada mediante una flecha al byte de longitud de secuencia (conteniendo 2) en la entrada previamente ilustrada en la sección de intercambio 146. De esta manera, el tipo de variable contenida en cada byte en la sección de datos 144 es representada por una entrada correspondiente en la sección de intercambio 146. La sección de intercambio 146 puede ser generada por el post-enlazador 20 (de la Figura 1 ), como se describió anteriormente, analizando la tabla de símbolo 122 y generando entradas en la sección de intercambio 146 representando los tipos de datos variables básicos conformando las variables referidas en la tabla de símbolo 122. La sección de intercambio 56 recibida puede ser analizada por el cargador 40 y las unidades de datos más largas en la sección de datos recibida 54 posicionada e intercambiada en byte, si es necesario, para convertirlas al formato "endian" adecuado.