Como posso construir um pequeno sistema operacional em um computador desktop antigo? [fechadas]

111

Isso pode ser em vão, pois sei que escrever um sistema operacional é insuportavelmente complicado (especialmente para você mesmo).

  • Não espero construir o próximo linux ou windows.

  • Eu sei que vai ser horrível e cheio de erros e não vai funcionar, mas tudo bem.

Eu quero escrever tudo sozinho, em Assembly , C e (alguns) C ++ .

Este é um projeto futuro, já que estou ocupado com algumas outras coisas no momento e não tenho tempo imediatamente, mas achei que deveria perguntar agora, então talvez eu pudesse obter muitas respostas para isso, e poderia construir e ser um recurso útil para este tipo de abordagem (tudo o mais que vi envolveu a construção do minix, usando um gerenciador de inicialização existente, compilando-o em um programa de inicialização virtual, etc).

Quero configurar um dos meus desktops mais antigos com monitor, teclado e mouse e começar a trabalhar em um disco rígido vazio .

Quero aprender a escrever meu próprio bootloader (encontrei muitos recursos sobre isso, mas para completar, por favor, ainda adicione alguns bons), meu próprio driver USB (se for necessário), um driver de CD (se for necessário ), etc. Tudo, desde o início.

  • Como coloco o código no computador? É melhor fazer isso com um disquete? A maioria dos computadores pode fazer isso a partir de um stick USB?

  • De quais drivers eu preciso e você pode sugerir alguma referência para construí-los?

  • Após a sequência de inicialização - e depois? Como entro no modo protegido, etc.

  • Como faço para gerenciar a memória sem a ajuda de um sistema operacional? Devo usar os endereços que quiser? Nenhuma inicialização necessária?

  • O que, sem dúvida, vou encontrar que vai me confundir?

  • Como posso torná-lo um O / S de linha de comando e gráfico?

  • O que é um O / S gráfico integrado? Tipo, como eu faria algo como uma linha de comando, com uma fonte e uma imagem no topo?

  • Onde posso ler sobre como configurar um ambiente multitarefa? (ou seja, tendo duas linhas de comando semelhantes a gráficos rodando lado a lado).

  • Como eu configuraria uma espécie de sistema de janelas? Como faço para exibir gráficos na tela depois que a multitarefa simples estiver configurada?

Acredite em mim, entendo que este é um projeto muito complicado, e provavelmente nunca vou conseguir terminar de concluí-lo ou escrever algo nele que tenha alguma utilidade.

Há muitas outras partes que não mencionei, se você pensar em alguma, sinta-se à vontade para adicioná-las também.

Por favor, coloque um "tópico" por resposta - por exemplo, drivers USB e, em seguida, talvez uma lista de recursos, itens a serem observados, etc.

Além disso, não sugira construir a partir de outro O / S ou código pré-existente. Eu sei que vou ler muito código pré-existente (como o kernel do linux, ou recursos de exemplo, drivers existentes, etc.), mas no final das contas eu quero escrever tudo sozinho. Sei que devo partir de outra coisa, e há muitas outras perguntas sobre isso no SO que poderei ler se mudar de ideia e seguir por esse caminho. Mas este trata de fazer tudo do zero.

Alguma sugestão sobre como torná-lo gráfico? Diferentes modos de vídeo e como trabalhar com eles, etc?

Carson Myers
fonte
14
Este é o meu maior objetivo. Quero tanto escrever um sistema operacional, apenas para me divertir e aprender ... Simplesmente não tenho conseguido perder tempo nos últimos anos. Se você estiver procurando alguém para ajudar ou apenas conversar sobre coisas com você, pode me enviar um e-mail para schmeling88 em gmail.com
Max Schmeling
2
@Max e @Tom, também peguei o bug. Na verdade, estou me preparando para começar desta vez :)
Giovanni Galbo
2
Só não pense em gráficos agora. Unix nunca suportou gráficos diretamente, e não é tão ruim. :-) Mas basicamente não existe uma maneira fácil e portátil de ir além de 800x600 IIRC.
Bastien Léonard
2
Votando para fechar como muito amplo. Semelhante a: stackoverflow.com/questions/254149/… || stackoverflow.com/questions/2800741/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Por quê? Essa questão é antiga e não está mais gerando atividade. Quem se importa?
Carson Myers de

