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

13

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

    
por Luc M 19.08.2010 / 03:48

3 respostas

15

Modo do Kernel

Um programa em execução neste 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 do usuário O código em execução neste modo é restrito a 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 via hardware - não apenas o sistema operacional. Em particular, a arquitetura x86 tem 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, nem sempre é fatal. De fato, nos sistemas modernos, geralmente não é.

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

    
por 19.08.2010 / 04:20
3

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

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

1. Entrando no modo kernel

Todo código normal que você escreve, é executado em "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 o quadro de vídeo de um driver de webcam
  • enviando dados de imagem para a placa gráfica.
  • enviando um pacote de rede.

Esta funcionalidade essencial - próxima a 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 faz um salto do modo de usuário para o código do kernel. O kernel faz o trabalho, e dobra o caminho de execução de volta ao modo de usuário.

Quando um programa gasta muito tempo no modo kernel, isso geralmente significa que ele está realizando muitas atividades relacionadas a hardware. Por exemplo, busca de 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 troca entre o modo kernel / usuário também é uma operação cara, que é completamente evitada executando tudo no código do kernel.

Dentro do kernel, no entanto, 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 a outros programas. Ele engana programas para acreditar que o mundo parece diferente (os programas vivem em um ambiente virtual, restrito à área restrita) e, portanto, tudo que entra / sai dos programas pode ser traduzido e protegido.

O kernel em si não pode ter muita proteção porque não há nada por trás dele para protegê-lo. É o coração do sistema, e quando isso pára, tudo acaba. Você tem um kernel panic 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. Peças essenciais relacionadas ao hardware, no entanto, são normalmente código do kernel que não vai mudar tão cedo.

    
por 20.08.2010 / 01:01
2

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

    
por 19.08.2010 / 04:09

Tags