Bem-vindo ao unix.stackexchange.com!
Não há uma resposta fácil para sua pergunta, e pessoas muito melhores do que eu escreveram livros inteiros sobre o kernel do Linux e os sistemas operacionais em geral.
Sobre o escopo do projeto: escrever um sistema operacional não é uma tarefa simples! Mesmo um sistema operacional propositadamente mínimo como o Minix é uma coisa bastante complexa! Para ter uma idéia do Linux, pense nos programas C que você escreveu até agora. O curso médio da universidade tende a ter alguns milhares de linhas de C no máximo. Acho que meu projeto do último ano foi de cerca de 30 a 35.000 linhas de C ++. O kernel do Linux tem aproximadamente 13.000.000 de linhas de código C.
Por que tudo está em arquivos separados? Projetos consideráveis são armazenados em arquivos separados por razões logísticas e práticas. Basta considerar 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 ao ponto em que a pergunta "por que vários arquivos" se responde. Você também deve conseguir ler o código C , não apenas escrevê-lo. (mais difícil do que parece à primeira vista)
Você definitivamente deve ser muito proficiente em C. O kernel é mantido por milhares de pessoas, e você será chamado a entender os idiomas C pessoais de cada uma delas (concedido, dentro dos padrões de codificação do kernel bastante rígidos, mas ainda assim - todos têm estilo próprio de resolução de problemas).
Depois de obter seu C fu, certifique-se de entender os sistemas operacionais. Isso ajudará você a entender o código. Nem todo o Linux é essencial. O kernel propriamente dito é bem pequeno! O que é inchaço:
- Milhares de drivers de hardware para vários dispositivos.
- Camadas de abstração para várias classes de dispositivos para simplificar APIs e gravação de driver. Por exemplo, temos o VFS para sistemas de arquivos, a camada Event para dispositivos de entrada, etc.
- Quantidades chocantes de código e arquivos compilados condicionalmente, atendendo às várias arquiteturas que executam o Linux (nem todas as máquinas Linux são um PC Intel, e algumas são incrivelmente diferentes do que você poderia esperar). O kernel precisa 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, alterar e conectar novamente. Existem inúmeras inter-relações. Em suma, alterar bits do kernel é complicado.
A razão pela 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 oferece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas no Minix.
Certamente, o Minix tem menos suporte de hardware atualmente. E daí? Isso é uma benção! Computadores modernos virtualizam muito bem. Use isso para sua vantagem: uma VM para executar o Minix é tão leve que tornará o desenvolvimento um desastre.
Se o seu projeto é construir um sistema operacional, você pode fazer pior do que começar estudando o Minix. Você também pode comprar e ler o livro que o Minix foi escrito para acompanhar, ' Modern Operating Systems de Andrew Tanenbaum '.
Você também deve definir suas metas e definir seus termos com precisão . Se sua própria definição de sistema operacional é da Microsoft (um sistema operacional com uma interface gráfica do usuário e um conjunto de software completo), você pode ter um projeto muito longo! Centenas de milhares de pessoas trabalham desde a década de 1960 para nos levar aonde estamos agora, afinal.
Por fim, lembre-se do grito de guerra do cientista da computação: ' nunca reinvente a roda! '(gostamos de fazer exceções ao aprender, é claro. E por diversão :))