O que significa quando o código é executado no modo [kernel | usuário]?

14

O que significa quando o código é executado no kernel ou no modo de usuário?

Luc M
fonte

Respostas:

15

Modo Kernel

Um programa em execução nesse modo tem acesso total ao hardware subjacente. Ele pode executar qualquer instrução da CPU, acessar qualquer endereço de memória e essencialmente fazer o que quiser.

Modo de usuário O código em execução nesse modo é restrito à modificação de hardware por meio da API do sistema operacional. Ele não pode acessar o hardware diretamente em tudo .

O interessante aqui é que, nas arquiteturas comuns, isso é imposto por hardware - não apenas pelo sistema operacional. Em particular, a arquitetura x86 possui anéis de proteção .

A grande vantagem desse tipo de separação é que, quando um programa trava em execução no modo de usuário, isso nem sempre é fatal. De fato, em sistemas modernos, geralmente não é.

Confira o artigo de Jeff . São as coisas boas de sempre.

gvkv
fonte
3

A resposta curta é: apenas informa onde os programas estão passando o tempo.

Para uma resposta mais longa, explicarei isso em duas etapas. Primeiro:

1. Entrando no modo kernel

Todo código regular que você escreve é ​​executado no "modo de usuário".

Os programas podem usar bibliotecas para executar tarefas comuns para eles. Este também é o código do modo de usuário.

Em algum momento, o programa pode exigir uma função principal do sistema. Por exemplo:

  • acessando o conteúdo do arquivo do disco
  • reservando uma parte da memória livre
  • obtendo quadro de vídeo de um driver de webcam
  • enviando dados de imagem para a placa gráfica.
  • enviando um pacote de rede.

Essa funcionalidade essencial - próxima ao hardware - faz parte do kernel. Esse é o programa central por trás de tudo no seu computador. Ele gerencia tudo o que os programas precisam para funcionar.

Para usar uma função no kernel, o caminho de execução do programa literalmente salta do modo Usuário para o código do Kernel. O kernel faz seu trabalho e dobra o caminho de execução de volta ao modo de usuário.

Quando um programa passa muito tempo no modo kernel, geralmente significa que está realizando muitas atividades relacionadas ao hardware. Por exemplo, buscas em disco ou streaming de vídeo. O hardware também pode estar com defeito; tornando o processamento lento e fazendo com que o programa gaste uma quantidade incomum de tempo no espaço do kernel.


2 a diferença

O código no espaço do kernel é de alto desempenho. As outras partes do kernel podem chamá-lo diretamente, e o código tem acesso direto a todos os recursos do sistema, sem nenhuma verificação de limite. A alternância entre o modo kernel / usuário também é uma operação cara, completamente evitada pela execução de tudo no código do kernel.

No entanto, dentro do kernel, não há muito espaço para verificação de segurança, proteção contra falhas ou gravação nas partes erradas da memória. Estes são serviços que o kernel pode fornecer para outros programas. Engana os programas para acreditar que o mundo parece diferente (os programas vivem em um ambiente virtual restrito / em área restrita) e, portanto, tudo o que entra / sai dos programas pode ser traduzido e protegido.

O próprio kernel não pode ter muita proteção porque não há nada por trás para protegê-lo. É o coração do sistema e, quando isso para, tudo acaba. Você entra em pânico no kernel, ou no Windows, o famoso BSOD.

Esse também é o risco do código baseado no kernel, e a razão pela qual mais subsistemas com requisitos de baixo desempenho estão sendo movidos para o espaço do usuário. As partes relacionadas ao hardware essencial, no entanto, são tipicamente o código do kernel que não será alterado em breve.

vdboor
fonte
2

É a distinção se o código atualmente em execução tem permissão para interagir diretamente com várias peças de hardware. O código do modo kernel pode gravar nos barramentos do dispositivo, alterar os mapeamentos de memória, alternar os processos em execução e assim por diante. O modo de usuário pode fazer cálculos e fazer chamadas de sistema no kernel para interagir com o resto do mundo.

Phil Miller
fonte