Onde o bootloader é armazenado - na ROM, RAM ou outro lugar?

28

De acordo com a entrada wikipedia, um bootloader é um pequeno programa armazenado em ROM (uma parte da memória principal (RAM), não é?) que só pode ser lido e não apagado. Estou um pouco confuso aqui. Isso significa que toda RAM que compramos tem um gerenciador de inicialização instalado por padrão? E também, eu li em um livro que diz que há tipicamente uma área chamada MBR (Master Boot Record) no disco rígido que inclui um bootloader ...

Então, onde exatamente este gerenciador de inicialização está localizado? Sistemas Operacionais diferentes armazenam seu gerenciador de inicialização em lugares diferentes?

    
por xczzhh 08.08.2012 / 05:27

7 respostas

38

ROM é um chip separado da RAM. Ele não requer energia para reter seu conteúdo e, originalmente, não pode ser modificado por nenhum meio, mas veio da fábrica. Mais tarde PROM, ou Programmable Read Only Memory substituiu a verdadeira ROM. Esses chips vieram em branco da fábrica e poderiam ser gravados uma vez usando um procedimento especial que essencialmente queimava pedaços do chip, fazendo com que seu estado mudasse. Este foi então substituído por EPROM, ou memória programável apagável. Esses chips tinham uma pequena janela sobre eles e, se você iluminasse a luz ultravioleta, eles poderiam ser apagados, permitindo que fossem programados novamente. Estes foram então substituídos por EEPROM, ou Memória Programável Eletricamente Apagável. Esses chips possuem um procedimento especial de software para apagá-los, para que possam ser reprogramados. A ROM geralmente ainda é usada para se referir a todos esses tipos genericamente.

A placa-mãe tem algum tipo de chip ROM que contém o firmware, que no PC é geralmente chamado de BIOS, ou Basic Input Output System, embora esteja sendo substituído nos dias de hoje pelo firmware EFI. Este é o software que a CPU começa a executar pela primeira vez ao ligar. Todo o firmware executa a inicialização do hardware, normalmente fornece alguma saída de diagnóstico e fornece uma maneira para o usuário configurar o hardware, em seguida, localiza e carrega o carregador de boot, que, por sua vez, localiza e carrega o SO.

Com o BIOS do PC, ele simplesmente carrega e executa o primeiro setor do disco que ele decide inicializar, que normalmente é o primeiro disco rígido detectado. Por convenção, o primeiro setor de um disco rígido, chamado Master Boot Record, contém uma tabela de partições DOS listando os locais das partições no disco e deixando algum espaço para o carregador de boot. O Ubuntu usa o carregador de inicialização GRUB, que coloca código suficiente no MBR para carregar e executar /boot/grub/core.img . Normalmente, uma cópia deste arquivo é colocada nos setores após o MBR, mas antes da primeira partição, e isso é realmente o que o MBR carrega, pois é muito difícil fazer a localização do /boot/grub/core.img no espaço muito limitado disponível no MBR.

A imagem principal do grub contém o código base grub, além de quaisquer módulos necessários para acessar /boot/grub para que possa carregar módulos adicionais, e o arquivo de configuração grub que descreve quais sistemas operacionais podem ser inicializados e onde eles podem ser encontrado.

O firmware EFI usado nos Macs Intel e disponível como um substituto para o BIOS nas placas-mãe mais recentes requer uma partição dedicada que armazena os arquivos do boot loader, e o firmware é inteligente o suficiente para encontrar esses arquivos e carregar um em vez de apenas carregar e executar o que quer que esteja no primeiro setor do disco.

    
por psusi 08.08.2012 / 06:21
20

O Rom não está na memória principal:

ROM não faz parte da memória principal. É um chip separado, que é na maioria das vezes embutido em um IC maior. Mais exemplo, o seu PC pode ser composto por vários ROM. Essas são construídas em sua placa mãe.

Geralmente:

  • A ROM é muito pequena no tamanho da memória. Esta memória é não volátil, no sentido, o programa armazenado na ROM não é apagado com o desligamento.
  • A ROM é usada para armazenar programas permanentes, que são muito essenciais para o seu hardware funcionar corretamente.
  • Um exemplo típico de ROM é o chip da BIOS. Onde o programa de inicialização de nível muito baixo e hardware de inicialização são armazenados

Você mencionou que, Você leu um artigo onde o autor disse: "ROM é uma parte da memória principal". Isso é confuso, porque normalmente Memória principal refere-se à memória de tipos que são voláteis, como RAM. Mas sim, se você usar o termo Main Memory para todo o espaço de memória de um PC, então a ROM é uma parte desse espaço de memória. Você deve notar que, geralmente Main Memory exclui memória de tipos como ROM .

