Como o servidor inicia


Iniciar um servidor é uma sequência longa e complexa de ações, dependendo do componente de hardware, configurações e software utilizado. Muitos, mesmo administradores de sistema experientes e qualificados, têm uma péssima idéia do que exatamente acontece quando o servidor é iniciado, por isso decidimos analisar esse processo em detalhes.

Para não desmontar todos os casos possíveis, consideraremos o carregamento nas seguintes condições:

  • Processador Intel de 64 bits;
  • Modo de inicialização herdado
  • MBR de particionamento de disco;
  • carregador de inicialização GRUB2.

Acorde e cante


A ativação do servidor é iniciada de várias maneiras, entre as quais pressionar o botão Ligar é o mais comum, mas não o único. Outra opção é através de um comando na rede ( Wake-on-LAN ) ou através de comandos de dispositivos externos ( Wake-on-PCIe , Wake-on-Keyboarde , Wake-on-Mouse ). Os comandos são executados apenas se os parâmetros correspondentes estiverem ativados no BIOS Setup Utility , sobre o qual falaremos um pouco mais adiante.

Um dispositivo separado é o módulo BMC, que fornece recursos avançados de gerenciamento de servidor. Leia mais sobre essa tecnologia em nosso blog .

Os métodos anteriores são inteligentes e requerem o envio de um comando especialmente formado nos barramentos de dados. Uma maneira mais simples: ligue quando a energia é fornecida à fonte de alimentação. Nas configurações do BIOS, esse parâmetro é chamado de perda de energia CA e assume um dos três estados:

  • Desligar - o servidor permanecerá desligado.
  • Power On - o servidor liga.
  • Último estado - o servidor ligará apenas se estiver ligado no momento da perda de energia.

O uso desses métodos leva igualmente ao envio ao processador de um sinal de redefinição e ao início do procedimento de inicialização.

Baixe o primeiro programa


A primeira etapa para iniciar o servidor é ligar a fonte de alimentação e definir o sinal de redefinição para o processador. Se houver um sinal de redefinição , o gerador de frequência do processador não funcionará e os registradores do processador serão redefinidos para os valores definidos pelo fabricante do processador.

Ao iniciar na fonte de alimentação, ocorrem transitórios, devido aos quais a tensão de saída pode estar fora dos limites permitidos, o que afetará negativamente o processador em funcionamento. Portanto, o sinal de redefinição não é removido até que a energia recebida esteja completamente estabilizada.

Depois de estabilizar a tensão, a fonte de alimentação define o sinal de potência boa . Este sinal significa que a placa-mãe pode iniciar todos os componentes do servidor. Em seguida, o chipset mapeia para o espaço de endereço todos os dispositivos conectados, incluindo ROM (memória somente leitura) com o código do BIOS ( Basic Input / Output System ). Em seguida, o sinal de redefinição é removido e o gerador de frequência do processador é iniciado.

BIOS - um sistema que fornece uma API para trabalhar com equipamentos e dispositivos conectados. Um dos objetivos importantes do BIOS é inicializar e testar o hardware na inicialização.


Independentemente do número de processadores no sistema, quando o servidor é iniciado, apenas um núcleo de um processador é ativado e os demais núcleos permanecem no modo de suspensão. O núcleo despertado é indicado pelo Bootstrap Processor (BSP, a seguir denominado processador). Depois que o sinal de redefinição desaparece, os registros do processador são preenchidos de forma que o processador opere em um modo especial de 32 bits chamado Modo Inicial do Processador .

Modo inicial do processador - um modo operacional no qual um processador de 64 bits é obtido somente após uma redefinição. Nesse modo, o processador é capaz de executar instruções de 32 bits e o espaço de endereço é de 4 GiB.

Depois que o sinal de redefinição desaparece, o contador de comandos do processador aponta para o endereço 0xFFFFFFF0 , chamado Redefinir vetor . Nesse endereço está o primeiro comando que o processador decodifica e executa.
A colocação da primeira instrução no final do espaço de endereço tem justificativa histórica. Ao desenvolver o processador Intel 8086, no início do espaço de endereço havia um vetor de interrupção, seguido pela RAM, cuja quantidade poderia ser qualquer. Para evitar interseções com a RAM, o endereço do primeiro comando foi obtido no final do espaço de endereço.

Mais tarde, com o advento da Intel 80286, o vetor de interrupção poderia ser movido para qualquer lugar. No entanto, até os processadores modernos são executados no modo de compatibilidade com o 8086 e o ​​vetor de interrupção em 0x0.
Ao acessar o endereço 0xFFFFFFF0, o processador recebe o primeiro comando da ROM. No modo legado, esse comando é um salto em distância ou salto em distância em um segmento de memória com um código BIOS. Depois de concluir o primeiro salto em distância, o processador entra no Modo Real de 16 bits e continua a executar o código do BIOS.

