A partir do Linux 2.6:
Kernel
Depois de carregado na RAM, o kernel executa as seguintes funções.
setup()
:
- Construa uma tabela na RAM descrevendo o layout da memória física.
- Definir o atraso e a taxa de repetição do teclado.
- Inicialize a placa adaptadora de vídeo.
- Inicialize o controlador de disco com os parâmetros do disco rígido.
- Verifique o barramento do 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 memória RAM, mova-a para alta.
- Defina o pino A20 (um hack de compatibilidade para microprocessadores 8088 antigos).
- Configure uma Tabela de Descritores de Interrupções provisória (IDT) e uma Tabela de Descritores Global (GDT) provisória.
- Redefinir a unidade de ponto flutuante (FPU).
- Reprograme os controladores de interrupção programável (PIC).
- Mude do modo real para o modo protegido.
startup_32()
:
- Inicialize os registros de segmentação e uma pilha provisória.
- Limpar todos os bits no registro
eflags
. - Preencha a área de dados não inicializados com zeros.
- Invoca
decompress_kernel()
para descompactar a imagem do kernel.
startup_32()
(mesmo nome, outra função):
- Inicialize os registros finais de segmentação.
- Preencha o segmento
bss
com zeros. - Inicialize as tabelas de páginas provisórias do kernel.
- Ativar paginação.
- Configuração da pilha do Modo Kernel para o processo 0.
- Novamente, limpe todos os bits no registro
eflags
. - 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.
- Inicializa os registros com os endereços do GDT e do IDT.
start_kernel()
:
Quase todos os componentes do kernel são inicializados por essa função, 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
Init
O Init inicia todo o processo do usuário necessário para colocar o sistema no estado desejado, esta rotina depende muito da distribuição e do nível de execução invocado.
Digite runlevel
no console, isso lhe dá o atual nível de execução do seu sistema.
Dê uma olhada no /etc/rcX.d/
(ou /etc/rc.d/rcX.d/
), substituindo o X pelo seu nível de execução.
Estes são links simbólicos ordenados pela prioridade de execução. S01....
significa que esses scripts são iniciados muito cedo, enquanto S99....
é executado no final do processo de inicialização. Os% sy_links KXX....
fazem o mesmo, mas para a sequência de desligamento.
Geralmente, esses scripts lidam com discos, rede, registro, controle de dispositivos, drivers especiais, ambiente e muitas outras sequências necessárias.