Quais são alguns recursos para iniciar o desenvolvimento do sistema operacional? [fechadas]

589

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:

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)

Giovanni Galbo
fonte
5
Não se esqueça de forums.osdever.net
Brenden
15
Por que esse tipo de boas perguntas de uso geral sempre fecha no SO?
Pratik Singhal
30
Esta pergunta tem 370 upvotes, foi votada 422 vezes e existe desde o lançamento do StackOverflow. A comunidade parece ter gostado, mas, por alguma razão, um punhado de pessoas tem que arruiná-la para todos. É por isso que estou começando a realmente não gostar SO
Giovanni Galbo 15/09/14
1
Existe uma tendência muito interessante com o Unikernels (faça apenas uma coisa e faça bem) em que esses esforços são muito relevantes. Geralmente, você pode inicializar a frio um unikernel em uma máquina virtual e ter o código do usuário em execução em menos de um segundo. Eu vi uma solução onde apenas a pesquisa de DNS para tal serviço um, faz o gatilho servidor DNS uma "máquina virtual boot" para que esteja pronto quando a solicitação real para o serviço entra.
Thorbjørn Ravn Andersen

Respostas:

95

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).

Adam Davis
fonte
Ei, senhor, o COSMOS é uma boa ferramenta para desenvolver o sistema operacional?
Vikas Verma
@VikasVerma Eu não usei, então não sei.
Adam Davis
@AdamDavis O primeiro link está quebrado (e os outros também parecem estar). Por favor, conserte-os!
Nbro 14/04
35

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.

Mike Stone
fonte
Eu tenho o último livro de Tanenbaum, mas o código fonte do minix3 parece enorme! Eu tenho um objetivo semelhante ao OP, embora não queira construir um kernel do zero, quero realmente entender como um kernel funciona e o que ele faz. Tanenbaum book and minix3Seguir o suficiente para fazer alterações no minix3 me ajudará a contribuir com o kernel do linux?
Gideon
32

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.

.

Richard T
fonte
18

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

Paul Nathan
fonte
2
alguma idéia por onde começar com este? Eu estou muito interessado? qual kit comprar..livros para você começar etc #
Julio
@Uncle: Ainda não encontrei um livro de sistemas embarcados de primeira linha. Eles são de alto nível e assumem um sistema operacional ou são direcionados a um engenheiro elétrico e ignoram o código. Quanto aos kits, um google encontra um " bifferos.bizhat.com ". Existem também kits ARM por aí. Eu não gosto de arquiteturas de harvard pessoalmente, por isso não estou interessado no arduino, mas é o mais popular. Para trabalhos mais exóticos, o XC-1A também é bom.
Paul Nathan
@Paul apreciaria se você pudesse expandir sua resposta. Eu olhei para o AVR e o Arduino, mas vi recentemente o .NET micro. Sou muito cara de LOB de abstração mais alta, mas quero começar a andar pela pilha. Onde você recomenda começar?
gideon 28/03
@ giddy: Os AVRs são a moda atual. Eles são pequenos e baratos, mas eu realmente não gosto da arquitetura. Eu recomendaria obter um kit de desenvolvimento ARM (custo estimado de ~ 100). Eles são populares em aplicações comerciais.
Paul Nathan
@Paul thanks! Não ouvi muito sobre ARM. E quanto ao .net micro? Estou um pouco preocupado em queimar alguma coisa. A maioria dos kits vem com algum tipo de instrução, certo? obrigado novamente.
gideon 31/03
16

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 .

Steve Tranby
fonte
1
Relacionado: O wiki de tags x86 da SO possui links para manuais Intel / AMD e muitas coisas boas.
Peter Cordes
15

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!

Jens A. Koch
fonte
11

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

lomaxx
fonte
9

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

Adam Davis
fonte
7

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.

LB40
fonte
7

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.

Anders Rune Jensen
fonte
6

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.

Phil Miller
fonte
6

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.

Michael Foukarakis
fonte
5

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

basszero
fonte
4

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.

jfs
fonte
32
Compilar um sistema operacional está muito longe de escrever um.
você precisa saber é o seguinte
7
@duskwuff Você está certo, mas aprenderá muito com isso. Então você pode ir em frente e escrever o seu.
JFS
4

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 .

Srujan
fonte
Ótimos recursos. O documento refere-se a Nachos (2500 linhas de código), OS / 161 (11000), MINIX (30000), GeekOS. Vá para cada página oficial da universidade e você encontrará o código-fonte, simulador e ferramentas, bem como as tarefas por ano.
precisa saber é o seguinte
4

Gostaria de incluir este repositório Como fazer um sistema operacional para computador de Samy Pesse. É um trabalho em andamento. Muito interessante.

ddetoni
fonte
Obrigado, eu pretendia adicionar isso à lista depois que o encontrei no Reddit, mas esqueci completamente.
Giovanni Galbo 08/12/13
3

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.

tgiphil
fonte
3

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.

Tim S. Van Haren
fonte
3

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.

no92
fonte
2

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.

Alabardeiro
fonte
2

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.

James Moore
fonte
Eu segui este livro e desenvolvi com base em seu código. É incrível começar com esse livro.
user3405291
2

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.

earizon
fonte
1

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

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

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.

BharatKhanna
fonte
Editors Edite minha resposta e espaço remove betweern http: www e como eu sou um recém-chegado assim, eu não tenho tão alta repu, PLZ fazer essas coisas para mim
BharatKhanna
1

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.

user69969
fonte