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.