Respostas:

51

Primeiras coisas primeiro. Leia, leia, leia, leia, leia. Você precisa ter um bom entendimento de como o sistema operacional funciona antes de implementar o seu próprio.

Pegue um dos livros de Andrew Tanenbaum sobre sistemas operacionais. Este é o que usamos na minha aula de SO na faculdade:

PDF de sistemas operacionais modernos

Sistemas operacionais modernos na Amazon

Apesar da capa ridícula, é uma leitura fantástica, especialmente para um livro didático. Tanenbaum é realmente um especialista nesta área e suas explicações de como o sistema operacional funciona por baixo do capô são claras e fáceis de entender. Este livro é principalmente teórico, mas acredito que ele também tem um livro que discute mais sobre a implementação. Eu nunca li isso, então não posso comentar sobre isso.

Isso deve ajudá-lo a melhorar o gerenciamento de processos, gerenciamento de memória, sistemas de arquivos e tudo o mais que o kernel do sistema operacional precisa fazer para colocá-lo em um estado inicializável. A partir desse ponto, é basicamente uma questão de escrever drivers de dispositivo para o hardware que você precisa oferecer suporte e oferecer implementações das funções da biblioteca C para fazer chamadas de kernel para coisas como abrir arquivos e dispositivos, ler e escrever, passar mensagens entre processos, etc. .

Leia sobre assembly x86 (supondo que você esteja projetando isso para uma máquina x86). Isso deve responder a muitas de suas perguntas com relação à movimentação entre os modos de operação do processador.

Se você tiver algum conhecimento de eletrônica, pode ser mais fácil começar escrevendo um sistema operacional para um dispositivo embarcado que tenha ampla documentação, porque geralmente será mais simples do que um PC x86. Sempre quis escrever meu próprio sistema operacional também e estou começando a escrever um sistema operacional integrado de microkernel para esta placa de desenvolvimento da Digilent. Ele pode executar o processador MicroBlaze soft-core da Xilinx, que possui uma documentação muito completa. Ele também tem RAM, armazenamento de dados flash, LEDs, interruptores, botões, saída VGA, etc. Muitas coisas para brincar escrevendo drivers simples.

Um dos benefícios de um dispositivo incorporado também é que você pode evitar a gravação de um driver VGA por muito tempo. No meu caso, a placa de desenvolvimento Digilent tem um UART integrado, então posso usar a saída serial como meu console para fazer tudo funcionar e inicializar em uma linha de comando com o mínimo de barulho.

Apenas certifique-se de que o que quer que você escolha como destino tenha um compilador prontamente disponível e bem testado para isso. Você não quer escrever um sistema operacional e um compilador ao mesmo tempo.

Bob Somers
fonte
2
1, mas eu prefiro o livro Tanenbaum Minix (que é mais voltado para a implementação), e realmente não há necessidade de se concentrar apenas na teoria primeiro. Ele não vai escrever um sistema operacional na primeira tentativa, de qualquer maneira. Ele primeiro escreverá um bootloader, em seguida, alternará para o modo protegido e, a seguir, tratará da E / S e assim por diante.
Bastien Léonard
2
1 para escrever um sistema operacional para um chip integrado. No final do dia, você sentirá que fez algo único e é muito mais simples do que escrever um para (digamos) x86, mantendo os mesmos conceitos básicos. Olhe para o TinyOS, por exemplo (embora não seja tecnicamente um sistema operacional, existem coisas como agendador e módulos de tarefas para ele ..)
Kristopher Micinski
29

http://www.osdev.org/ e http://www.osdever.net/

bem-vindo ao mundo do desenvolvimento de sistemas operacionais.

