Você deve ter ouvido falar sobre aplicativos em execução no modo “kernel” ou “usuário”. É tudo uma questão de como os sistemas operacionais funcionam quando fazem seus trabalhos. Depois de entender isso, é fácil entender a diferença entre o modo de usuário e o modo kernel.
Compreendendo o que um sistema operacional faz
Um computador consiste em hardware, componentes eletrônicos e software, o código de computador executado por esse hardware. Mas o que pode ser menos claro é como eles funcionam juntos.
Índice
O elemento mais essencial de um computador é o bit ou “dígito binário”. Tudo o que um computador faz é representado por uns e zeros. Diferentes componentes de computador representam bits de maneiras diferentes. Em uma CPU, os transistores microscópicos representam uns e zeros sendo ligados ou desligados. Esses transistores são organizados em estruturas lógicas, chamadas portas lógicas.
Na memória do computador eletrônico, os bits são representados por células de memória com uma carga acima ou abaixo de um certo limite. Em um disco rígido mecânico, os bits são representados como flutuações magnéticas medidas em uma bandeja giratória. Em discos ópticos, poços e terrenos que refletem ou não a luz do laser realizam o mesmo trabalho.
Não importa como a representação física do código binário é alcançada, você pode eventualmente reduzir todos os componentes do computador consumidor a este código de máquina bruto.
Então, como você vai da interface amigável de um computador para a interface simples e simples-processos de nível no próprio computador? É aí que entra o sistema operacional. Ele controla diretamente o hardware do computador.
Este software traduz tudo o que os aplicativos (e, portanto, o usuário) desejam em instruções de código de máquina que a CPU e outros componentes entendam. A parte mais crítica do software nesse processo é o kernel.
O que é o kernel?
O kernel é, como o nome sugere, o núcleo do sistema operacional. O kernel é um software que reside na RAM e direciona tudo o que o computador faz. Quando algo é escrito na memória, é o kernel que direciona a execução.
O kernel sabe como fazer interface com hardware, como GPUs e placas de rede, mas pode não saber como operá-los em todo o seu potencial , contando com padrões genéricos na indústria de computadores.
Os drivers de hardware entram em jogo aqui. Os drivers dizem ao seu sistema operacional como trabalhar com componentes específicos, e é por isso que você precisa de drivers diferentes para GPUs Nvidia e AMD, por exemplo.
Equipado com os drivers corretos, o kernel é a autoridade final dentro do computador , incluindo fazer coisas que podem destruir dados catastroficamente.
O papel das interfaces de programação de aplicativos (APIs)
Na época do MS-DOS, os desenvolvedores de software tinham que escrever seus softwares especificamente para o hardware do usuário. O exemplo mais notório disso em sistemas MS-DOS foram os drivers da placa de som.
Um determinado videogame teria que suportar as placas mais populares (Sound Blaster, Ad-lib, Gravis Ultrasound, etc.) e esperar que a maioria dos jogadores fosse coberta. Hoje, as coisas funcionam de maneira muito diferente, graças às APIs.
A tela de seleção de placa de som do Wolf3D
Microsoft DirectX é um ótimo exemplo. Se você quiser uma explicação detalhada, consulte O que é DirectX e por que ele é importante? No entanto, o mais importante a saber é que a API oferece uma forma padrão para os desenvolvedores de software solicitarem recursos de hardware de componentes como a GPU. Além disso, os fabricantes de hardware devem apenas garantir que seus produtos estejam em conformidade com o DirectX para garantir a compatibilidade total com qualquer software compatível.
As APIs oferecem uma camada de tradução entre os aplicativos de software e o kernel de baixo nível com seus drivers de hardware. Sim, isso vem com uma pequena penalidade de desempenho. Ainda assim, em computadores modernos, isso é insignificante e vem com uma variedade de vantagens, que é onde finalmente chegamos ao modo de usuário e modo de kernel.
Modo de usuário vs. Modo de kernel
Os sistemas operacionais modernos executam centenas ou milhares de”processos”simultaneamente, dando-lhes dinamicamente tempo de CPU conforme necessário com base em suas prioridades e requisitos de energia de computação.
Quando você inicia um aplicativo, ele gera processos e o A CPU pode executá-los no modo de usuário ou no modo kernel.
Um processo do Windows em execução no modo de usuário só tem acesso ao seu próprio espaço de endereço de memória virtual privada e tabela de manipulação. O software usa essas tabelas para armazenar dados na RAM e solicitar recursos. Não há acesso direto à memória ou outro hardware, e cabe ao sistema operacional mapear esses espaços virtuais para o hardware real do computador.
Isso é bom por vários motivos, mas o benefício mais importante é que o aplicativo não pode sobrescrever ou alterar dados fora de seu espaço de endereço de memória virtual. Além disso, certas funções estão fora dos limites para os processos do modo de usuário, principalmente aquelas que podem travar o sistema ou destruir dados.
Quando um processo é iniciado ou elevado ao modo kernel, ele tem acesso total ao sistema recursos, mesmo aqueles reservados para o sistema operacional. Portanto, em teoria, ele poderia substituir dados cruciais de que o sistema operacional precisa para funcionar corretamente.
Traps e exceções
É importante entender que esses dois modos são impostos no nível do hardware pela própria CPU. Se um aplicativo em execução no modo de usuário tenta fazer algo que requer acesso no modo kernel, ele gera uma “armadilha” ou “exceção”. O sistema operacional então lidará com o aplicativo, geralmente desligando-o e gerando um log de travamento para que os desenvolvedores possam ver o que aconteceu na memória quando as coisas saíram dos trilhos.
Os perigos do modo kernel: A tela azul da morte
Se você já experimentou uma tela azul da morte (quem não?) Que forçou seu computador a desligar ou reiniciar, há uma boa chance de ser um modo kernel processo para culpar.
Quando um processo no modo kernel faz algo que não deveria, o sistema operacional não consegue se recuperar disso e todo o computador para. Quando um processo do modo de usuário fica descontrolado, apenas o aplicativo trava, e o resto do software e o sistema operacional podem continuar sem problemas.
Esta é uma área onde as APIs desempenham um papel essencial, já que é a API solicitando privilégios de modo kernel. Os aplicativos de modo de usuário essencialmente delegam solicitações que teriam exigido privilégios de modo de kernel para a API.
É por isso que o modo de kernel geralmente é concedido apenas a processos de sistema de baixo nível que precisam acessar o hardware do computador diretamente. Normalmente, esse privilégio é estendido a um processo porque ele precisa de mais desempenho do que o modo de usuário pode fornecer. Algumas instruções da CPU funcionam apenas no modo kernel, então se um processo precisar usar essas funções, ele deve ser elevado.
Se você estiver tendo problemas com a Tela Azul da Morte, certifique-se de ler nosso Guia de solução de problemas do Blue Screen of Death para Windows 10!