A partir do Linux 2.6:
Núcleo
Depois de carregado na RAM, o kernel executa as seguintes funções.
setup()
:
- Crie uma tabela na RAM descrevendo o layout da memória física.
- Defina o atraso e a taxa de repetição do teclado.
- Inicialize a placa do adaptador de vídeo.
- Inicialize o controlador de disco com os parâmetros do disco rígido.
- Verifique o barramento IBM Micro Channel.
- Verifique se há dispositivos apontadores PS / 2 (mouse de barramento).
- Verifique o suporte ao Gerenciamento avançado de energia (APM).
- Se suportado, crie uma tabela na RAM descrevendo os discos rígidos disponíveis.
- Se a imagem do kernel foi carregada com pouca RAM, mova-a para alta.
- Defina o pino A20 (um hack de compatibilidade para microprocessadores 8088 antigos).
- Configure uma tabela provisória de descritores de interrupção (IDT) e uma tabela provisória de descritores globais (GDT).
- Redefina a unidade de ponto flutuante (FPU).
- Reprograme os controladores de interrupção programáveis (PIC).
- Alterne do modo real para o protegido.
startup_32()
:
- Inicialize registradores de segmentação e uma pilha provisória.
- Limpe todos os bits no
eflags
registro.
- Preencha a área de dados não inicializados com zeros.
- Invoca
decompress_kernel()
para descomprimir a imagem do kernel.
startup_32()
(mesmo nome, outra função):
- Inicialize os registros finais de segmentação.
- Preencha o
bss
segmento com zeros.
- Inicialize tabelas de páginas provisórias do kernel.
- Ativar paginação.
- Configure a pilha do Modo Kernel para o processo 0.
- Mais uma vez, limpe todos os bits no
eflags
registro.
- Preencha o IDT com manipuladores de interrupção nulos.
- Inicialize o primeiro quadro de página com os parâmetros do sistema.
- Identifique o modelo do processador.
- Inicialize os registros com os endereços do GDT e IDT.
start_kernel()
: Quase todos os componentes do kernel são inicializados por esta função, estes são apenas alguns.
- Agendador
- Zonas de memória
- Alocador de sistema de amigos
- IDT
- SoftIRQs
- Data e hora
- Alocador de placas
- Criar processo 1 (
/sbin/init
)
A "lista" completa está disponível nas fontes em linux / init / main.c
Iniciar
O Init inicia todo o processo do usuário necessário para trazer o sistema ao estado desejado; essa rotina depende muito da distribuição e do nível de execução invocado.
Digite runlevel
no console, isso fornece o nível de execução atual do seu sistema.
Dê uma olhada em /etc/rcX.d/
(ou /etc/rc.d/rcX.d/
), substituindo o X pelo seu nível de execução.
Esses são links simbólicos ordenados por prioridade de execução. S01....
significa que esses scripts são iniciados muito cedo, enquanto são S99....
executados no final do processo de inicialização. Os KXX....
links simbólicos fazem o mesmo, mas para a sequência de desligamento.
Geralmente, esses scripts lidam com discos, redes, registros, controle de dispositivos, drivers especiais, ambiente e muitas outras seqüências necessárias.