Uma coisa que eu sempre quis fazer é desenvolver meu próprio sistema operacional (não necessariamente sofisticado como Linux ou Windows, mas melhor do que um simples carregador de inicialização que eu já fiz).
Estou com dificuldade para encontrar recursos / guias que levam você a escrever um SO simples "Hello World".
Eu sei que muitas pessoas provavelmente recomendam que eu olhe para Linux ou BSD; mas a base de código para sistemas como esse é (presumivelmente) tão grande que eu não sabia por onde começar.
Alguma sugestão?
Atualização: para facilitar as pessoas que acessam esta postagem pelo Google, aqui estão alguns recursos de desenvolvimento de SO:
Escrevendo seu próprio sistema operacional (obrigado Adam)
Linux do zero (obrigado John)
SharpOS (Sistema operacional C #) (Obrigado lomaxx)
OS Dev Wiki e fóruns (Obrigado Steve)
BonaFide (Obrigado Steve)
Bran (Obrigado Steve)
Role seu próprio sistema operacional de clones UNIX de brinquedo (Obrigado Steve)
Série de desenvolvimento de sistema operacional Broken Thorn
Outros recursos:
Encontrei um recurso interessante chamado MikeOS : "O MikeOS é uma ferramenta de aprendizado para demonstrar como sistemas operacionais simples funcionam. Ele usa o modo real de 16 bits para acesso ao BIOS, para que não precise de drivers complexos".
Atualizado 14/11/08
Encontrei alguns recursos no Freebyte's Guide to ... Sistemas operacionais gratuitos e não gratuitos vinculados a kits como a biblioteca OSKit e ExOS. Eles parecem super úteis para iniciar o desenvolvimento do sistema operacional.
Atualizado 2/23/09
Ric Tokyo recomendou nanoos nesta questão . Nanoos é um sistema operacional escrito em C ++.
Atualizado 9/9/09
Dinah forneceu algumas discussões úteis sobre o Stack Overflow de aspirantes a desenvolvedores de sistemas operacionais: Os obstáculos na criação de um sistema operacional personalizado discutem quais armadilhas você pode encontrar ao desenvolver um sistema operacional e o desenvolvimento de sistemas operacionais é uma discussão mais geral.
Atualizado 9/9/09
O LB forneceu um link para o Projeto Pintos , um sistema operacional educacional projetado para os alunos que aprendem o desenvolvimento do sistema operacional.
Atualizado em 27/07/09 (Continua forte!)
Encontrei um curso on - line de Berkley com 23 palestras.
O TomOS é um fork do MikeOS que inclui um pouco de gerenciador de memória e suporte a mouse. Como MikeOS, ele é projetado para ser um projeto educacional. Está escrito no montador NASM.
Atualizado 4/8/09
Encontrei os slides e outros materiais para acompanhar as palestras on-line de Berkeley listadas acima.
Atualizado 23/8/09
Todas as perguntas com tag osdev no stackoverflow
OS / 161 é um SO acadêmico escrito em c que é executado em um hardware simulado. Este sistema operacional é semelhante no Nachos. Obrigado Novelocrat!
A tangurena recomenda o http://en.wikipedia.org/wiki/MicroC/OS-II , um sistema operacional projetado para sistemas embarcados. Há um livro complementar também.
O desenvolvimento do kernel do Linux, por Robert Love, é sugerido por Anders. É uma "visão privilegiada de um especialista no kernel do Linux".
Atualizado 18/9/2009
Obrigado Tim S. Van Haren por nos falar sobre o Cosmos , um sistema operacional escrito inteiramente em c #.
tgiphil nos fala sobre a Estrutura da Aliança do Sistema Operacional Gerenciado (MOSA) , "um conjunto de ferramentas, especificações e código fonte para promover o desenvolvimento de sistemas operacionais gerenciados com base no Common Intermediate Language".
Atualização 24/9/2009
Steve encontrou alguns recursos para desenvolvimento no Windows usando o Visual Studio, confira a configuração do guia BrokenThorn com o VS 2005 ou a seção VS do OSDev .
Atualizado 5/9/2012
O kerneltrap.org não está mais disponível. O kernel do linux v0.01 está disponível em kernel.org
Atualizado em 21/12/2012 Um tutorial básico de desenvolvimento de sistema operacional projetado para ser o projeto de um semestre. Ele o orienta na criação de um sistema operacional com componentes básicos. Muito bom começo para iniciantes. Relacionados papel . Obrigado Srujan!
Atualizado 15/11/2013
Escrevendo um sistema operacional simples do zero . Obrigado James Moore!
Atualizado 12/8/2013
Como criar um sistema operacional de computador Obrigado ddtoni!
Atualizado 18/3/2014
ToAruOS um sistema operacional construído principalmente do zero, incluindo GUI
Atualizado 12 de setembro de 2016
Escrevendo seu próprio sistema operacional Toy
Atualizado 10 de dezembro de 2016
Escrevendo um sistema operacional simples - do zero (obrigado @Tyler C)
fonte
Respostas:
Existem muitos links após esta breve visão geral do que está envolvido na criação de um sistema operacional para a plataforma X86.
O link que parece ser mais promissor (www.nondot.org/sabre/os/articles) não está mais disponível; portanto, você precisará vasculhar a versão do Archive.org para lê-lo.
No final do dia, o carregador de inicialização pega o código da máquina do kernel, coloca na memória e salta para ele. Você pode colocar qualquer código de máquina no kernel que desejar, mas a maioria dos programas em C espera por um sistema operacional; portanto, você precisará informar ao seu compilador que ele não terá tudo isso ou o carregador de inicialização precisará criar um pouco disso.
O kernel então faz todo o trabalho pesado, e eu suspeito que seja o exemplo de kernel que você deseja. Mas há um longo caminho a percorrer entre ter um kernel que diz "Olá, mundo", ter um kernel que carrega um interpretador de comandos, fornece serviços de disco e carrega e gerencia programas.
Você pode considerar assinar o ACM para obter acesso à literatura mais antiga - existem muitos artigos no final dos anos 80 e início dos anos 90 em revistas de informática sobre como criar sistemas operacionais alternativos . É provável que também haja livros esgotados nesta época. Você pode obter as mesmas informações gratuitamente, pesquisando os índices dessas revistas (que estão disponíveis nesse site - clique em "índice" ao lado do nome da revista) e depois solicitando pessoas com uma cópia.
Por fim, eu sei que a usenet está morta (como dizem os profetas da destruição da Internet), mas você verá que muitos dos velhos especialistas da época ainda moram lá. Você deve procurar nos grupos do google (eles têm o repositório antigo do dejanews) e espero que você encontre muitas pessoas fazendo as mesmas perguntas há uma década ou 1,5 que você está fazendo agora. Você pode até encontrar as muitas consultas de Linus Torvalds para obter ajuda, pois 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).
fonte
O Minix é muito menor e projetado para fins de aprendizado, e o livro a seguir também é bom.
Atualização: Eu acho que o Minix 3 é um objetivo um pouco diferente, mas o Minix 2 (e, claro, a primeira versão) era para fins de ensino.
fonte
Tanenbaum book and minix3
Seguir o suficiente para fazer alterações no minix3 me ajudará a contribuir com o kernel do linux?Como alguém que escreveu um sistema operacional multitarefa em tempo real do zero ...
rotina de debounce de teclado, driver de teclado, driver de disco, driver de vídeo, sistema de arquivos e, finalmente, um gerenciador de inicialização - e isso é apenas para iniciá-lo pela primeira vez sem nada para fazer!
... Não posso enfatizar o suficiente como é importante se familiarizar com o hardware! Isso é especialmente verdade se você realmente quiser fazer tudo sozinho, em vez de apenas escolher um sistema primitivo que alguém já estabeleceu para você. Por exemplo, entre em contato com a Intel e solicite um cartão de CPU para o seu tipo de CPU! Isso explicará tudo para você - os "pin-outs", interrupções, códigos de operação, você escolhe!
Lembre-se de que o hardware torna tudo isso possível. Estude o hardware. Você não vai se arrepender.
.
fonte
Escreva um sistema operacional com microcontrolador. Eu recomendo um microcontrolador baseado em x86. Um sistema operacional moderno é enorme . Aprenda o básico primeiro.
fonte
Eu gostaria que houvesse um lugar para obter todas as informações sobre o desenvolvimento de seu próprio sistema operacional. O mais próximo disso é o OS Dev Wiki e os fóruns . Eles oferecem uma tonelada de boas informações sobre as informações de configuração, desenvolvimento e hardware do dispositivo.
Além disso, existem alguns ótimos tutoriais no BoneFide , usei o tutorial de introdução de Bran e agora estou procurando um mais recente, baseado no seu chamado Role seu próprio SO do clone UNIX de brinquedo .
Eu segundo check-out: "Sistemas Operacionais: Design e Implementação"
E se você deseja desenvolver no Windows, consulte a publicação no blog de jolson.Edit: Para desenvolvimento no Windows usando o Visual Studio, confira o guia do BrokenThorn ou o wiki do OSDev .
fonte
Um excelente recurso é o material do curso 6.828 do MIT: Engenharia de Sistemas Operacionais.
XV6 - SO de ensino simples, 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
Livro XV6 - explica as principais idéias do sistema operacional 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!
fonte
você também pode querer dar uma olhada no SharpOS, que é um sistema operacional que eles estão escrevendo em c #.
fonte
Existem bons recursos para os fundamentos do sistema operacional nos livros. Como não há muita necessidade de criar novos sistemas operacionais a partir do zero, você não encontrará muitas informações do tipo hobby na internet.
Eu recomendo o livro de texto padrão, "Modern Operating Systems", de Tanenbaum. Você também pode achar útil "Elementos do sistema operacional" de Calingaert - é uma visão geral de um livro que fornece um esboço do que é um sistema operacional do ponto de vista de um designer.
Se você tem algum interesse em sistemas em tempo real (e pelo menos deve entender as diferenças e os motivos dos sistemas operacionais em tempo real), também recomendo o "MicroC / OS-II" da Labrosse.
Editar:
Você pode especificar o que você quer dizer com "mais técnico"? Esses livros fornecem detalhes de implementação de pseudo-código, mas você está procurando um exemplo de sistema operacional ou trechos de código para uma determinada máquina / idioma?
-Adão
fonte
Apenas vindo de outra pergunta. Gostaria de mencionar o Pintos ... Lembrei-me do meu curso de SO com Nachos e o Pintos parece ser o mesmo tipo de coisa que pode ser executado no x86.
fonte
Achei o Linux Kernel Development de Robert Love bastante interessante. Ele mostra como os diferentes subsistemas do kernel do Linux funcionam de maneira muito prática. Como a fonte está disponível, o Linux é o principal candidato a algo para invadir.
fonte
Aqui estão algumas outras páginas do Stack Overflow que vale a pena incorporar nesta discussão:
Obstáculos na criação de um sistema operacional personalizado
Desenvolvendo um sistema operacional para a arquitetura x86
fonte
Meu curso de sistemas operacionais na graduação nos levou a construir vários subsistemas para o OS / 161 , um kernel simples, semelhante ao BSD, que fornece alguns 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.
fonte
Comece a invadir o Minix. É muito menor que o Linux (obviamente) e foi projetado com objetivos de ensino (alguns, pelo menos). Mas não o Minix 3, é uma história totalmente diferente.
fonte
Já respondo, mas quando eu entrei em Sistemas Operacionais na faculdade, começamos com um kernel Linux inicial e adicionamos recursos modernos simplistas (sistemas de arquivos básicos, memória virtual, multitarefa, mutexes). Boa diversão. Você pode pular algumas das coisas realmente loucas de montagem de baixo nível apenas para abafar o modo protegido / e as tabelas de páginas enquanto ainda aprende algumas das entranhas.
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
fonte
Você pode querer olhar para linuxfromscratch .
fonte
Um tutorial de desenvolvimento de sistema operacional simples e básico, projetado para ser o projeto de um semestre. Ele o orienta na criação de um sistema operacional com componentes básicos. Muito bom começo para iniciantes. O artigo relacionado está aqui .
fonte
Gostaria de incluir este repositório Como fazer um sistema operacional para computador de Samy Pesse. É um trabalho em andamento. Muito interessante.
fonte
Um sistema operacional razoavelmente simples de estudar seria o µC / OS. O livro tem um disquete com a fonte.
http://en.wikipedia.org/wiki/MicroC/OS-II
fonte
Confira o projeto MOSA (Managed Operating System Alliance) em 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 do SharpOS.
fonte
Eu brinquei com o Cosmos , que é "um projeto de sistema operacional implementado completamente em linguagens compatíveis com CIL". Está escrito em C #, então estava no meu beco. Para alguém como eu, que nunca tentou criar um sistema operacional, foi realmente muito bom poder colocar o sistema operacional "Hello World" em execução rapidamente.
fonte
Confira este site: http://osix.net/modules/article/?id=359
fonte
Como mencionado acima, o OSDev Wiki é (de longe) a melhor fonte para o desenvolvimento do sistema operacional. Para quem fala alemão, a wiki lowlevel.eu também é ótima. Algo relativamente desconhecido do Incitatus OS , um kernel simples com um pequeno conjunto de aplicativos do espaço do usuário. É ótimo usar para entrar no tópico complicado do desenvolvimento do sistema operacional.
fonte
Movitz é um ambiente Lisp escrito em Common Lisp e rodando "on the metal". Infelizmente, alguns links na página principal do Movitz negam o acesso, mas você pode encontrar instruções sobre como baixar e compilar o código-fonte na página 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. Falhou comercialmente, mas isso não prova para mim que a idéia era ruim.
O manual dos odiadores do Unix é um livro divertido que censura semi-seriamente o conceito de Unix e seus derivados. Muitas seções argumentam sobre a qualidade do conceito da máquina Lisp.
fonte
Aqui está um documento chamado " Escrevendo um sistema operacional simples do zero ". Ele abrange escrever um gerenciador de inicialização, entrar no modo protegido x86-32 e escrever um kernel básico em C. Parece fazer um bom trabalho ao explicar tudo em detalhes.
fonte
O simulador x86 JS e o simulador ARM também podem ser muito úteis para entender como diferentes peças de hardware funcionam e fazer testes sem sair do seu navegador favorito.
fonte
Pergunta interessante para os programadores. Veja, levará muito tempo para criar um sistema operacional como Windows ou Mac, mas se você quiser criar um simples, poderá tentar o seu melhor
Agora você obteve o mestrado (ainda não está um pouco mais a frente) na criação de sistemas operacionais. Agora, distribua esse conhecimento aos seus amigos e, com a ajuda deles, tente criar um sistema operacional tão poderoso quanto Mac, Linux ou Windows.
fonte
Quando você cria um sistema operacional básico, é realmente difícil continuar, porque não há muitos recursos para criar GUIs ou carregar bibliotecas. Mas acho que dar uma olhada no ToAruOS ajudaria muito!
O código sob a superfície desse sistema operacional é tão simples! mas, ao mesmo tempo, ele portou coisas como cairo, python (ainda não, mas em breve) sdl, fez compartilhar memória e também criou seu próprio kit de ferramentas de widgets. Está tudo escrito em C.
Outro sistema operacional interessante seria o pedigreeOS . É feito pelo JamesM (o homem por trás do tutorial do kernel do jamesM . Embora tenha mais recursos que o ToaruOS, também é maior e mais confuso.
De qualquer forma, esses 2 sistemas operacionais o ajudarão muito, especialmente o ToAruOS.
fonte
Quando comecei a trabalhar nos meus sistemas operacionais básicos, precisava 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 fazê-lo do nada (código de montagem puro)
fonte