Onde o Bootloader está armazenado:

Sistema moderno usa carregamento de inicialização de dois estágios. Na primeira etapa, um pequeno programa é carregado de um setor (chamado setor de inicialização com mais freqüência) do disco rígido. Este pequeno programa, por sua vez, carrega um programa de algum lugar no disco, que é chamado de boot-loader. E finalmente o boot-loader carrega o sistema operacional

Em termos de sistema Ubuntu, o processo é o seguinte:

  1. Depois de ligar o PC, o BIOS (que é armazenado na ROM) executa e inicializa automaticamente várias partes do hardware do PC. Em seguida, ele verifica um setor específico no primeiro dispositivo de inicialização definido (normalmente, disco rígido). Este setor é o setor de inicialização, que tem 512 bytes de tamanho.

  2. O programa no setor de inicialização é carregado na memória (1º estágio). Este pequeno programa tem informações que os programas devem carregar na memória e onde esse programa está localizado no disco ou dispositivo de inicialização. Ele carrega esse programa. No Ubuntu, é /boot/grub/core.img .

  3. No segundo estágio, o OS-Loader, o GRUB carrega o Ubuntu carregando o kernel e o disco de RAM inicial na memória e o controle de transferência para o kernel. Então o kernel roda e carrega todos os programas necessários, como gerenciador de exibição, Gui, etc.

Então, podemos dizer claramente, Boot-loader nem armazenado na ROM, nem na RAM, na verdade é armazenado no disco rígido (ou outro dispositivo de inicialização, como CDROM inicializável, drives USB etc), falando precisamente o primeiro setor do disco rígido, que é de tamanho 512 bytes e geralmente chamado de setor de inicialização . E este bootloader carrega o OS-loader (no Ubuntu, é o grub) que também reside no disco rígido (por exemplo, na pasta co_de%), e a tarefa é carregar o sistema operacional (digamos, Ubuntu).

Como teste, remova o disco rígido (e todos os outros dispositivos de inicialização) e tente inicializar. Você pode ir até a etapa do BIOS, mas após essa etapa, não é possível inicializar nada. Muito provavelmente o BIOS dirá, " Nenhum dispositivo de inicialização encontrado " ou " Nenhum sistema operacional encontrado " ou algo similar.

Espero que esta resposta ajude.

Para mais informações, você pode querer visitar estes links:

  1. link
  2. link
por Anwar 08.08.2012 / 08:28
15

Um processador compatível com x86 sempre inicia no chamado modo "real", que é um modo de 16 bits com 1 megabyte de memória endereçável disponível. A partir desse espaço de endereçamento, 640 K estão disponíveis para programas e os endereços acima são mapeados para diferentes dispositivos.

Por exemplo, os endereços a partir de 0xA000: 0x0000 são mapeados para a RAM de vídeo, portanto, gravar dados ali realmente gravaria dados na memória da placa de vídeo exibindo pixels na tela.

Da mesma forma, a BIOS da ROM começa a partir de 0xF000: 0000, então a CPU, quando ligada, simplesmente começa a executar instruções um a partir desse endereço pré-definido. A BIOS ROM contém o programa inicial que inicia executando um "teste automático de inicialização" ou POST. Da Wikipedia:

  

O software da BIOS está embutido no PC e é o primeiro código executado por um   PC quando ligado ('boot firmware'). Quando o PC é iniciado, o primeiro   trabalho para o BIOS é o autoteste de inicialização, que inicializa e   identifica dispositivos do sistema, como CPU, RAM, placa de vídeo,   teclado e mouse, unidade de disco rígido, unidade de disco óptico e outros   hardware. O BIOS localiza então o software de boot loader   dispositivo periférico (designado como 'dispositivo de inicialização'), como um disco rígido   ou um CD / DVD, e carrega e executa esse software, dando-lhe o controle   do PC. 2 Este processo é conhecido como inicialização, ou inicialização, que   é curto para bootstrapping.

O firmware do BIOS é responsável por ler o primeiro setor do disco na memória e passar o controle para um pequeno programa que, novamente, está localizado em um endereço específico. O gerenciador de inicialização MBR pode começar a carregar o sistema operacional diretamente (como no caso do MS-DOS) ou carregar "segundo estágio ", que não se limita aos limites de um único setor de disco.

Os bootloaders que usam a abordagem de vários estágios podem ser bastante complexos com texto ou interface gráfica que permite ao usuário selecionar de qual disco ou partição carregar um sistema operacional.

