Como Fazer um Sistema Operacional de Computador

Опубликовал Admin
4-10-2016, 14:55
5 509
0
Os sistemas operacionais permitem a interação entre as pessoas e o hardware dos computadores e são feitos com milhares e milhares de linhas de código. Eles são geralmente criados com as seguintes linguagens de programação: C, C++ e assembly.

Passos

  1. Aprenda a programar antes de iniciar. A linguagem Assembly é fundamental, enquanto que outra linguagem suplementar e de baixo nível de grande importância como o C é fortemente recomendada.
  2. Decida em qual mídia você deseja carregar o seu Sistema Operacional. Pode ser um disquete, CD, DVD, pendrive, disco rígido ou mesmo outro PC.
  3. Decida o que você deseja que o seu SO (Sistema Operacional) faça. Quer seja um SO completo com uma interface gráfica de usuário (GUI) ou algo um pouco mais minimalista, você precisará saber que direção você está tomando antes de começar.
  4. Decida qual plataforma de processadores o seu sistema operacional suportará. Caso não esteja certo sobre isto, o melhor é focar na plataforma de processadores X86 (32 bit), visto que a maioria dos computadores utiliza processadores de plataforma X86.
  5. Decida se você deseja desenvolver ele por completo por conta própria ou se existe algum kernel disponível a partir do qual você desejará desenvolver o seu sistema operacional. O Linux From Scratch é um projeto para aqueles que desejam criar a sua própria distribuição Linux, por exemplo. Confira as dicas para acessar um link externo.
  6. Decida se você vai utilizar o seu próprio gerenciador de boot ou um já existente, tal como o GRUB (Grand Unified Bootloader). Uma vez que programar o seu próprio gerenciador de bootlhe dará muito conhecimento sobre o hardware e a BIOS, isto poderá acabar lhe levando à ideia de programação do kernel em si. Confira as dicas.
  7. Decida qual linguagem de programação utilizar. Apesar de ser possível criar um sistema operacional com linguagens como Pascal ou Basic, será melhor utilizar uma linguagem como C ou Assembly. O Assembly é absolutamente necessário, visto que algumas partes vitais de um sistema operacional irão necessitar dele. O C++, por outro lado, contém algumas palavras-chave que necessitam de um sistema operacional completamente desenvolvido para que possa ser executado.
    • Para compilar um sistema operacional a partir de código C ou C++, você obviamente irá utilizar um compilador ou outro. Você deveria ler o guia/manuais/documentações de usuário para o seu compilador C/C++ escolhido, esteja ele compactado juntamente com o software ou disponível no site do distribuidor. Você precisará conhecer muitos detalhes complexos sobre o seu compilador e, para desenvolvimento em C++, você deveria saber sobre o esquema de deturpação do compilador e o seu ABI. É esperado que você entenda os vários formatos de executáveis (ELF, PE, COFF, binário plano (plain binary), etc.), bem como entender que o formato proprietário do Windows, PE (.exe), é protegido por direitos autorais.
  8. Decida qual será sua interface de programação de aplicativo (API - Application Programming Interface). Uma boa API a ser escolhida é o POSIX, o qual é bem documentado. Todos os sistemas UNIX possuem ao menos suporte parcial ao POSIX, portanto seria trivial portar aplicações UNIX para o seu SO.
  9. Decida como será o seu design. Existem kernels monolíticos e micro kernels. Os kernels monolíticos implementam todos os serviços no kernel, enquanto que os micro kernels possuem um pequeno kernel combinado com daemons do usuário implementando serviços. Em geral, os kernels monolíticos são mais rápidos, mas os micro kernels possuem melhor isolamento de falhas e uma maior confiabilidade.
  10. Considere realizar o trabalho de desenvolvimento juntamente com uma equipe. Desta forma, menos tempo será consumido na resolução de uma maior quantidade de problemas, resultando em um melhor SO.
  11. Não limpe completamente seu disco rígido. Lembre-se que ao limpar por completo o seu disco você estará deletando todos os seus dados, e isto é irreversível! Utilize o Grub ou outro gerenciador de boot para utilizar o dual-boot permitindo dar boot em seu sistema bem como outro sistema, até que o seu esteja completamente concluído e funcional.
  12. Comece por baixo. Comece com pequenas coisas tais como apresentar texto e interrupções antes de seguir em frente com aspectos mais complexos como gerenciamento de memória e funções multitarefa.
  13. Mantenha um backup do último código fonte funcional. Em caso de algo sair terrivelmente errado com a versão atual ou caso o seu computador de desenvolvimento apresente problemas e não consiga mais dar boot ou ser inicializado, será uma ótima ideia ter uma segunda cópia para que você possa continuar a trabalhar ou solucionar problemas.
  14. Considere testar o seu novo SO em uma máquina virtual. Ao invés de reiniciar o seu computador a cada vez que você fizer mudanças ou tiver que transferir os arquivos de sua máquina de desenvolvimento para sua máquina de testes, você pode utilizar um software de virtualização para instalar o seu SO em uma máquina virtual e rodar o mesmo enquanto o seu SO atual continua rodando. Aplicações de virtualização incluem VMWare (o qual também possui uma versão gratuita para servidores), a alternativa de código aberto Bochs, Microsoft Virtual PC (não compatível com o Linux), e o xVM VirtualBox. Confira as dicas para maiores informações.
  15. Libere uma "versão candidata" (também conhecida como release candidate ou, simplesmente, RC). Isto permitirá aos usuários lhe alertarem sobre possíveis problemas com o seu sistema operacional.
  16. Um sistema operacional também pode ser amigável do ponto de vista do usuário.

