Onde o carregador de inicialização está armazenado - na ROM, RAM ou em outro lugar?


30

De acordo com a entrada da Wikipedia, um gerenciador de inicialização é um pequeno programa armazenado na ROM (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, li em um livro que diz que normalmente existe uma área chamada MBR (Master Boot Record) no disco rígido, que inclui um gerenciador de inicialização ...

Então, onde exatamente esse carregador de inicialização está localizado? Sistemas operacionais diferentes armazenam seu gerenciador de inicialização em locais diferentes?

Respostas:


43

ROM é um chip separado da RAM. Ele não requer energia para reter seu conteúdo e, originalmente, não podia ser modificado por nenhum meio, mas vinha da fábrica. Mais tarde, o PROM ou a memória programável somente leitura substituiu a ROM verdadeira. Esses chips vieram em branco da fábrica e poderiam ser gravados uma vez usando um procedimento especial que basicamente queimava bits do chip, causando a alteração de seu estado. Este foi então substituído por EPROM, ou Memória Programável Apagável. Esses chips tinham uma pequena janela neles e, se você colocasse luz ultravioleta neles, poderia ser apagado, permitindo que fossem programados novamente. Estes foram substituídos por EEPROM, ou memória programável apagável eletricamente. Esses chips possuem um procedimento especial de software para apagá-los para que possam ser reprogramados.

A placa-mãe possui algum tipo de chip ROM que contém o firmware, que na linguagem do PC geralmente é chamado de BIOS, ou Sistema Básico de Saída e Entrada, embora esteja sendo substituído atualmente pelo firmware EFI. Este é o software que a CPU inicia pela primeira vez na inicialização. Todo o firmware executa a inicialização do hardware, geralmente fornece alguma saída de diagnóstico e fornece uma maneira de o usuário configurar o hardware, depois localiza e carrega o carregador de inicialização, que por sua vez localiza e carrega o sistema operacional.

Com o BIOS do PC, ele simplesmente carrega e executa o primeiro setor do disco que 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 deixa espaço para o carregador de inicialização. 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 desse arquivo é colocada nos setores após o MBR, mas antes da primeira partição, e é isso que o MBR carrega, pois encontrar a localização de /boot/grub/core.imgé muito difícil de fazer corretamente no espaço muito limitado disponível no MBR .

A imagem principal do grub contém o código grub básico, além de todos os módulos necessários para acessar /boot/grubpara que ele possa carregar módulos adicionais lá, e o arquivo de configuração do grub que descreve quais sistemas operacionais podem ser inicializados e onde podem ser encontrados.

O firmware EFI usado nos Macs Intel e disponibilizado como substituto do BIOS nas placas-mãe mais recentes dos PCs requer uma partição dedicada que contém arquivos do carregador de inicialização, e o firmware é inteligente o suficiente para encontrar esses arquivos e carregar um em vez de apenas carregar e executar o que quer que seja está no primeiro setor do disco.


Aqui está um parágrafo extraído de Computer Science, Glenn Brookshear , uma visão geral,A small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) segundo ele. A memória principal é composta de duas partes, RAM e ROM. Eu só quero saber se o chamado bootloader é instalado por parte ROM da memória principal ... @Sergey
xczzhh

@xczzhh - sim O BIOS é armazenado na ROM, que detecta o Bootloader presente nas Partições. Ao instalar qualquer sistema operacional, ele cria um tipo de sinalizador de entrada no BIOS para detectar o respectivo BOOTLOADER.
atenz 8/08/12

1
@xczzhh, não, o carregador de inicialização está no disco rígido ou em outro disco. É instalado junto com o sistema operacional. A menos que você baixe e instale uma atualização do fabricante da placa-mãe, a ROM nunca muda.
Psp

EFI utiliza aplicações EFI instead.It cargas a aplicação EFI na NVRAM
Suici Doga

@SuiciDoga, não, aplicativos EFI (basicamente limitados a alguns utilitários de atualização de firmware e gerenciadores de inicialização) são armazenados na partição do sistema EFI do disco rígido. A NVRAM é onde a EFI armazena algumas variáveis ​​de configuração, como ordem de inicialização.
Psusi

23

A ROM não está na memória principal:

A ROM não faz parte da memória principal. É um chip separado, que na maioria das vezes é incorporado em um IC maior. Mais exemplo, seu PC pode consistir em várias ROM. Esses são construídos na sua placa mãe.

Geralmente:

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

Você mencionou isso, Você leu um artigo em que o autor disse: "ROM faz parte da memória principal". Isso é confuso, porque normalmente a Memória principal se refere à memória de tipos voláteis, como RAM. Mas sim, se você usar o termo Memória principal para todo o espaço de memória de um PC, a ROM fará parte desse espaço de memória. Você deve observar que, geralmente a memória principal exclui a memória de tipos como ROM .

Onde o Bootloader está armazenado:

