Você está na página 1de 6

Arranque do Sistema

1. Introduo
O arranque/iniciao de um sistema composto por trs passos elementares: Localizao do Kernel. Iniciao do Kernel. Iniciao de processos/servios.

2. Localizao do Kernel
Primeiro, necessrio localizar o kernel do sistema operativo a ser arrancado. A forma exata como isto acontece depende da plataforma de hardware em questo. Tipicamente, temos uma memria ROM que contm um programa responsvel pela alguma iniciao bsica do hardware e por encontrar e executar um programa denominado bootstrap. No caso de um PC, a BIOS permite definir em que drive deve procurar o bootstrap. Assim, esta ir criar um ambiente bsico que permita executar o bootstrap, localizado no primeiro sector da drive escolhida. Um exemplo de um programa bootstrap, utilizado em Linux, o LILO.

2.1. LILO - Linux Loader


O LILO um programa bootstrap, baseado em chamadas da BIOS. Este programa pode ser instalado no MBR ou na partio raiz do sistema Linux. De notar que, por ser baseado em chamadas BIOS, todos os ficheiros que o LILO precisa de aceder para executar a sua tarefa devem ser acessveis pela BIOS. O ficheiro de configurao do LILO o /etc/lilo.conf. Adicionalmente, sempre que efetuada uma modificao na configurao do LILO, ou instalado um novo kernel, necessrio reinstalar o programa, executando: /sbin/lilo.

2.2. GRUB Grand Unified Bootloader


O GRUB alternativa ao LILO uma vez que consegue enderear o boot acima do cilindro 1024, ao contrrio do LILO. O ficheiro de configurao do GRUB o

/etc/grub.conf.
O problema do cilindro 1024, est relacionado com o facto da BIOS nas arquiteturas X86 usarem um esquema de 3 nmeros para enderear os sectores do disco. Cada sector identificado pelo tripleto: nmero do cilindro: nmero da cabea: numero do sector. Coletivamente conhecido por endereo CHS(C Cylinder; H Head; S Sector). O problema surge porque o numero de bits para representar o numero do cilindro de 10 bits, ora 210 s permite enderear 1024 cilindros.

2.3. Iniciao do Kernel


Ao executar, o programa bootstrap dever (utilizando chamadas BIOS) carregar o Kernel do sistema operativo para a memria. Uma vez carregado em memria, o kernel ir efetuar os seguintes passos: Iniciar as estruturas de dados internas. Verificar o hardware do sistema. O kernel apenas procura por hardware sobre o qual tem conhecimento. Verificar a integridade do sistema de ficheiros raiz e mapear este sistema. Criar o processo 0 (swapper) e o processo 1 (init).

2.4. Iniciao de processos/servios


Nesta altura, o kernel foi carregado, as suas estruturas de dados iniciadas, o hardware foi encontrado e o sistema de ficheiros est pronto a ser utilizado. O processo responsvel pela gesto da memria foi iniciado. Tudo isto preparado para prestar suporte aos processos a serem executados no sistema operativo, no entanto existe uma questo. Acontece, que, em Linux/Unix, a nica forma para criar processos que um processo existente execute um fork. Um fork cria um novo processo que contm uma cpia de todas as estruturas e cdigo do processo original. Em muitos casos, o novo processo ir efetuar um executvel, que substitui o cdigo e estruturas originais pelas de um novo programa. Por esta razo, criado o processo init. Este processo o processo ancestral de todos os processos num sistema Linux. Ele tem sempre o PID (process ID) 1, iniciado pelo kernel e o nico processo que no tem um processo como pai. Desta forma, o init, responsvel pela iniciao de todos os outros servios do sistema. Os servios que inicia encontram-se configurados no ficheiro /etc/inittab. O init tambm responsvel por colocar o sistema num runlevel. Um runlevel uma configurao do software do sistema que permite que apenas um conjunto de servios esteja ativo. Os runlevels oferecem a flexibilidade de colocar uma mquina a funcionar em diferentes modos de operao. Por exemplo, uma mquina pode estar configurada como servidor de mail num runlevel e noutro ser configurada como uma estao de trabalho. Este mecanismo de iniciao, denominado System V, utilizado num grande nmero de distribuies Linux. Existem no entanto algumas distribuies que funcionam de forma diferente. De uma forma geral, os vrios runlevels existentes so num sistema Linux so:

R unlevel
0 1 Paragem do sistema

Descrio Modo single user. Todos os sistemas encontram-se disponveis, mas apenas um pequeno conjunto de servios se encontram ativos. Apenas o root pode entrar no sistema. Modo multiutilizador, sem partilha remota de ficheiros

3 4 5 6 S, s

Modo multiutilizador, com partilha remota de ficheiros, processos e servios No definido Modo semelhante ao 3, mas com X11 iniciado. Desligar/ reiniciar o sistema O mesmo que o single user (runlevel 1)