Então, se, como sugere Uri, você estiver interessado em saber se o gerenciador de inicialização do Windows e o GRUB podem coexistir, a resposta é: o MBR real só pode conter um único bootloader de primeiro estágio (vamos lá, todo o setor é apenas 512 bytes), mas o segundo estágio de um gerenciador de inicialização pode ser capaz de "carregar em cadeia" os sistemas operacionais de diferentes partições. O bootloader do Windows só é capaz de reconhecer e carregar o Windows, enquanto o GRUB é capaz de carregar o Linux ou passar o controle para outro gerenciador de inicialização armazenado em um registro de inicialização de volume de uma das partições, que permite inicializar o Windows ou outro sistema operacional. O último processo é chamado de carregamento em cadeia.

Quando você instala o Ubuntu em um computador que possui o Windows, o GRUB será instalado no MBR e você poderá inicializar o Ubuntu e o Windows.

No entanto, se o Windows for instalado após o Ubuntu, o GRUB será substituído pelo gerenciador de inicialização do Windows e você precisará reinstalar o GRUB para poder inicializar o Ubuntu novamente.

    
por Sergey 08.08.2012 / 05:48
4

O conflito entre o que você diz sobre o bootloader estar na ROM e estar no MBR talvez se deva ao bootloader ser usado por qualquer código que funcione como fazer o mínimo para carregar no código para fazer o computador fazer algo útil, incluindo cada estado em uma inicialização de várias etapas.

Assim, o estado inicial é ter um computador, que é um dispositivo programável, mas não sabe como carregar o software a ser executado porque ele não tem nenhum software carregado. (E, portanto, o boot de extrai-se de seus bootstraps ).

Historicamente, havia algumas soluções diferentes para esse problema, mas hoje em dia começamos com algum código na ROM (na maioria das vezes estritamente EEPROM), o que é suficiente para ver diferentes dispositivos e testá-los encontra um que é inicializável.

(É por isso que muitos sistemas arrancarão um CD ou DVD se você colocar um disco do instalador do SO dentro e fora do disco rígido, o BIOS [o código na ROM, incluindo o código do qual estamos falando e algumas outras coisas de baixo nível que começam as coisas] estão definidas para olhar para a unidade de CD / DVD primeiro, em seguida, em um disco rígido, se não encontrar nada, tweakers muitas vezes configurá-lo para ignorar a unidade de CD / DVD, a menos que manualmente solicitado para que não perca tempo criando um disco não inicializável que foi deixado na unidade).

Este código na ROM é às vezes chamado bootloader .

Quando ele sabe qual unidade observar, ele irá olhar para o MBR, que contém informações sobre as principais parções - como você pode olhar posteriormente em / ou / boot ou C: / (em um sistema Windows) se você não tiver sequer sei qual parte do disco era qual partição, não importa como cada partição foi montada? - e algum código com instruções adicionais para executar. (Incidentalmente, isso explica por que alguns sistemas operacionais - como o Windows - só podem ser instalados em uma partição primária, os detalhes dessas partições estão no MBR e essa é a única informação de partição que o gerenciador de inicialização leu e não carrega o EBR para aprenda sobre as partições lógicas, no que diz respeito a essas partições ainda não existirem).

Esse código executável é também chamado bootloader . Quando nos preocupamos em distinguir entre isso e o que vem a seguir, ele é chamado de gerenciador de inicialização primário (a menos que estejamos fazendo nosso próprio BIOS, ignoramos o bit da ROM como fora de nosso controle).

Esse código será muito pequeno, pois há apenas cerca de 400 bytes para ele se encaixar, então, para fazer qualquer coisa real, ele carregará mais alguns códigos, que podem ser maiores, já que não precisa lidar com essa restrição.

Este código é também conhecido como bootloader . Quando nos preocupamos em distinguir entre este e o que veio antes, ele é chamado de gerenciador de inicialização secundário .

Esse código talvez seja o estágio final do processo. Seria se você tivesse apenas um sistema operacional ou se todos os sistemas operacionais em seu sistema usassem carregadores de inicialização compatíveis (por exemplo, duas instalações do Linux que usam o GRUB, portanto, o que o GRUB foi atualizado pode oferecer para inicializar em qualquer um deles) apresenta menus (se desejado) carrega em um kernel e passa o controle sobre o sistema operacional.

