Pesquisar este blog

Novidades no blog

- Passamos das 120k visitas \o/

- Os repositórios ainda precisam ser organizados!

- Nova postagem: Organizando a casa;
- LOS versão 0.7 (acesse, em breve, no github.com);

domingo, 10 de março de 2013

Antes de começar

Antes de mais nada é necessário que se tenha um bom conhecimento de programação. Um SO não é tarefa para iniciantes de programação, mesmo para quem já tem algum conhecimento é uma tarefa árdua, pois não existem ferramentas que facilite a construção do código, como pode ser feito para aplicativos por IDEs-RAD (Rapid Application Development - Desenvolvimento Rápido de Aplicação) como o Delphi, VisualBasic e outros.

Além disso depurar um SO é extremamente difícil porque não tem como executar ele sob o domínio de um depurador (Debugger), então quando aparece algum erro, tem que encontrá-lo por eliminação. Vai-se modificando o código, de forma que algumas partes não são executadas e observando o resultado. Isto quando, o código está perfeito mas a falha ocorre por causa de alguma característica do hardware, não conhecida pelo programador, aí somente a pesquisa de informações e uma boa dose de sorte para conseguir encontrar o defeito.

Também é necessário um bom conhecimento de sistemas operacionais, ter lido livros como “Sistemas Operacionais: Projeto e Implementação (Andrew S. Tanenbaum)”, e/ou ter usado e compilado um sistema operacional Open Source (Linux por exemplo). Pois com isso tem-se uma boa noção de como um sistema operacional realmente funciona, nisso o Linux é excelente, mesmo sendo grande demais para ser estudado por um iniciante, utilizá-lo e saber realmente como configurar, modificar ou compilar programas manualmente ajuda bastante.

Alias o Windows é uma péssima ideia para quem está querendo desenvolver seu próprio sistema operacional, ele pode ser muito mais prático e fácil para ser utilizado por usuários normais, mas justamente a sua facilidade oculta todo o conhecimento de como o sistema funciona e assim, impede que o usuário aprenda mais sobre ele.

Para desenvolver seu próprio sistema operacional eu recomendo que se conheça bem o Linux, que se torne um usuário avançado no mundo Linux, pois este permite que o usuário adquira mais conhecimento com sua utilização, alem de fornecer todas as ferramentas necessárias, sem necessitar de qualquer adaptação ou que ela seja mínima.

Eu, por exemplo, adquiri muito mais conhecimento depois que passei a utilizar o Linux do que quando não o utilizava. Hoje uso o Ubuntu 12.04 LTS de 64 bits e tenho muitas ferramentas que não estão disponíveis para o Windows, e se tem similares não são tão eficientes.

Falando em ferramentas, antigamente se me fosse perguntado que linguagem deveria ser usada para escrever um sistema operacional, eu diria sem falsear: C e Assembly. Mas agora com o conhecimento adquirido digo que nem é tanto a linguagem que faz a diferença (obviamente certas coisas só são possíveis de serem feitas em Assembly) mas sim o compilador, ou seja, a ferramenta em si.

Muitos usam, ou tentam usar, compiladores pensados para aplicações, não para sistemas operacionais, e acabam por terem mais problemas do que resultados, um exemplo disso é tentar usar o Turbo Pascal ou o Delphi. Embora seja possível, e eu mesmo já tenha feito testes com eles, eles foram pensados exclusivamente para se criar programas aplicativos para um único sistema operacional. O que torna o seu uso muito trabalhoso, que gera a ideia de que Pascal é impróprio para se criar um sistema operacional, que sei que não é verdade.

Eu inclusive já fiz diversos testes básicos de um sistema operacional em Turbo Pascal e Delphi (na época que ainda usava Windows) mas cheguei a conclusão de que as modificações necessárias nos compiladores são demasiadamente trabalhosas para os resultados obtidos. Porem não desisti da ideia de utilizar Pascal como linguagem, já no universo Linux, comecei a utilizar e fazer diversos testes com o FreePascal (FPC) e concluí que nele é possível de se conseguir o resultado esperado com o mínimo de esforço, o que é uma grande vantagem considerando o esforço que já é despendido para a criação do sistema operacional em si.

O FPC sendo cross-compiler (compilador ”cruzado”, multi-plataforma) é pensado de forma a não ter nenhuma restrição de hardware ou de sistema operacional, e com ele, com alguns ajustes, se consegue um arquivo executável com nenhum, ou o mínimo overload (sobrecarga, rotinas e procedimentos que são obrigatórios para um determinado sistema operacional, mas que se tornam inútil para outro, ou inútil dentro de um executável de um sistema novo). Alguns outros detalhes sobre isso ficará um próximo post.

Já para testar o sistema é conveniente ter uma maquina virtual instalada, o que permite a codificação e a depuração sem a necessidade de reiniciar a máquina, ou ainda outro computador em que possa ser feito os testes, mas a utilização de uma máquina virtual é muito mais prático, embora não seja garantido que um sistema que funcione perfeitamente em uma máquina virtual tenha o mesmo resultado sobre o hardware puro, mas é fundamental que pelo menos o sistema rode perfeitamente em uma máquina virtual primeiro, alem de que a máquina virtual protege o hardware e pode evitar danos inesperados...

Uma máquina virtual que utilizo é o VirtualBox que realmente virtualiza o hardware e não somente emula um sistema operacional como acontece com o DosBox. No VirtualBox é possível instalar e executar basicamente qualquer sistema operacional.

Como este post já está ficando grande e começando a parecer complicado, encurtarei a história e deixarei para os próximos. Mas resumindo isso é o essencial que se deve saber antes de começar a desenvolver um sistema operacional.

Eu uso, recomendo, e considerarei que quem estiver acompanhando está utilizando alguma distribuição Linux (Ubuntu é uma boa), irá escrever em Assembly e Pascal, utilizando o FreePascal e o Nasm (Assembler) e o VirtualBox. Alem de inicialmente mais alguns “apetrechos”, mas isso vou comentando conforme for sendo necessário.


Próximo - Boot, fase 1 - Prólogo >>

<< Anterior - Introdução


5 comentários:

  1. Gostaria de agradecer por sua iniciativa e por disponibilizar seu tempo para disseminar seu conhecimento de forma livre e gratuita. Muito obrigado!

    ResponderExcluir
    Respostas
    1. Opa! Só o tempo que atualmente está meio difícil... Mas mesmo que devarinho vamos que vamos :D

      Excluir
  2. Oi, já procurei muito, mas não achei um bom livro ou tutorial de assembly, poderia me indicar algum? (e se não for pedir demais, um livro ou tutorial médio-avançado de c), obg.

    ResponderExcluir
    Respostas
    1. Tutorial de Assembly? Já olhou o da NumaBoa:

      http://www.numaboa.com.br/informatica/tutos/aoa

      ou mesmo o em inglês, Art of Assembly?

      Excluir
    2. Em C não faço ideia, mas deve ter um monte aí...

      Excluir

Obs.: Após escrever seu comentário, inscreva-se por e-mail para seguir os próximos comentários. Ou assine a postagem de comentários (Atom).