Veja também outros links de documentação x86 em SO's tag wiki : manuais da Intel e da AMD, documentação do compilador / assembler e vários guias.

Ele também sugere o uso de BOCHS ou outro ambiente virtual para depuração, uma vez que você pode executar uma única etapa do bootloader e examinar os registros.

Fnurglewitz
fonte
1
E especialmente wiki.osdev.org !
Matthew Iselin
Não se esqueça do forums.osdever.net :)
Brenden
6
Estou ciente de que esses são recursos úteis, mas acho que pode ser mais útil para leitores futuros se você fornecer algum contexto em vez de um conjunto de links sem explicação.
icktoofay
@icktoofay A questão é muito ampla para ser respondida adequadamente, eu acho.
user253751
15

Eu sugeriria trabalhar, pelo menos no início, em Bochs ou alguma outra máquina virtual, porque você pode levá-lo para onde quiser, é mais fácil de depurar (você pode ver o estado exato do hardware), e se você precisam de ajuda externa para depurar, eles podem usar exatamente o mesmo 'hardware' que você.

O conselho mais útil que tenho é entrar em um estado em que você possa executar o código C o mais rápido possível - ou seja, inicializar, configurar suas tabelas de descritores e chegar a um ponto em que seja seguro executar o C. compilado. senão todo o kernel deve estar em C se você quiser permanecer são e continuar trabalhando nisso. A montagem, embora necessária em alguns lugares, é tediosa e tende a ser difícil de depurar.

hbar
fonte
Vou procurar Bochs para brincar por enquanto, mas eventualmente quero apenas construir isso em algum PC
Carson Myers
Se funcionar no BOCHS, normalmente funcionará em um PC real, modulo diferenças em sua BIOS. A maioria dos seus bugs provavelmente afetarão o BOCHS e o hardware real, mas a diferença é que quando seu código fica preso em um loop infinito no BOCHS, você pode usar o depurador embutido do BOCHS para descobrir onde, e uma única etapa para encontrar como / por quê. No hardware real, tudo que você pode fazer é adicionar impressões de depuração. Usar um depurador economizará horas e dias de coçar a cabeça.
Peter Cordes,
14

Em seu nível mais baixo, o mínimo que um sistema operacional precisa ser capaz de fazer é conduzir o hardware do sistema de alguma forma e de alguma forma carregar e executar algum tipo de "código do usuário". Se você vai começar com um PC, precisa escrever um código que pode ser carregado por ele de um ou outro dispositivo. PCs mais antigos têm um BIOS no firmware que determina como o hardware realiza algumas inicializações (pelo menos vídeo, teclado e alguma forma de armazenamento ou carregador de boot). (Atualização em outubro de 2017: PCs mais novos têm firmware EFI ou UEFI ... o que é uma diferença muito pedante; eles servem aos mesmos propósitos para esta discussão).

Portanto, comece aprendendo os detalhes de baixo nível de como usar o BIOS ou outro firmware no sistema de destino. Ou seja, aprenda a escrever um programa que o BIOS possa carregar e executar. Isso irá eventualmente se transformar em seu gerenciador de inicialização. Comece pequeno. Basta obter um programa que imprima: "Olá, Linus" diretamente do processo de inicialização do firmware (em um disquete ou pen drive USB, seria um bom começo ... ou em um disco rígido, se preferir).

A partir daí, eu recomendo escrever um driver serial muito simples ... atualize seu carregador de boot para inicializar alguma porta serial e inicie um download a partir daí. Em seguida, ele pode executar o código que puxa. A partir daí, escreva um pouco de bootstrap que pode gravar em outro conjunto de blocos (não implementamos um sistema de arquivos ainda ... nem mesmo a análise da tabela de partição; então, apenas lidaríamos com intervalos brutos de blocos no disco no início )

Nesse ponto, o seu carregador de boot deve ser capaz de puxar um novo código através da linha serial, despejá-lo em uma partição (sim, implementar o manuseio da tabela de partição de algum tipo ... se está em conformidade com as convenções padrão do PC depende de você neste momento ) e executá-lo.

