É possível rastrear o código-fonte do Linux desde o início da inicialização até o código da área de trabalho GUI da área de trabalho?

2

Eu estou querendo saber se, como o Linux é 100% de código aberto, é possível seguir as instruções linha-por-linha do Linux para observar como o sistema operacional funciona inteiramente, para que se possa ter um melhor conhecimento de como os sistemas operacionais , carregue processos, gerencie processos / multitarefas em horários diferentes, carregue drivers, faça chamadas de sistema, opere por meio de APIs, encadeamentos de modo de usuário acessando drivers, conexões do GUI / X Window System e interações de driver a driver.

É possível fazer isso a partir da fonte, ou seja, quão viável é rastrear linearmente a fonte, e ela é linear?

    
por Asking the Unasked 16.11.2013 / 23:00

4 respostas

2

Eu suspeito que isso seja mais difícil do que o Michael Kjörling e o OP.

O OP parece pensar na operação de uma CPU como uma linha de tempo simples e reta, em que as tarefas são executadas sequencialmente. E Michael Kjörling reforça essa impressão ao observar que qualquer núcleo está executando estritamente uma instrução por ciclo, sequencialmente.

Isso é certamente incompleto no nível microscópico (os PCs atuais têm várias CPUs) e não ajudam nos níveis meso / macro-scopic.

Descrevemos todos os sistemas complexos em termos de variáveis macroscópicas; às vezes isso acontece porque essas são apenas as variáveis às quais temos acesso, mas sua utilidade não é principalmente a de acesso fácil. Nós não descrevemos um gás afirmando posições e velocidades de todas as partículas envolvidas, mas ao invés disso, usamos pressão / volume / temperatura / entropia.

Da mesma forma, não caracterizamos um estado da máquina por meio de instruções da CPU, mas em termos de tarefas e serviços sendo executados. Como tal, há em qualquer momento vários processos em execução e troca de informações, muitas vezes agindo em conjunto (e às vezes até na competição, infelizmente) para alcançar um objetivo comum.

O equivalente de pressão / volume / entropia / temperatura na ciência da computação são as camadas de abstração, representações simplificadas das tarefas executadas por uma máquina, independentemente das realizações reais dos agentes que executam as tarefas. Os ALs estão presentes em toda a ciência da computação, desde HALs até as camadas OSI, e assim por diante.

Pedir uma representação passo-a-passo de uma operação de PC é como abandonar atratores estranhos na teoria da turbulência em favor de uma descrição fluida de múltiplas partículas. Ou tentando decodificar o genoma humano estudando ligações químicas. Um baseia-se no outro, mas a nova camada de abstração oferece insights inimagináveis.

    
por 17.11.2013 / 09:21
1

Você pode visualizar o código-fonte e aprender como o sistema funciona (se você conhece bem o C / C ++ e a montagem). Tanto quanto sei, o código não é linear.

    
por 17.11.2013 / 00:19
0
Provavelmente, a maioria do que você pode obter é alguma depuração online e o daemon journald do systemd, que grava tudo desde muito cedo (muito antes das facilidades tradicionais de registro).

Se isso não for suficiente e você quiser rastrear o sistema no nível mais baixo, você pode rodar o linux em ambientes virtuais como o QEMU, o que permitiria ver internamente, usar o gdb no live kernel e assim por diante. Há alguns tutoriais sobre como configurar o QEMU para o kernel ativo e toda a sua depuração de imagem: link

Veja também a questão do stackowerflow para ferramentas dentro do kernel usado para depuração: link

    
por 17.11.2013 / 10:54
0

Gostaria de lhe indicar bootchart . bootchart inicia como primeiro processo em vez de init e monitora o que é executado e por quanto tempo ele é executado.

Bootchart

Isso não é tudo que você queria monitorar, mas tem uma saída gráfica muito boa e vale a pena tentar.

Para monitorar chamadas do sistema, você pode, por exemplo, executar perf record no início, mas cabe a você interpretar milhões de linhas.

    
por 05.01.2014 / 19:32