Bem-vindo ao unix.stackexchange.com!
Não há uma resposta fácil para sua pergunta, e longe pessoas melhores do que eu escreveram livros inteiros sobre o tema do kernel Linux e sistemas operacionais em geral.
Sobre o escopo do projeto: escrever um sistema operacional não é uma tarefa simples! Mesmo um sistema operacional propositalmente mínimo como o Minix é uma coisa muito complexa! Para ter uma idéia sobre o Linux, pense nos programas em C que você escreveu até agora. O curso universitário médio tende a ser alguns milhares de linhas de C no máximo. Acho que meu projeto final foi de 30 a 35.000 linhas de C ++. O kernel do Linux é de aproximadamente 13.000.000 de linhas de código C.
Por que tudo está em arquivos separados? Projetos importantes são armazenados em arquivos separados por razões logísticas e práticas. Apenas considere carregar um arquivo de 13.000.000 de linhas em um editor! Antes de abordar um grande projeto como o Linux, você deve aprimorar suas habilidades em C até o ponto em que a pergunta "por que vários arquivos" responde a si mesma. Você também deve ser capaz de ler o código C , e não apenas escrevê-lo. (mais difícil do que parece a princípio)
Você definitivamente deve ser muito proficiente em C. O kernel é mantido por milhares de pessoas, e você será chamado para entender os idiomas pessoais de cada um deles (concedidos, dentro dos padrões de código do kernel razoavelmente rígidos, mas ainda assim - todo mundo tem seu próprio estilo de solução de problemas.
Depois de obter seu C fu, compreenda os sistemas operacionais. Isso ajudará você a entender o código. Nem todo o Linux é essencial. O kernel propriamente dito é bem pequeno! O que é inchado:
- milhares de drivers de hardware para vários dispositivos.
- Camadas de abstração para várias classes de dispositivos para simplificar as APIs e a gravação do driver. Por exemplo, temos o VFS para sistemas de arquivos, a camada de eventos para dispositivos de entrada, etc.
- Quantidades chocantes de código compilado condicionalmente e arquivos que atendem às várias arquiteturas que executam o Linux (nem toda máquina Linux é um PC Intel, e algumas são incrivelmente diferentes do que você poderia esperar). O kernel tem que lidar com essas diferenças, e isso significa mais código.
Um problema que você encontrará imediatamente é que esses componentes não são tão fáceis de desconectar, trocar e reconectar novamente. Existem inúmeras inter-relações. Em suma, alterar bits do kernel é complicado.
O motivo pelo qual as pessoas sugeriram o Minix para você é simples: é um sistema operacional completo, mas não é sobrecarregado pelas necessidades de um sistema tão complexo quanto o Linux. O código é pequeno, mas ainda fornece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas pelo Minix.
Claro, a Minix tem menos suporte a hardware nos dias de hoje. E daí? Isso é um benefício! Os computadores modernos virtualizam muito bem. Use isso a seu favor: uma VM para rodar o Minix é tão leve, que tornará o desenvolvimento um diabo.
Se o seu projeto é construir um sistema operacional, você poderia fazer pior do que começar estudando o Minix. Você também pode comprar e ler o livro Minix foi escrito para acompanhar: ' Modern de Andrew Tanenbaum Sistemas Operacionais '.
Você também deve definir seus objetivos e definir seus termos com precisão . Se a sua própria definição de sistema operacional for da Microsoft (um sistema operacional com uma GUI e um conjunto de software completo), você poderá ter um projeto muito longo! Centenas de milhares de pessoas têm trabalhado desde os anos 1960 para nos trazer onde estamos agora, afinal.
Finalmente, lembre-se do grito de guerra da Computer Scientist: " nunca reinvente a roda! " (gostamos de fazer exceções ao aprender, é claro. E por diversão :))