Em qualquer altura, um destes runlevels tem de se encontrar ativo. Quando o sistema arranca, o init examina o ficheiro /etc/inittab para encontrar uma entrada initdefault. Esta entrada determina o runlevel inicial do sistema. Para mudar de runlevels, o root pode utilizar o programa telinit que aceita como argumento o runlevel para o qual se pretende mudar ou para indicar ao init que deve reexaminar o ficheiro /etc/inittab. Os runlevels encontram-se definidos sob a pasta /etc/rc.d. Nesta pasta encontra-se vrias subpastas (rc0.d, rc1.d, rc2.d, ...) que definem o estado dos servios para cada runlevel. Na realidade o contedo destas sub-pastas no so mais do que links simblicos para scripts, responsveis por iniciar e parar os servios do sistema, que se encontram sob a pasta /etc/rc.d/init.d. O nome dos links simblicos das sub-pastas (rc0.d, rc1.d, rc2.d,...) tem a seguinte forma: XxxNomeServio, onde X o caracter K ou S conforme se deseje terminar ou iniciar o servio e xx um nmero inteiro utilizado para indicar a ordem pela qual os servios devem ser terminados ou iniciados. O ficheiro /etc/rc (que um script), o responsvel pela mudana de runlevel. Este recebe como argumento o runlevel para o qual deve mudar e executa os scripts indicados na respetiva pasta do runlevel. Antes de iniciar os servios de qualquer runlevel necessrio efetuar algumas inicializaes. Isto feito pelo script rc.sysinit, localizado tambm em /etc/rc.d. Este script razoavelmente longo, e responsvel por tarefas como: criao do sistema de ficheiros proc, criao da partio de swap, atribuio do nome da mquina, inicializaes de teclado, etc. Adicionalmente, existe o script rc.local, que o ltimo script a ser executado e tem a tarefa de executar algum tipo de iniciao adicional, especfica ao sistema em causa. Pode existir, em alguns sistemas, o script rc.serial, para configurao de interfaces srie. O contedo do diretrio /etc/rc.d o seguinte:

A tabela seguinte apresenta parte do contedo do diretrio /etc/rc3.d (runlevel 3):

2.5. /etc/ inittab


Cada entrada (linha) no ficheiro /etc/inittab constituda por quatro campos separados por : (identificador:runlevel(s):aco:processo): Identificador Um ou mais caracteres que servem para identificar a entrada. runlevel(s) Indica o(s) runlevel(s) em que esta entrada deve ser processada. O tipo de ao Indica como que o init deve executar o processo. O processo O path absoluto do processo.

Tipo de aes:

respaw n reinicia o processo quando este termina. sysinit executa o processo durante o arranque do sistema e antes de
qualquer entrada com a ao boot ou bootwait w ait o init espera que este processo termine para passar para a prxima entrada. once processar esta entrada uma vez, quando se entra no runlevel. boot processar esta entrada uma vez durante o boot (ignora os runlevels) boot-w ait uma combinao de boot e wait. off no faz nada. initdefault especifica o runlevel de default da mquina. Pow erw ait executado quando o init recebe o sinal de SIGPWR que normalmente indica uma falha de energia, o init espera que o processo termine. pow erfail idem, mas o init no espera pelo processo. ctrlaltdel executado quando o init recebe o sinal SIGINT (ctrl+alt+del).

De seguida apresenta-se um ficheiro /etc/inittab mnimo, para anlise:

id:5:initdefault - Isto indica que o runlevel por omisso o 5.

si::sysinit:/etc/rc.d/rc.sysinit - Ordena que seja executado o script rc.sysinit. l0:0:wait:/etc/rc.d/rc0 - Indica que o script rc deve ser invocado com o argumento 0, para a lista de runlevels indicada no segundo campo, no caso apenas o runlevel 0. Wait indica que deve esperar que o script termine. O primeiro campo (l0), um campo descritivo que pode ser qualquer coisa. 1:2345:respawn:/sbin/mingetty tty1 - Indica que deve ser criado um terminal no tty1, em qualquer um dos runlevels de 2 a 5. Respawn indica que o processo deve ser iniciado de novo se, por alguma razo, for terminado. o Para abrir terminais, se o sistema estiver no runlevel 5, portanto no X: Shift+Ctrl+Alt+F(1-6) o Para abrir terminais, se o sistema modo consola: Alt+F(1-6) o Para abrir o X e o sistema estiver em modo consola: Alt+F7 x:5:respawn:/etc/X11/prefdm nodaemon - Diz para executar o comando prefdm quando o runlevel 5 inicia. Isto inicia o sistema grfico XWindows.

Bibliografia
Apontamentos do Engenheiro Nuno Silva para a disciplina de Administrao de Sistemas do DEI ISEP.

Você também pode gostar