Os recursos de hardware ou recursos de software são “modo kernel” e “modo de usuário”?

2

Eu li que existem dois modos chamados “modo kernel” e “modo de usuário” para lidar com a execução de processos. ( Entendendo o Kernel Linux , 3ª Edição.) É um switch de hardware (kernel / usuário) que é controlado pelo Linux ou recurso de software fornecido pelo kernel do Linux?

    
por DScript 22.04.2015 / 17:26

2 respostas

6

O modo kernel e o modo de usuário são um recurso de hardware, especificamente um recurso do processador. Os processadores projetados para sistemas de médio a alto (PC, feature phone, smartphone, todos, exceto os dispositivos de rede mais simples,…) incluem esse recurso. O modo kernel pode ser usado por nomes diferentes: modo supervisor, modo privilegiado, etc. No x86 (o tipo de processador em PCs), é chamado de “anel 0” e o modo de usuário é chamado de “anel 3”.

O processador tem um pouco de armazenamento em um registrador que indica se ele está no modo kernel ou no modo de usuário. (Isso pode ser mais de um bit em processadores que possuem mais de dois desses modos.) Algumas operações só podem ser executadas no modo kernel, em particular alterando a configuração da memória virtual modificando os registros que controlam o MMU . Além disso, existem apenas algumas maneiras de mudar do modo de usuário para o modo kernel, e todas elas requerem o salto para endereços controlados pelo código do kernel. Isso permite que o código em execução no modo kernel controle a memória que o código em execução no modo de usuário pode acessar.

Sistemas operacionais semelhantes a Unix (e a maioria dos outros sistemas operacionais com isolamento de processo) são divididos em duas partes:

  • O kernel é executado no modo kernel. O kernel pode fazer tudo.
  • Os processos são executados no modo de usuário. Os processos não podem acessar o hardware e não podem acessar a memória de outros processos (exceto quando explicitamente compartilhados).

O sistema operacional, portanto, aproveita os recursos de hardware (modo privilegiado, MMU) para reforçar o isolamento entre os processos.

Os sistemas operacionais baseados em Microkernel têm uma arquitetura mais refinada, com menos código em execução no modo kernel.

Quando o código do modo de usuário precisa executar ações que ele não pode fazer diretamente (como acessar um arquivo, acessar um periférico, se comunicar com outro processo,…), ele faz um system call : um salto para um local pré-definido no código do kernel.

Quando um periférico de hardware precisa solicitar atenção da CPU, ele alterna a CPU para o modo kernel e pula para um local predefinido no código do kernel. Isso é chamado de interrupção .

Outras leituras

por 23.04.2015 / 03:21
3

"Linux" propriamente dito é apenas o kernel. Quando falamos de "Linux" como um sistema operacional, é uma fusão do kernel e de todo o outro software que é distribuído com ele em um Distribuição de Linux .

A alternância entre o usuário e o modo kernel acontece quando você faz uma chamada de sistema , que é qualquer uma das funções documentadas em seção manual 2 . Ou seja, se você disser algo como man 2 open e obter um resultado, ou man creat e ver que há um sufixo (2) no título da página, você está vendo uma chamada de sistema, o que significa que ela é tratada pelo kernel.

(A distinção aqui é com seção 3 do manual , que é para funções implementadas inteiramente no espaço do usuário, como como a Biblioteca C padrão do sistema.

Quando a chamada do sistema retorna ao código de usuário que a chamou, ela retorna esse processo para o modo de usuário.

O kernel Linux usa recursos de hardware para impor a distinção entre o kernel e o modo de usuário na maioria dos processadores em que é executado. O esquema de anéis de proteção da Intel é uma maneira de fazer isso. Há exceções, como µCLinux , que é executado em pequenos processadores sem uma MMU, que também pode não ter anéis de proteção . Versões muito antigas do Unix também rodavam sem proteção do kernel / usuário.

Quando falamos em "código de modo de usuário", estamos falando de código que é executado principalmente no espaço do usuário, embora praticamente qualquer programa contenha algumas chamadas de sistema, e assim gastará algum do seu tempo esperando no kernel, que sempre roda no modo kernel.

    
por 22.04.2015 / 17:41