O sistema moderno usa o carregamento de inicialização em 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. Esse pequeno programa, por sua vez, carrega um programa de algum lugar do disco, chamado de carregador de inicialização. E, finalmente, o carregador de inicialização carrega o sistema operacional.

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

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

  2. O programa no setor de inicialização é carregado na memória (1º estágio). Este pequeno programa contém informações sobre quais programas devem ser carregados na memória a seguir e onde esse programa está localizado no disco ou dispositivo de inicialização. Carrega esse programa. No Ubuntu, é /boot/grub/core.img.

  3. No segundo estágio, o OS-Loader, GRUB, carrega o Ubuntu carregando o kernel e o disco ram inicial na memória e o controle de entrega no kernel. Em seguida, o kernel executa e carrega todos os programas necessários, como gerenciador de exibição, Gui, etc.

Portanto, podemos dizer claramente que o gerenciador de inicialização não é armazenado na ROM nem na RAM. Na verdade, ele é armazenado no disco rígido (ou outro dispositivo de inicialização, como CD-ROM inicializável, unidades USB etc.), precisamente falando no primeiro setor do disco rígido, com tamanho de 512 bytes e geralmente chamado de setor de inicialização . E esse carregador de inicialização carrega o carregador do SO (no Ubuntu, é o grub), que também reside no disco rígido (ou seja, na /boot/grub/pasta), e sua tarefa é carregar o SO (por exemplo, o 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 poderá inicializar nada. Provavelmente, o BIOS dirá " Nenhum dispositivo de inicialização encontrado " ou " Nenhum sistema operacional encontrado " ou algo semelhante.

Espero que esta resposta ajude.


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

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
A ROM não é mais rápida que a RAM há cerca de uma década. De fato, uma das primeiras coisas que um BIOS moderno faz é copiar-se para a RAM, porque a RAM é muito mais rápida.
David Schwartz

1
@ DavidSchwartz, Já faz mais de uma década agora. Todo BIOS de PC que usei em meados dos anos 90 tinha a opção de ocultar a bios na RAM para obter velocidade.
Psp

@ Anwar, o link para a memória principal está inoperante.
The Matt

15

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

Por exemplo, endereços começando de 0xA000: 0x0000 são mapeados para a RAM de vídeo, portanto, a gravação de dados na verdade gravaria dados na memória do adaptador de vídeo exibindo pixels na tela.

Da mesma forma, a ROM do BIOS inicia em 0xF000: 0000, de modo que a CPU, quando ligada, simplesmente inicia a execução das instruções, uma a uma, a partir desse endereço predefinido. A ROM do BIOS contém o programa inicial que inicia executando um "autoteste de inicialização" ou POST. Da Wikipedia:

O software BIOS está embutido no PC e é o primeiro código executado por um PC quando ligado ('firmware de inicialização'). Quando o PC é inicializado, o primeiro trabalho do 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 outro hardware. O BIOS localiza o software do carregador de inicialização mantido em um dispositivo periférico (designado como 'dispositivo de inicialização'), como um disco rígido ou um CD / DVD, e carrega e executa esse software, controlando o PC. 2 Esse processo é conhecido como inicialização ou inicialização, abreviação de 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 então começar a carregar o sistema operacional diretamente (como foi o caso do MS-DOS) ou carregar o "segundo estágio", que não se limita aos limites de um único setor de disco.

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

Portanto, se, como Uri sugere, você está interessado em saber se o gerenciador de inicialização do Windows e o GRUB podem coexistir juntos, a resposta é: o MBR real pode conter apenas um único gerenciador de inicialização de primeiro estágio (vamos lá, todo o setor tem apenas 512 bytes) , mas o segundo estágio de um carregador de inicialização pode "carregar em cadeia" sistemas operacionais de diferentes partições. O gerenciador de inicialização do Windows é capaz de reconhecer e carregar o Windows apenas, 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, o que permite inicializar o Windows ou outro sistema operacional. O último processo é chamado de carregamento em cadeia.

Ao instalar o Ubuntu em um computador com 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.


Suponho que ele queira saber se o gerenciador de inicialização do Windows e o GRUB podem coexistir juntos ou não. Os discos UEFI, GPT não usam MBR, como isso os afeta ?.
precisa saber é o seguinte

A ROM do BIOS está localizada no segmento F000:, que fica logo abaixo de 1 MB. O 640k é dos segmentos abaixo de A000 :, disponíveis para o sistema operacional e os programas em modo real.
psusi 8/08/12

@psusi: Você está certo, eu re-expressou essa parte
Sergey

Obrigado pela resposta. Você quer dizer que existem vários gerenciadores de inicialização (um no BIOS e outro no MBR?) Envolvidos na inicialização de um sistema operacional? É novo para mim ... :)
xczzhh 8/08/12

@xczzhh Bem, ok, o código no BIOS não é chamado de "carregador de inicialização", aquele armazenado no disco. Atualizei minha resposta para deixar isso claro.
Sergey

4

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

Portanto, o estado inicial é ter um computador, que é um dispositivo programável, mas não sabe como carregar o software para executar porque não tem nenhum software carregado. (E, portanto, inicialize a partir de suas próprias instruções ).

