Os espaços de endereçamento virtuais de todos os processos possuem o mesmo conteúdo em suas partes “Kernel”?

5

A interface de programação do Linux mostra o layout de um espaço de endereço virtual de um processo:

Okernelnamemóriafísicaécompletamenteouparcialmentemapeadoparaaparte"Kernel" na parte superior de 0xC0000000 para 0XFFFFFFFF no espaço de endereço virtual de cada processo?

Se parcialmente, qual parte do kernel na memória física é mapeada para a parte "Kernel" no espaço de endereço virtual de cada processo, e qual parte não é?

A parte "Kernel" no espaço de endereço virtual de um processo armazena exatamente a parte do código do kernel que é acessível ao processo quando ele está sendo executado no modo kernel, e não a parte do código do kernel que não é ?

Os espaços de endereçamento virtuais de todos os processos possuem o mesmo conteúdo em suas partes "Kernel"?

    
por Tim 14.09.2018 / 13:18

1 resposta

6

A resposta depende de o isolamento da tabela de páginas do kernel estar ativado (o que depende da arquitetura e se é suporta o KPTI).

Sem o KPTI, o kernel é totalmente mapeado no espaço de endereço de cada processo, mas, como mencionado no diagrama, esses mapeamentos são inacessíveis a partir do espaço do usuário (impedindo vazamentos no canal lateral).

Com o KPTI, as tabelas de páginas do kernel são separadas das tabelas de páginas do espaço de usuário e apenas um conjunto mínimo de mapeamentos é deixado no espaço de endereço de cada processo, conforme necessário para permitir que o espaço do usuário chame no kernel e para ativar o processador para dar controle ao kernel ao lidar com interrupções ou exceções.

Em ambos os casos, todos os processos possuem os mesmos mapeamentos para o kernel.

Veja também o artigo do LWN sobre o KAISER .

    
por 14.09.2018 / 13:24