Como o sistema operacional pode ser executado no mesmo chip que deveria estar gerenciando?

17

Pelas minhas leituras sobre sistemas operacionais (lendo o material básico na Wikipedia, sites de tecnologia etc.), aprendi que o sistema operacional é um programa que permite que programas e aplicativos interajam com o hardware de maneira eficiente e segura.

No entanto, estou confuso sobre como o sistema operacional supervisiona a operação do computador quando ele próprio precisa ser operado.

O que eu quero dizer? Bem, a maneira como eu imaginaria um sistema operacional para trabalhar, é que em um computador, haveria duas CPUs. Um que executa o sistema operacional o tempo todo e outro que o sistema operacional usa para executar o computador. No entanto, verifica-se que o sistema operacional está sendo executado na mesma CPU que os outros processos. É como um gerente que precisa trabalhar na mesma linha de produção de seus funcionários e só pode usar as ferramentas elétricas quando outro funcionário termina com eles. Ele não seria um gerente muito eficaz, pois não teria a capacidade de emitir pedidos se o funcionário fosse um pouco indisciplinado.

Então, como é possível que o sistema operacional execute apenas parte do tempo na mesma CPU que precisa ser compartilhada entre todos os outros processos? Como isso acaba dando certo?

CodyBugstein
fonte
1
Um gerente não deve usar as ferramentas elétricas de seus funcionários! Em vez disso, ele precisa garantir que os funcionários tenham ferramentas elétricas em funcionamento.
precisa saber é o seguinte

Respostas:

15

As CPUs modernas estão cientes do sistema operacional até um certo grau. Eles fornecem algumas "ferramentas de poder" para o primeiro que os reivindicar. Normalmente, esse é o carregador de inicialização, que passa o controle para o sistema operacional. Geralmente se fala de "modo kernel" vs "modo usuário" ou "anel 0" vs "anel 3" para distinguir entre um processo com privilégios extras e o restante.

Essas "ferramentas de poder" são certos privilégios para o gerenciamento de recursos: controle a memória, acesso ao hardware e por quanto tempo o código no nível do usuário pode ser executado sem interrupção.

A CPU executa o sistema operacional com seus privilégios especiais quando ocorre um dos seguintes eventos:

  1. Um processo no modo usuário entrega explicitamente o controle ao processo no modo kernel. Isso é chamado de syscall .
  2. O processo no modo kernel pode usar seus privilégios especiais para se registrar em determinados eventos (por exemplo, o hardware externo envia um sinal especial para a CPU ou um processo no espaço do usuário tenta acessar um recurso reservado). Quando isso ocorre, a CPU interrompe o processo no modo usuário imediatamente e entrega ao controle o processo no modo kernel. Geralmente se fala de uma interrupção .

Portanto, o sistema operacional pode ser executado no mesmo chip porque o chip foi criado para isso. Pode reservar privilégios especiais para si. A CPU pode interromper todos os outros trechos de código sem esses privilégios especiais a qualquer momento e entregar o controle ao sistema operacional.

Alguns chips com suporte muito limitado (por exemplo, um microcontrolador ) não têm esse suporte para código privilegiado especial. Esses chips geralmente são executados sem um sistema operacional. Há apenas um grande programa em execução, que pode acessar o hardware diretamente, deve responder às interrupções do hardware e pode acessar qualquer recurso a qualquer momento. Se esse programa cometer um erro, geralmente tudo trava.

stefan.schwetschke
fonte
17

Em sua forma mais primitiva, os sistemas operacionais dependem de processos que sejam bem comportados e devolvam o controle ao sistema operacional de tempos em tempos. Se um processo não for bem-comportado, pode acontecer que o sistema operacional congele.

A maioria das CPUs, no entanto, tem interrupções : uma interrupção interrompe o processo atual (preempção) e o controle das mãos de volta ao sistema operacional. Você pode agendar interrupções para ocorrer em intervalos específicos ou ser acionado externamente (por exemplo, pressionando o botão de reset).

Basicamente, a CPU alterna entre a execução do SO e os processos em uma velocidade incrivelmente rápida. Além disso, as CPUs têm "modo de usuário" e "modo de kernel". Os processos são executados no modo de usuário e o sistema operacional é executado no modo de kernel. A execução no modo de usuário impede que um processo execute comandos restritos (como E / S). Se um processo deseja gravar no disco, ele precisa solicitar ao SO. O sistema operacional muda para o modo kernel e grava em nome do processo (depois de garantir que o processo tenha as permissões necessárias).

Tom van der Zanden
fonte
7
@ Imray Na verdade, para a CPU, o sistema operacional é apenas mais um pouco de código. No entanto, a CPU possui muitos recursos projetados para serem usados ​​pelos criadores de um sistema operacional.
Tom van der Zanden
3
Não sei se "ciente de" é a terminologia correta, mas a CPU não tem outro motivo para existir além de executar um sistema operacional. Definitivamente, não é completamente independente. De fato, a CPU é totalmente dependente do sistema operacional para gerenciar seus vários modos e dizer o que fazer.
Mohair
2
@ Mohair Existem muitos microcontroladores que funcionam sem um sistema operacional, eles contam como CPUs?
Tom van der Zanden
2
"aqueles contam como CPUs?" Claro que sim. O mesmo aconteceu com o 6502 no meu primeiro computador, embora não tivesse anéis distintos de usuário e kernel, e você pode, pokena linha de comando, trabalhar todos os tipos de travessuras.
dmckee
2
@TomvanderZanden como exatamente faz the CPU switches back and forth between running the OS and running processes? O que aciona o interruptor?
Jnovacho
1

Você não precisa de dois processadores diferentes para o microprocessador executar o espaço do usuário e o código de espaço do kernel. Basicamente, funciona dessa maneira quando você liga o computador ao Bios carrega o Bootloader (código de 512kb no disco que termina com a assinatura do gerenciador de inicialização) para ram e através desse gerenciador de inicialização seu kernel é carregado para ram e roda para sempre até você desligar o computador. E o seu kernel gerencia a memória e não permite que o código do kernel que fica no RAM não seja substituído pelo código de espaço do usuário. Para esse propósito, existem chamadas de sistema cujo código de espaço de usuário é chamado usando essas chamadas de sistema e adiciona seu código de espaço de usuário ao ram e começa a executá-lo. Nos sistemas operacionais, esse conceito é pesquisado como um gerenciamento de memória. Aqui está o link que você pode ler, é muito bom para começar https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

Yasin Fatullayev
fonte
0

Para desenvolver outras respostas, é mais fácil entender se você acha que o próprio kernel não é um processo, mas um código de gerenciamento. Qualquer processo do usuário pode mudar do modo de usuário para o modo de kernel e executar o código do kernel (instruções privilegiadas) usando alguma parte do espaço do kernel. Em seguida, o processo pode voltar ao modo de usuário e executar no espaço do usuário novamente.

user35809
fonte