REDE DE FLUXO DE DADOS’
Precedentes
Sistemas de computador podem permitir que múltiplos processos de um programa sejam executados simultaneamente. A execução simultânea dos processos pode permitir que o programa seja executado mais rápido ou mais eficientemente para aumentar a produtividade total do sistema de computador.
Nos processos que implementam um modelo de fluxo de controle, a lógica do fluxo de controle descreve um conjunto de condições e modificações de estado do programa e pode ser organizada por um fluxograma, por exemplo. O termo ‘álgebra do processo’ é usado para se referir a uma metodologia para raciocinar sobre como os processos se comunicam para cooperar na resolução de um problema compartilhado e como a duração de tempo de um processo é controlada. Embora a álgebra do processo possa ser amplamente distinta das primitivas de modificação do estado interno de um processo, existem tipicamente pontos de interação onde a comunicação entre os processos aciona o fluxograma interno. Esses pontos de interação entre os processos podem ser complexos em alguns programas. Os pontos de interação complexos podem tornar difícil agendar processos para execução simultânea e resultar em uma execução do programa que não é perfeita.
Sumário
Esse sumário é proporcionado para apresentar uma seleção de conceitos em uma forma simplificada que são ainda descritos abaixo na descrição detalhada. Esse sumário não é planejado para identificar aspectos chave ou aspectos essenciais da matéria em questão reivindicada, nem ele é planejado para ser usado para limitar o escopo da matéria em questão reivindicada.
Um modelo de composição citado como um padrão de fonte-alvo para conectar processos em redes de processo em uma maneira geral, flexível e extensível é fornecido. O modelo permite que construções de álgebra do processo comuns sejam combinadas com redes de fluxo de dados para formar redes de processo. As operações algébricas do processo podem ser expressas em termos do modelo de composição para formar redes de fluxo de dados que proporcionam operações algébricas do processo totalmente interoperáveis entre os processos. O modelo pode ser aplicado a uma ampla formação de redes de fluxo de dados simples, bem como a redes de fluxo de dados mais complexas.
Breve descrição dos desenhos
Os desenhos acompanhantes são incluídos para propiciar um entendimento adicional das modalidades e são incorporados em e constituem uma parte desse relatório descritivo. Os desenhos ilustram modalidades e juntos com a descrição servem para explicar os princípios das modalidades. Outras modalidades e muitas das vantagens planejadas das modalidades serão facilmente verificadas, à medida que elas se tornam mais bem entendi2 das por referência à descrição detalhada seguinte. Os elementos dos desenhos não estão necessariamente em escala em relação um ao outro. Numerais de referência semelhantes indicam partes similares correspondentes.
As figuras 1A-1C são diagramas de bloco que ilustram modalidades de interfaces de fonte e de alvo para uso em uma rede de fluxo de dados.
As figuras 2A-2C são diagramas de bloco que ilustram modalidades de nós de uma rede de fluxo de dados.
A figura 3 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo com uma rede de fluxo de dados conectada nos processos.
A figura 4 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo com um processo conectado nas redes de fluxo de dados.
A figura 5 é um diagrama de blocos que ilustra uma modalidade de um bloco criador configurado para implementar uma operação de envio.
A figura 6 é um diagrama de blocos que ilustra uma modalidade de um bloco de disparo configurado para implementar uma operação de recepção.
A figura 7 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo.
A figura 8 é um diagrama de blocos que ilustra uma modalidade de uma rede de fluxo de dados configurada para implementar operações de escolha e de junção.
A figura 9 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo.
A figura 10 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo.
A figura 11 é um diagrama de blocos que ilustra uma modalidade de um sistema de computador configurado para implementar um ambiente do tempo de execução com um agendador do processo.
Descrição detalhada
Na descrição detalhada seguinte, é feito referência aos desenhos acompanhantes, que formam uma parte dela, e nos quais são mostradas, por meio de ilustração, modalidades específicas nas quais a invenção pode ser praticada. Sob esse aspecto, a terminologia direcional, tais como “superior”, “inferior”, “frontal”, “posterior”, “dianteiro”, “traseiro”, etc. é usada com referência à orientação da(s) figura(s) sendo descrita(s). Pelo fato de que os componentes das modalidades podem ser posicionados em várias orientações diferentes, a terminologia direcional é usada com finalidades de ilustração e não é de forma alguma limitadora. É para ser entendido que outras modalidades podem ser utilizadas e mudanças estruturais ou lógicas podem ser feitas sem se afastar do escopo da presente invenção. A descrição detalhada seguinte, portanto, não é para ser adotada em um sentido limitador e o escopo da presente invenção é definido pelas reivindicações anexas.
É para ser entendido que os aspectos das várias modalidades exemplares descritas aqui podem ser combinados entre si, a menos que especificamente mencionado de outra forma.
A figura 1A é um diagrama de blocos que ilustra uma modalidade de um padrão de fonte-alvo 10 que inclui uma interface de fonte 12 e uma interface de alvo 14 unidas por uma ligação 16.
O padrão de fonte-alvo 10 proporciona um conjunto de operações que são usadas para criar redes de fluxo de dados (por exemplo, a rede de fluxo de dados 32 mostrada nas figuras 3 e 4) que unem qualquer número de processos (por exemplo, processos 40 mostrados nas figuras 3 e 4) de um programa executando em um sistema de computador (por exemplo, um sistema de computador 100 mostrado na figura 11) em redes de processo. As redes de fluxo de dados formam construções de álgebra de processo, tais como envio, recepção, escolha, junção e combinações desses para permitir que os dados sejam transferidos entre os processos. O padrão de fonte-alvo 10 proporciona um protocolo para transferir dados entre a interface de fonte 12 e a interface de alvo 14 para permitir que as construções de álgebra do processo sejam implementadas em redes de fluxo de dados.
O padrão de fonte-alvo 10 permite que os processos sejam unidos onde os processos não têm ou têm um mínimo conhecimento uns sobre os outros. Um processo pode proporcionar dados para outro processo usando o padrão de fonte-alvo 10 sem qualquer conhecimento dos outros processos. Similarmente, um processo pode receber dados de outro processo usando o padrão de fonte-alvo 10 sem qualquer conhecimento do outro processo. Cada processo inclui um conjunto de instruções armazenadas em meios de armazenamento legíveis por computador (por exemplo, o sistema de memória 104 como mostrado na figura 11) e executáveis pelo sistema de computador. Os dados transferidos entre os processos podem incluir qualquer tipo de dados incluindo ponteiros, endereços ou outras informações estruturadas ou codificadas.
A interface de fonte 12 inclui instruções armazenadas em meios de armazenamento legíveis por computador (por exemplo, sistema de memória 104 como mostrado na figura 11) e executáveis pelo sistema de computador para implementar operações de alvo de ligação, alvo sem ligação, reserva, liberação e consumo onde cada uma das operações da interface de fonte 12 é invocada por uma ou mais interfaces de alvo 14. A interface de alvo 14 inclui instruções armazenadas em meios de armazenamento legíveis por computador (por exemplo, o sistema de memória 104 como mostrado na figura 11) e executáveis pelo sistema de computador para implementar uma operação de oferta onde a operação de oferta da interface de alvo 14 é invocada por uma ou mais interfaces de fonte 12.
A operação de alvo de ligação da interface de fonte 12 estabelece uma ligação 16 entre a interface de fonte 12 e uma interface de alvo 14 que invoca a operação de alvo de ligação. A operação de alvo sem ligação da interface de fonte 12 desconecta uma ligação 16 entre a interface de fonte 12 e uma interface de alvo 14 que invoca a operação de alvo sem ligação. Cada uma das operações de alvo de ligação e alvo sem ligação pode retornar um indicador de sucesso ou falha para a interface de alvo 14 da qual a invocação da operação foi recebida para indicar se a ligação 16 foi ou não estabelecida ou desconectada com sucesso.
Subsequente a uma ligação 16 sendo estabelecida entre uma interface de fonte 12 e uma interface de alvo 14, a interface de fonte 12 invoca a operação de oferta da interface de alvo 14 usando a ligação 16 para oferecer dados para a interface de alvo 14. Em resposta à invocação da oferta, a interface de alvo 14 retorna um entre aceito, declinado ou adiado. A interface de alvo 14 retorna aceito para indicar que a interface de alvo 14 consumiu os dados oferecidos pela interface de fonte 12. A interface de alvo 14 retorna declinado para indicar que a interface de alvo 14 não está interessada nos dados oferecidos pela interface de fonte 12. A interface de alvo 14 retorna adiado para indicar que a interface de alvo 14 não está pronta para consumir os dados oferecidos pela interface de fonte 12 nesse momento no tempo.
A interface de fonte 12 permite que a interface de alvo 14 solicite dados que foram previamente oferecidos usando a operação de reserva. A interface de alvo 14 invoca a operação de reserva para colocar uma reserva nos dados que foram oferecidos pela interface de fonte 12, mas foram adiados pela interface de alvo 14. A interface de fonte 12 retorna um indicador de sucesso ou falha para a interface de alvo 14 da qual a invocação de reserva foi recebida para indicar se a reserva foi bem sucedida ou não.
Subsequente à reserva de dados, a interface de alvo 14 invoca a operação de liberação da interface de fonte 12 para liberar uma reserva apresentada anteriormente ou a operação de consumo para consumir os dados reservados. Depois que a interface de fonte 12 confirma uma reserva dos dados para a interface de alvo 14 proporcionando um indicador de sucesso para a interface de alvo 14, a interface de fonte 12 mantém os dados para a interface de alvo 14 que apresentou a reserva até que os dados sejam liberados ou consumidos pela interface de alvo 14 que apresentou a reserva.
Como mostrado na figura 1B, cada interface de alvo 14 pode se conectar a qualquer número de interfaces de fonte 12(1)-12(44) invocando a operação de alvo de ligação de cada interface de fonte 12(1 )-12(44) para estabelecer ligações respectivas 16(1)-16(44), onde 44 é um número inteiro maior do que ou igual a um e representa a Ma interface de fonte 12 e a 44a ligação 16. Dessa maneira, podem ser oferecidos dados para cada interface de alvo 14 a partir de qualquer número de interfaces de fonte 12(1)-12(44).
Como mostrado na figura 1C, cada interface de fonte 12 pode se conectar a qual5 quer número de interfaces de alvo 14(1 )-14(A/) em resposta às invocações da operação de alvo de ligação de cada interface de alvo 14(1)-14(/7) que estabelecem ligações respectivas 16(1 )-16(/7), onde Né um número inteiro maior do que ou igual a um e representa a Na interface de alvo 14 e a Na ligação 16. Dessa maneira, cada interface de fonte 12 pode oferecer dados para qualquer número de interfaces de alvo 14(1)-14(/7).
As figuras 2A-2C são diagramas de bloco ilustrando modalidades 20A, 20B e 20C, respectivamente, de um nó 20 de uma rede de fluxo de dados. Como mostrado na figura 2A, um nó 20A pode incluir uma ou mais interfaces de fonte 12(1)-12(F), onde Pé um número inteiro maior do que ou igual a um e representa a Pa interface de fonte 12, mas não interfaces de alvo 14. Os nós 20A com somente as interfaces de fonte 12 formam criadores de dados. Um nó 20B pode incluir uma ou mais interfaces de alvo 14(1)-14(0), onde Q é um número inteiro maior do que ou igual a um e representa a Qa interface de alvo 14, mas não interfaces de fonte 12 como mostrado na figura 2B. Os nós 20B com somente interfaces de alvo 14 formam coletores de dados. Além disso, um nó 20C pode incluir uma ou mais interfaces de fonte 12(1)-12(P) e uma ou mais interfaces de alvo 14(1)-14(Q) como mostrado na figura 2C. Cada um dos nós 20A, 20B e 20C pode também incluir uma ou mais unidades de processamento passivo (não mostradas) configuradas para transformar os dados quando eles são propagados através dos nós 20A, 20B e 20C.
Os dados fluem através de uma rede de fluxo de dados sendo passado o controle de um nó 20 para um ou mais outros nós 20 usando o padrão de fonte-alvo 10. Cada conexão de dois nós 20 em uma rede de fluxo de dados é representada por um emparelhamento de um nó 20 implementando a interface de fonte 12 (por exemplo, um nó 20A ou um nó 20C) com um nó implementando uma interface de alvo 14 (por exemplo, um nó 20B ou um nó 20C).
Qualquer número de componentes de rede de fluxo de dados pode ser definido usando o padrão de fonte-alvo 10, e os componentes podem ser combinados em redes de fluxo de dados amplamente arbitrárias. Exemplos de redes de fluxo de dados incluem armazenamentos temporários livres, armazenamentos temporários limitados, blocos de atribuição única, armazenamentos temporários de produtor/consumidor, coletores de dados (invocação de método), transformações de dados, registradores e processadores de I/O. As redes de fluxo de dados podem também ser compostas de redes mais complexas usando o padrão de fonte-alvo 10. Por exemplo, uma implementação de bloqueio de leitor/escritor ou uma implementação de monitor pode ser expressa em termos de redes de fluxo de dados usando o padrão de fonte-alvo 10.
Qualquer número de processos pode proporcionar dados em uma rede de fluxo de dados e qualquer número de processos pode receber os dados de uma rede de fluxo de dados como mostrado na figura 3. A figura 3 é um diagrama de blocos que ilustra uma mo6 dalidade de uma rede de processo 30 com uma rede de fluxo de dados 32 conectada nos processos 40(1 )-40(R) e 40(7+1 )-40(S), onde Ré um número inteiro maior do que ou igual a um, S é um número inteiro maior do que ou igual a dois, R é menor do que S e representam o R° e o S° processo 40.
A rede de fluxo de dados 32 forma uma construção de fluxo de dados passiva configurada para propagar os dados dos processos 40(1)-40(7) para os processos 40(7+1)40(S). A rede de fluxo de dados 32 inclui um conjunto 34 de uma ou mais interfaces de alvo 14, um conjunto 36 de uma ou mais interfaces de fonte 12 e um conjunto de componentes de rede 38 que incluem nós 20 e blocos de processamento passivo e interligam o conjunto 34 de interfaces de alvo 14 com o conjunto 36 de interfaces de fonte 12. Os componentes de rede 38 podem incluir qualquer tipo adequado, número e/ou combinação de nós 20 e blocos de processamento passivo que conectam o conjunto 34 de interfaces de alvo 14 com o conjunto 36 de interfaces de fonte 12 em qualquer maneira adequada.
Os processos 40(1)-40(7) incluem conjuntos respectivos 42(1)-42(7) de uma ou mais interfaces de fonte 12, onde cada conjunto 42 pode incluir o mesmo número ou um diferente de interfaces de fonte 12 como outros conjuntos 42. O conjunto 34 de interfaces de alvo 14 estabelece um conjunto 44 de ligações 16 entre o conjunto 34 de interfaces de alvo 14 e os conjuntos 42(1 )-42(/7) de interfaces de fonte 12. Como ilustrado nas figuras 1B e 1C, cada interface de alvo 14 no conjunto 44 pode se conectar a qualquer número de interfaces de fonte 12 nos conjuntos 42(1)-42(7) e qualquer número de interfaces de alvo 14 no conjunto 44 pode se conectar em cada interface de fonte 12 nos conjuntos 42(1)-42(7). Cada interface de fonte 12 nos conjuntos 42(1)-42(7) faz com que os dados sejam propagados dos processos 40(1 )-40(/7) para dentro da rede de fluxo de dados 32 oferecendo os dados para uma ou mais interfaces de alvo 14 no conjunto 44 como descrito acima com referência à figura 1A. Um ou mais dos processos 40(1)-40(7) podem também incluir um ou mais conjuntos adicionais de interfaces de fonte 12 (não mostradas) e/ou um ou mais conjuntos de interfaces de alvo 14 (não mostradas) que se conectam a uma ou mais outras redes de fluxo de dados 32 (não mostradas).
Os processos 40(7+1 )-40(S) incluem conjuntos respectivos 46(7+1 )-46(S) de uma ou mais interfaces de alvo 14 onde cada conjunto 46 pode incluir o mesmo número ou um diferente de interfaces de alvo 14 como outros conjuntos 46. Os conjuntos 46(7+1 )-46(S) das interfaces de alvo 14 estabelecem um conjunto 48 de ligações 16 entre os conjuntos 46(7+1 )-46(S) das interfaces de alvo 14 e o conjunto 36 das interfaces de fonte 12. Como ilustrado nas figuras 1B e 1C, cada interface de alvo 14 nos conjuntos 46(7+1 )-46(S) pode se conectar a qualquer número de interfaces de fonte 12 no conjunto 36 e qualquer número de interfaces de alvo 14 nos conjuntos 46(7+1 )-46(S) pode se conectar a cada interface de fonte 12 no conjunto 36. Cada interface de fonte 12 no conjunto 36 faz com que os dados sejam propagados da rede de fluxo de dados 32 para um ou mais dos processos 40(/7+1)40(S) oferecendo dados para uma ou mais interfaces de alvo 14 nos conjuntos 46(/7+1)46(S) como descrito acima com referência à figura 1A. Um ou mais dos processos 40(/7+1)40(S) podem também incluir um ou mais conjuntos adicionais de interfaces de alvo 14 (não mostradas) e/ou um ou mais conjuntos de interfaces de fonte 12 (não mostradas) que se conectam em uma ou mais outras redes de fluxo de dados 32 (não mostradas).
Os processos 40(1 )-40(/7) podem proporcionar dados para os processos 40(/7+1)40(S) usando a rede de fluxo de dados 32 sem qualquer conhecimento dos processos 40(/7+1 )-40(S). Similarmente, os processos 40(/7+1 )-40(S) podem receber dados dos processos 40(1)-40(/7) usando a rede de fluxo de dados 32 sem qualquer conhecimento dos processos 40(1)-40(/7).
Um processo pode fornecer dados para qualquer número de redes de fluxo de dados e receber dados de qualquer número de redes de fluxo de dados como mostrado na figura 4. A figura 4 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo 50 com um processo 40 conectado nas redes de fluxo de dados 32(1)-32(7) e 32(T+1)-32(V), onde Té um número inteiro maior do que ou igual a um, Vé um número inteiro maior do que ou igual a dois, T é menor do que V e representam a Ta e a Va rede de fluxo de dados 32.
O processo 40 inclui um conjunto de instruções de um programa que são configuradas para receber dados de redes de fluxo de dados 32(1)-32(7) e fornecer dados para redes de fluxo de dados 32(7+1 )-32( V). O processo 40 inclui um conjunto 54 de uma ou mais interfaces de alvo 14, um conjunto 56 de uma ou mais interfaces de fonte 12 e um conjunto de componentes de processo 58 e interliga o conjunto 54 das interfaces de alvo 14 com o conjunto 56 das interfaces de fonte 12. Os componentes do processo 58 podem incluir qualquer tipo adequado, número e/ou combinação de instruções e/ou estruturas de dados que conectam o conjunto 54 de interfaces de alvo 14 com o conjunto 56 de interfaces de fonte 12 em qualquer maneira adequada.
As redes de fluxo de dados 32(1)-32(7) incluem conjuntos respectivos 62(1)-62(7) de uma ou mais interfaces de fonte 12 onde cada conjunto 62 pode incluir o mesmo número ou um diferente de interfaces de fonte 12 como outros conjuntos 62. O conjunto 54 de interfaces de alvo 14 estabelece um conjunto 64 de ligações 16 entre o conjunto 54 de interfaces de alvo 14 e os conjuntos 62(1)-62(7) de interfaces de fonte 12. Como ilustrado nas figuras 1B e 1C, cada interface de alvo 14 no conjunto 54 pode se conectar a qualquer número de interfaces de fonte 12 nos conjuntos 62(1)-62(7) e qualquer número de interfaces de alvo 14 no conjunto 54 pode se conectar em cada interface de fonte 12 nos conjuntos 62(1)-62(7). Cada interface de fonte 12 nos conjuntos 62(1)-62(7) faz com que os dados sejam propagados das redes de fluxo de dados 32(1)-32(7) para o processo 40 oferecendo dados para uma ou mais interfaces de alvo 14 no conjunto 54 como descrito acima com referência à figura 1A. Cada uma das redes de fluxo de dados 32(1)-32(7) inclui um ou mais conjuntos de interfaces de alvo 14 (não mostradas) que se conectam a um ou mais outros processos 40 (não mostrados). As redes de fluxo de dados 32(1 )-32(7) podem também incluir um ou mais conjuntos adicionais de interfaces de fonte 12 (não mostradas) e/ou um ou mais conjuntos de interfaces de alvo 14 (não mostradas) que se conectam a um ou mais outros processos 40 (não mostrados).
As redes de fluxo de dados 32(7+1 )-32( V) incluem conjuntos respectivos 66(7+1)46(V) de uma ou mais interfaces de alvo 14 onde cada conjunto 66 pode incluir o mesmo número ou um diferente de interfaces de alvo 14 como outros conjuntos 66. Os conjuntos 66(7+1 )-46( V) das interfaces de alvo 14 estabelecem um conjunto 68 de ligações 16 entre os conjuntos 66(7+1 )-46( V) de interfaces de alvo 14 e o conjunto 56 das interfaces de fonte 12. Como ilustrado nas figuras 1B e 1C, cada interface de alvo 14 nos conjuntos 66(7+1)46(½ pode se conectar a qualquer número de interfaces de fonte 12 no conjunto 56 e qualquer número de interfaces de alvo 14 nos conjuntos 66(7+1 )-46( V) pode se conectar a cada interface de fonte 12 no conjunto 56. O processo 40 faz com que os dados sejam propagados para uma ou mais das redes de fluxo de dados 32(7+1)-32(½ fazendo com que cada interface de fonte 12 no conjunto 56 ofereça dados para uma ou mais interfaces de alvo 14 nos conjuntos 66(7+1)-46(½ como descrito com referência à figura 1A. As redes de fluxo de dados 32(7+1)-32(½ podem também incluir um ou mais conjuntos de interfaces de fonte 12 (não mostradas) e/ou um ou mais conjuntos de interfaces de alvo 14 (não mostradas) que se conectam a um ou mais outros processos 40 (não mostrados).
A figura 5 é um diagrama de blocos que ilustra uma modalidade de um bloco criador 70 configurado para implementar uma operação de envio. O bloco criador 70 inclui uma interface de fonte 12, mas não inclui quaisquer interfaces de alvo 14. O bloco criador 70 é incluído em um processo 40 para permitir que o processo 40 propague dados para uma rede de fluxo de dados 32. Dessa maneira, o bloco criador 70 implementa uma operação de envio recebendo dados do processo 40 e fornecendo os dados para uma ou mais redes de fluxo de dados conectadas 32.
O bloco criador 70 pode ou não interagir com um agendador de processo subjacente que agenda os processos 40 para execução no sistema de computador. Dessa forma, o bloco criador 70 pode não incluir uma interface para o agendador.
A figura 6 é um diagrama de blocos que ilustra uma modalidade de um bloco de disparo 80 configurado para implementar uma operação de recepção. O bloco de disparo 80 inclui uma interface de alvo 14, mas não inclui quaisquer interfaces de fonte 12. O bloco de disparo 80 é incluído em um processo 40 para permitir que o processo 40 receba dados de uma rede de fluxo de dados 32. O bloco de disparo 80 age como um ponto de terminação ou um de qualquer número de pontos de terminação para a rede de fluxo de dados 32. Dessa forma, o bloco de disparo 80 implementa uma operação de recepção recebendo dados de uma rede de fluxo de dados 32 e fornecendo os dados para o processo 40.
O bloco de disparo 80 também inclui uma interface do agendador 82. A interface do agendador 82 interage com um agendador de processo subjacente que agenda o processo 40 para execução no sistema de computador. Em particular, a interface do agendador 82 opera com o agendador para fazer com que o processo 40 seja pausado (por exemplo, bloqueado) em resposta a uma operação de recepção que envolve o bloco de disparo 80 sendo iniciado quando os dados não estão imediatamente disponíveis. A interface do agendador 82 também opera com o agendador para fazer com que o processo 40 seja reassumido (por exemplo, desbloqueado) em resposta aos dados de uma operação de recepção que envolve o bloco de disparo 80 chegando ao bloco de disparo 80.
A figura 7 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo 90 que inclui as operações de envio e recepção. Na figura 7, um processo 40(1) recebe os dados de um processo 40(2) e fornece os dados para um processo 40(3). Para receber os dados do processo 40(2), são oferecidos dados para um bloco de disparo 80(1) do processo 40(1) de um bloco criador 70(1) do processo 40(2) e o bloco de disparo 80(1) aceita os dados como indicado por uma rede de fluxo de dados 32A que implementa a operação de recepção. O processo 40(1) executa algum cálculo nos dados e envia os dados resultantes para o processo 40(3). Para enviar os dados para o processo 40(3), um bloco criador 70(2) do processo 40(1) oferece os dados para um bloco de disparo 80(2) do processo 40(3) e o bloco de disparo 80(2) aceita os dados como indicado por uma rede de fluxo de dados 32B que implementa uma operação de envio.
A figura 8 é um diagrama de blocos que ilustra uma modalidade de uma rede de fluxo de dados 32 configurada para implementar as operações de escolha e junção. A rede de fluxo de dados 32 inclui nós 20(1 )-20( 14/+1) onde IVé um número inteiro maior do que ou igual a dois e representa o IVo nó 20, o IVo processo 40 e o IVo bloco criador 70. Cada nó 20(1)-20(14/+1) inclui uma interface de fonte 12 e uma interface de alvo 14. Interfaces de alvo 14 nos nós 20(1)-20(14) recebem dados de blocos criadores 70(1)-70(140 respectivos nos processos 40(1)-40(14/) respectivos. As interfaces de fonte 12 nos nós 20(1)-20(14/) proporcionam, cada uma, dados para uma interface de alvo 14 no nó 20(14/+1). A interface de fonte 12 no nó 20(14/+1) fornece dados para o bloco de disparo 70 no processo 40 (I4/+1).
Para implementar a operação de escolha, o nó 20(14/+1) aceita dados somente dos primeiros dos nós 20(1 )-20(14/) para oferecer dados para o nó 20(14/+1) e declina as ofertas de dados de todos os nós 20(1)-20(14) restantes. O nó 20(14/+1) fornece os dados para o bloco de disparo 80 no processo 40(14/+1).
Em uma modalidade, cada nó 20(1)-20(14) é configurado para usar a sua interface de fonte 12 respectiva para oferecer sua identidade como os dados para o nó 20(146-1) em resposta a ter sido oferecido dados de blocos criadores 70(1)-70(14) respectivos. O nó 20(146-1) usa a sua interface de alvo 14 para aceitar a primeira identidade oferecida do conjunto de nós 20(1 )-20( I4) e para declinar todas as identidades subsequentes oferecidas do conjunto de nós 20(1)-20(¼). O nó 20(1)-20(¼) que recebe a resposta de aceite do nó 20(146-1) usando sua interface de fonte 12 aceita os dados oferecidos do bloco criador 70(1)70(¼) respectivo usando a sua interface de alvo 14. Os nós 20(1)-20(¼) que recebem as respostas de declinação do nó 20(146-1) usando suas interfaces de fonte 12 respectivas declinam os dados oferecidos dos blocos criadores 70(1)-70(¼) respectivos usando suas interfaces de alvo 14 respectivas. O nó 20(146-1) usa sua interface de fonte 12 para oferecer a identidade aceita como os dados para o bloco de disparo 70 no processo 40(146-1). O bloco de disparo 70 responde aceitando a identidade do nó 20(146-1). O processo 40( W+1) então recupera os dados da operação de escolha do nó 20(1)-20(14) usando a identidade recebida do nó 20(1/1/4-1).
Em outra modalidade, os nós 20(1)-20(¼) podem ser omitidos e o nó 20(1/1/+1) pode receber os dados diretamente dos blocos criadores 70(1)-70(¼). Nessa modalidade, os blocos criadores 70(1)-70(¼) oferecem dados para o nó 20(146-1). O nó 20(14/+1) usa a sua interface de alvo 14 para aceitar os primeiros dados oferecidos do conjunto dos blocos criadores 70(1)-70(¼) e para declinar todos os dados subsequentes oferecidos do conjunto de blocos criadores 70(1)-70(14). O nó 20(146-1) usa a sua interface de fonte 12 para oferecer os dados aceitos para o bloco de disparo 70 no processo 40(146-1). O bloco de disparo 70 responde aceitando os dados do nó 20(146-1) para completar a operação de escolha.
Em outras modalidades, a operação de escolha pode ser implementada na rede de fluxo de dados 32C usando outras combinações do padrão de fonte-alvo 10 que faz interface com outras combinações dos blocos criadores 70 e/ou blocos de disparo 80.
A figura 9 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo 92 que inclui uma operação de escolha. Na figura 9, a operação de escolha é implementada entre um processo 40(4) e os processos 40(5) e 40(6) incluindo a rede de fluxo de dados 32C. Com o uso da rede de fluxo de dados 32C, o processo 40(4) aceita os dados do primeiro dos processos 40(5) e 40(6) que proporcionam os dados para a rede de fluxo de dados 32C. O processo 40(4) executa alguma computação nos dados e envia os dados resultantes para o processo 40(7) usando uma rede de fluxo de dados 32D que implementa uma operação de envio.
A modalidade da figura 8 pode também ser usada para implementar uma operação de junção. Para implementar a operação de junção, o nó 20(146-1) aguarda para aceitar dados de todos os nós 20(1)-20(¼) antes de oferecer os dados de todos os nós 20(1)-20(¼) para o bloco de disparo 80 no processo 40(146-1).
Em uma modalidade, cada nó 20(1)-20(14/) é configurado para oferecer a sua identidade como parte dos dados oferecidos para o nó 20(14/+1) usando a interface de fonte 12 em resposta a ter sido oferecido dados de blocos criadores 70(1)-70(14) respectivos. O nó 20(14/+1) acompanha as ofertas recebidas usando sua interface de alvo 14 para determinar quando todos os nós 20(1 )-20( 140 ofereceram as suas identidades. O nó 20(14/+1) usa a sua interface de alvo 14 para responder a todas as ofertas, exceto a última oferta, com adiado. Em resposta às ofertas de todos os nós 20(1 )-20(14/) sendo recebidas, o nó 20(14/+1) usa a sua interface de alvo 14 para invocar a operação de reserva em todos os nós 20(1)-20(14), exceto o nó 20(1)-20(14/) que forneceu a última oferta. O nó 20(W+1) aguarda para responder para o nó 20(1)-20(14/) que forneceu a última oferta recebida até que o nó 20(14/+1) determine se todas as reservas tiveram sucesso ou se quaisquer reservas falharam.
Todos os nós 20(1)-20(14) que recebem uma invocação de reserva usam as suas interfaces de alvo 14 respectivas para invocar a operação de reserva nos blocos criadores 70(1)-70(14) respectivos. Os blocos criadores 70(1)-70(14) respondem para as invocações de reserva fornecendo um indicador de sucesso ou falha para os nós 20(1)-20(14) que invocam respectivos. Se um bloco criador 70 não mantém mais os dados oferecidos ou os dados oferecidos foram reservados por outro nó 20 (não mostrado), o bloco criador 70 responde para a invocação de reserva com uma indicação de falha. De outra forma, o bloco criador 70 responde para a invocação de reserva com uma indicação de sucesso.
Os nós 20(1)-20(14) detectam as reservas falhas em resposta à recepção dos indicadores de falha de blocos criadores 70(1)-70(14) respectivos. Os nós 20(1 )-20(14/) podem também detectar reservas falhas em resposta aos blocos criadores 70(1)-70(14) ficando desconectados dos nós 20(1)-20(14) respectivos. Cada nó 20(1)-20(14) que detecta uma reserva falha responde para a invocação de reserva do nó 20(14/+1) com um indicador de falha. Cada nó 20(1)-20(14) que recebe um indicador de sucesso de um bloco criador 70(1)70(14) respectivo responde para a invocação de reserva do nó 20(14/+1) com um indicador de sucesso.
O nó 20(H/+1) detecta quaisquer reservas falhas em resposta à recepção dos indicadores de falha dos nós 20(1 )-20(14) ou em resposta a qualquer um dos nós 20(1)-20(14) ficando desconectado. Se o nó 20(14/+1) detecta quaisquer reservas falhas, o nó 20(14/+1) usa a sua interface de alvo 14 para invocar a operação de liberação em todos os nós 20(1)20(14) que responderam para as invocações de reserva com indicadores de sucesso. O nó 20(14/+1) também retorna adiado para o nó 20(1 )-20(14) que forneceu a última oferta recebida pelo nó 20(14/+1). Em resposta à recepção das invocações de liberação, os nós 20(1)20(14) liberam as reservas bem sucedidas e, por sua vez, invocam as operações de liberação nos blocos criadores 70(1)-70(14) correspondentes. Os blocos criadores 70(1)-70(14) liberam as reservas bem sucedidas em resposta à recepção das invocações de liberação dos nós 20(1 )-20( W).
Se ο ηό 20(14/+1) detecta que todas as reservas foram bem sucedidas, o nó 20(14/+1) usa a sua interface de alvo 14 para invocar a operação de consumo em todos os nós 20(1)-20(14), exceto o nó 20(1 )-20(14) que forneceu a última oferta recebida pelo nó 20(14/+1). O nó 20(14/+1) retorna aceito para o nó 20(1)-20(14) que forneceu a última oferta e esse nó 20(1)-20(14/), por sua vez, retorna aceito para o bloco criador 70(1)-70(14/) correspondente. Todos os nós 20(1)-20(14) que recebem a invocação de consumo, por sua vez, usam as suas interfaces de alvo 14 respectivas para invocar a operação de consumo em blocos criadores 70(1)-70(14/) respectivos. O nó 20(14/+1) usa a sua interface de fonte 12 para oferecer os dados combinados para o bloco de disparo 70 no processo 40(14/+1). O bloco de disparo 70 responde aceitando os dados do nó 20(14/+1) para completar a operação de junção.
Em outra modalidade, o nó 20(14/+1) sinaliza o bloco de disparo 70 no processo 40(14/+1) com um valor booleano quando todos os dados foram reservados ou aceitos nos nós 20(1)-20(14). O bloco de disparo 70 recupera os dados dos nós 20(1)-20(14/). Nessa modalidade, o nó 20(14/+1) retorna aceito para o último dos nós 20(1)-20(14) que forneceu os dados.
Em outras modalidades, a operação de junção pode ser implementada na rede de fluxo de dados 32C usando outras combinações do padrão de fonte-alvo 10 que faz interface com outras combinações dos blocos criadores 70 e/ou blocos de disparo 80.
A figura 10 é um diagrama de blocos que ilustra uma modalidade de uma rede de processo 94 que inclui uma operação de junção. Na figura 10, a operação de junção é implementada entre um processo 40(8) e processos 40(9) e 40(10) incluindo a rede de fluxo de dados 32C. Com o uso da rede de fluxo de dados 32C, o processo 40(4) aceita os dados fornecidos de cada um dos processos 40(9) e 40(10) para a rede de fluxo de dados 32C. O processo 40(8) executa alguma computação nos dados e envia os dados resultantes para o processo 40(11) usando uma rede de fluxo de dados 32E que implementa uma operação de envio.
As operações de envio, recepção, escolha e junção ilustradas acima com referência às figuras 5-10 podem ser combinadas em configurações mais complexas em outras modalidades.
A figura 11 é um diagrama de blocos que ilustra uma modalidade do sistema de computador 100 que é configurado para implementar um ambiente do tempo de execução incluindo um agendador de processo.
O sistema de computador 100 inclui um ou mais pacotes de processador 102, um sistema de memória 104, zero ou mais dispositivos de entrada/saída 106, zero ou mais dispositivos de exibição 108, zero ou mais dispositivos periféricos 110 e zero ou mais dispositi13 vos de rede 112. Os pacotes do processador 102, sistema de memória 104, dispositivos de entrada/saída 106, dispositivos de exibição 108, dispositivos periféricos 110 e dispositivos de rede 112 se comunicam usando um conjunto de interligações 114 que inclui qualquer tipo adequado, número e configuração de controladores, barramentos, interfaces e/ou outras conexões ligadas por fiação ou sem fio.
O sistema de computador 100 representa qualquer dispositivo de processamento adequado configurado para um uso geral ou um uso específico. Exemplos de sistema de computador 100 incluem um servidor, um computador pessoal, um computador laptop, um computador de mesa digitalizadora, um assistente digital pessoal (PDA), um telefone móvel e um dispositivo de áudio/vídeo. Os componentes do sistema de computador 100 (isto é, pacotes de processador 102, sistema de memória 104, dispositivos de entrada/saída 106, dispositivos de exibição 108, dispositivos periféricos 110, dispositivos de rede 112 e interligações 114) podem ficar contidos em um alojamento comum (não mostrado) ou em qualquer número adequado de alojamentos separados (não mostrados).
Pacotes de processador 102 incluem encadeamentos de hardware 116(1)-116(A) onde Xé um número inteiro maior do que ou igual a um e representa o Xo encadeamento de hardware 116. Cada encadeamento de hardware 116 nos pacotes de processador 102 é configurado para acessar e executar instruções armazenadas no sistema de memória 104. As instruções podem incluir um sistema de entrada e saída básico (BIOS) ou firmware (não mostrado), um sistema operacional (OS) 120, uma camada de gerenciamento de recursos 121, uma plataforma do tempo de execução 122 e aplicações 124. Cada encadeamento de hardware 116 pode executar as instruções em conjunto com ou em resposta à informação recebida dos dispositivos de entrada/saída 106, dispositivos de exibição 108, dispositivos periféricos 110 e/ou dispositivos de rede 112.
O sistema de computador 100 reinicializa e executa o OS 120. O OS 120 inclui instruções executáveis pelos encadeamentos de hardware 116 para gerenciar os componentes do sistema de computador 100 e fornecer um conjunto de funções que permitem que as aplicações 124 acessem e usem os componentes. Em uma modalidade, o OS 120 é o sistema operacional Windows. Em outras modalidades, o OS 120 é outro sistema operacional adequado para uso com o sistema de computador 100.
A camada de gerenciamento de recursos 121 inclui instruções que são executáveis em conjunto com o OS 120 para alocar recursos do sistema de computador 100 incluindo encadeamentos de hardware 116. A camada de gerenciamento de recursos 121 pode ser incluída no sistema de computador 100 como uma biblioteca das funções disponíveis para uma ou mais aplicações 124 ou como uma parte integrada do OS 120.
A plataforma do tempo de execução 122 inclui instruções que são executáveis em conjunto com o OS 120 e a camada de gerenciamento de recursos 121 para gerar o ambi14 ente do tempo de execução e fornecer funções do tempo de execução para as aplicações 124. Essas funções do tempo de execução incluem uma função de agendador. Quando invocada, a função de agendador cria um agendador que opera para agendar processos de programas, tal como aplicações 124, para execução por um ou mais encadeamentos de hardware 116(1)-116(λ). As funções do tempo de execução podem ser incluídas no sistema de computador 100 como parte de uma aplicação 124, como uma biblioteca de funções disponíveis para uma ou mais aplicações 124 ou como uma parte integrada do OS 120 e/ou camada de gerenciamento de recursos 121.
Cada aplicação 124 inclui instruções que são executáveis em conjunto com o OS 120, camada de gerenciamento de recursos 121 e/ou plataforma do tempo de execução 122 para fazer com que operações desejadas sejam executadas pelo sistema de computador 100. Cada aplicação 124 representa um ou mais programas que podem executar com um agendador fornecido pela plataforma do tempo de execução 122.
O sistema de memória 104 inclui qualquer tipo adequado, número e configuração de dispositivos de armazenamento voláteis ou não voláteis configurados para armazenar instruções e dados. Os dispositivos de armazenamento do sistema de memória 104 representam meios de armazenamento legíveis por computador que armazenam instruções executáveis por computador incluindo OS 120, camada de gerenciamento de recursos 121, plataforma do tempo de execução 122 e aplicações 124. As instruções são executáveis pelo sistema de computador para executar as funções e métodos do OS 120, camada de gerenciamento de recursos 121, plataforma do tempo de execução 122 e aplicações 124 descritas aqui. Exemplos de dispositivos de armazenamento no sistema de memória 104 incluem unidades de disco rígido, memória de acesso aleatório (RAM), memória somente de leitura (ROM), unidades e placas de memória flash e discos magnéticos e óticos.
O sistema de memória 104 armazena instruções e dados recebidos dos pacotes do processador 102, dispositivos de entrada/saída 106, dispositivos de exibição 108, dispositivos periféricos 110 e dispositivos de rede 112. O sistema de memória 104 fornece instruções e dados armazenados para pacotes do processador 102, dispositivos de entrada/saída 106, dispositivos de exibição 108, dispositivos periféricos 110 e dispositivos de rede 112.
Os dispositivos de entrada/saída 106 incluem qualquer tipo adequado, número e configuração de dispositivos de entrada/saída configurados para inserir instruções ou dados de um usuário no sistema de computador 100 e liberar instruções ou dados do sistema de computador 100 para o usuário. Exemplos de dispositivos de entrada/saída 106 incluem um teclado, um mouse, uma base de toque, uma tela sensível ao toque, botões, discos de discar, puxadores e chaves.
Dispositivos de exibição 108 incluem qualquer tipo adequado, número e configuração de dispositivos de exibição configurados para liberar informação textual e/ou gráfica para um usuário do sistema de computador 100. Exemplos de dispositivos de exibição 108 incluem um monitor, uma tela de exibição e um projetor.
Dispositivos periféricos 110 incluem qualquer tipo adequado, número e configuração de dispositivos periféricos configurados para operar com um ou mais outros componentes no sistema de computador 100 para executar funções de processamento gerais ou específicas.
Os dispositivos de rede 112 incluem qualquer tipo adequado, número e configuração de dispositivos de rede configurados para permitir que o sistema de computador 100 se comunique através de uma ou mais redes (não mostradas). Dispositivos de rede 112 podem operar de acordo com qualquer protocolo de rede adequado e/ou configuração para permitir que a informação seja transmitida pelo sistema de computador 100 para uma rede ou recebida pelo sistema de computador 100 de uma rede.
Na modalidade da figura 11, um ou mais do OS 120, camada de gerenciamento de recursos 121, plataforma do tempo de execução 122 e aplicações 124 podem incluir redes com processos 40 conectados usando redes de fluxo de dados 32 que incluem qualquer número adequado de padrões de fonte-alvo 10 como descrito acima com referência às figuras 1A-10.
As modalidades acima proporcionam um modelo de composição citado como o padrão de fonte-alvo para conectar processos em redes de processo em uma maneira geral, flexível e extensível. O modelo permite que construções de álgebra de processo comuns sejam combinadas com redes de fluxo de dados para formar redes de processo. Operações típicas algébricas do processo, tais como envio, recepção, escolha e junção podem ser expressas em termos do modelo de composição para formar redes de fluxo de dados que proporcionam operações algébricas do processo totalmente interoperáveis entre os processos. O modelo pode ser aplicado a uma ampla formação de redes de fluxo de dados simples, bem como redes de fluxos de dados mais complexas.
O modelo também permite redes de processo livremente conectadas. Com redes de processo livremente conectadas, um processo pode não ter ou ter conhecimento limitado dos outros processos com os quais o processo está interagindo. O processo, no lugar disso, sabe os pontos de conexão com os outros processos e o significado dos pontos de conexão.
Redes de processo livremente conectadas podem ser usadas para conseguir programas altamente sustentáveis e permitir lógica de roteamento mais complexa e sofisticada com base nas construções de fluxos de dados. Uma rede de fluxo de dados passiva pode rotear mais eficientemente os dados de um processo para o outro do que os processos ativos agindo como intermediários.
Embora modalidades específicas tenham sido ilustradas e descritas aqui, será verificado por aqueles versados na técnica que uma variedade de implementações alternadas e/ou equivalentes pode ser substituída pelas modalidades específicas mostradas e descritas sem se afastar do escopo da presente invenção. Esse pedido é planejado para cobrir quaisquer adaptações ou variações das modalidades específicas discutidas aqui. Portanto, é planejado que essa invenção seja limitada somente pelas reivindicações e seus equivalentes.