Dicas

  • Não inicie um projeto de desenvolvimento de um Sistema Operacional ao mesmo tempo em que inicia seu aprendizado em termos de programação. Não. Não mesmo. Se você já não conhecer C, C++, Pascal ou alguma outra linguagem adequada por completo, incluindo a manipulação de ponteiros, manipulação de bit em baixo nível, escovação de bits, detalhes da linguagem assembly, etc., você não estará pronto para desenvolver um sistema operacional.
  • Caso você deseje uma forma simples, considere distribuições Linux tais como o Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd ou o SUSE Studio e SUSE KIWI. No entanto, o sistema operacional que você criar pertence à empresa que iniciou o serviço inicial (apesar de você ter o direito de distribuí-la livremente, modificá-la e executá-la da maneira que desejar seguindo a licença GPL).
  • Após todo o desenvolvimento ter sido concluído, decida se você deseja liberar o código fonte como forma de aplicação de código aberto ou torná-lo proprietário.
  • Utilize sites tais como o OSDev e o OSDever como forma de ajudar o seu desenvolvimento de seu próprio SO. No entanto, por favor entenda que a comunidade OSDev.org preferiria que você utilizasse a wiki do projeto, não juntar-se ao fórum. Se você desejar juntar-se ao fórum, existem alguns pré-requisitos a serem observados. É necessário que você conheça profundamente as linguagens de programação C ou C++ e x86 Assembly. Você também precisa entender conceitos gerais e complexos de programação tais como listas encadeadas, filas, etc. A comunidade OSDev, em suas regras, explicitamente declara que a comunidade não está ali para servir de babá ou tutor para programadores iniciantes. Se você está tentando desenvolver um sistema operacional, não é preciso dizer que é esperado que você seja uma espécie de "deus" da programação. Também é necessário que você tenha lido os manuais do processador para que possa entender a arquitetura do processador que você escolheu; seja ele x86 (Intel), ARM, MIPS, PPC, etc. Os manuais para uma determinada arquitetura de processador podem facilmente ser encontrados utilizando o buscador do Google ("Manuais Intel", "Manuais ARM", etc.). Não junte-se aos fórums da comunidade OSDev.org e comece a fazer perguntas óbvias. Isto resultará apenas em respostas do tipo "Leia a droga do Manual". Você deveria tentar ler a Wikipedia e os manuais das várias ferramentas que você deseja utilizar.
  • Pode ser uma boa escolha criar uma partição completamente nova para o desenvolvimento do SO.
  • Verifique potenciais deadlocks e outros bugs ou falhas. Bugs, deadlocks e outros problemas irão afetar o seu projeto de SIstema Operacional.
  • Para maiores informações, verifique estas fontes:
    • Manual: Linux From Scratch
    • Gerenciador de Boot: GRUB
    • Aplicações de Virtualização: Bochs, VM Ware, XM Virtual Box.
    • Manuais de Processadores: Manuais Intel
    • Sites sobre desenvolvimento de SO: OSDev, OSDever

Avisos

  • Você não terá um sistema completo em duas semanas. Inicie com um SO que consiga dar boot, em seguida avance para as coisas legais.
  • Se você fizer algo realmente estúpido, como escrever bytes aleatórios em portas de I/O aleatórias, você "irá" travar o seu SO, e poderá (em teoria) danificar o seu hardware. Para uma demonstração, execute 'cat /dev/port' no Linux como usuário root. O seu computador "irá" travar.
  • Certifique-se de implementar recursos de segurança como sua prioridade máxima se você alguma vez desejar utilizar o seu SO para qualquer coisa.
  • Ter o SO escrito descuidadosamente em seu disco rígido poderá corromper-lo completamente. Tenha cuidado.
  • Não espere que desenvolver um sistema operacional adequado seja uma tarefa fácil. Existem, muitas vezes, interdependências complexas. Por exemplo, a fim de fazer com que um sistema operacional seja capaz de lidar com múltiplos processadores, seu gerenciamento de memória precisará possuir mecanismos de "trava" para evitar que múltiplos processadores acessem o mesmo recurso ao mesmo tempo. As "travas" (locks) utilizadas para isto irão necessitar da presença de um agendamento ou organizador para certificar-se de que apenas um processador acesse um recurso crítico a cada momento e que todos os outros fiquem em espera. Este agendador (scheduler) depende da presença de um Gerenciador de Memória. Este é um caso de dependêndia de deadlock ou impasse. Não há nenhuma maneira padrão para se resolver problemas como este, cada programador de sistema operacional deve ter as habilidades necessárias para criar suas próprias formas de lidar com isto.

Materiais Necessários

  • Um bom computador
  • Um processador da arquitetura para a qual você deseja desenvolver
  • Memória RAM o suficiente para uma máquina virtual
  • Um sistema operacional "hospedeiro" (utilizado para desenvolver o código fonte Assembler (e outros) bem como compilar e empacotar o mesmo enquanto está em seus estágios iniciais; eventualmente, o seu próprio SO poderá ser seu próprio hospedeiro)
  • Um editor de códigos com sintaxe colorida (utilize caso não possua uma IDE)
  • Um compilador
  • Um drive de disquete (não necessário)
Теги:
Information
Users of Guests are not allowed to comment this publication.