domingo, 29 de abril de 2012

OS e FS



... quem vem primeiro? O ovo ou o pinguim?

Realmente, a questão de quando o kernel sabe sobre o sistema de arquivos (FS) é um paradoxo. O SO precisa estar carregado para iniciar o FS (File Sistem). Mas o SO está no FS... e então? Como fica?

Em outro artigo deste blog ( 0-1 ou On/Off) expliquei que, depois de carregado o firmware e o sistema está pronto, "o programa procura pela palavra 0xAA55 (assinatura de boot) no primeiro setor de um periférico do tipo disco (Floppy, HD, CD/DVD etc.) ou cartão de memória (pen drive, cartão SD etc.)". E aí tem que carregar um FS para poder ler a imagem do kernel, as configurações e os módulos.

Existem duas maneiras de inicar o FS. Uma delas é criando um disco inicial na memória (RAM Disk). A outra é usando um "bootloader" ou boot manager na trilha zero do device de boot que contém o marcador 0x55AA (lembre-se que o x86 é little endian). O primeiro método é, geralmente, usado pelo kernel linux enquanto o segundo é utilizado pelo kernel BSD.

Em ambos os casos é necessário criar um FS mínimo com o kernel e os módulos, o suficiente para permitir a continuidade do processo de boot. No caso do boot manager na trilha zero, este segmento não pode passar de 446 bytes, uma vez que está limitado pela tabela da partição e do setor marcado 0x55AA.

Somente depois de carregado o kernel e o sistema inicial de arquivos é que a raíz do sistema de arquivos (root file system) é montada. No kernel FreeBSD, o boot (man 8 boot) é responsável por iniciar o FS e, posteriormente o loader (man 8 loader) toma o controle do processo.

No kernel Linux, tanto o initramfs (initial ram disk file system) como o initrd (initial ram disk) são responsáveis pelo processo de iniciar um sistema de arquivo na memória para o boot inicial do SO (man 8 init). O initramfs é um sistema interno do kernel e o initrd é a raíz do FS que contém os arquivos no /boot e é passado para o kernel via bootloader.

Somente depois disto que o kernel do SO monta o sistema de arquivos real. No FreeBSD é fácil identificar este momento. Quando as mensagens do boot passam de negrito para sem negrito.

Referências.

Mais informação pode ser obtida na própria fonte do kernel, em:

...linux-x.x.x/Documentation/filesystems/ramfs-rootfs-initramfs.txt

Veja, também, o excelente artigo:

Day, R. The Kernel Newbie Corner: "initrd" and "initramfs"--Some Unfinished Business, in https://www.linux.com/learn/linux-career-center/114923-the-kernel-newbie-corner-qinitrdq-and-qinitramfsq-some-unfinished-business

Crédito da imagem: http://www.h-online.com/imgs/43/3/6/8/3/5/2/a345f5e7c547062f.jpg

2 comentários:

  1. Essa parte do boot do Linux eu aprendi na marra quando fiz uma distro do zero, na época também li e executei um projeto chamado LFS (Linux From Scratch), é um projeto bem interessante que mostra passo a passo como construir sua própria distribuição de Linux a partir do zero e comenta cada passo do processo, assim é possível aprender as partes internas do Linux.

    ResponderExcluir
  2. pinguim maldito...a maçã reina esta bagaça

    ResponderExcluir