• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Colector Boy

Criar um Sistema Operativo - Requisitos

38 mensagens neste tópico

Boas.

1->Como o titulo diz gostava de saber quais os requisitos para um programador possa fazer um sistema operativo.

Exemplo: Saber C/C++ , Assembly ?

2->Quais os requisitos que um programador precisa para fazer um carregamento de um Sistema Operativo.

Exemplo: Quando colocamos um CD do Linux aparece o texto a dizer que está a ser carregado para a memória e depois mostra-nos a interface gráfica, quais os requisitos para fazer isso?

É possível colocar um programa feito em C/C++  a executar fora do Sistema Operativo, ou seja, executar só programa sem ter que executar o Sistema Operativo?

Já agora quando é que uma pessoa pode/deve recorrer ao Assembly (dentro do código feito em C/C++) para fazer determinadas coisas?

Há coisas que o Assembly consegue fazer que o C/C++ não consegue?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

1->Como o titulo diz gostava de saber quais os requisitos para um programador possa fazer um sistema operativo.

Exemplo: Saber C/C++ , Assembly ?

Pelo menos Assembly e C. C++ dá mais trabalho do que C.

2->Quais os requisitos que um programador precisa para fazer um carregamento de um Sistema Operativo.

Exemplo: Quando colocamos um CD do Linux aparece o texto a dizer que está a ser carregado para a memória e depois mostra-nos a interface gráfica, quais os requisitos para fazer isso?

Requisitos, hmm. Precisas de ter desenvolvido um kernel básico que faça boot em modo texto antes sequer de adicionar suporte para modo gráfico. Quando tiveres por exemplo, suporte para processos e gestão de memória, acho que já podes pensar em fazer um driver para a parte gráfica (podes usar a interface VESA), e aí sim, pensar em fazer uma interface gráfica para o sistema.

É possível colocar um programa feito em C/C++  a executar fora do Sistema Operativo, ou seja, executar só programa sem ter que executar o Sistema Operativo?

Sim. O próprio sistema operativo é isso mesmo, um programa feito em C/C++ que executa fora de um SO existente.

Já agora quando é que uma pessoa pode/deve recorrer ao Assembly (dentro do código feito em C/C++) para fazer determinadas coisas?

Há coisas que o Assembly consegue fazer que o C/C++ não consegue?

Quando não consegues fazer o mesmo em C/C++, ou quando a maneira de fazer é mais lenta, e precisas de mais performance (em zonas críticas do código). E sim, código Assembly é mais versátil (na medida que permite fazer mais coisas) do que código C/C++. Podes é utilizar uma técnica chamada inline-assembly que te permite programar em código Assembly na linguagem C.

Se queres começar nesta área começa por ler o site OSDev.

Podes ver também uma pequena amostro de um kernel que eu comecei a desenvolver há uns tempos, talvez seja um bom exemplo para quem se está a iniciar e não sabe por onde começar: http://code.google.com/p/flush/source/browse/#svn/trunk

Já agora, os manuais oficiais para o processador x86 que encontras no site Intel são muito bons, era demasiado detalhadas na maioria das situações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso de colocares Assembly com o C/C++ já tinha ouvido falar e até já tinha visto.

1-> O que é preciso para fazer um Kernel?

2-> Um kernel deve ser desenvolvido em C ou Assembly?

3-> O que um Kernel deve fazer?

4-> Como colocar o Kernel a fazer boot?

5-> A parte de modo gráfico que falas é/pode ser feito em DirectX/Open GL ou tem de ser feito com outra coisa?

6->O suporte para processos é feito como?

7-> A gestão de memória é feita como?

8-> Este driver para a parte gráfica de que falas é o que?

Eu sei que um driver é algo que faz algo (geralmente o Hardware) funcionar correctamente.

9->O que é interface VESA?

10->O que é a interface gráfica para o sistema" de que falas?

