Operating Systems: Architecture, Concepts and Implementation Help

1.2 Operação do Computador

Ao desligar o computador e ligá-lo, o que acontece? Como ele "chama" o Sistema Operacional.

Para o computador começar a funcionar, ele chama um programa básico, chamado de bootstrap. Normalmente, este programa está alocado na memória apenas de leitura (ROM) ou é salvo na memória de somente leitura apagável programavelmente (EEPROM).

Este programa é conhecido como Firmware, pois está instalado diretamente no hardware, assim, ele inicializa todos os aspectos do sistema, desde os registradores da CPU até os dispositivos e o conteúdo na memória.

Para carregar o SO, ele precisa localizar o Kernel, que é o núcleo do sistema operacional. Assim que o Kernel é carregado na memória do computador, ele chama um processo chamado init, que espera uma interrupção do sistema ou do hardware. Os dois casos são:

  • Se for pelo hardware, ele envia uma interrupção por sinal para a CPU, via normalmente o barramento do sistema;

  • Se for por software, ele pode fazer de duas maneiras: chamando uma system call (chamada do sistema) ou usando um monitor call (monitor de chamada). Essas são operações especiais executadas para disparar uma interrupção, enviando um sinal para a CPU.

Desligar o computador

Chamar o Bootstrap

Inicializar o Firmware

Localizar o Kernel

Chamar o processo init

Espera interrupção

Interrupção por hardware

Interrupção por software

System call ou monitor call

Quando a CPU recebe uma interrupção, ela para o que está fazendo e executa a rotina de tratamento correspondente:

Meme fia para tudo

A CPU então manda a execução para uma localização fixa na memória, onde essa localização contém o endereço inicial da rotina para atender a essa interrupção.

Essas interrupções podem ser tratadas de diferentes maneiras, e cada computador possui seu próprio mecanismo. Um método simples para isso é tratar a transferência chamando uma rotina genérica. Para dar mais enfoque em velocidade pode ser usada uma tabela de ponteiros a pontando para as interrupções, já que elas devem ser predefinidas. Essa tabela é armazenada em memoria baixa, sendo ela a primeira parte ou locação da memoria.

Esse vetor de interrupção vai ser indexado exclusivamente pelo número do dispositivo, fornecido com a requisição da interrupção para gerar o endereço do tratamento da interrupção:

┌───────────────────────────────────────────────┐ │ Interrupção 🔔 └───────────────────────────────────────────────┘ ┌───────────────────────────────────────────┐ │ CPU manda execução para local │ fixo na 💾, com endereço da │ rotina de tratamento. 🏃‍♂️ └───────────────────────────────────────────┘ ┌───────────────────────────────┐ │ Diferentes formas de tratar │ interrupções, cada 🖥️ │ com seu próprio jeito. └───────────────────────────────┘ ┌───────────────────────┐ │ Método simples: │ Transfere para uma │ rotina genérica. 🔁 bootsrap └───────────────────────┘ ┌───────────────────────┐ │ Método rápido: │ 📋 Tabela de │ ponteiros para │ interrupções, em │ memória baixa. 🔽 └───────────────────────┘ ┌───────────────────┐ │ 📋 Vetor usa │ 📟 dispositivo │ para gerar │ endereço do │ tratamento. 🔍 └───────────────────┘

A arquitetura de interrupção precisa salvar o endereço da instrução interrompida, em projetos:

  • Em alguns antigos armazenam o endereço da interrupção de maneira fixa ou local indexado por um numero do dispositivo;

  • Em arquiteturas modernas, eles armazenam em pilhas do sistema;

Se a rotina de interrupção precisar modificar algum estado do processador, por exemplo alterando os valores do registrador:

  • Ela vai salvar o estado atual, explicitamente;

  • Depois carregar e restaurar esse estado para depois retornar;

  • Em seguida será carregado para o contador de programa o endereço do retorno e o processador que foi interrompido continua como se nada tivesse acontecido:

Arquiteturas Antigas

Arquiteturas Antigas Indexadas

Arquiteturas Modernas

Se modificar o estado do processador

Caso contrário

📟 Detecção de Interrupção 📟

Verifica o tipo de arquitetura

Armazena endereço em local fixo

Armazena endereço indexado

Armazena endereço na pilha do sistema

Processamento da Interrupção 🔄

Salvamento do Estado do Processador 💾

Salvar o estado atual 📝

Executar a rotina de interrupção 🔄

Restaurar o estado salvo 📂

Carregar o endereço de retorno 📡 para o contador de programa

Processador continua a execução 🚀

Diagrama

Operação do ComputadorInícioPrograma InicialFirmwareCarregamento do SistemaOperacionalInterrupçõesAção da CPUTratamento de InterrupçãoDesligar e LigarBootstrapInstalado no hardwareInicializa registradores daCPUConfigura dispositivos ememóriaLocaliza o KernelChama o processo"init"FonteInterrupção recebidaPara execução atualDireciona para rotina deinterrupçãoRotina GenéricaTabela de PonteirosAcontece ao reiniciar ocomputadorArmazenado na ROM ouEEPROMChama o SistemaOperacionalHardwareSoftwareArmazenada na memóriabaixaAponta para interrupçõespredefinidasInterrupção via barramentodo sistemaSystem CallMonitor Call
08 abril 2025