Os carregadores são componentes cruciais do software do sistema, responsáveis pelo carregamento de programas na memória e preparando -os para execução. Existem vários tipos, categorizados de várias maneiras:
Categorização por método de carregamento: *
Carregadores absolutos: Esses carregadores exigem que o programador especifique o local exato da memória onde o programa deve ser carregado. Eles são simples, mas inflexíveis e não são usados em sistemas modernos. A realocação é feita manualmente pelo programador.
*
carregadores relocáveis: Esses carregadores lidam com a tarefa de atribuir endereços de memória no tempo de carregamento. O código do programa é escrito sem endereços de memória específicos e o carregador atribui endereços com base na memória disponível. Isso é muito mais flexível que o carregamento absoluto. A realocação é tratada automaticamente pelo carregador.
*
carregadores dinâmicos: Esses carregadores adiam o carregamento dos módulos do programa até que sejam realmente necessários durante a execução. Isso melhora a eficiência, carregando apenas as partes necessárias de um programa, em vez de carregar tudo de antemão. Comum em sistemas operacionais que suportam a ligação dinâmica. Isso inclui aspectos como carregamento preguiçoso e compilação just-in-time (JIT).
*
carregadores de bootstrap: Estes são os carregadores iniciais que iniciam o processo de carregamento. Eles são tipicamente pequenos e simples, responsáveis por carregar o kernel do sistema operacional na memória e iniciar sua execução. Geralmente residem na ROM (memória somente leitura).
Categorização por vinculação: *
ligantes (geralmente considerados parte da família mais ampla de "carregadores"): Eles combinam módulos de programa compilados separadamente em um único arquivo executável antes do início do trabalho do carregador. Eles resolvem referências externas entre módulos. O carregador carrega o executável vinculado.
Outras categorizações e considerações: *
Carregadores de sobreposição: Usado para programas maiores que a memória disponível. Eles carregam e descarregam diferentes partes do programa na memória, conforme necessário. Esta é uma técnica mais antiga menos comum agora devido a recursos de memória virtual.
*
carregadores específicos de hardware: Alguns carregadores podem estar profundamente integrados a arquiteturas de hardware específicas, lidando com o gerenciamento especializado de memória ou operações de E/S.
É importante observar que essas categorias nem sempre são mutuamente exclusivas. Por exemplo, um carregador relocável também pode ser um carregador dinâmico. As funcionalidades e recursos específicos de um carregador dependem fortemente do sistema operacional e da arquitetura de hardware.