A partir daí, você poderá trabalhar em recursos muito mais sofisticados. A partir desta base, você pode escrever e compilar um novo "kernel" ... reinicie seu testbed e tenha o novo kernel implantado nele.

(Seu bootloader deve receber algum sinal, como um BREAK nas linhas seriais de handshaking como um comando para pular o download e apenas inicializar a imagem existente; e deve lidar com algum tempo limite dessa forma também).

De lá, escreva uma camada de terminal e um shell de comando muito simples? Um sistema de arquivos? Implemente comandos para fazer download de novo conteúdo executável diferente do kernel (arquivos ou objetos de algum tipo). E assim por diante.

Naturalmente, você poderia ter começado com um driver de console usando o teclado do PC e vídeo (o BIOS INT 0x16h e INT 0x10H, respectivamente, se bem me lembro). No entanto, sugiro começar com um driver serial, já que você pode automatizar seu ciclo de construção / implantação / teste de qualquer outro sistema (funcional) existente. Visto que seu novo sistema operacional começará como um projeto de compilação cruzada, será essencial que você tenha uma maneira simplificada de lidar com isso.

Não sei até onde você quer levar seu projeto. Uma meta razoavelmente impressionante seria alcançar a "auto-hospedagem". Se você puder criar um montador / compilador simples que permita usar seu novo sistema operacional para (re) construir, vincular e inicializar em uma versão funcional de seu novo sistema operacional ... então você atingiu esse objetivo. (Observe que não é um requisito. Muitos sistemas embarcados nunca serão auto-hospedados e não há nada de errado com isso).

Jim Dennis
fonte
Em hardware moderno, pode ser mais difícil fazer um driver serial funcionar do que escrever drivers de console (vídeo / teclado). Nos vários anos desde que escrevi isto, os velhos conectores seriais comuns tornaram-se praticamente inexistentes em desktops e laptops modernos. Alguns hardwares embarcados e "amadores" ainda têm interfaces RS-232C antiquadas sem a necessidade de emulação USB. Por exemplo: mpl.ch/t2600.html parece ter.
Jim Dennis
12

Se você não se importa em usar a virtualização de hardware, existe um curso (livro + palestras + software) que o levará 'De Nand a Tetris'. Você cria um sistema de computador completo inteiramente por conta própria, desde a porta elétrica NAND (para esses propósitos atômica e fornecida), até a construção do sistema operacional, uma linguagem e, finalmente, a codificação de um jogo simples em sua máquina pessoal.

Acho que é uma ótima ideia e algo que pretendo muito me dedicar em breve. O livro é surpreendentemente barato e acredito que o curso seja ministrado no MIT. Não consigo imaginar nenhuma sensação maior do que ter o conhecimento total e completo de todo um sistema que você mesmo construiu a partir do zero.

Link: http://www1.idc.ac.il/tecs/

Sam
fonte
Eu acho que este link está morto. Alguém conhece alguma outra forma de acessar isso?
Koray Tugay
1
@KorayTugay nand2tetris.org
user253751
10

Eu começaria pequeno e compraria um kit de desenvolvimento integrado 8086 e desenvolveria um sistema operacional multitarefa nele. Uma vez que você tenha um kernel e esteja familiarizado com o trabalho no nível de hardware, você estará pronto para fazer algo mais desafiador.

Construir até mesmo um clone do DOS para display VGA é bastante desafiador. Os detalhes são enormes. :-)

tópicos específicos.

Como coloco o código no computador? É melhor fazer isso com um disquete? A maioria dos computadores pode fazer isso a partir de um stick USB?

O BIOS fará a inicialização elementar.


De quais drivers eu preciso e você pode sugerir alguma referência para construí-los?

qualquer coisa que não seja operações diretas de CPU / memória. Qualquer coisa que não esteja diretamente no manual de referência da CPU.


