Diferença entre fork () e vfork ()

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 6 Poderia 2024
Anonim
Diferença entre fork () e vfork () - Tecnologia
Diferença entre fork () e vfork () - Tecnologia

Contente


Ambos garfo() e vfork () são as chamadas de sistema que cria um novo processo que é idêntico ao processo que chamou fork () ou vfork (). Usando garfo() permite a execução do processo pai e filho simultaneamente. O outro jeito, vfork () suspende a execução do processo pai até que o processo filho conclua sua execução. A principal diferença entre a chamada do sistema fork () e vfork () é que o processo filho criado usando o fork possui um espaço de endereço separado como o do processo pai. Por outro lado, o processo filho criado usando o vfork precisa compartilhar o espaço de endereço do processo pai.

Vamos encontrar algumas diferenças entre fork () e vfork () com a ajuda do gráfico de comparação mostrado abaixo.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para Comparaçãogarfo()vfork ()
BasicO processo filho e o processo pai têm espaços de endereço separados.Processo filho e processo pai compartilham o mesmo espaço de endereço.
ExecuçãoO processo pai e filho é executado simultaneamente.O processo pai permanece suspenso até o processo filho concluir sua execução.
ModificaçãoSe o processo filho alterar qualquer página no espaço de endereço, ele ficará invisível para o processo pai, pois o espaço de endereço é separado.Se o processo filho alterar qualquer página no espaço de endereço, ele ficará visível para o processo pai, pois eles compartilham o mesmo espaço de endereço.
Copiar na gravaçãoO fork () usa a cópia na gravação como uma alternativa em que o pai e o filho compartilham as mesmas páginas até que qualquer um deles modifique a página compartilhada.O vfork () não usa a cópia na gravação.


Definição de fork ()

o garfo() é uma chamada de sistema usada para criar um novo processo. O novo processo criado pela chamada fork () é o processo filho, do processo que invocou a chamada do sistema fork (). O código do processo filho é idêntico ao código do processo pai. Após a criação do processo filho, o processo pai ou filho inicia sua execução a partir da próxima instrução após fork () e os dois processos são executados simultaneamente.

O processo pai e o filho têm espaço de endereço separado. Portanto, quando qualquer um dos processos modifica qualquer instrução ou variável no código. Não seria refletido em outros códigos de processo. Vamos supor que se o processo filho modifique o código, isso não afetará o processo pai.


Algum processo filho após a criação chama imediatamente exec (). A chamada do sistema exec () substitui o processo com o programa especificado em seu parâmetro. Em seguida, o espaço de endereço separado do processo filho é inútil. A única alternativa aqui é copiar na gravação.

o copiar na gravação deixe o pai e o filho processarem para compartilhar o mesmo espaço de endereço. Se qualquer um dos processos gravar nas páginas no espaço de endereço, a cópia do espaço de endereço será criada para permitir que o processo funcione independentemente.

Definição de vfork ()

A versão modificada do fork () é vfork (). o vfork () A chamada do sistema também é usada para criar um novo processo. Semelhante ao fork (), aqui também o novo processo criado é o processo filho, do processo que invocou o vfork (). O código do processo filho também é idêntico ao código do processo pai. Aqui, o processo filho suspende a execução do processo pai até concluir sua execução, pois o processo compartilha o mesmo espaço de endereço a ser usado.

Como o processo filho e pai compartilha o mesmo espaço de endereço. Se algum dos processos modificar o código, ele estará visível para o outro processo que compartilha as mesmas páginas. Suponhamos que se o processo pai altera o código; refletirá no código do processo filho.

Como o uso do vfork () não cria espaços de endereço separados para processos filho e pai. Portanto, deve ser implementado onde o processo filho chama exec () imediatamente após a sua criação. Portanto, não haverá desperdício de espaço de endereço, e é o eficiente maneira de criar um processo. O vfork não usa copiar na gravação.

  1. A principal diferença entre fork e vfork é que o processo filho criado pelo garfo tem um espaço de memória separado do processo pai. No entanto, o processo filho criado pelo vfork chamada de sistema compartilha o mesmo espaço de endereço de seu processo pai.
  2. O processo filho criado usando o fork executar simultaneamente com o processo pai. Por outro lado, processo filho criado usando o vfork suspender a execução do processo pai até que sua execução seja concluída.
  3. Como o espaço de memória do processo pai e filho é uma modificação separada feita por qualquer um dos processos, não afeta as páginas de outros. No entanto, como o processo pai e filho compartilha a mesma modificação de endereço de memória feita por qualquer processo, ela reflete no espaço de endereço.
  4. A chamada de sistema fork () usa copiar na gravação como alternativa, que permite que o processo filho e pai compartilhem o mesmo espaço de endereço até que um deles modifique as páginas. Por outro lado, o vfork não usa a cópia na gravação.

Conclusão:

A chamada do sistema vfork () deve ser implementada quando o processo filho chama exec () imediatamente após sua criação usando fork (). Como o espaço de endereço separado para o processo filho e pai não será útil aqui.