Kernel e espaço do usuário Chamadas do sistema [fechadas]

1

Eu entendo alguns internos complexos dos sistemas operacionais, mas tenho uma grande lacuna na compreensão do kernel e do espaço do usuário.

Vou explicar como entendo isso agora.

Primeiro de tudo, temos RAM , por exemplo, 8GB , isso é memória plana e pode acessar qualquer ram com a ajuda do mecanismo CPU ou DMA .

Quando o sistema é inicializado, o inicializador de etapas é carregado na memória, mas neste estágio nossa memória é bruta e não temos nenhum conceito de Virtual Memory , porque o kernel fornece esse recurso. Além disso, há dois modos de real mode e protected mode
Eu tenho uma pergunta aqui.

Até onde eu sei, esses modos são recursos da CPU. E a principal diferença é que no processo de modo protegido é isolado no espaço da própria memória .... Mas como isso funciona? O processo é apenas o conceito do SO e no estágio de real e protected mode não temos nenhum SO carregado na memória e nossa memória é apenas um hardware que pode ser acessado de outros dispositivos ou por exemplo bios carregados na memória podem acessar qualquer região da memória, mas isso não é um processo, apenas 0 e 1 carregado em algum endereço da memória, cpu lê todas as instruções uma após a outra e as executa ...

Depois de carregar o kernel na memória, por exemplo, o kernel pega a memória de 0x000000 to 0x000fff todo o resto é memória livre que pode ser usada para programas. Agora nós temos o programa principal carregado na memória como kernel, mas novamente esta é apenas uma lista de instruções sendo processadas pela CPU. Então, como eu entendo kernel setups todos os serviços necessários, gerentes ... E agora o kernel fornece API para usar memória livre que é (tamanho da RAM - tamanho do kernel na memória - + hanlders de interrupção diferentes e outras coisas) .Existe outra característica de CPU é modo de privilégio, isso é apenas um sinalizador em CPU registradores é usado para controlar o acesso a dispositivos, se o privilégio atual não for suficiente para acessar interrupções de disparadores de cpu do dispositivo ou o que for. Estou certo ?

Quem controla esses sinalizadores? Por exemplo, se o código do espaço do usuário entra no modo kernel do que este sinalizador é configurado para alto privilégio porque o programa do usuário não pode obter acesso a toda a memória e fazer coisas ruins?

Outro conceito é system call . As chamadas do sistema são usadas para exigir recursos baixos disponíveis apenas no modo de privilégio.

O que é realmente chamada de sistema, todo mundo sabe glibc , mas isso é apenas um invólucro para usar, como sabemos o endereço da memória para exigir a chamada do sistema. Quero dizer, por exemplo, o processo quer fazer uma chamada ao sistema, como a glibc sabe onde colocar IP (instruction pointer) ou como isso é feito para fazer a chamada do sistema.

Uma das coisas mais difíceis de entender para mim é o kernel e o espaço do usuário trabalhando juntos. Existem muitas figuras e diagramas onde o espaço do kernel e o espaço do usuário são como dois caras trabalhando separadamente e User space guy pede Kernel guy para ajudar quando ele precisar.

MAS PARE, o que está acontecendo ?? Considere single CPU system TEMOS APENAS UMA INSTRUÇÃO EXECUTADA UMA VEZ. Nenhuma tarefa paralela, temos apenas uma CPU.
Como isso funciona em termos de kernel e espaço do usuário? E coisas como o modo de usuário para os switches do modo kernel explodem minha mente, no caso de termos apenas CPU

Por favor me ajudem a entender essas coisas, eu destaquei minhas perguntas, tentei encontrar respostas, mas ainda não obtive sucesso. Talvez eu tenha perdido alguns artigos da grelha, então eu ficaria muito grato por qualquer ajuda, obrigado.

    
por solderingiron 10.06.2016 / 08:05

1 resposta

1

Esqueça o modo real, que é apenas um detalhe da arquitetura x86 e está lá apenas para compatibilidade com os processadores da década de 1980.

O processador realmente tem um sinalizador que indica o nível de privilégio atual. Os detalhes dessa bandeira variam entre os tipos de processadores, mas para manter as coisas simples, pense nela como duas configurações: usuário e kernel.

Existem instruções do processador que alteram o nível de privilégio. O mais importante para a segurança é que indo para um nível de privilégio mais alto também salta para um endereço predefinido . O endereço pode estar em um registrador que somente o código do kernel pode modificar, ou na memória que o kernel configura (via MMU) como inacessível no modo de usuário. O código neste endereço é cuidadoso para verificar as solicitações feitas pelo código do usuário, ele não aceitará solicitações arbitrárias do código do usuário.

Normalmente existem várias maneiras de se obter um privilégio mais alto, pelo menos três tipos: chamadas de sistema (quando o código do usuário muda explicitamente para o modo kernel), interrupções (quando um periférico sinaliza ao processador que ele deveria fazer alguma coisa) e interceptações (quando o processador tenta executar inválido cide, por exemplo, acesso a memória não mapeada ou uma instrução desconhecida).

Em uma chamada de sistema, o código do usuário não especifica onde pular, apenas emite a instrução de chamada do sistema e o processador determina onde pular. Para determinar qual chamada de sistema é invocada, o código do kernel examina o conteúdo dos registradores: normalmente há um registro que contém um número de chamada do sistema, e o distribuidor de chamadas do sistema no kernel procura esse número em uma tabela.

Veja também Espaço do usuário para a transição do espaço do kernel e Como o kernel impedir que um programa malicioso leia toda a RAM física?

    
por 11.06.2016 / 14:24