Compartilhamento de tecnologia

Comunicação entre processos - pipes

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Insira a descrição da imagem aqui

1. Introdução à comunicação de processos

1.1 Por que a comunicação é necessária entre processos

A colaboração é necessária entre processos. Por exemplo, todos os níveis de gestão numa escola estão interligados e não podem ser geridos verticalmente. É precisamente porque os processos precisam colaborar. O pré-requisito para a colaboração é que os processos precisam se comunicar. Alguns dados estão prontos para notificação, alguns dados são simplesmente dados transmitidos e alguns são dados relacionados ao controle.

Fato: Os processos são independentes, processo = estrutura de dados do kernel, código e dados do processo

O objetivo da comunicação do processo:

  • Transferência de dados: um processo precisa enviar seus dados para outro processo
  • Compartilhamento de recursos: compartilhando os mesmos recursos entre vários processos.
  • Evento de notificação: um processo precisa enviar uma mensagem a outro processo ou grupo de processos para notificá-lo (eles) de que um determinado evento ocorreu (como notificar o processo pai quando o processo termina).
  • Controle de processo: alguns processos esperam controlar completamente a execução de outro processo (como o processo de depuração. Neste momento, o processo de controle espera interceptar todas as armadilhas e exceções de outro processo e ser capaz de saber suas mudanças de status a tempo).

1.2 Como os processos se comunicam

O custo da comunicação entre processos pode ser um pouco maior: os processos são independentes e quaisquer recursos abertos por um processo não são visíveis para outro processo. Quando falamos antes sobre o processo pai-filho, os dados do processo pai foram herdados pelo processo filho. Isso não pertence à comunicação. Pode ser herdado, mas nem sempre é herdado. e sempre sendo capaz de transmitir informações.

A premissa da comunicação entre processos: primeiro permitir que processos diferentes vejam o mesmo recurso (sistema operacional) ("um pedaço de memória"). Os dois processos são independentes Para conseguir a comunicação, é necessária uma ferramenta, nomeadamente o sistema operativo, para permitir que os dois processos tenham a mesma memória. A razão pela qual o sistema operacional faz isso é determinada pelo usuário.
Como dizer ao sistema operacional para criar recursos:

  1. Deve ser que um determinado processo precise se comunicar primeiro e permitir que o sistema operacional crie um recurso compartilhado.
  2. O sistema operacional deve fornecer muitas chamadas de sistema para permitir que os processos solicitem recursos do sistema por meio de chamadas de sistema.
    Diferentes recursos compartilhados criados pelo sistema operacional e diferentes interfaces de chamada de sistema determinam os diferentes tipos de comunicação entre processos.

Insira a descrição da imagem aqui

2. Gasoduto

2.1 Pipeline Anônimo

2.1.1 Pipeline de compreensão do descritor de arquivo

Insira a descrição da imagem aqui

Um pipeline é essencialmente um arquivo no nível da memória que não precisa ser descarregado no disco.
Primeiro, o processo pai abre um arquivo duas vezes no modo de leitura e gravação. A razão para abrir o arquivo duas vezes é obter dois objetos de arquivo struct, de modo que haja dois ponteiros de leitura e gravação para um arquivo, de modo que as operações de leitura e gravação. use ponteiros independentes. Dessa forma, a leitura e a escrita não afetarão uma à outra.O ponteiro de leitura e gravação registra a posição atual de leitura ou gravação do arquivo, umstruct file Há apenas um ponteiro de leitura e gravação no arquivo. Ao gravar (ou ler) no arquivo, o ponteiro de leitura e gravação se moverá e, em seguida, lerá (gravará) novamente. na posição original e não consegue ler o conteúdo que acabou de escrever, então você precisa abrir o mesmo arquivo duas vezes de maneiras diferentes. Em seguida, crie um processo filho. O processo filho herdará o arquivo aberto no processo pai, ou seja, herdará a tabela de descritores de arquivo do processo pai. Neste momento, os processos pai e filho compartilharão o mesmo recurso de arquivo. o processo pode passar o descritor de arquivo nº 4 para o arquivo. Ao gravar no arquivo, o processo pai pode ler o arquivo por meio do descritor de arquivo nº 3. Nesse momento, os processos pai e filho realizam a transmissão de dados, ou seja, a comunicação. . Os processos pai e filho veem o mesmo buffer de memória, que chamamos de arquivo pipe aqui. Os tubos permitem apenas comunicação unidirecional devido à simplicidade.

Por que os processos pai-filho imprimem dados no mesmo terminal de monitor?
Porque o processo filho correspondente herdará a tabela de descritores de arquivo correspondente ao processo pai e, em seguida, apontará para o mesmo arquivo, o que significa que o processo pai digitará um arquivo, e o processo filho também digitará um arquivo, e o o mesmo será gravado em um buffer, o sistema operacional será liberado para o mesmo monitor.


O processo abrirá três entradas e saídas padrão por padrão: 0, 1, 2... Como abrir 0, 1, 2 por padrão?
Todos os comandos sãobashprocesso filho, desde quebashQuando ativado, todos os processos filhos são ativados por padrão.


Por que o processo filho fecha ativamente (0/1/2) sem afetar o uso contínuo do arquivo monitor pelo processo pai?
contagem de referência em nível de memória--, quando a contagem de referência no nível de memória diminui para 0, os recursos do arquivo são liberados.


O processo pai-filho fecha descritores de arquivos desnecessários. Por que eles precisaram ser abertos antes?
Para permitir que o processo filho herde. Não precisa ser fechado, mas é recomendável fechá-lo para evitar escrita acidental.


Por que os tubos são uma comunicação unidirecional?
O método é simples, reduz os custos de desenvolvimento e permite apenas a comunicação unidirecional. Qualquer arquivo é atualizado no buffer e, em seguida, os dados são atualizados no arquivo.
Os canos simples que vemos na vida são todos unidirecionais, como os canos de água, com uma entrada e uma saída, o que se adapta às características dos canos.

2.1.2 Uso da interface

pode usarpipePara criar um pipe sem nome, os parâmetros não exigem caminho e nome de arquivo

int pipe(int pipefd[2]);