2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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:
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:
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ãobash
processo filho, desde quebash
Quando 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.
pode usarpipe
Para criar um pipe sem nome, os parâmetros não exigem caminho e nome de arquivo
int pipe(int pipefd[2]);