Após a sequência de inicialização - e depois? Como entro no modo protegido, etc.

O modo protegido fará parte da sequência de inicialização.

então você começa a multitarefa e descobre como iniciar processos.


Como faço para gerenciar a memória sem a ajuda de um sistema operacional? Devo usar os endereços que quiser? Nenhuma inicialização necessária?

Corrigir. Você provavelmente vai querer resolver um sistema de memória virtual eventualmente.


O que, sem dúvida, vou encontrar que vai me confundir?

não ter ferramentas de depuração, não ter IO


Como posso torná-lo um O / S de linha de comando e gráfico?

Com pesar. Procure Windows 3.1 e Linux, em particular X windows.


O que é um O / S gráfico integrado? Tipo, como eu faria algo como uma linha de comando, com uma fonte e uma imagem no topo?

Procure janelas X.


conselho final: estude o linux / x windows. Não é perfeito, mas fornece uma compreensão de uma abordagem. Também estude sistemas embarcados.

Paul Nathan
fonte
ótima resposta, eu já tenho o kernel do Linux em mãos e irei olhar para o windows 3.1 com certeza.
Carson Myers
8

Vejo muitas referências boas a sites de desenvolvimento de SO, então descreverei uma abordagem diferente:

Se você deseja a experiência de implementar um sistema operacional totalmente novo, existem opções de hardware muito melhores do que um PC antigo. Com a arquitetura do PC, você gastará uma quantidade excessiva de seu tempo codificando artefatos desinteressantes de seus 30 anos de história de design. Por exemplo, apenas a parte do bootloader do projeto provavelmente esgotou muitos programadores corajosos.

Por exemplo, você precisará de um conjunto de drivers para ler o kernel do disco e / ou da rede. Então você precisará do código para entrar no modo protegido. Nesse ponto, você precisa de outro conjunto de drivers! Muito pouco do trabalho que você faz para colocar o chip no modo protegido será transferível depois desse ponto. Você deseja executá-lo em um PC diferente + - 4 anos e precisará de outro conjunto de drivers.

Procure iniciar um ARM ou outro chip "embutido" de 32 bits. Existem placas de desenvolvimento baratas disponíveis, ou você pode soldar as suas próprias! Alguns possuem ethernet e usb integrados. Acho que você vai se divertir mais trabalhando em uma arquitetura sã e não rígida e talvez acabe com algumas habilidades reutilizáveis.

Marsh Ray
fonte
não exatamente o que eu pedi, mas +1 por me enviar pela tangente da leitura
Carson Myers
Marsh está te dando bons conselhos. Os detalhes de baixo nível da arquitetura x86 / BIOS são complexos. Você provavelmente ficará atolado nesses detalhes, impedindo-o de se concentrar em questões maiores, como gerenciamento de memória e agendamento de processos. Escolha uma arquitetura "mais limpa" com uma porta serial. Você será mais feliz no longo prazo.
Barry Brown
8

