Pergunta

Eu gostaria de obter melhor conhecimento sobre os componentes internos do sistema operacional.Gerenciamento de processos, gerenciamento de memória e coisas assim.
Eu estava pensando em aprender conhecendo o kernel Linux ou BSD.
Qual kernel é melhor para fins de aprendizagem?
Qual é o melhor lugar para começar?
Você pode recomendar algum livro bom?

Foi útil?

Solução

Na faculdade, tive uma aula de sistemas operacionais onde usávamos um livro de Tanenbaum.Na aula, implementamos um driver de dispositivo no Sistema operacional Minix.Foi muito divertido e aprendemos muito.

Porém, uma coisa a ser observada: se você escolher o Minix, ele foi projetado para aprendizado.É um microkernel, enquanto Linux e BSD são um kernel monolítico, então o que você aprende pode não ser 100% traduzível para poder trabalhar com Linux ou BSD, mas você ainda pode ganhar muito com isso, sem ter que processar bastante tanta informação.

Como observação lateral, se você leu Apenas por diversão, Linus na verdade estava brincando com o Minix antes de escrever o Linux, mas isso simplesmente não era suficiente para seus propósitos.

Outras dicas

Como usuário do Linux, eu diria que o Linux tem uma ótima comunidade para as pessoas aprenderem sobre o kernel. http://kernelnewbies.org é um ótimo lugar para começar a fazer perguntas e aprender como o kernel funciona.Não posso fazer uma recomendação de livro, mas depois de ler o material inicial sobre kernelnewbies, a fonte estará muito bem documentada.

Além dos bons livros já mencionados (Opeating System Design & Implementation é particularmente bom), obtenha um Kernel Linux versão 1.x, carregue-o no VMWare ou VirtualBox e comece a brincar a partir daí.

Você precisará gastar muito tempo navegando no código-fonte.Para isso, confira http://lxr.linux.no/ que é uma versão navegável da fonte e torna a vida muito mais fácil.Para a primeira versão do Linux (0.01), confira http://lxr.linux.no/linux-old+v0.01/.A diversão começa às http://lxr.linux.no/linux-old+v0.01/boot/boot.s.À medida que você avança de versão para versão, verifique o ChangeLog e explore as partes que foram alteradas para evitar que você releia tudo novamente.

Depois de dominar os conceitos, observe 2.0, depois 2.2, etc.Esteja preparado para dedicar MUITO tempo ao processo.

Eu já havia comprado esses livros por recomendação para o mesmo propósito, mas nunca cheguei a estudá-los sozinho, então apenas os tomo como conselhos de segunda mão.

Observando a falta de BSDs aqui, decidi contribuir:

Eu não fiz nenhum dos cursos, mas ouvi Marshall Kirk McKusick falar em outras ocasiões, e ele é muito bom no que faz.

E, claro, as páginas de manual do BSD, que são um excelente recurso, pois são mantidas em uma extensão muito maior do que as páginas de manual comuns do Linux.Tomemos por exemplo o uvm(9) página de manual, descrevendo a interface de memória virtual no OpenBSD.

Não é exatamente relacionado, mas também recomendarei o vídeo História das distribuições de software de Berkeley pois oferece uma boa introdução às partes BSD da história e cultura do UNIX, bem como muitas anedotas hilariantes de quando.

Eu recomendo os kernels BSD!Os kernels BSD têm muito menos hackers, portanto é mais fácil acompanhar sua evolução.Os kernels BSD e Linux têm ótimos hackers, mas algumas pessoas argumentam que a fama inferior do BSD filtra os novatos.Também tomar decisões de design é mais fácil quando as fontes não são atualizadas 100 vezes por dia.

Entre as opções de BSD, minha favorita é o NetBSD.Pode não ser a escolha fácil que você deseja para o seu desktop, mas como tem um forte foco na portabilidade, a qualidade é muito boa.Acho que esta parte diz tudo:

Alguns sistemas parecem ter a filosofia de “Se funciona, está certo”.Sob essa luz, a filosofia do NetBSD poderia ser descrita como “Não funciona a menos que esteja certo”

Se você já trabalha há tempo suficiente, saberá que o NetBSD é uma grande alegria para aprender uma boa codificação.Embora profissionalmente você encontre mais chances com Linux

Qualquer que seja sua escolha, comece a ingressar em suas listas de e-mail e acompanhe as discussões.Estude alguns patches e finalmente tente fazer sua própria correção de bugs.Em relação aos livros, procure artigos de Diomidis Spinellis e livro dele.Não é exatamente um livro sobre kernel, mas tem exemplos do NetBSD e ajuda muito a lidar com softwares de grande porte.

Não há substituto para mergulhar no código.Tente encontrar um driver ou subsistema de seu interesse e dê uma olhada nele.Com ferramentas como Estação de trabalho VMware é muito fácil fazer as alterações desejadas, capturar a VM e executar o kernel modificado.Se o kernel entrar em pânico na inicialização, quem se importa?Basta voltar ao instantâneo e corrigir o problema.

Para livros, recomendo fortemente Desenvolvimento de Kernel Linux por Robert Love.É um livro maravilhosamente escrito - muita informação, organizado de forma sensata e bem-humorado...não é uma leitura seca.

Siga o conselho de Mike Stone e comece com o Minix.Foi isso que Linus fez!O livro é muito bem escrito e Tannenbaum faz um ótimo trabalho ao mostrar como os vários recursos são implementados em um sistema real.

Ninguém parece ter mencionado que o BSD em termos de código é muito mais limpo e consistente.A documentação também é muito melhor (como já mencionado).Mas como há muita necessidade de mexer em qualquer sistema que você escolher, eu escolheria aquele que você usa com mais frequência.

Linux e Minix são divertidos de aprender.Se você também quiser saber como é um sistema operacional micro-kernel moderno, você pode dar uma olhada no QNX.A documentação completa está disponível online e é muito acessível.Por exemplo, esse livro on-line.

Quando eu estava na universidade, passei um semestre estudando sistemas operacionais e, como parte disso, tive uma tarefa em que precisávamos implementar um sistema de arquivos baseado em RAM no Linux.

Foi uma maneira fantástica de entender o funcionamento interno do keurnel do Linux e entender como tudo se encaixa - e muito divertido brincar com como ele interage com ferramentas padrão também.

Eu ainda não tentei, mas você pode acessar o Linux From Scratch e começar a construir sua própria distribuição Linux.Parece algo que levará muito tempo, mas resultará em um conhecimento íntimo das entranhas do kernel Linux e de como cada parte funciona.Claro, você pode complementar esse aprendizado seguindo qualquer uma das outras dicas aqui.

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