Modo Real - modo de compatibilidade com processadores desatualizados de 16 bits. Nesse modo, apenas comandos de 16 bits estão disponíveis e o espaço de endereço, chamado de "memória mais baixa", contém apenas 1 MiB.

Como observado anteriormente, o código executável do BIOS é armazenado em um dispositivo externo, cuja operação não é muito rápida; portanto, a primeira coisa que o BIOS faz é inicializar a RAM e copiar seu próprio código da ROM para ele. O BIOS mantém a compatibilidade com processadores desatualizados e, portanto, executa todas as ações no modo de 16 bits.

Autoteste de inicialização


O POST (Power On Self-Test) é uma etapa importante no BIOS. O POST é abreviado e completo. O POST completo verifica todos os controladores disponíveis e testa toda a RAM disponível, o que pode levar muito tempo.

O POST abreviado acelera o processo de inicialização e inclui o conjunto mínimo de ações necessárias:

  • verificar a integridade dos programas BIOS na ROM usando o mecanismo de verificação de soma de verificação;
  • detecção e inicialização dos principais controladores, barramentos do sistema e dispositivos conectados;
  • determinar o tamanho da RAM e testar o primeiro segmento (64 kilobytes);
  • transferência de controle para o carregador de inicialização.

Ao passar no POST, o servidor usa várias maneiras de refletir informações sobre a aprovação dos testes. As formas mais comuns:

  • exibindo o identificador de teste, o código POST na tela ou usando indicadores de sete segmentos na placa-mãe;
  • indicação sonora;
  • alarme leve com uma combinação de LEDs.


A maneira mais informativa de obter informações sobre possíveis problemas de funcionamento é exibir o código POST atual. Após a conclusão bem-sucedida dos testes, os códigos se substituem rapidamente, mas, em caso de mau funcionamento, o POST para e você pode ver o identificador do teste que falhou. Os fabricantes de placas-mãe sempre anexam uma decodificação, o que significa um código específico.


Nas placas-mãe modernas, há uma indicação de LED que permite identificar um componente com defeito. Se o servidor iniciar com êxito, você poderá ouvir um bipe indicando que o POST foi bem-sucedido. Pela duração e número de sinais sonoros, também é possível determinar um componente com falha.


Em alguns casos, quando a precisão máxima é necessária para o diagnóstico, você pode recorrer ao uso de um dispositivo externo chamado cartão POST. As placas-mãe enviam informações sobre os testes POST nos barramentos de dados, e um cartão POST processa essas informações e as exibe usando os indicadores disponíveis.

Utilitário de configuração do BIOS


O BIOS possui um menu de configuração especial chamado Utilitário de configuração do BIOS . Você pode inseri-lo pressionando uma tecla especial enquanto passa pelo POST. Na maioria das vezes, as teclas para entrar no BIOS são Del e F2 ; no entanto, ao carregar, sempre é indicado qual tecla abrirá as configurações do BIOS.


O BIOS Setup Utility fornece uma interface para configuração, que requer apenas um teclado para se comunicar. O BIOS Setup Utility fornece informações sobre o hardware instalado e permite alterar os parâmetros operacionais da placa-mãe e do equipamento conectado.

Os possíveis nomes e opções deste ou daquele parâmetro dependem de muitos fatores, entre os quais:

  • Versão do BIOS
  • modelo de placa mãe;
  • modelo do equipamento instalado na placa-mãe.

Entre os parâmetros, estamos interessados ​​em prioridade de inicialização . A prioridade de inicialização define a ordem em que o BIOS pesquisa os dispositivos para localizar a área de inicialização neles. Assim que o BIOS encontra a área de inicialização, o controle é transferido para o carregador de inicialização e a próxima etapa começa.


Carregador de SO


Depois de passar o POST, o BIOS procura a área de inicialização, pesquisando os dispositivos na ordem especificada. No modo herdado , a área de inicialização no disco é chamada MBR ( Master Boot Record ). MBR é uma estrutura especial localizada nos primeiros 512 bytes do disco. Esses 512 bytes contêm os seguintes dados:

  • código do primeiro estágio do gerenciador de inicialização - de 0 a 445 bytes;
  • tabela de partição - de 446 a 509 bytes;
  • O número mágico é 0xAA55 - de 510 a 511 bytes.

Se não houver um número mágico 0xAA55 , considera-se que o registro MBR neste disco não foi encontrado e o BIOS continua a pesquisar o próximo disco.

Quando o BIOS encontra o registro MBR, ele o copia do disco para a RAM no endereço 0x7C00 e salta para esse endereço. Após o salto, o primeiro estágio ( estágio 1 ) do gerenciador de inicialização é iniciado. Devido ao tamanho limitado, o objetivo do primeiro estágio é carregar o código do segundo estágio ( Estágio 2 ) na memória e transferir o controle para ele.

O código do estágio 2 é armazenado imediatamente após a estrutura do MBR e até o início da primeira partição de disco. Historicamente, essa lacuna contém 31 KB de memória e, nos sistemas modernos, atinge 1 MB. No entanto, para manter a compatibilidade, o tamanho do segundo estágio não excede 31 KB.