Mais do que qualquer outra coisa, se você deseja que isso funcione em hardware real, você precisa absolutamente de uma cópia do manual do seu processador. Os manuais da Intel ( http://www.intel.com/products/processor/manuals/ ) são inestimáveis. Eles abrangem tudo, desde a troca de modos (real / protegido) até o gerenciamento de memória virtual (se você escolher ir tão longe) para fazer syscalls (se você chegar ao modo de usuário). Mais importante ainda, eles explicam em grande detalhe uma série de coisas que devem ser configuradas para que as coisas funcionem, como o TSS e os registradores de segmento, que a maioria dos textos do sistema operacional não discute porque estão mais preocupados com conceitos de nível superior do que com o processador. detalhes específicos.

csgordon
fonte
E você pode obter cópias impressas gratuitamente através da Intel.
Matthew Iselin
8

O OS Development Series @ BrokenThorn pode lhe interessar.

tomzx
fonte
Seu código está quebrado. Mas o tutorial em si é ótimo.
Szewczyk
8

Tente ler o código de um sistema operacional pequeno e básico, como o MikeOS.

Como alternativa, sugiro os seguintes passos (deve ser divertido!):

  1. Escreva uma máquina virtual. Defina todas as instruções do processador para que você conheça seu sistema por dentro e por fora. Faça a interface com SDL para teclado, mouse, tela e acesso de áudio. Mantenha a simplicidade para que você possa encaixar tudo em sua cabeça de uma vez. Não precisa ser uma máquina virtual de última geração, apenas aquela que pode emular a função de um computador 'real'.
  2. Escreva um assembler para o processador da sua máquina virtual. Lembre-se de que esse assembler não precisa ser um programa escrito na linguagem da máquina virtual, mas qualquer coisa que possa converter sua linguagem assembly em código de máquina.
  3. Defina um formato executável e escreva um vinculador simples.
  4. Você tem todas as peças para escrever seu sistema operacional agora! Escreva-o na linguagem assembly, monte-o ... etc. você não precisa de um processo de inicialização tão complicado, apenas faça com que sua máquina execute o sistema operacional primeiro.

Os passos acima podem parecer estúpidos para escrever um sistema operacional simples, mas ei, é muito divertido.

ouiliame
fonte
6

uma olhada no MikeOS . É um sistema operacional bastante simples escrito em assembly legível (como no comentário). Mesmo sendo bastante simples, ele possui uma interface gráfica do usuário e oferece suporte a algumas redes e multimídia.

editar : MenuetOS é gráfico. Também é escrito em linha reta, mas é mais sofisticado do que MikeOS

Alex
fonte
6

Você tem uma meta ambiciosa. Mas a execução é a chave.

A maioria das abordagens estruturadas (livro-texto ou aula de faculdade) irá guiá-lo através do processo, mas elas fornecem muito código essencial que encobre os detalhes misteriosos de sua plataforma escolhida e permite que você se concentre nas ideias gerais: agendamento de processos, gerenciamento de memória, prevenção de deadlock, E / S e assim por diante.

Meu conselho é este: diminua suas expectativas e comece com uma pergunta básica.

O que é um sistema operacional?

Um cientista da computação (espero) nunca dirá que um sistema operacional é uma interface gráfica de usuário, ou um navegador da web, ou uma maneira de conectar dispositivos USB, ou qualquer coisa que um usuário possa ver ou tocar. Em vez disso, um sistema operacional em seu nível mais fundamental são as coisas que mencionei acima. Todos eles caem sob um grande guarda-chuva: gerenciamento de recursos.

Um sistema operacional nada mais é do que um programa que gerencia os recursos de hardware do computador: memória, CPU e periféricos.

Este é um sistema operacional simples: um programa permite que o usuário digite um programa (em hexadecimal ou binário) usando uma conexão serial. Uma vez que o programa tenha sido digitado, ele o executa. Quando o programa é concluído, o controle é devolvido ao usuário, onde ele pode executar o programa novamente ou digitar um novo.

Faça isso em uma arquitetura "limpa", como um processador ARM integrado com cerca de 64 K de memória. Você pode codificar isso em assembly depois de alguns dias aprendendo os meandros do ARM. E voila! , você tem um sistema operacional.

Ele faz tudo o que um sistema operacional deve fazer:

  • Ele gerencia a memória não permitindo que o usuário substitua o próprio sistema operacional.
  • Ele agenda a execução de um único processo.
  • Ele controla a E / S para o único periférico serial.

Isso lhe dá um bloco de construção para começar. Você tem muitas opções agora. Talvez um deles seja permitir que dois programas sejam carregados na memória e deixar que o usuário decida qual deles será executado em seguida.

Ou você pode deixar o usuário suspender a execução de um programa, alternar para o outro, suspender e retornar. Esta é uma multitarefa rudimentar, embora seja inteiramente manual.

Suas escolhas são ilimitadas, mas cada uma é um pequeno passo em relação ao que você tinha antes.

É divertido se você não definir suas metas muito altas!

Barry Brown
fonte
4

Muitas escolas têm aulas de SO que fazem muito do que você descreve. Minha escola (CMU) ensinava SO em C, e escrevemos um kernel, sistema de arquivos e shell, e recebemos um código para um carregador de boot.

Infelizmente, não consegui encontrar nenhum recurso definitivo para este curso (15-412) na web, e ele evoluiu com o tempo. Mas talvez as pessoas possam postar links para fontes e tarefas para escolas que têm bons recursos na web.

Drew Hoskins
fonte
3

Você pode gostar deste tutorial chamado "Role seu próprio sistema operacional clone do UNIX de brinquedo", é muito esclarecedor e deve ajudá-lo em seu caminho.

Boa sorte.

enegrecido
fonte
1
Embora seja brilhante ter um tutorial tão detalhado, há vários bugs que os iniciantes encontram constantemente. O tutorial é ótimo se e somente se você estiver disposto a abrir também coisas como os Manuais da Intel e pensar sobre o que está fazendo (ou seja, não copie e cole!).
Matthew Iselin
3

Estude o Sistema A2 (anteriormente chamado de sistema Oberon ) para ideias que você pode roubar. É um sistema operacional gráfico construído por apenas duas pessoas, embora uma delas seja Niklaus Wirth. Lançado pela primeira vez por volta de 1990 e a velocidade é surpreendentemente boa. Existe um livro de Gutknecht.

Norman Ramsey
fonte
3

Sobre a programação de gráficos de baixo nível, isso fornecerá muitas informações: http://www.osdever.net/FreeVGA/home.htm . (É muito interessante para o modo de texto também.)

O que, sem dúvida, vou encontrar que vai me confundir?

Você vai perceber que no PC há um monte de coisas que não estão claras: o conjunto de instruções x86 em si é complicado, e quando você obtém acesso direto ao hardware, pode demorar um pouco para entender como escrever um único caractere na tela .

Não se preocupe com disquetes e coisas do gênero, na maioria das vezes você usará um emulador como Bochs ou QEmu.

Bastien Léonard
fonte
3

Você pode querer considerar dar uma olhada em Operating Systems Concepts, de Abraham Silberschatz - Noções básicas sobre conceitos de programação de sistemas é um requisito fundamental, dê uma olhada nas partes internas do kernel F / OSS dos sistemas operacionais linux * BSD e GNU / Linux , especialmente as versões anteriores, que são provavelmente um pouco mais documentados.texto alternativo texto alternativo

amaterasu
fonte
1
Silbershatz é realmente muito bom, mas de alto nível.
Paul Nathan
Acordado; No entanto, eu diria que é fundamentalmente essencial. Documentação com os sistemas operacionais modernos de Tanenbaum (mencionado anteriormente)
amaterasu
2

Dê uma olhada no Minix . Estude o código-fonte junto com " Projeto e implementação de sistemas operacionais ". Considere fazer contribuições para o projeto. Acho que o Minix é um sistema operacional realmente bom e promissor em desenvolvimento. É também um projeto bem financiado. Isso significa que você pode até ser pago por suas contribuições!

Vijay Mathew
fonte
1

É muito fácil graças ao fato de que a BIOS já possui muitas funções de entrada / saída incorporadas para alterar o modo da tela, alterar a cor dos pixels, escrever texto na tela e muitas outras coisas. No entanto, ele não inclui suporte para sistemas de arquivos, que é uma das poucas coisas que você deve incorporar em seu sistema operacional.

O BIOS carrega o primeiro setor no disco rígido e começa a executar o código a partir daí, então seu sistema operacional deve ser colocado com a primeira instrução no primeiro setor do disco rígido.

Este artigo da Wikipedia deve ajudá-lo a começar com as interrupções do BIOS para escrever texto na tela, receber teclas do teclado e outras coisas. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Mesmo se você planeja usar c ++, eu recomendo fortemente a leitura sobre programação em assembly, pois é vital para entender como o hardware funciona.

Alpha_Pi
fonte