Por que é a sequência de inicialização do linux em sh e não em c

5

Eu tenho um dispositivo embutido que executa o linux.

Estou tentando acelerar a sequência de inicialização. Reescrever grandes partes da sequência de inicialização em C acelera muito?

por exemplo, eu tenho muitos scripts que testam isso ou aquilo, então monte isto ou aquilo. Isso é /etc/rcS.d/S03sysfs

#!/bin/sh

if [ -e /proc ] && ! [ -e /proc/mounts ]; then
  mount -t proc proc /proc
fi

if [ -e /sys ] && grep -q sysfs /proc/filesystems; then
  mount sysfs /sys -t sysfs
fi

exit 0

Meu palpite é que, se estivesse em C, seria muito mais rápido, certo?

Minhas perguntas:

Por que ele não está em C?
Haveria um ganho de velocidade para escrever isso em C?

    
por user1190 04.05.2012 / 16:50

3 respostas

9

Seria um pouco mais rápido em C, mas a escolha da linguagem não é o que mais afeta o desempenho. Geralmente, é mais eficaz executar várias tarefas em paralelo, em vez de esperar que cada uma seja concluída sequencialmente, conforme os sistemas de inicialização mais simples. Por exemplo, sshd e link podem ser iniciados ao mesmo tempo, uma vez que nenhum requer que o outro já esteja em execução.

Não existe uma única "sequência de inicialização do Linux". Cada distribuição tem a sua própria; Não há sequer uma única coisa que todos tenham em comum. pode estar em C, Perl, Haskell, qualquer coisa; o único requisito é que um executável chamado /init esteja presente no initramfs ou /sbin/init no sistema de arquivos raiz.

O esquema /etc/rc?.d é simplesmente uma extensão do processo de inicialização do Unix de 20 anos atrás, talvez até 30 anos. Os primeiros sistemas Unix foram reinicializados muito raramente, então eles teriam um script simples, /etc/rc ou similar, que seria lançado por init e iniciaria vários daemons sequencialmente.

Até hoje SysV init está sendo usado para iniciar todos esses scripts, embora o método exato possa variar. Originalmente, um sistema iniciaria todos os scripts em /etc/rc?.d em ordem; atualmente o Debian usa dependências no estilo Makefile.

Algumas distribuições - Ubuntu, Chrome OS, Fedora até a v14 - mudaram para Upstart , que é escrito em C e é "baseado em eventos", permitindo que os daemons sejam iniciados em paralelo. Outro sistema de inicialização, systemd , parece estar crescendo rapidamente em popularidade - ele é usado por padrão em Fedora e OpenSuSE. Ele também é escrito em C. (Ambos os sistemas ainda lêem arquivos de configuração textual para decidir quais daemons devem ser iniciados.)

AsdistribuiçõesquecontinuamcomoSysVinitnormalmentefazemissopor"simplicidade"; os argumentos mais comumente ouvidos parecem ser sobre scripts de shell sendo mais fáceis de manter do que o código C equivalente (embora esses scripts de shell consistam em 90% de copypasta), assim como um medo mortal de introduzir Dependências adicionais da biblioteca [subjectiva] . Você pode ver por si mesmo em este , este , this e this tópicos de discussão na lista de discussão do Debian de maio de 2012.

(Disclaimer: Eu sou um usuário systemd eu mesmo.)

    
por 04.05.2012 / 18:03
5

Why isn't it already in C?

Para compatibilidade entre plataformas e porque permite usar arquivos sh para descrever o processo de inicialização. Manter scripts de inicialização em C seria um PITA.

Would there be a speed gain to write this in C?

Não muito. Enquanto algumas partes seriam mais rápidas, o ganho geral de velocidade seria marginal. A maior parte do processo de inicialização é estritamente seqüencial, especialmente as etapas no init 1 e 2. A partir do init 3 e para cima, os processos de inicialização podem ser paralelizados usando algo como Runit , que proporcionaria grandes ganhos de velocidade.

    
por 04.05.2012 / 17:42
2

A maior parte do tempo que ele gasta fazendo é esperar por coisas, uma após a outra: sistemas de arquivos, redes, etc.

Se você quiser uma sequência de inicialização rápida realmente , inicialize com o prompt de comando init = / bin / sh-instant! Se for um sistema embarcado, você pode fazer com que ele seja inicializado diretamente em seu aplicativo.

    
por 04.05.2012 / 17:54