Quando um pai usa fork, o processo filho é criado em um espaço de memória contínuo?

0

Ao bifurcar, o ambiente exato do processo pai é copiado. Esse espaço é alocado em um espaço aleatório na RAM ou os processos pai e filho estão obtendo espaço contínuo na RAM (como elementos de matriz, por exemplo)?

    
por ddmichael 21.01.2014 / 15:02

1 resposta

1

Se você baixar e extrair (linux-3.13) do kernel.org , você pode ver isso no linux-3.13 / kernel / fork.c existe um conjunto bem documentado de funções. Um deles, 'do_fork (...)' afirma fazer o fork real. Aqui esta função chama 'static struct task_struct * copy_process (...)', em torno da linha 1129. O que você está procurando deve estar em algum lugar próximo.

OK aqui, como eu vejo, essa função depois de verificar as permissões de permissões do selinux 'dup_task_struct (...)', que chama 'alloc_task_struct_node (...)', 'alloc_thread_info_node (...)' e 'arch_dup_task_struct (.. .) '. Dado o fato 'alloc_task_struct_node (...)' faz "pouca coisa mais do que chamar kmem_cache_alloc_node (...)" e o fato de que essa função é declarada no arquivo linux-3.13 / mm / slab.c, que sugere sobre memória gerenciamento, eo fato de que muitos encadeamentos do kernel podem estar trabalhando contra responsabilidades de gerenciamento de memória (criando e excluindo estruturas continuamente), eu apostaria que o Linux em particular não cria estruturas de dados de processo uma ao lado da outra, por causa de muitas threads fazendo as mesmas alocações genéricas que o fork usa .

Se você abrir o linux-3.13 / mm / slub.c, ele começará a informar que é um alocador de memória slab. Um mecanismo de pesquisa da Internet fornece esses resultados para isso: wikipedia ... e lwn .

    
por 21.01.2014 / 17:39