Onde estão “a pilha do kernel”, “Frames for C run-time startup functions” e “Frame for main ()” no layout de memória de um programa?

1

Da interface de programação do Linux:

  1. Ondeestáapilhadokernel(mencionadanacitaçãoabaixo)nodiagramaacima?

    Éapartesuperior"Kernel (mapeado na memória virtual do processo, mas sem programa accessilto)" no diagrama acima?

    the term user stack is used to distinguish the stack we describe here from the kernel stack. The kernel stack is a per-process memory region maintained in kernel memory that is used as the stack for execution of the functions called internally during the execution of a system call. (The kernel can’t employ the user stack for this purpose since it resides in unprotected user memory.)

  2. Onde estão "quadros para funções de inicialização de tempo de execução C" e "Quadro para main ()" (mencionado no diagrama abaixo) no diagrama acima?

    É "argv, environ" no diagrama acima "Frames for C run-time startup functions", "Frame para main ()", ou parte de um dos dois?

  3. Qual é o segmento mais baixo entre 0x00000000 e 0x08048000 usado para?

Obrigado.

    
por Tim 02.09.2018 / 15:56

1 resposta

4
  1. Não há uma pilha do kernel. Para cada encadeamento, há uma região de memória que é usada como espaço de pilha quando o processo faz uma chamada do sistema. Há também "pilhas de interrupção" separadas, uma por CPU, que são usadas pelo manipulador de interrupções. Essas áreas de memória residem no espaço de endereço do kernel (acima de 0xc0000000 em sua figura.

  2. Os quadros de pilha (C quadros de tempo de execução, quadro de main, etc.) fazem parte da pilha. Os argumentos do processo ( argv ) e o ambiente são áreas separadas e não fazem parte da pilha.

  3. A área entre 0x0 e 0x08048000 (cerca de 128 MB) não é usada para nada. Originalmente, o i386 System V ABI reservava essa área para a pilha, mas o Linux faz as coisas de maneira diferente. Deixar a área sem uso não desperdiça RAM, apenas espaço de endereçamento, porque a área não está mapeada. Observe que essas informações estão quase totalmente obsoletas agora, pois descrevem como as coisas são feitas na arquitetura x86 de 32 bits. Máquinas x86 de 32 bits são difíceis de encontrar hoje e as distribuições estão eliminando o suporte para elas.

por 02.09.2018 / 17:24