Historicamente, havia algumas soluções diferentes para esse problema, mas hoje em dia começamos com algum código na ROM (provavelmente estritamente EEPROM), o que é suficiente para fazer com que ele olhe para diferentes dispositivos e tente-os até encontrar um que seja inicializável.

(É por isso que muitos sistemas inicializam um CD ou DVD se você colocar um disco de instalação do SO no e a partir do disco rígido, caso contrário, o BIOS [o código na ROM, incluindo o código do qual estamos falando e outros coisas de nível básico que iniciam as coisas] deve definir primeiro a unidade de CD / DVD e, em seguida, o disco rígido, se não encontrar nada; os tweakers costumam configurá-lo para ignorar a unidade de CD / DVD, a menos que seja solicitado manualmente. não perde tempo girando um disco não inicializável que foi deixado na unidade).

Este código na ROM às vezes é chamado de gerenciador de inicialização .

Quando souber em qual unidade olhar, ele analisará o MBR, que contém informações sobre as principais partições - como você pode ver mais tarde / ou / boot ou C: / (em um sistema Windows) se nem sequer sabe qual parte do disco era qual partição, não importa como cada partição foi montada? - e algum código com mais instruções para executar. (Aliás, 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 carregador 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 nem existem).

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

Esse código será muito pequeno, pois há apenas cerca de 400 bytes para caber, então, para fazer algo real, ele carregará mais código, que pode ser maior, pois não precisa lidar com essa restrição.

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

Esse código talvez possa ser a etapa final do processo. Seria se você tivesse apenas um sistema operacional ou se todos os sistemas operacionais em seu sistema usassem gerenciadores de inicialização compatíveis (por exemplo, duas instalações Linux que usem GRUB, portanto, o que foi atualizado pela última vez no GRUB pode oferecer inicialização em um deles) apresenta menus (se desejado) carrega em um kernel e passa o controle sobre o sistema operacional.

No caso de você ter um sistema operacional incompatível com esse carregador de inicialização, ele pode ser carregado em cadeia. Por exemplo, se você possui Windows e Linux na mesma máquina, a opção GRUB para carregar o Windows de fato carrega outro gerenciador de inicialização que apenas conhece as instalações do Windows e passa para ele. Embora esse tenha sido um estágio terciário no processo, ele ainda é chamado de carregador de inicialização secundário , porque não sabe nem se importa que havia outro carregador de inicialização secundário em execução antes dele. Esse também seria o caso de uma instalação do Linux que usasse um tipo diferente de carregador de inicialização secundário.

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

Portanto, em resumo, você estava incorreto quando disse que a ROM fazia parte da memória principal * porque é separada. (De fato, a RAM é considerada como antônimo da ROM) Você estava certo ao dizer que havia um gerenciador de inicialização lá e no MBR, porque são duas etapas do processo e às vezes são chamadas por esse nome. E a resposta para "OS diferentes armazenam seu gerenciador de inicialização em lugares diferentes?" é "principalmente", porque se você carregadores de inicialização secundários incompatíveis ocultam outros carregadores de inicialização (se você instalar o Windows após a instalação do Linux) ou carregam em cadeia para o outro se solicitado (se você corrigir essa situação ou instalar o Linux após o Windows), mas um SO pode compartilhar um carregador de inicialização secundário, se eles forem compatíveis (se você instalar o Linux após outro Linux que use o mesmo tipo de carregador de inicialização secundário e ele puder ver o outro Linux [às vezes o RAID de software confunde as coisas e torna necessário o carregamento em cadeia).

* Nos dias em que se usava programaticamente tanto a ROM quanto a RAM, isso era diferente. Em um ZX Spectrum, por exemplo, a ROM seria 16kiB e incluiria um intérprete BASIC, além de fornecer o ponto de partida para carregar algo no seu 48kiB ou 128KiB (paginado) ou RAM (nesse caso, é essencialmente inicializado no aquele intérprete BASIC e, em seguida, usando-o para inicializar o que estava na fita), havia várias funções do intérprete BASIC que os programas na RAM podiam usar (por que escrever uma função trigonométrica quando o computador já possui uma em uma posição conhecida especialmente quando você tem apenas 48kB para executar todo o seu próprio código). Essa ROM também era visível da mesma maneira que a RAM, apenas em endereços diferentes. Nesse caso, a ROM fazia parte da memória principal como a RAM, mas não era gravável.


0

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

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Este é um "carregador de inicialização" super simples que executa uma única hltinstrução. Mais informações em: https://stackoverflow.com/a/32483545/895245

Você pode executá-lo em hardware real com:

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

e conectar o USB no seu computador e inicializá-lo.

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

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


0

Antigamente, o programa de inicialização residia em fita de papel perfurada semelhante à usada por máquinas de telégrafo ou mídia de cartão perfurada ('não as vejo mais por aí). 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 digitar o código IPL binário diretamente no processador por meio de um console no painel frontal. uau!

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


-1

O carregador de inicialização geralmente está no primeiro setor do disco rígido, geralmente chamado de registro mestre de inicialização.

Felicidades

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.