Quais são alguns resources para iniciar o desenvolvimento do sistema operacional?

Uma coisa que sempre quis fazer é desenvolver meu próprio sistema operacional (não necessariamente extravagante como Linux ou Windows, mas melhor do que um simples gerenciador de boot que já fiz).

Eu estou tendo dificuldade em encontrar resources / guias que levam você a escrever um simples sistema operacional “Hello World”.

Eu sei que muitas pessoas provavelmente vão recomendar o Linux ou o BSD; mas a base de código para sistemas como esse é (presumivelmente) tão grande que eu não saberia por onde começar.

Alguma sugestão?

Atualização: para tornar mais fácil para as pessoas que acessam esta postagem pelo Google, há alguns resources de desenvolvimento do sistema operacional:

  • Escrevendo seu próprio sistema operacional (obrigado Adam)

  • Linux From Scratch (Obrigado João)

  • SharpOS (C # Operating System) (Obrigado lomaxx)

  • Minix3 e Minix2 (Obrigado Mike)

  • OS Dev Wiki e fóruns (Obrigado Steve)

  • BonaFide (Obrigado Steve)

  • Bran (Obrigado Steve)

  • Role seu próprio brinquedo UNIX-clone OS (Obrigado Steve)

  • Série de desenvolvimento do OS Thorn quebrado

Outros resources:

Eu encontrei um bom recurso chamado MikeOS , “MikeOS é uma ferramenta de aprendizagem para demonstrar o funcionamento simples dos sistemas operacionais. Ele usa o modo real de 16 bits para access à BIOS, para que ele não precise de drivers complexos”

Atualizado em 14/11/08

Eu encontrei alguns resources no Guia de Freebyte para … Sistemas operacionais livres e não-livres que se conectam a kits como o OSKit e a biblioteca ExOS. Estes parecem super úteis em começar no desenvolvimento do sistema operacional.

Atualizado em 23/02/09

Ric Tokyo recomendou nanoos nesta questão . Nanoos é um sistema operacional escrito em C ++.

Atualizado em 09/03/09

Dinah forneceu algumas discussões úteis sobre o Stack Overflow sobre aspirantes a desenvolvedores de sistemas operacionais: Os obstáculos na criação de um sistema operacional personalizado discutem quais armadilhas você pode encontrar durante o desenvolvimento de um sistema operacional e o desenvolvimento do sistema operacional é uma discussão mais geral.

Atualizado em 7/9/09

O LB forneceu um link para o Projeto Pintos , um sistema educacional criado para alunos que estão aprendendo o desenvolvimento do sistema operacional.

Atualizado em 27/07/09 (ainda vai forte!)

Eu tropecei em um curso de sistema operacional on – line de Berkley com 23 palestras.

O TomOS é um fork do MikeOS que inclui um pequeno gerenciador de memory e suporte ao mouse. Como MikeOS, é projetado para ser um projeto educacional. Está escrito em assembler da NASM.

Atualizado em 04/08/09

Eu encontrei os slides e outros materiais para acompanhar as palestras on-line de Berkeley listadas acima.

Atualizado em 23/08/09

Todas as perguntas marcadas com osdev em stackoverflow

OS / 161 é um sistema operacional acadêmico escrito em c que é executado em um hardware simulado. Este sistema operacional é semelhante em Nachos. Obrigado Novelocrat!

A tangurena recomenda http://en.wikipedia.org/wiki/MicroC/OS-II , um SO projetado para sistemas embarcados. Há um livro complementar também.

Desenvolvimento Linux Kernel por Robert Love é sugerido por Anders. É uma “visão privilegiada amplamente aclamada do kernel do Linux”.

Atualizado em 18/09/2009

Obrigado Tim S. Van Haren por nos contar sobre o Cosmos , um sistema operacional inteiramente escrito em c #.

tgiphil nos fala sobre o Framework Managed Operating System Alliance (MOSA) , “um conjunto de ferramentas, especificações e código-fonte para fomentar o desenvolvimento de sistemas operacionais gerenciados baseados no Common Intermediate Language.”

Atualização 24/09/2009

Steve encontrou alguns resources para desenvolvimento no Windows usando o Visual Studio, confira a configuração do Guia do BrokenThorn com o VS 2005 ou a Seção VS do OSDev .

Atualizado em 9/5/2012

O kerneltrap.org não está mais disponível. O kernel linux v0.01 está disponível no kernel.org

Atualizado em 21/12/2012 Um tutorial básico de desenvolvimento de SO projetado para ser o projeto de um semestre. Ele guia você a construir um sistema operacional com componentes básicos. Muito bom começo para iniciantes. Artigo relacionado Obrigado Srujan!

Atualizado em 15/11/2013

Escrevendo um sistema operacional simples a partir do zero . Obrigado James Moore!

Atualizado em 08/12/2013

Como fazer um sistema operacional de computador Obrigado ddtoni!

Atualizado em 18/03/2014

ToAruOS um sistema operacional construído principalmente a partir do zero, incluindo GUI

Atualizado 12 de setembro de 2016

Escrevendo seu próprio sistema operacional de brinquedo

Atualizado 10 dez 2016

Escrevendo um sistema operacional simples – do Scratch (obrigado @Tyler C)

Há muitos links após esta breve visão geral do que está envolvido na criação de um SO para a plataforma X86.

O link que parece ser mais promissor (www.nondot.org/sabre/os/articles) não está mais disponível, então você precisará examinar a versão do Archive.org para lê-la.

No final do dia, o gerenciador de boot pega o código da máquina do kernel, coloca-o na memory e salta para ele. Você pode colocar qualquer código de máquina no kernel que quiser, mas a maioria dos programas em C espera um SO, então você precisará dizer ao seu compilador que ele não terá tudo isso, ou o gerenciador de boot terá que criar um pouco dele.

O kernel faz todo o trabalho pesado, e eu suspeito que seja o kernel de exemplo que você quer. Mas há um longo caminho entre ter um kernel que diz “Hello world” para ter um kernel que carrega um interpretador de comandos, fornece serviços de disco e carrega e gerencia programas.

Você pode querer considerar a assinatura do ACM para obter access à sua literatura antiga – há muitos artigos no final dos anos 80 e início dos anos 90 nas primeiras revistas de computação sobre como criar sistemas operacionais alternativos . Há provavelmente livros que estão fora de catálogo desta época também. Você pode obter as mesmas informações gratuitamente consultando os índices dessas revistas (que estão disponíveis nesse site – clique em “index” próximo ao nome da revista) e, em seguida, peça as pessoas com uma cópia.

Por fim, sei que a usenet está morta (pois assim dizem os profetas da destruição da internet), mas você descobrirá que muitos dos antigos especialistas da época ainda vivem lá. Você deve pesquisar no google groups (eles têm o antigo repository do dejanews) e eu espero que você encontre muitas pessoas perguntando as mesmas questões há uma década ou 1,5 atrás que você está perguntando agora. Você pode até se deparar com muitas consultas de Linus Torvalds para obter ajuda, já que ele estava desenvolvendo o linux originalmente. Se as pesquisas não trouxerem nada, pergunte no grupo de notícias apropriado (provavelmente começa com comp.arch, mas procure por aqueles com SO no nome).

O Minix é muito menor e projetado para fins de aprendizado, e o livro para acompanhar também é bom.

Atualização: Eu acho que Minix 3 é um objective um pouco diferente, mas Minix 2 (e, claro, a primeira versão) foram para fins de ensino.

Como alguém que escreveu um sistema operacional multitarefa em tempo real do zero …

teclado debounce rotina, driver de teclado, driver de disco, driver de vídeo, sistema de arquivos e, finalmente, um carregador de boot – e isso é só para iniciá-lo pela primeira vez sem nada para fazer!

… Eu não posso enfatizar o suficiente como é importante se familiarizar com o hardware! Isto é especialmente verdade se você realmente quiser fazer tudo sozinho, em vez de apenas pegar um sistema primitivo que alguém já tenha preparado para você. Por exemplo, entre em contato com a Intel e peça uma placa de CPU para o seu tipo de CPU! Isto irá mostrar-lo para você – o “pin-outs”, interrupções, opcodes, o nome dele!

Lembre-se de que o hardware torna tudo isso possível. Estude o hardware. Você não vai se arrepender.

.

Escreva um sistema operacional de microcontrolador. Eu recomendo um microcontrolador baseado em x86. Um sistema operacional moderno é simplesmente enorme . Aprenda o básico primeiro.

Eu gostaria que houvesse um lugar para obter todas as informações sobre como desenvolver seu próprio sistema operacional. O mais próximo de chegar a isso é o OS Dev Wiki e Fóruns . Eles oferecem muitas informações boas sobre as informações de configuração, desenvolvimento e hardware do dispositivo.

Também há alguns ótimos tutoriais no BoneFide , eu usei o tutorial de introdução de Bran , e agora estou olhando para um mais recente baseado em seu chamado Roll your own UNIX-clone de brinquedo .

O segundo check out: “Sistemas Operacionais: Design e Implementação”

E se você quiser desenvolver no Windows, confira a postagem no blog de jolson .

Edit: Para desenvolvimento no windows usando o Visual Studio, confira o guia do BrokenThorn ou o wiki do OSDev .

Um excelente recurso é o material do curso do MIT 6.828: Engenharia de Sistemas Operacionais.

XV6 – SO simples de ensino semelhante ao Unix escrito em ANSI C para x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

Fonte XV6 – como um livreto impresso com números de linha http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6 book – explica as principais ideias de design os http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

O material é compacto: fonte de 92 páginas e comentário de 96 páginas.

Eu gosto mais do que o livro Minix! É uma verdadeira jóia!

Você também pode querer dar uma olhada no SharpOS, que é um sistema operacional que eles estão escrevendo em c #.

Existem bons resources para os fundamentos do sistema operacional em livros. Como não há muita chamada para criar novos sistemas operacionais a partir do zero, você não encontrará uma tonelada de informações do tipo amadores na Internet.

Eu recomendo o livro de texto padrão, “Modern Operating Systems” por Tanenbaum. Você também pode encontrar “Elementos do Sistema Operacional” por Calingaert útil – é uma visão geral de um livro que fornece um esboço do que um SO é do ponto de vista de um designer.

Se você tem algum interesse em sistemas em tempo real (e você deve pelo menos entender as diferenças e razões para OS em tempo real), então eu também recomendo “MicroC / OS-II” pelo Labrosse.

Editar:

Você pode especificar o que você entende por “mais técnico”? Esses livros fornecem detalhes de implementação de pseudocódigo, mas você está procurando um exemplo de sistema operacional ou trechos de código para uma máquina / idioma específico?

-Adão

Apenas vindo de outra pergunta. Eu gostaria de mencionar o Pintos … Eu me lembrei do meu curso de sistema operacional com o Nachos e o Pintos parece ser o mesmo tipo de coisa que pode rodar no x86.

Eu achei o Linux Kernel Development do Robert Love bastante interessante. Ele fala sobre como os diferentes subsistemas no kernel do Linux funcionam de maneira muito prática. Desde que o código-fonte está disponível, o Linux é um excelente candidato a algo para se atacar.

Aqui estão algumas outras páginas do Stack Overflow que merecem ser incorporadas nesta discussão:

Roadblocks na criação de um sistema operacional personalizado
Desenvolvendo um sistema operacional para a arquitetura x86

Comece a cortar o Minix. É muito menor que o Linux (obviamente) e é projetado com propósitos de ensino em mente (alguns, pelo menos). Não Minix 3, é uma história totalmente diferente.

Já respondi, mas quando entrei no sistema operacional na faculdade, começamos com um kernel inicial do Linux e acrescentamos resources modernos simplistas (filesystems básicos, memory virtual, multitarefa, mutexes). Boa diversão. Você começa a pular algumas das coisas REALMENTE loucas de assembly de baixo nível apenas para sujar com o modo protegido e as tabelas de páginas enquanto ainda aprendeu algumas das vísceras.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2

Meu curso de sistemas operacionais em graduação nos permitiu construir vários subsistemas para o OS / 161 , um kernel simples, semelhante ao BSD, que fornece alguns dos princípios básicos, deixando a liberdade de explorar várias decisões de espaço de design na implementação de serviços de nível superior.

Você pode querer olhar para linuxfromscratch .

O Linux From Scratch (LFS) é um projeto que fornece instruções passo-a-passo para criar seu próprio sistema Linux personalizado, inteiramente a partir do código-fonte.

Um tutorial simples e básico de desenvolvimento de SO projetado para ser o projeto de um semestre. Ele guia você a construir um sistema operacional com componentes básicos. Muito bom começo para iniciantes. O documento relacionado está aqui .

Eu gostaria de include este repo Como-Fazer-um-Computador-Operacional-Sistema por Samy Pesse. É um trabalho em andamento. Muito interessante.

Um SO razoavelmente simples para estudar seria o µC / OS. O livro tem um disquete com a fonte nele.

http://en.wikipedia.org/wiki/MicroC/OS-II

Confira o projeto da Managed Operating System Alliance (MOSA) no site http://www.mosa-project.org . Eles estão projetando um compilador AOT / JIT e um sistema operacional totalmente gerenciado em C #. Alguns dos desenvolvedores são do projeto inativo SharpOS.

Eu brinquei com o Cosmos , que é “um projeto de sistema operacional implementado completamente em linguagens compatíveis com CIL”. Está escrito em C #, de modo que foi até o meu beco. Para alguém como eu, que nunca tentou construir um sistema operacional, foi realmente muito legal conseguir um sistema operacional “Hello World” rodando em pouco tempo.

Como mencionado acima, o Wiki OSDev é (de longe) a melhor fonte para o desenvolvimento de sistemas operacionais. Para aqueles de vocês que falam alemão, o Wiki lowlevel.eu também é ótimo. Algo relativamente desconhecido Incitatus OS , um kernel simples com um pequeno conjunto de aplicativos do espaço do usuário. É ótimo usar para entrar no complicado tópico do desenvolvimento do sistema operacional.

Movitz é um ambiente Lisp escrito em Common Lisp e rodando “on the metal”. Infelizmente, alguns links na página principal do Movitz negam access, mas você pode encontrar instruções sobre como baixar e compilar o código-fonte da página do trac . Além disso, uma imagem pronta pode ser encontrada no arquivo desta página .

IMHO isso é extremamente interessante, pois traz de volta o conceito de máquina Lisp no hardware atualmente disponível. Ele falhou comercialmente, mas isso não prova que a ideia era ruim.

O manual Unix haters é um livro divertido que critica seriamente o conceito de Unix e seus derivados. Muitas seções argumentam sobre como melhor o conceito de máquina Lisp.

Aqui está um artigo chamado ” Escrevendo um sistema operacional simples do zero “. Ele cobre escrever um gerenciador de boot, entrar no modo protegido x86-32 e escrever um kernel básico em C. Parece fazer um bom trabalho explicando tudo em detalhes.

O simulador x86 JS e o simulador ARM também podem ser muito úteis para entender como o hardware de peças diferentes funciona e fazer testes sem sair do seu navegador favorito.

Pergunta Intresting para os programadores. Veja que vai demorar muito tempo para construir o sistema operacional como o Windows ou Mac, mas se você quer construir um sistema operacional simples, então você pode tentar o seu melhor

  1. Você precisa se concentrar em Assembly Language, C e C ++. Você deve ser especialista nesses idiomas.
  2. Primeiro leia um bom livro sobre como o sistema operacional funciona [Google it], depois leia todas as informações do Wiki OS
  3. Pesquisa no youtube “Como criar seu próprio sistema operacional em linguagem assembly” assistir ao vídeo, por exemplo. Vídeo
  4. Baixe o código fonte do Linux OS e compile você mesmo e tente modificar o código você mesmo
  5. Agora você é um editor de SO experiente, faça o download do Minix e do QNX e comece a desenvolver com eles e obtenha seus documentos aqui Minix Doc e QNX Doc

Agora você ganhou o grau de mestrado (Não é só um pouco mais para ir) na criação do sistema operacional agora distribua este conhecimento para seus amigos e com sua ajuda tente criar um sistema operacional tão poderoso quanto o Mac, Linux ou Windows

Quando você criou um sistema operacional básico, é realmente difícil continuar porque não há muitos resources para criar GUIs ou bibliotecas de portabilidade. Mas eu acho que dar uma olhada no ToAruOS ajudaria muito!

O código sob a superfície desse SO é tão simples! mas ao mesmo tempo ele portou coisas como cairo, python, (ainda não em breve) sdl, fez memory compartilhada e ele também criou seu próprio kit de ferramentas para widgets. Está tudo escrito em C.

Outro sistema operacional interessante seria o pedigreeOS . É feito por JamesM (o homem por trás do tutorial do kernel do jamesM . Embora tenha mais resources que o ToaruOS, ele também é maior e mais confuso.

Mas, de qualquer forma, esses dois sistemas operacionais irão ajudá-lo muito, especialmente ToAruOS.

Quando comecei a trabalhar em meus sistemas operacionais básicos, precisei de um guia básico como Stepping Stones para um sistema operacional básico . Isso me ajudou a não perder a cabeça.

Que se você quiser fazer isso de absolutamente nada (código de assembly puro)