Pergunta

A programação não é o meu trabalho principal, embora eu goste e às vezes seja pago por isso. Há muitos anos, tenho ouvido falar sobre Linux e meus amigos me mostraram muitos *nixes (ou *nici?), Embora eu fique com o Mac OS.

Você acha que há alguma parte do kernel do Linux que eu poderia gostar de olhar, que me ajudaria a entender o que é o material inteiro? Por exemplo, como o Linux é diferente de Darwin?

Eu cresci com o assembler e o DOS, então coisas como interrupções ou C de baixo nível não devem ser barreiras à compreensão. Mas, no final, estou mais interessado em conceitos de alto nível, como pilha de rosca ou networking - sei que diferentes sistemas operacionais os fazem de maneira diferente. E estou procurando algo divertido, fácil e agradável, como leitura noturna.

(Nota: fez um CW, apenas por precaução)

Atualização: procurei alguns documentos e comecei a ler:

Foi útil?

Solução

Eu recomendaria olhar para Lxr. Isso facilita o acompanhamento do fluxo do código (você não precisa procurar cada função chamada - bem, você tem, mas o site faz isso por você).

Alguns pontos de partida, para a versão atual (2.6.30):

  • start_kernel() - Pense nisso como o equivalente do kernel de main(). Esta função inicializa quase todos os subsistemas do kernel; Siga -o para ver no código o que você vê rolando na tela durante a inicialização.
  • entrada_32.s -Sistema chama e interrupções (versão x86-32, que deve estar mais próxima do que você sabe; observe o uso do dialeto de montagem da AT&T em vez do dialeto Intel para o qual você pode estar mais acostumado).
  • Head_32.s - O ponto de entrada do kernel. É aqui que o kernel começa após a mudança para o modo protegido; No final, vai ligar start_kernel().
  • arch/x86/bota -O código de inicialização do modo real. Começa na montagem (Boot/Header.S), mas rapidamente entra no código C (começando em inicialização/main.c). A inicialização do modo real (principalmente chamadas de BIOS que precisam ser feitas antes de mudar para o modo protegido); é compilado usando um truque estranho do GCC (.code16gcc), que permite a geração de código real de 32 bits.
  • arch/x86/bota/compactado - Se você já se perguntou de onde vem a mensagem "Decomprimindo Linux ...", é daqui.

Outras dicas

Eu sempre achei o código de agendamento de tarefas um pouco:-//

Methinks, você precisa conseguir um hobby fora da indústria. Ou uma vida :-)

Os comentários no kernel podem ser bem engraçados. Há alguma dicas sobre onde encontrar os melhores no kerneltrap.

arch/sparc/lib/checksum.s-/* sol, você simplesmente não pode me bater, você simplesmente não pode. Pare de tentar, arch/sparc/lib/checksum.s: * Desista. Estou falando sério, vou chutar o arco de merda viva/sparc/lib/checksum.s- * fora de você, jogo, luzes apagadas. */

Linux-0.01.tar.gz é um kernel histórico e bom para começar
É simples, minúsculo e melhor para começar a ler
(Também tem vazio principal (vazio) em vez de start_kernel () lol: d)

Você pode querer ler ou passar um livro que descreva o kernel Linux antes de olhar profundamente no kernel Linux.

Os livros que vêm à mente são:

Você provavelmente terá mais de ler um livro sobre teoria do sistema operacional. No que diz respeito ao código -fonte: não tenho ideia, mas você pode fazer o download facilmente o Fonte do kernel Linux E veja se você consegue encontrar algo que apela.

Isso deve aumentar algum código interessante quando executado no diretório SRC:

grep -ir "fixme" *

Experimente também com outros termos cômicos, porcaria, merda, merda, pinguim, etc.

Você precisa redefinir a palavra 'diversão' em seu contexto. :)

Dito isto, o kernel do Linux pode ser um monstro demais para enfrentar. Você pode começar com alguns grãos acadêmicos ou mais primitivos para pegar o jeito do que está acontecendo, primeiro. Você também pode querer considerar o Jolix livro.

Foi recomendado por muitas pessoas que a v0.0.1 do Linux é a mais fácil de entender.

No entanto, se você está procurando uma boa fonte de kernel para ler, eu não iria com o Linux, é uma besta de um hack (sobre como dizer que as fontes do GCC são "divertidas"), em vez disso, você pode experimentar o Minix ou um dos BSDs (Darwin é basicamente um ramo do NetBSD IIRC) ou mesmo um dos muitos clones gratuitos do DOS, se todo o resto for um pouco assustador demais.

Tente ler o código que implementa esses dispositivos de caracteres: /dev /zero /dev /null /dev /completo

E talvez os geradores de números aleatórios se você estiver inclinado. O código é direto e mais simples do que todos os outros drivers de dispositivo, pois não toca em nenhum hardware.

Comece em Drivers/Char/Mem.*

kernel.h

Alguns truques simples que podemos aprender, como

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of

Por diversão, acho que você também pode ver o Minix, não é exatamente o Linux, mas os sistemas operacionais modernos da Tenenbaum são uma boa leitura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top