Quando o sistema operacional é carregado, o kernel continua sendo executado como um programa normal?

4

Há uma questão semelhante à minha aqui: , mas tem respostas conflitantes (então, por favor, não marque esta questão como duplicata).

De volta à minha pergunta. Eu sei que quando o computador está ligado, o BIOS começa a funcionar e o BIOS executa o gerenciador de partida, e o gerenciador de partida executará o kernel.

Agora o kernel começa a rodar como um programa normal (por "programa normal" quero dizer que o kernel não é apenas um grupo de funções que outros programas chamam, mas também é um programa que roda sozinho). Agora o kernel executará tarefas como:

  • Inicializa o hardware, bem como as estruturas de dados do kernel.
  • Mude para o modo protegido.
  • Inicializar tabela de descritores de interrupção.
  • etc. (este artigo lista muito mais tarefas que o kernel faz).

Depois que o kernel concluir essas tarefas, o sistema operacional será carregado e o usuário poderá começar a usá-lo.

A minha pergunta é: agora que o sistema operacional está carregado, o kernel continua rodando como um programa normal, ou ele irá parar de rodar dessa maneira e só funcionará quando uma interrupção acontecer?

    
por Joseph 11.05.2017 / 14:58

2 respostas

3

Qualquer kernel é praticamente o oposto de um "programa normal". Mesmo que os microkernel possam gostar da idéia de serviços OS rodando como processos no mesmo nível que o aplicativo do usuário, o kernel sempre terá que incluir alguma parte que não é. Se nada mais, deve haver alguma parte do sistema operacional que manipula o agendamento e a alternância entre os processos e a comunicação entre eles.

Particularmente, no Linux, o kernel é mapeado para o espaço de endereço de todos os processos, na parte superior do espaço de endereço. De certa forma, é parte de cada processo, em que alguns processos podem estar executando o código do kernel, enquanto ao mesmo tempo algum outro processo pode estar executando o código do espaço do usuário.

Eu não diria que o kernel é executado como um programa normal, mas ele também não roda "apenas" em interrupções, pois o código de espaço do usuário também pode chamar rotinas do kernel: são as chamadas do sistema. Citações em torno de "somente", já que as interrupções não são excepcionais, é comum haver algum tipo de temporizador regular.

    
por 11.05.2017 / 17:42
2

Em um sistema de uniprocessamento, o processador só pode executar um único programa por vez, de modo que o sistema operacional ou outro programa seja executado em um determinado momento.

O sistema operacional não é executado como um programa normal, pois é a entidade encarregada de programar a execução desses programas. Quando um programa é executado, o sistema operacional não faz nada, e será chamado de volta uma vez que uma interrupção, uma chamada de sistema ou um tempo limite seja atendido. Pode, então, decidir trabalhar por si mesmo ou executar outro programa ao qual esteja encarregada.

Eu não entendo por que a resposta que você está falando seja conflitante: alguns processos que o sistema operacional executa podem ser componentes do kernel, com um nível de privilégio mais alto.

    
por 11.05.2017 / 15:44