11->Qual a diferença entre a Interface gráfica que falas e o driver?

12->Como é que colocas um programa que esteja numa partição, num CD/DVD a correr num pen drive,etc a correr fora do Sistema Operativo?

13->E em que extensão deve estar esse programa, ou seja, qual deve ser a extensão do programa (executável) compilado?

14->Imagina que eu queria fazer um boot menu como aquele que o Linux cria se o instalares depois de teres o Windows instalado.

Em que me permitia correr uma aplicação feita em C e/ou Assembly ou correr o Sistema Operativo, ou seja, tinha um boot menu que tinha (exemplo):

Escolha o que deseja correr:

->Windows

->Aplicação

O que precisas para fazer uma coisa assim?

15->Relativamente ao requisitos devo ter: (por aquilo que disseste)

->kernel básico que faça boot em modo texto

->suporte para processos

->suporte para gestão de memória

Não é preciso gestor de ficheiros?

(Não fundamentais para funcionamento)

->Interface gráfica

Desculpa lá tanta pergunta mas sou novato (tenho algumas bases em C) e tenho grande interesse nesta área.

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê os recursos que te dei. O wiki do OSDev tem resposta para quase tudo. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"Já agora, os manuais oficiais para o processador x86 que encontras no site Intel são muito bons, era demasiado detalhadas na maioria das situações."

Se desenvolver num Intel x86 também vai funcionar num AMD?

Uma pessoa capaz de fazer isto que eu disse também é capaz de fazer um emulador como aqueles de consolas e até de PCs (como emuladores da Amiga e etc) ?

São coisas que estão no mesmo grão de dificuldade?

Existe alguma função em C/C++ que permita criar pastas?

Sem ser as funções de outros sistemas operativos.

Eu não sei Assembly mas no próximo semestre vamos dar (estou no 1º da faculdade -ISEP, se tudo correr bem passo para o 2º) e este projecto não é para fazer já porque até mesmo que eu quisesse não tenho conhecimento para o fazer.

Obrigado pela ajuda, dicas,disponibilidade e pelos links.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se desenvolver num Intel x86 também vai funcionar num AMD?

Sim, desde que os processadores sejam compatíveis com a arquitectura IA-32, como por exemplo a linha x86 da Intel, a linha da AMD, da Transmeta, Cyrix, etc...

Uma pessoa capaz de fazer isto que eu disse também é capaz de fazer um emulador como aqueles de consolas e até de PCs (como emuladores da Amiga e etc) ?

Se tens capacidade para fazer um SO de raíz, diria que também tens capacidade para fazer um emulador.

São coisas que estão no mesmo grão de dificuldade?

Sim e não. Depende do nível de complexidade do SO e do nível de complexidade da arquitectura que queres emular. Emular um Game Boy por exemplo, é mais fácil do que fazer um SO (pelo menos um que não seja muito básico).

Existe alguma função em C/C++ que permita criar pastas?

Sem ser as funções de outros sistemas operativos.

Penso que o standard do C/C++ não tem funções para manipulações de pastas, já que são tarefas que dependem da API do SO. Normalmente usa-se a interface definida no standard POSIX.

1-> O que é preciso para fazer um Kernel?

2-> Um kernel deve ser desenvolvido em C ou Assembly?

3-> O que um Kernel deve fazer?

Já te respondi no outro post.

4-> Como colocar o Kernel a fazer boot?

Usando o que se chama de bootloader. Para o meu kernel usei o GRUB, que é um bootloader universal, também utilizado nas distribuições de Linux. O teu kernel funciona com o GRUB desde que obedeças à interface Multiboot.

5-> A parte de modo gráfico que falas é/pode ser feito em DirectX/Open GL ou tem de ser feito com outra coisa?

