Recomendado, 2024

Escolha Do Editor

Diferença entre fork () e vfork ()

Tanto fork () quanto vfork () são as chamadas do sistema que criam um novo processo que é idêntico ao processo que invocou fork () ou vfork (). O uso de fork () permite a execução do processo pai e filho simultaneamente. Por outro lado, vfork () suspende a execução do processo pai até que o processo filho conclua sua execução. A principal diferença entre a chamada de sistema fork () e vfork () é que o processo filho criado usando fork possui um espaço de endereço separado como o do processo pai. Por outro lado, o processo filho criado usando o vfork tem que compartilhar o espaço de endereço de seu processo pai.

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

Gráfico de comparação

Base para Comparaçãogarfo()vfork ()
BasicO processo filho e o processo pai possuem espaços de endereço separados.O processo filho e o processo pai compartilham o mesmo espaço de endereço.
ExecuçãoProcesso pai e filho são executados simultaneamente.O processo pai permanece suspenso até que o processo filho conclua sua execução.
ModificaçãoSe o processo filho alterar qualquer página no espaço de endereço, ele será invisível para o processo pai, já que 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, já que eles compartilham o mesmo espaço de endereço.
Cópia-on-writefork () usa copy-on-write 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.vfork () não usa copy-on-write.

Definição de garfo ()

O fork () é 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 e filho inicia sua execução a partir da próxima instrução após fork () e ambos os processos são executados simultaneamente .

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

Algum processo filho após sua criação chama imediatamente exec () . A chamada do sistema exec () substitui o processo pelo programa especificado em seu parâmetro. Em seguida, o espaço de endereço separado do processo filho é inútil. A única alternativa aqui é copy-on-write.

O copy-on-write permite que o pai e o filho processem 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 de fork () é vfork (). A chamada do sistema vfork () 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 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 ficará visível para o outro processo que compartilha as mesmas páginas. Vamos supor que o processo pai altere o código; refletirá no código do processo infantil.

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

Principais diferenças entre fork () e vfork ()

  1. A principal diferença entre fork e vfork é que o processo filho criado pelo fork possui um espaço de memória separado do processo pai. No entanto, o processo filho criado pela chamada do sistema vfork compartilha o mesmo espaço de endereço de seu processo pai.
  2. O processo filho criado usando fork é executado simultaneamente com o processo pai. Por outro lado, o processo filho criado usando o vfork suspende 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, isso não afeta as páginas dos outros. No entanto, como o processo pai e filho compartilha, a mesma modificação de endereço de memória feita por qualquer processo reflete no espaço de endereço.
  4. A chamada de sistema fork () usa copy-on-write como uma alternativa, que permite que o processo filho e pai compartilhem o mesmo espaço de endereço até que qualquer um deles modifique as páginas. Por outro lado, o vfork não usa copy-on-write.

Conclusão:

A chamada do sistema vfork () deve ser implementada quando a execução do processo filho executa 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á de uso aqui.

Top