A segunda etapa prepara o ambiente para o lançamento da terceira etapa:

  • Carrega os drivers do sistema de arquivos necessários
  • localiza o código do terceiro estágio no sistema de arquivos;
  • carrega o código na RAM e transfere o controle para ele.

As tarefas do estágio 3 se resumem à configuração mínima do ambiente e do gerenciador de inicialização:

  • transfira o processador para o modo protegido ;
  • Baixe extensões GRUB2 instaladas
  • encontre o Estágio 4 no sistema de arquivos e controle-o.

Modo protegido - modo de compatibilidade com processadores x86. Nesse modo, o processador é capaz de executar instruções de 32 bits e o espaço de endereço se expande para 4 GiB. Inovações significativas apareceram no modo protegido, por exemplo:


O quarto estágio ( Estágio 4 ) já está em execução no modo de 32 bits, se necessário, é carregado no disco de expansão da GUI, "analisa" o arquivo grub.cfg e exibe o menu de seleção do SO familiar.


Kernel do SO


O GRUB2 segue a especificação de inicialização múltipla para carregar o executável do kernel. O carregador de inicialização verifica o número mágico 0x1BADB002 no início do kernel e verifica a soma de verificação para garantir que o kernel seja compatível com a especificação. Após a verificação bem-sucedida, o kernel pode ser carregado na RAM e transferido para ele.

De acordo com a mesma especificação, o carregador de inicialização fornece ao kernel informações do sistema, como:

  • modo de processador atual;
  • quantidade de RAM detectada;
  • tipo de saída de vídeo (texto ou pixel);
  • resolução de tela.

Apesar do carregador de inicialização usar drivers de sistema de arquivos e, possivelmente, extensões para a interface gráfica, o kernel inicializável não receberá todas essas coisas maravilhosas. Primeiro de tudo, depois de ganhar o controle, o kernel "revela" todo o potencial do servidor e coloca o processador no Modo Longo .

Modo Longo - o modo principal dos processadores de 64 bits. Nesse modo, o processador é capaz de executar instruções de 64 bits e usar registros de uso geral de 64 bits. O espaço de endereço contém 16 EIB. O Modo Longo aboliu a organização de memória segmentada inerente à arquitetura de 32 bits.

Apesar do enorme espaço de endereçamento para endereçar a memória física, apenas 48 bits dos 64 possíveis são usados, o que reduz a quantidade máxima de RAM para 256 TiB, que é 65.536 vezes menor que o espaço de endereçamento. Em um futuro previsível, está planejado expandir o endereçamento físico para 57 bits.

Após alternar para o Modo Longo, o kernel executa o conjunto mínimo de ações necessárias para a operação:

  • Configura a memória de paginação
  • carrega motoristas e inicializa o equipamento utilizado;
  • Configura planejadores de memória e processo
  • localiza e inicia o init.

É importante que, antes de configurar o agendador de processos, o servidor trabalhe em um único núcleo, chamado BSP. A configuração do agendador ativa o restante do kernel chamado Application Processor (AP). Os kernels não têm uma conexão direta entre si, e sua comunicação é feita através de manipuladores de interrupção locais chamados de LAPIC ( Local Advanced Programmable Interrupt Controller ).

O kernel do sistema operacional é iniciado no BSP, que durante a inicialização recebeu informações sobre os processadores disponíveis no sistema usando as tabelas ACPI. O BSP, usando seu próprio LAPIC, envia uma sequência de interrupções “ Init - StartUp - StartUp ” para ativar todos os APs. Após a inicialização, os processadores de aplicativos também precisam ser inicializados e transferidos para o Modo Longo, mas agora esse processo é mais rápido, pois esse trabalho já foi realizado pelo processador principal.

Após a inicialização de todos os pontos de acesso, o agendador de processos inicia um processo de serviço chamado " inação " ou inativo . Como o nome indica, esse processo não faz nada e ocupa o processador quando não há outros processos.

Quando tudo está configurado e pronto para funcionar, o kernel do sistema operacional inicia o primeiro processo no espaço do usuário - Init . Isso, por sua vez, inicia o restante dos processos no espaço do usuário. Após o início do processo de inicialização, o kernel entra no modo de espera e fica inativo até que as tarefas apareçam no espaço do kernel.

Após iniciar todos os processos, o servidor fica disponível na rede e, no console, você pode ver o prompt de Logon na tela.

Conclusão


À primeira vista, uma inicialização simples e rápida do servidor e o carregamento do sistema operacional são de fato um processo complexo e confuso, com muitas nuances. A passagem desse processo é uma pequena evolução que desenvolve o poder de processamento do processador, desde os antigos processadores de 16 bits até os modernos "monstros" de 64 bits.

E o que você acha que, quando os processadores de 128 bits aparecerem, haverá um modo de compatibilidade com os de 16 bits?

Source: https://habr.com/ru/post/pt471756/


All Articles