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?
fonte
Respostas:
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:
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.
fonte
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).
fonte
poke
na linha de comando, trabalhar todos os tipos de travessuras.the CPU switches back and forth between running the OS and running processes
? O que aciona o interruptor?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
fonte
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.
fonte