No caso em que você tem um sistema operacional que não é compatível com esse gerenciador de inicialização, ele pode ser carregado em cadeia. Por exemplo. se você tiver o Windows e o Linux na mesma máquina, a opção GRUB para carregar o Windows carregará, de fato, outro carregador de inicialização que só sabe sobre a (s) instalação (ões) do Windows e passará para ele. Embora este tenha sido um estágio terciário no processo, ele ainda é chamado de gerenciador de inicialização secundário , porque não sabe nem se importa que haja outro carregador de inicialização secundário em execução antes dele. Este também seria o caso de uma instalação do Linux que usasse um tipo diferente de bootloader secundário.

Principalmente quando falamos sobre o bootloader em termos de Linux, geralmente não queremos dizer o código da ROM (não é parte do Linux ou alterado pela instalação do Linux). Quando fazemos update-grub , estamos alterando o carregador de inicialização secundário, que normalmente está em / boot de uma instalação específica. Quando fazemos install-grub , estamos mudando e também o bootloader primário no MBR, para que ele tenha código suficiente para saber onde / boot (talvez iniciando um RAID de software) e carregue e execute isso quando em si é executado.

Então, em resumo, você estava incorreto quando disse que a ROM era parte da memória principal * porque é separada. (De fato, RAM é tomada como antônimo para ROM ). Você estava correto em dizer que havia um gerenciador de inicialização lá e no MBR, porque são dois passos do processo e ambos são chamados por esse nome. E a resposta para "Fazer um sistema operacional diferente armazena seu gerenciador de inicialização em lugares diferentes?"é" principalmente ", porque se os bootloaders secundários incompatíveis ocultam outros bootloaders (se você instalar o Windows após instalar o Linux) ou chainload no outro se solicitado (se você corrigir essa situação, ou instalar o Linux após o Windows), mas O SO pode compartilhar um gerenciador de inicialização secundário se ele for compatível (se você instalar o Linux depois de outro Linux que usa o mesmo tipo de carregador de inicialização secundário e puder ver o outro Linux [às vezes, o software RAID confunde as coisas e torna necessário o carregamento em cadeia).

* Nos dias em que um programaticamente usaria ROM e RAM, isso era diferente. Em um ZX Spectrum, por exemplo, a ROM seria 16kiB e incluiria um interpretador BASIC, assim como lhe forneceria o ponto de partida para carregar algo em 48kiB ou 128KiB (paged) ou RAM, (nesse caso, é essencialmente inicializar que o interpretador BASIC e então usando isso para inicializar o que estava na fita), havia um monte de funções do interpretador BASIC que os programas na RAM poderiam usar (por que escrever uma função trigonométrica quando o computador já tem uma em uma posição conhecida? especialmente quando você tem apenas 48KB para que todo o seu código seja executado). Essa ROM também era visível da mesma forma que a RAM, apenas em endereços diferentes. Nesse caso, a ROM era tanto uma parte da memória principal quanto a RAM, mas não gravável. Atualmente você praticamente ignora a ROM quando passa da primeira fase de inicialização.

    
por Jon Hanna 08.08.2012 / 14:55
0

Faça um exemplo mínimo de trabalho e execute-o em um emulador para entender esses conceitos:

printf '4%509s52' > main.img
qemu-system-x86_64 -hda main.img

Este é um "bootloader" super simples que faz uma única instrução hlt . Mais informações em: link

Você pode, então, executá-lo em hardware real com:

sudo dd if=main.img of=/dev/sdX

e conectando o USB no seu computador e inicializando a partir dele.

Quando você faz isso, fica claro que o bootloader é algo que vive em um disco de armazenamento permanente, como USBs ou discos rígidos.

O que vive na ROM é o código que inicia o bootloader para nós, chamado firmware (ou menos precisamente BIOS) .

    
0
Nos dias passados, o programa de boot residia em uma fita de papel perfurada semelhante àquelas usadas por máquinas telegráficas ou mídia de cartões perfurados (não vejo mais os dois ao redor). o processo costumava ser chamado de IPL, abreviação de Initial Program Load. Às vezes, se uma fita de papel ou leitor de cartão não estivesse disponível, seria necessário inserir o código IPL binário diretamente no processador por meio de um console no painel frontal. ufa!

Atualmente, o código IPL reside em pROMs que, quando executados, carregam e executam, por sua vez, quaisquer carregadores de inicialização secundários adaptados para carregar (inicializar) o sistema operacional desejado. o carregador secundário pode estar em qualquer mídia em qualquer parte da configuração conhecida ou endereçável pelo código IPL.

    
por Loi 08.12.2017 / 07:02
-1

O gerenciador de partida geralmente está no primeiro setor do disco rígido, geralmente chamado de Master Boot Record.

Felicidades

    
por j0N45 08.08.2012 / 10:11