Até teres DirectX e OpenGL, hehe, tens muito trabalho pela frente. Normalmente as interfaces gráficas utilizam apenas a parte 2D da placa gráfica, porque é muito mais fácil. Só recentemente, começando pelo Aero no Windows Vista, Compiz/Beryl no Linux (e provavelmente também o MacOS X) é que os SO têm essa capacidade. Vê este link: http://en.wikipedia.org/wiki/Compositing_window_manager.

6->O suporte para processos é feito como?

7-> A gestão de memória é feita como?

8-> Este driver para a parte gráfica de que falas é o que?

É a interface com a placa gráfica, para poderes mostrar coisas bonitas no ecrã. :thumbsup:

9->O que é interface VESA?

É uma interface standard, normalmente suportada por todas as placas gráficas para seleccionar diferentes resoluções, alterar entre modo texto e modo gráfico, e escrever coisas no ecrã. Funciona à base de BIOS calls.

10->O que é a interface gráfica para o sistema" de que falas?

É o GUI com que o utilizador interage.

11->Qual a diferença entre a Interface gráfica que falas e o driver?

A interface gráfica é implementada utilizando as funções que o driver implementa (escrever um pixel no ecrã, mudar o modo gráfico, etc).

12->Como é que colocas um programa que esteja numa partição, num CD/DVD a correr num pen drive,etc a correr fora do Sistema Operativo?

Isto normalmente depende do bootloader. No caso do GRUB, ele tem suporte para um monte de sistemas de ficheiros, e no meu caso, optei por construir uma imagem ISO. Basta criares um ficheiro para o GRUB, dizeres o que queres executar, e ele faz o resto. Mas se quiseres executar algo sem um bootloader, então tens de ver qual é a interface da BIOS. Vê isto: Boot sequence on standard PC (IBM-PC compatible).

13->E em que extensão deve estar esse programa, ou seja, qual deve ser a extensão do programa (executável) compilado?

Extensões são apenas uma convenção de cada sistema operativo. Para o processador é tudo apenas código. Basta dizeres ao bootloader qual é o ficheiro (com ou sem extensão) e ele vai assumir que o ficheiro contém código válido para o CPU executar.

14->Imagina que eu queria fazer um boot menu como aquele que o Linux cria se o instalares depois de teres o Windows instalado.

Em que me permitia correr uma aplicação feita em C e/ou Assembly ou correr o Sistema Operativo, ou seja, tinha um boot menu que tinha (exemplo):

Escolha o que deseja correr:

->Windows

->Aplicação

O que precisas para fazer uma coisa assim?

Nunca estudei sobre bootloaders, por isso não sei muitos detalhes. Mas deve estar bem documentado no link do OSDev.

15->Relativamente ao requisitos devo ter: (por aquilo que disseste)

->kernel básico que faça boot em modo texto

->suporte para processos

->suporte para gestão de memória

Não é preciso gestor de ficheiros?

(Não fundamentais para funcionamento)

->Interface gráfica

Sim, sistema de ficheiros também é bastante importante, mas se quiseres brincar primeiro em fazer uma interface gráfica podes fazê-lo sem ter suporte para ficheiros no kernel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

eu tenho uma questão:

