O objeto de biblioteca compartilhada é carregado como memória compartilhada para o programa?

0

Eu estava codificando alguns C quando comecei a me perguntar sobre free() dentro de uma biblioteca compartilhada e SIGKILL , e assim por diante. Então, depois de ler e repensar, cheguei a essa pergunta simples.

CONTEXTO : Quando o utilitário de carga lê um arquivo ELF que aponta para algum objeto compartilhado libA.so e carrega a biblioteca, ele mapeará os segmentos inteiros no espaço de endereço de memória do programa? ele será designado como memória compartilhada?

Até onde eu sei, o kernel não terá memória compartilhada de processos mortos, então:

  1. O que acontece se um objeto compartilhado foi carregado e aloca memória e, em seguida, o programa principal recebe SIGKILL ? A memória alocada será considerada memória compartilhada e será um vazamento?
  2. O que acontece se eu tiver dois programas carregando a mesma biblioteca compartilhada e um deles morrer sem liberar?

Ambos terminaram como: O objeto de biblioteca compartilhada é carregado como memória compartilhada para o programa?

Minha pergunta é bem genérica. Eu adoraria comparar diferentes kernels / loaders.

    
por D4RIO 20.06.2018 / 06:18

1 resposta

0

Como todo sistema operacional moderno segue os conceitos básicos do SunOS-4.0 (1988) e como eles são baseados no código do SunOS (a Sun ofereceu as fontes no início de 1990 para o FreeBSD de onde foi copiado ...) não há muito que difere.

O arquivo da biblioteca compartilhada é mapeado na memória dos programas e isso é feito de forma compartilhada com cópia na gravação dos dados, então a maior parte da RAM necessária é compartilhada.

  • malloc() não é chamado pela "biblioteca", mas por um processo, a memória relacionada é associada ao processo

  • Os sinais são enviados para o processo - não para uma biblioteca

  • Se um programa / processo é terminado, a memória malloc'd é liberada pelo kernel e se a contagem de referência para a biblioteca mapeada for zerada, então toda a biblioteca é removida da memória.

por 20.06.2018 / 09:29