ES2256937T3 - Metodo para impedir un bloqueo mutuo entre memorias intermedias en calculos de flujo de datos. - Google Patents

Metodo para impedir un bloqueo mutuo entre memorias intermedias en calculos de flujo de datos.

Info

Publication number
ES2256937T3
ES2256937T3 ES98918838T ES98918838T ES2256937T3 ES 2256937 T3 ES2256937 T3 ES 2256937T3 ES 98918838 T ES98918838 T ES 98918838T ES 98918838 T ES98918838 T ES 98918838T ES 2256937 T3 ES2256937 T3 ES 2256937T3
Authority
ES
Spain
Prior art keywords
data
input
buffer
supplementary
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
ES98918838T
Other languages
English (en)
Inventor
Craig W. Stanfill
Clifford A. Lasser
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ab Initio Software LLC
Original Assignee
Ab Initio Software LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ab Initio Software LLC filed Critical Ab Initio Software LLC
Application granted granted Critical
Publication of ES2256937T3 publication Critical patent/ES2256937T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Small-Scale Networks (AREA)
  • Input From Keyboards Or The Like (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)
  • Communication Control (AREA)
  • Selective Calling Equipment (AREA)
  • Hardware Redundancy (AREA)
  • Stored Programmes (AREA)

Abstract

Una técnica para la prevención de bloqueos del buffer en cálculos de flujo de datos. La invención que ejecuta el algoritmo siguiente: (1) proporcionar un buffer suplementario para cada entrada de un programa "aguas abajo"; (2) dividir las entradas de cada programa aguas abajo en conjuntos de entradas disjuntos, de modo que dos entradas están en el mismo conjunto de entrada si y sólo si cada entrada viene, tanto directamente como indirectamente, de un programa común aguas arriba; (3) intentar leer los datos en el programa aguas abajo de un programa "aguas arriba" mediante una entrada I en un conjunto de entradas; (4) si no hay datos disponibles actuales de la entrada I, y si otra entrada J en el mismo conjunto de entrada tiene datos disponibles, entonces leer los datos disponibles del programa "aguas abajo" para cada una de las entradas J y almacenar los datos en el buffer suplementario correspondiente a cada entrada J hasta que el tiempo como dato disponible se agote en todas las entradas Jo que los datos estén disponibles en la entrada I.

Description

Método para impedir un bloqueo mutuo entre memorias intermedias en cálculos de flujo de datos.
Antecedentes Campo del invento
El invento se refiere al procesamiento de datos, y más particularmente a cálculos de flujos de datos complejos.
Descripción de la técnica relacionada
Las aplicaciones de procesos complejos de datos pueden estar formadas por componentes que enlazan las entradas y salidas de las diversas fases de procesamiento por medio de canales de comunicaciones (por ejemplo, TCP/IP). En general, tales canales de comunicación proporcionan una capacidad limitada de almacenamiento de datos en memoria intermedia. Cuando un espacio de memoria intermedia de un canal está agotado, el canal quedará "bloqueado", de tal forma que no es posible escribir datos adicionales en el canal. En la mayoría de los casos el bloqueo no es perjudicial, por ejemplo, cuando la salida de un programa rápido está conectada a la entrada de un programa más lento. En tales circunstancias, la capacidad finita de memoria intermedia del canal de comunicación sirve para regular el cálculo, de forma que el programa rápido no vaya mucho más adelante que el programa más
lento.
Sin embargo, en ciertas circunstancias el bloqueo del canal puede conducir a una forma de fallo del sistema llamado un "bloqueo general". Las Figuras 1 y 2 son diagramas de flujo de datos que muestran un ejemplo sencillo de bloqueo de canal. Supóngase primeramente que el programa 100 "aguas arriba" produce dos salidas 101, 102, y un segundo programa 103 "aguas abajo" requiere dos entradas 104, 105. Además, se supone que las salidas del programa 100 aguas arriba están enlazadas con las salidas del programa 103 aguas abajo por dos canales de comunicación 106, 107.
En el curso del cálculo se puede producir el siguiente conjunto de circunstancias, como se ilustra en la Figura 2.
\bullet
El programa 100 aguas arriba desea escribir datos a su primera salida 101.
\bullet
El programa 103 aguas abajo desea leer datos procedentes de su segunda entrada 105.
\bullet
El primer canal 106 de comunicación está lleno (su memoria intermedia está totalmente comprometida).
\bullet
El segundo canal 107 de comunicación 107 está vacío (no contiene datos no transmitidos).
Ni el programa 100 aguas arriba ni el programa 103 aguas abajo pueden realizar avance posterior alguno, y así el cálculo nunca se terminará. Esta situación es conocida generalmente como un bloqueo general; y en el contexto de su discusión se denominará un "bloqueo general de la memoria intermedia".
Como la posibilidad de un bloqueo general de la memoria intermedia puede llevar a un fallo de la aplicación, sería muy útil un método para prevenir bloqueos generales de la memoria intermedia en cálculos de flujo de datos. El presente invento proporciona una solución a este problema.
La patente de EEUU 5.568.614 A describe una disposición de tratamiento de datos para un sistema de cálculo, con aplicación particular a sistemas multimedia.
La patente de EEUU 4.298.954 A describe un aparato de almacenamiento de memoria intermedia que tiene dos memorias intermedias que alternan entre recibir y suministrar señales de datos.
Lau F.C.M. y otros, "Memoria intermedia de propagación: Un nuevo enfoque sobre el bloqueo general ``Libertad en redes de almacenamiento y envío", IEEE ONDISC, 1991, páginas 804-807, XP002915492 se refiere al problema de garantizar la libertad - bloqueo general en redes de almacenamiento y envío que son vulnerables al bloqueo general debido al limitado espacio de almacenamiento intermedio en los nodos.
Resumen
El invento abarca una técnica para evitar bloqueo general de la memoria intermedia para cálculos de flujo de datos en un sistema que incluye al menos un canal de comunicación que tiene una memoria intermedia que aplica el siguiente algoritmo:
Cualquier proceso "aguas abajo" que tiene más de una entrada I está provisto de un grupo de espacio suplementario de memoria intermedia. En la realización preferida, cada entrada I está asociada a una "cola de entrada diferida" que puede referirse a una secuencia de bloques de datos en el espacio de almacenamiento suplementario de memoria intermedia.
Las entradas de cada proceso aguas abajo están divididas en dos conjuntos de entrada disjuntos, de forma que dos entradas están en la misma partición si, y solamente si, obtienen su entrada, ya sea directa o indirectamente, de un proceso "aguas arriba" conectado al proceso "aguas abajo" por el canal de comunicación. Si un proceso aguas abajo necesita leer datos de un proceso aguas arriba a través de alguna entrada I de la que no se dispone de datos, Y si cualquier otra entrada J del mismo conjunto de entrada tiene datos disponibles, ENTONCES el proceso aguas abajo lee continuamente los datos disponibles de cada entrada J y almacena esos datos en una memoria intermedia suplementaria que corresponde a la entrada J hasta el momento en que los datos disponibles estén agotados en todas esas entradas J, O los datos estén disponibles en la entrada deseada I. En la realización preferida, esto se hace asignando un bloque de almacenamiento de la memoria intermedia suplementaria, llenando ese bloque de almacenamiento con datos, y añadiendo el bloque de almacenamiento a la cola de entrada diferida. Si la memoria intermedia suplementaria se llena, el proceso aguas abajo se detiene antes de que haya riesgo de un bloqueo general.
Si el proceso aguas abajo necesita leer datos de alguna entrada I que tiene datos en las memorias intermedias suplementarias, entonces los datos se extraen de las memorias intermedias suplementarias en lugar de hacerlo del canal de comunicación correspondiente.
Los detalles de una o más realizaciones del invento se exponen en los dibujos anejos y en la descripción que sigue.
Descripción de los dibujos
Las Figuras 1 y 2 son diagramas de flujo de datos que muestran un ejemplo sencillo de bloqueo de canal en la técnica anterior.
Las Figuras 3, 4, 5 y 6 son una secuencia de diagramas de flujo de datos que muestran una realización de una técnica de prevención de un bloqueo general de la memoria intermedia, de acuerdo con el invento, de bloqueo general de una memoria intermedia.
La Figura 7 es un gráfico más complejo de flujo de datos, al que se puede aplicar el invento.
Las Figuras 8, 9 y 10 son una secuencia de diagramas de flujo de datos que muestran una realización de una técnica de prevención de bloqueo general de una memoria intermedia para nodos que producen datos múltiples, de acuerdo con el invento.
Números y designaciones de referencia iguales indican elementos iguales en los diversos dibujos.
Descripción detallada
Las Figuras 3, 4, 5 y 6 son una secuencia de diagramas de flujo de datos que muestran una realización de una técnica de prevención de bloqueo general de una memoria intermedia, de acuerdo con el invento. Los bloqueos generales de la memoria intermedia mostrados en la Figura 1 pueden prevenirse aplicando el siguiente algoritmo:
\bullet
Cualquier programa 103 "aguas abajo" que tiene más de una entrada 104, 105 es provisto de un grupo de espacio suplementario 108 de memoria intermedia, que es típicamente una combinación de almacenamiento (Figura 3) primario (por ejemplo, RAM) y secundario (por ejemplo, disco). En la realización preferida, cada entrada 104, 105 está asociada con una "cola de entrada diferida" 109, 110 que puede referirse a una secuencia de bloques de almacenamiento de datos en el espacio suplementario 108 de memoria intermedia. En la realización preferida, las colas 109, 110 de entrada diferida están configuradas como colas primero-en entrar primero-en salir (FIFO).
\bullet
Si un programa 103 aguas abajo necesita leer datos de un programa 100 "aguas arriba" a través de alguna entrada 105 de la que no hay datos disponibles, Y si los datos están disponibles en una o más de las otras entradas 104 del programa 103 aguas abajo, ENTONCES el programa 103 aguas abajo lee continuamente los datos disponibles de cada entrada 104 y almacena esos datos en los correspondientes bloques de almacenamiento asignados del espacio suplementario 108 de la memoria intermedia (Figura 4) hasta el momento en que los datos disponibles estén agotados en todas las otras entradas 104 O los datos estén disponibles en la entrada deseada 105 (Figura 5). En la realización preferida, la asignación de memoria intermedia incluye asignar un bloque de almacenamiento del espacio suplementario 108 de memoria intermedia, llenando ese bloque de almacenamiento con datos y añadiendo una referencia al bloque de almacenamiento a la cola 109 de entrada diferida. Si se llena el espacio suplementario 108 de memoria intermedia, y se deben almacenar más datos en la memoria intermedia, el programa 103 aguas abajo se detendrá antes de que haya riesgo de un bloqueo general.
\bullet
Si el programa 103 aguas abajo necesita leer datos de alguna entrada 104 que tiene datos en su cola 109 de entrada diferida, entonces el dato se extrae de los bloques de almacenamiento referenciados por la cola 109 de entrada diferida en lugar de hacerlo del canal 106 de comunicación correspondiente (Figura 6). Cuando se han consumido los datos procedentes de un bloque de almacenamiento, el bloque de almacenamiento es devuelto al espacio suplementario 108 de memoria intermedia.
Aunque esta solución ha sido ilustrada para el caso sencillo de dos programas 100, 103 conectados por un par de canales de comunicación 106, 107, se aplica a todos los gráficos de flujo de datos acíclicos, independientemente del número de canales y programas de comunicación, e independientemente de la complejidad de conectividad del gráfico; véase, por ejemplo, la Figura 7, que es un gráfico de flujo de datos más complejo al que se puede aplicar el invento.
Un problema práctico del método, como se ha esbozado anteriormente, es que a veces introducirá innecesariamente datos en la memoria intermedia cuando se usen con nodos que producen datos múltiples. Por ejemplo, supóngase que el ejemplo de la Figura 3 se amplía, como se muestra en la Figura 8, añadiendo un programa adicional 111 aguas arriba que tiene una salida única 112, añadiendo una nueva entrada 114 al programa 103 aguas abajo, y conectando la única salida 112 a la nueva entrada 114 con un nuevo canal de comunicación 113, y añadiendo una cola 115 de entrada diferida, de acuerdo con el método discutido anteriormente. Además, supóngase que el nuevo programa 111 produce datos a un ritmo mucho más lento que el anterior programa 100.
Debido al hecho de que el programa 100 de doble canal aguas arriba produce datos mucho más rápidamente que el programa 111 de canal único aguas arriba, el programa 103 aguas abajo frecuentemente encontrará que los datos están disponibles en uno de los canales de entrada 106 o 107 del programa 100 aguas arriba más rápido, pero no en el canal 113 del programa 111 aguas arriba más lento. De acuerdo con el procedimiento indicado anteriormente, el programa 103 aguas abajo consumirá los datos de entrada disponibles en los canales 106 o 107 y almacenará esos datos en una de las colas 109 o 110 de entrada diferida, como se muestra en la Figura 9.
Eventualmente, el espacio suplementario 108 de memoria intermedia puede llegar a estar agotado, como se ve en la Figura 10, de forma que el programa 103 aguas abajo, creyendo que es inminente un bloqueo general, puede ser forzado a detener la ejecución. Éste es un resultado desafortunado, por el hecho de que el algoritmo descrito anteriormente está usando el espacio suplementario 108 de memoria intermedia para compensar la diferencia de velocidad entre los programas 110 y 111 de producción de datos antes que para evitar un bloqueo general.
La solución a este problema es reconocer que es posible un bloqueo general solamente en los casos en los que una o más entradas comparten un proceso aguas arriba común; esta diferencia sirve para distinguir un cálculo propenso a bloqueo general (Figura 1) de un cálculo libre de bloqueo general.
El método preferido para superar esta circunstancia es el siguiente:
\bullet
Se dividen las entradas de cada programa aguas abajo en subconjuntos o divisiones disjuntos, de tal forma que dos entradas estén en la misma división si, y solamente si, obtienen su entrada, bien directa o indirectamente, de un programa fuente común; cada división se denomina un "conjunto de entrada".
\bullet
Se modifica el procedimiento descrito anteriormente para archivar datos en una cola de entrada diferida para incluir un procedimiento de "entrada desviada" como sigue: Si un programa quiere leer desde una entrada I, para la que no hay datos disponibles, y cualquier otra entrada J en el mismo conjunto de entrada tiene datos disponibles, entonces el programa tiene que leer datos de la entrada J y almacenar el resultado en una cola de entrada diferida de la entrada J.
En el caso de la Figura 8, el programa 103 aguas abajo tiene dos conjuntos de entrada: {104, 105} y {114}. Supóngase que el programa 103 aguas abajo encuentra una situación en la que desea leer de la entrada 114, pero los datos solamente están disponibles en la entrada 104 o 105, como se muestra en la Figura 9. Debido a que las entradas 104 y 105 no están en el mismo conjunto 114 de entrada, sus datos no son desviados a las colas 109 o 110 de entrada diferida; en lugar de ello, el programa 103 aguas abajo espera hasta que el programa 111 aguas arriba produce datos en el canal 113, en cuyo momento el programa 103 aguas abajo lee esos datos y continúa normalmente.
Se supone, por otra parte, que el programa 103 aguas abajo desea leer de la entrada 105, y los datos están disponibles en la entrada 104, pero no en la entrada 105. En este caso, se recurre al procedimiento de entrada desviada, debido al hecho de que las entradas 104 y 105 están en el mismo conjunto de entrada. Los datos disponibles en la entrada 104 se introducen en la memoria intermedia para acceso posterior. La configuración mostrada en la Figura 3 también está cubierta por el procedimiento de entrada desviada debido a que ambas entradas 104, 105 pertenecen a un conjunto de entrada.
Los conjuntos de entrada pueden ser encontrados por un algoritmo preferido. Para este algoritmo, se puede usar cualquiera de los métodos bien conocidos para representar conjuntos, tal como un vector de bits o una lista enlazada, así como cualquiera de los métodos bien conocidos de cálculo de unión e intersección de tales conjuntos.
1.
Se asocia un conjunto de programas aguas arriba con cada canal de comunicación y con cada programa. Cada conjunto está inicialmente vacío. Si C es un canal de comunicación, entonces C.upstream representa el conjunto de programas C.upstream de C. Si P es un programa, entonces P.upstream representa el conjunto de programas aguas arriba de P.
2.
Se asocia una lista de conjuntos de entradas con cada programa. Si P es un programa, entonces P.inputsets representa los conjuntos de entradas asociados con P.
3.
Se crea una lista de programas topológicamente seleccionados, de tal forma que si un programa P2 consume la entrada producida por un segundo programa P1, entonces P1 viene antes de P2 en la lista. Si no se puede crear tal lista topológicamente seleccionada, entonces se sale del algoritmo indicando que no puede garantizarse que el cálculo esté libre de bloqueo general.
4.
Se recorre esta lista de programas, desde el primero al último realizando las siguientes operaciones en cada programa P:
a.
Se crea una lista vacía L. Cada entrada de L consta de un conjunto de entradas y de un conjunto de programas aguas arriba. L[[i].inputs representa el conjunto de entrada de la entrada i^{ésima} en L. L[[i].upstream representa el conjunto de programas aguas arriba de la entrada i^{ésima} en L.
b.
Para cada una de las entradas I de P:
i.
Sea C el canal de entrada unido a I.
ii.
Para cada elemento L[i] en L:
(1)
Si la intersección de L[i].upstream con C.upstream es no vacía, entonces el conjunto L[i].upstream = L[i].upstream \cup C.upstream, se añade I a L[i].inputs y se sigue a la próxima entrada I.
(2)
Si no se ha identificado ningún elemento L[i] en el paso anterior, entonces se añade un nuevo elemento L[i] tal que L[i].upstream = C.upstream, y L[i].inputs = {I}.
c.
Para cada elemento L[i] en L, el conjunto P.inputsets = P.inputsets + L[i].inputs.
d.
Para cada canal de comunicación C que está conectado a una de las entradas de P, P.upstream = P.upstream \cup C.upstream.
e.
Para cada canal de comunicación C que está conectado a una de las salidas de P, C.upstream = P.upstream \cup {P}.
Como un ejemplo, basado en la configuración mostrada en la Figura 8, se comienza por inicializar los conjuntos de procesos aguas arriba de los tres programas 100, 103 y 111 y de los tres canales de comunicación 106, 107, 113. Se crea un conjunto de conjuntos de entrada para cada programa; esto da el siguiente estado:
\vskip1.000000\baselineskip
Objeto aguas arriba conjuntos de entrada
100 {} {}
103 {} {}
106 {}
107 {}
111 {} {}
113 {}
\vskip1.000000\baselineskip
Topológicamente se clasifican los programas produciendo, como una posibilidad, la siguiente lista: (100, 111, 103).
Primero se procesa el programa 100 aguas arriba. No tiene entradas, por lo que 100.inputsets y 100.upstream permanecen vacíos. Las salidas del programa 100 aguas arriba están conectadas a los canales 106 y 107, por lo que el conjunto 106.upstream y 107.upstream en {100}. Esto da el siguiente estado:
\vskip1.000000\baselineskip
Objeto aguas arriba conjuntos de entrada
100 {} {}
103 {} {}
106 {100}
107 {100}
111 {} {}
113 {}
A continuación, se procesa el programa 111 aguas arriba (el siguiente programa en la lista clasificada topológicamente). El programa 111 aguas arriba no tiene entradas, por lo que 111.inputsets permanece vacío. El programa 111 aguas arriba tiene una única salida conectada al canal 113, por lo que 113.upstream = {111}. Esto produce el siguiente estado:
\vskip1.000000\baselineskip
Objeto aguas arriba conjuntos de entrada
100 {} {}
103 {} {}
106 {100}
107 {100}
111 {} {}
113 {111}
\vskip1.000000\baselineskip
Finalmente, se procesa el programa 103 aguas abajo. Lee de tres entradas: 104, 105, 114. El algoritmo produce los siguientes pasos:
\bullet
L es inicializado para estar vacío.
\bullet
Se considera la primera entrada I=104, que está conectada al canal C=106. Como L está vacío, no existe elemento L[i] tal que L[i].upstream interseccione con C.upstream. Así, se crea una nueva entrada en L que consta de C.upstream y {I}, que da como resultado L = ({100}, {104}).
\bullet
A continuación, se considera la segunda entrada I=105, que está conectada al canal C=107. L[1].upstream = {100} y C.upstream = {100}. Estos dos conjuntos se solapan (de hecho, sucede que son idénticos), por lo que se añade C.upstream a L[1].upstream, y se añade I a L[1].inputs, dando como resultado L = ({100},{104,105}).
\bullet
Finalmente, se considera la tercera entrada I=114, que está conectada al canal C=113. C.upstream = {111}, y ningún elemento L[i].upstream intersecciona con C.upstream, por lo que se crea una nueva entrada en I que consta de C.upstream y {I}. Esto da como resultado I = ({100},{104,105}, {111,114}).
\bullet
Se recogen los conjuntos de entrada de I; esto es, 103.inputsets = ({104},{105,114}).
\bullet
Finalmente, se considera cada canal C de entrada conectado al programa 103, y se calcula la unión de sus conjuntos aguas arriba. El resultado se almacena en P.upstream; esto es, 103.upstream = {100,111}. Esto produce el siguiente estado final:
\vskip1.000000\baselineskip
Objeto aguas arriba conjuntos de entrada
100 {} {}
103 {100,111} {{104,105},{114}}
106 {100}
107 {100}
111 {} {}
113 {111}
\vskip1.000000\baselineskip
Se puede usar cualquier algoritmo que calcule el mismo resultado. Después de esto, es posible que una persona inspeccione el cálculo y asigne conjuntos de entrada.
Se han descrito varias realizaciones del presente invento. No obstante, se sobreentiende que se pueden realizar diferentes modificaciones. Por ejemplo, se pueden utilizar otros esquemas de asignación para las memorias intermedias suplementarias. Consecuentemente, se ha de sobreentender que el invento no está limitado por la realización específica ilustrada, sino solamente por el alcance de las reivindicaciones anejas.

Claims (10)

1. Un método para prevención de bloqueo general de la memoria intermedia para cálculos de flujo de datos en un sistema que incluye al menos un canal de comunicación (106) que tiene una memoria intermedia, que comprende los pasos de:
(a) proporcionar una memoria intermedia suplementaria para cada entrada (104, 105) de un proceso (103) aguas abajo;
(b) dividir las entradas de cada proceso (103) aguas abajo en conjuntos de entrada disjuntos, de tal forma que dos entradas están en el mismo conjunto de entrada si, y solamente si, tales entradas vienen, ya sea directa o indirectamente, desde un proceso (100) aguas arriba común conectado al proceso (103) aguas abajo por el canal de comunicación (106);
(c) intentar leer datos en un proceso (103) aguas abajo de un proceso (100) aguas arriba por medio de una entrada I en un conjunto de entrada;
(d) si actualmente no hay datos disponibles de la entrada I, y si cualquier otra entrada J en la misma entrada tiene datos disponibles, entonces leer los datos disponibles de cada entrada J y almacenar tales datos en la memoria intermedia suplementaria correspondiente a tal entrada J hasta el momento en que los datos disponibles estén agotados en todas las entradas J o los datos lleguen a estar disponibles en la entrada I.
2. El método de la reivindicación 1, que adicionalmente incluye el paso de detener el proceso (103) aguas abajo si cualquier memoria intermedia suplementaria se llena y tenga que almacenar más datos.
3. El método de la reivindicación 1, que adicionalmente incluye los pasos de leer los datos almacenados en el proceso (103) aguas abajo de la memoria intermedia suplementaria correspondiente a una entrada I antes de leer directamente datos de la entrada I.
4. El método de la reivindicación 1, que adicionalmente incluye los pasos de proporcionar un almacenamiento de grupo de bloques (108), que asigna cada memoria intermedia suplementaria de uno o más bloques de almacenamiento, y que referencia cada memoria intermedia suplementaria asignada en una cola (109, 110) de entrada diferi-
da.
5. El método de la reivindicación 4, que adicionalmente incluye los pasos de leer datos almacenados en el proceso (103) aguas abajo de los bloques de almacenamiento de la memoria intermedia suplementaria correspondiente a una entrada I antes de leer directamente datos de la entrada I, y que devuelve cada bloque de almacenamiento leído al grupo de bloques (108) de almacenamiento.
6. Un programa de cálculo, que reside en un medio legible por el ordenador, para prevención de bloqueo general de la memoria intermedia para cálculos de flujo de datos en un sistema que incluye al menos un canal de comunicación (106) que tiene una memoria intermedia, que comprende instrucciones para hacer que un ordenador:
(a) proporcione una memoria intermedia suplementaria para cada entrada (104, 105) de un proceso (103) aguas abajo;
(b) divida las entradas de cada proceso (103) aguas abajo en conjuntos de entrada disjuntos, de tal forma que dos entradas estén en el mismo conjunto de entrada si, y solamente si, tales entradas vienen, ya sea directa o indirectamente, de un proceso (100) aguas arriba común conectado al proceso (100) aguas abajo por el canal de comunicación
(106);
(c) intente leer datos en un proceso (103) aguas abajo desde un proceso (100) aguas arriba por medio de una entrada I en un conjunto de entrada;
(d) si actualmente no hay datos disponibles de la entrada I, y si cualquier otra entrada J en el mismo conjunto de entrada tiene datos disponibles, entonces lea los datos disponibles desde cada entrada J y almacene tales datos en la memoria intermedia suplementaria correspondiente a tal entrada J hasta el momento en que los datos disponibles estén agotados en todas las entradas J, o los datos lleguen a estar disponibles en la entrada I.
7. El programa de la reivindicación 6, que adicionalmente comprende instrucciones para hacer que un ordenador detenga el proceso (103) aguas abajo si cualquier memoria intermedia suplementaria se llena y tiene que almacenar más datos.
8. El programa de la reivindicación 6, que adicionalmente comprende instrucciones para hacer que un ordenador lea datos almacenados en el proceso (103) aguas abajo de la memoria intermedia suplementaria correspondiente a una entrada I antes de leer directamente datos de la entrada I.
9. El programa de la reivindicación 6, que adicionalmente comprende instrucciones para hacer que un ordenador proporcione un grupo de bloques (108) de almacenamiento, asigne cada memoria intermedia suplementaria de uno o más bloques de almacenamiento, y referencie cada memoria intermedia suplementaria asignada en una cola (109, 110) de entrada diferida.
10. El programa de la reivindicación 9, que adicionalmente comprende instrucciones para hacer que un ordenador lea datos almacenados en el proceso (103) aguas abajo de los bloques de almacenamiento de la memoria intermedia suplementaria correspondiente a una entrada I antes de leer directamente datos de la entrada I, y devuelva cada bloque de almacenamiento de lectura al grupo de bloques (108) de almacenamiento.
ES98918838T 1997-04-28 1998-04-28 Metodo para impedir un bloqueo mutuo entre memorias intermedias en calculos de flujo de datos. Expired - Lifetime ES2256937T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US847909 1997-04-28
US08/847,909 US6088716A (en) 1997-04-28 1997-04-28 Method for preventing buffer deadlock in dataflow computations

Publications (1)

Publication Number Publication Date
ES2256937T3 true ES2256937T3 (es) 2006-07-16

Family

ID=25301795

Family Applications (1)

Application Number Title Priority Date Filing Date
ES98918838T Expired - Lifetime ES2256937T3 (es) 1997-04-28 1998-04-28 Metodo para impedir un bloqueo mutuo entre memorias intermedias en calculos de flujo de datos.

Country Status (12)

Country Link
US (1) US6088716A (es)
EP (1) EP0985180B1 (es)
JP (1) JP3310304B2 (es)
AT (1) ATE321304T1 (es)
AU (1) AU7168598A (es)
CA (1) CA2288892C (es)
CY (1) CY1106438T1 (es)
DE (1) DE69833936T2 (es)
DK (1) DK0985180T3 (es)
ES (1) ES2256937T3 (es)
PT (1) PT985180E (es)
WO (1) WO1998049628A2 (es)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909681A (en) 1996-03-25 1999-06-01 Torrent Systems, Inc. Computer system and computerized method for partitioning data for parallel processing
US7164422B1 (en) * 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US7167850B2 (en) * 2002-10-10 2007-01-23 Ab Initio Software Corporation Startup and control of graph-based computation
CA2891196C (en) 2003-06-25 2018-03-20 Ab Initio Technology Llc Computer-aided parallelizing of computation graphs
US7743382B2 (en) * 2003-11-03 2010-06-22 Ramal Acquisition Corp. System for deadlock condition detection and correction by allowing a queue limit of a number of data tokens on the queue to increase
US7814242B1 (en) * 2005-03-25 2010-10-12 Tilera Corporation Managing data flows in a parallel processing environment
US7716630B2 (en) * 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7822615B2 (en) * 2005-06-27 2010-10-26 Ab Initio Technology Llc Translating expressions in a computing environment
US7877350B2 (en) * 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
US7231237B2 (en) * 2005-08-31 2007-06-12 Motorola, Inc. Wireless communication device with strategically positioned antenna
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
CN103729330B (zh) 2006-08-10 2017-04-19 起元科技有限公司 在基于图的计算中分配服务
US9053072B2 (en) * 2007-01-25 2015-06-09 Hewlett-Packard Development Company, L.P. End node transactions at threshold-partial fullness of storage space
EP2174222A4 (en) 2007-07-26 2010-10-27 Ab Initio Technology Llc TRANSACTIONAL GRAPH-BASED CALCULATION WITH ERROR HANDLING
US8595391B1 (en) * 2008-03-14 2013-11-26 Xilinx, Inc. Automatic queue sizing for dataflow applications
US20090282058A1 (en) * 2008-05-12 2009-11-12 Expressor Software Method and system for developing data integration applications with reusable functional rules that are managed according to their output variables
AU2010213618B9 (en) 2009-02-13 2015-07-30 Ab Initio Technology Llc Managing task execution
US8667329B2 (en) * 2009-09-25 2014-03-04 Ab Initio Technology Llc Processing transactions in graph-based applications
WO2011159759A1 (en) 2010-06-15 2011-12-22 Ab Initio Technology Llc Dynamically loading graph-based computations
US9003084B2 (en) 2011-02-18 2015-04-07 Ab Initio Technology Llc Sorting
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting
US9507682B2 (en) 2012-11-16 2016-11-29 Ab Initio Technology Llc Dynamic graph performance monitoring
US10108521B2 (en) 2012-11-16 2018-10-23 Ab Initio Technology Llc Dynamic component performance monitoring
US9274926B2 (en) 2013-01-03 2016-03-01 Ab Initio Technology Llc Configurable testing of computer programs
CA3114544A1 (en) 2013-12-05 2015-06-11 Ab Initio Technology Llc Managing interfaces for dataflow composed of sub-graphs
US10657134B2 (en) 2015-08-05 2020-05-19 Ab Initio Technology Llc Selecting queries for execution on a stream of real-time data
EP3394739B1 (en) 2015-12-21 2020-11-11 AB Initio Technology LLC Sub-graph interface generation
JP7039365B2 (ja) * 2018-03-30 2022-03-22 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP7064367B2 (ja) * 2018-03-30 2022-05-10 株式会社デンソー デッドロック回避方法、デッドロック回避装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4298954A (en) * 1979-04-30 1981-11-03 International Business Machines Corporation Alternating data buffers when one buffer is empty and another buffer is variably full of data
US5204965A (en) * 1985-08-20 1993-04-20 Schlumberger Technology Corporation Data processing system using stream stores
JP2521016B2 (ja) * 1991-12-31 1996-07-31 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチメディア・デ―タ処理システム
DE4321776C1 (de) * 1993-06-30 1994-12-08 Siemens Ag Verfahren zum Bilden und Analysieren von informationselementeorientierten Signalisierungsmeldungen in Kommunikationseinrichtungen
US5568614A (en) * 1994-07-29 1996-10-22 International Business Machines Corporation Data streaming between peer subsystems of a computer system
US5790893A (en) * 1996-06-05 1998-08-04 International Business Machines Corporation Segmented concurrent receive/transfer interface using shared RAM storage

Also Published As

Publication number Publication date
DE69833936D1 (de) 2006-05-11
AU7168598A (en) 1998-11-24
EP0985180A1 (en) 2000-03-15
JP2001500656A (ja) 2001-01-16
EP0985180A4 (en) 2000-08-16
DK0985180T3 (da) 2006-07-17
CY1106438T1 (el) 2011-10-12
WO1998049628A2 (en) 1998-11-05
CA2288892A1 (en) 1998-11-05
ATE321304T1 (de) 2006-04-15
JP3310304B2 (ja) 2002-08-05
WO1998049628A3 (en) 1999-03-11
CA2288892C (en) 2003-09-09
EP0985180B1 (en) 2006-03-22
DE69833936T2 (de) 2006-12-28
PT985180E (pt) 2006-07-31
US6088716A (en) 2000-07-11

Similar Documents

Publication Publication Date Title
ES2256937T3 (es) Metodo para impedir un bloqueo mutuo entre memorias intermedias en calculos de flujo de datos.
KR100488822B1 (ko) 에러정정메모리
US6047339A (en) Buffering data that flows between buses operating at different frequencies
JP2736092B2 (ja) バッファ装置
US5893162A (en) Method and apparatus for allocation and management of shared memory with data in memory stored as multiple linked lists
US6392912B1 (en) Loading data plane on reconfigurable chip
US6671747B1 (en) System, apparatus, method, and computer program for execution-order preserving uncached write combine operation
US8359438B2 (en) Memory banking system and method to increase memory bandwidth via parallel read and write operations
US10282343B2 (en) Semiconductor device
DE69629766D1 (de) Schnell versagendes, funktionell versagendes fehlertolerantes Mehrprozessorsystem
KR100560286B1 (ko) 어드레스지정가능 메모리에 다양한 크기의 데이터 블록을 전송하는 방법, 통신 어댑터 및 컴퓨터 판독가능 매체
ES2206862T3 (es) Dispositivo de seleccion de elementos de datos de arbol binario y espaciador atm que comprende dicho dispositivo.
EP0806004B1 (en) Data transmission system with a data buffer having a tree shaped structure of multiplexers
CN103858393A (zh) 网络包的并行处理
US20140019655A1 (en) Single cycle arbitration
KR960025044A (ko) 반도체 집적회로
JPH0628247A (ja) 動的に再配置されるメモリバンク待ち行列
JP2628701B2 (ja) 優先順位付き情報パケット用交換装置
KR910009095B1 (ko) 연상 어레이
CN107992444B (zh) 用于在处理单元之间交换数据的通信架构
MY135903A (en) Result partitioning within simd data processing systems
Harrigan et al. Practical level planarity testing and layout with embedding constraints
CN108139767A (zh) 针对网络装置实施分布式链接列表的系统及方法
US10049079B2 (en) System and method for determining whether to modify a message for rerouting upon receipt at a current target processor
JP2873229B2 (ja) バッファメモリ制御装置