Estou agora a estudar C e uma das primeiras coisas que aprendi foi que ao guardar um projecto, ele guarda o ficheiro compilado e o código fonte. (lógico :()

Caso eu tenha já desenvolvido um sistema operativo, penso que é óbvio que não colocaria o exe, portantos... quais os ficheiros que ia utilizar para o SO?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

eu tenho uma questão:

Estou agora a estudar C e uma das primeiras coisas que aprendi foi que ao guardar um projecto, ele guarda o ficheiro compilado e o código fonte. (lógico :()

Caso eu tenha já desenvolvido um sistema operativo, penso que é óbvio que não colocaria o exe, portantos... quais os ficheiros que ia utilizar para o SO?

cumps

Não percebi bem a tua questão.

Quando compilas o teu sistema operativo, ele gera também um executável com código. Esse código apenas não é executável directamente a partir do teu SO (Windows, Linux, etc) mas pode ser executado a directamente partir da BIOS ou de um bootloader.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ahh :( ok. é que eu pensava que 'executável' era o formato por defeito de aplicaçõe windows apenas.

Cumps :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ahh :( ok. é que eu pensava que 'executável' era o formato por defeito de aplicaçõe windows apenas.

Cumps :)

Como eu disse antes, um formato é um binário com código executável. A extensão que ele tem, é irrelevante para o que está lá dentro. No caso do Windows por exemplo, a extensão '.exe' apenas diz ao Windows que os dados contidos no ficheiros são código executável, e para ele chamar o loader de programas. Em Linux, isso não é feito com extensões no ficheiro, mas sim com um bit na estrutura do ficheiro, que diz se um ficheiro é código executável. Podes meter um ficheiro com essa modo na consola, fazendo simplesmente: 'chmod +x ficheiro'

Já agora, cada executável também tem um formato associado, que menciona as características do executável, os pontos de entrada do código, tabelas de simbolos, informações de debug, etc. Em Windows é utilizado o formato PE, e em Linux (hoje em dia, já foram utilizados outros) o ELF.

No caso do GRUB, é um bootloader que funciona com ficheiros ELF, por isso basta compilares o código com o GCC com umas opções especiais para não usar a biblioteca de C do SO e funciona. Agora se quiseres fazer mesmo um bootloader, tens de compilar o código sem recurso a nenhum formato de executável. Neste caso o código é simplesmente "enfiado" no ficheiro e começa logo offset 0.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Brutal este tópico. Carradas de informação. Continuem!

Espero não cortar o fio à meada... triton, já tenho ouvido várias pessoas fazer essa afirmação de que o gamboy é facil de emular. Que características do gameboy é que o tornam facil de emular?

Eu por acaso tinha um emulador de gameboy na minha calculadora e fiquei boquiaberto com aquilo. Basicamente corria qualquer jogo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Brutal este tópico. Carradas de informação. Continuem!

Espero não cortar o fio à meada... triton, já tenho ouvido várias pessoas fazer essa afirmação de que o gamboy é facil de emular. Que características do gameboy é que o tornam facil de emular?

Eu por acaso tinha um emulador de gameboy na minha calculadora e fiquei boquiaberto com aquilo. Basicamente corria qualquer jogo.

Como é uma máquina antiga, é ligeiramente mais fácil de emular do que uma PSX. :(

Para começar o processador é de 8bits, é um Z80 ligeiramente modificado. Tem bastantes instruções, mas arranjas o manual no site da Zilog, que explica cada instrução com exemplos e tudo (se bem me lembro). Acho que o mais complicado é mesmo o sistema de memória, que usa o que se chamam de bancos de memória (bank switching), mas nada de muito complicado.

O chip de som e de vídeo também me pareceram simples na altura em que andei a ver informações sobre o gajo. Já tenho um emulador de Z80 mais ou menos encaminhado, mas há meses que não pego nisto. Talvez um dia destes continue o emulador. :)

Resumindo, o que torna mais fácil é mesmo a quantidade de informação que se arranja na internet sobre a arquitectura da máquina. Não é a mais fácil de emular, mas é relativamente simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá, mas eu vou ter de dizer isto, mas não pretendo de qualquer forma dizer-te o que deves ou não fazer, é só o que eu penso...

Mas um programador que necessita de vir a um fórum perguntar como se "cria um sistema operativo", principalmente uma pessoa que coloca todas essas questões que colocaste, acho que nem se quer deveria considerar aventurar-se em tal projecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu ao contrário do Nazgulled, vou dizer-te que fazes bem em perguntar.

Já estás a fazer mais do que 99% do pessoal que diz quer criar um SO. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Besides, saber como fazer não significa que tenhas que fazer. É como muita coisa na vida. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá, mas eu vou ter de dizer isto, mas não pretendo de qualquer forma dizer-te o que deves ou não fazer, é só o que eu penso...

Mas um programador que necessita de vir a um fórum perguntar como se "cria um sistema operativo", principalmente uma pessoa que coloca todas essas questões que colocaste, acho que nem se quer deveria considerar aventurar-se em tal projecto.

Eu penso tentar criar um SO mas não disse que ia tentar faze-lo já.

Comecei a colocar todas estas questões pois são dúvidas que eu tinha e também espero que as minhas dúvidas possam ser as duvidas de outras pessoas no futuro, o que se elas tiverem e virem este tópico podem ficar logo encaminhadas e ter uma ideia daquilo que tem que percorrer (aprender) para conseguir criar/realizar um projecto como um SO.

Claro que as dúvidas "praticas" prevalecem na medida em que não fiz nem tenho "grau" para fazer isso (para já) mas pelo menos fico com uma ideia geral e teórica e quando eu decidir fazer um SO já tenho sei as coisas "básicas" para colocar as mãos na massa.

Eu ao contrário do Nazgulled, vou dizer-te que fazes bem em perguntar.

Já estás a fazer mais do que 99% do pessoal que diz quer criar um SO. :(

LOL

Obrigado.

Mas de perguntar até fazer vai um longo percurso.

Se bem que aquilo que eu queria fazer para 1º SO (o mais básico que há) era só um ambiente de trabalho (uma imagem de fundo) que tinha um ícone e que esse ícone permitia desligar o PC (quando clicássemos 2 vezes) e claro tínhamos o ponteiro do rato que permitia ao utilizador clicar no ícone.

Esta é a ideia mais básica que me vem de SO.  :)

->faz boot,

->cria o ambiente de trabalho,

->coloca ícone no ambiente de trabalho,

->faz aparecer o ponteiro do rato

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, isso não é básico, básico é fazeres um que arranque, que escreva qualquer coisa no ecrã (texto) e que quando carregarem no enter ele se desligue.

Criar algo gráfico já é lá mais para a frente :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL!!!

Eu estava a pensar algo básico a usar interface gráfica.

:(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tal como o fnds disse, interface gráfica não é mesmo nada básico. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que as dúvidas "praticas" prevalecem na medida em que não fiz nem tenho "grau" para fazer isso (para já) mas pelo menos fico com uma ideia geral e teórica e quando eu decidir fazer um SO já tenho sei as coisas "básicas" para colocar as mãos na massa.

Acho que há demasiadas coisas mais importantes que deves saber antes de se quer ponderares desenvolver um SO. Até porque muitas dessas coisas "básicas" aprendes intuitivamente (e melhor) com o tempo quando já tiveres alguma experiência em programação.

Já estás a fazer mais do que 99% do pessoal que diz quer criar um SO. :)

Ás vezes o "querer" não basta, mas não pretendo dissuadir ninguém seja do que for.

Acho que este é um daqueles casos onde o pessoal mete a carroça à frente dos bois e só estava a "alertar" para isso. Mas cada um sabe de si, é só a minha opinião.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então e caso eu queira criar uma aplicação que funcione em windows, que simule a interface de um sistema operativo, o que lhe devo chamar? Simplesmente aplicação? não se pode considerar sistema, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então e caso eu queira criar uma aplicação que funcione em windows, que simule a interface de um sistema operativo, o que lhe devo chamar? Simplesmente aplicação? não se pode considerar sistema, certo?

Podes chamar-lhe de emulador, ou simplesmente uma biblioteca, depende... O que estás a dizer é o mesmo que o WINE faz em Linux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O zubimaster quis dizer algo como o Windows Media Center que é uma aplicação que correr em cima do Windows XP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O zubimaster quis dizer algo como o Windows Media Center que é uma aplicação que correr em cima do Windows XP.

Ya :) o que se chama por exemplo a um programa como o media center?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora