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
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 54
- 239000000872 buffer Substances 0.000 claims abstract description 50
- 238000004364 calculation method Methods 0.000 claims abstract description 14
- 230000002265 prevention Effects 0.000 claims abstract description 5
- 238000004891 communication Methods 0.000 claims description 22
- 238000003860 storage Methods 0.000 claims description 22
- 230000015654 memory Effects 0.000 claims description 9
- 239000003643 water by type Substances 0.000 claims description 8
- 238000011143 downstream manufacturing Methods 0.000 claims description 5
- 230000000712 assembly Effects 0.000 claims 1
- 238000000429 assembly Methods 0.000 claims 1
- 230000000903 blocking effect Effects 0.000 description 10
- 239000000543 intermediate Substances 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 125000002015 acyclic group Chemical group 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock 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.
El invento se refiere al procesamiento de datos,
y más particularmente a cálculos de flujos de datos complejos.
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.
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.
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.
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.
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.
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);
(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.
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)
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)
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 |
-
1997
- 1997-04-28 US US08/847,909 patent/US6088716A/en not_active Expired - Lifetime
-
1998
- 1998-04-28 EP EP98918838A patent/EP0985180B1/en not_active Expired - Lifetime
- 1998-04-28 DK DK98918838T patent/DK0985180T3/da active
- 1998-04-28 WO PCT/US1998/008559 patent/WO1998049628A2/en active IP Right Grant
- 1998-04-28 PT PT98918838T patent/PT985180E/pt unknown
- 1998-04-28 JP JP54730298A patent/JP3310304B2/ja not_active Expired - Lifetime
- 1998-04-28 AT AT98918838T patent/ATE321304T1/de active
- 1998-04-28 DE DE69833936T patent/DE69833936T2/de not_active Expired - Lifetime
- 1998-04-28 CA CA002288892A patent/CA2288892C/en not_active Expired - Lifetime
- 1998-04-28 AU AU71685/98A patent/AU7168598A/en not_active Abandoned
- 1998-04-28 ES ES98918838T patent/ES2256937T3/es not_active Expired - Lifetime
-
2006
- 2006-06-07 CY CY20061100744T patent/CY1106438T1/el unknown
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) | バッファメモリ制御装置 |