C e assembler

66 respostas
M

Olá,
Pretendo criar um sistema operacional básico, em assembly e java.
Como gosto de assembly e também de java, em vez de pegar o kernel do linux (que é em assembly) e utilizar [color=brown]C[/color] para programar o sistema, optei por criar o meu próprio kernel. Vai ser fácil criar o kernel, pego o código fonte do java (se não me engano o java é livre), e ele chamará o java automaticamente para executar o sistema.
Como o assembly vai invocar programa em [color=brown]C[/color](o java)?

66 Respostas

M

Cara, não dá pra usar Java pra fazer um sistema operacional. O Java roda em cima de uma máquina virtual e ela abstrai o hardware. Você não pode acessar um kernel usando Java.

J

sozinho você iria levar no mínimo uns 100 anos para fazer isso. A equipe da microsoft no singularity é enorme, e o projeto tá na prancheta desde 2000. Para você ver como essa idéia não é muito viável.

Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.

B

mcirqueira:
Olá,
Pretendo criar um sistema operacional básico, em assembly e java.
Como gosto de assembly e também de java, em vez de pegar o kernel do linux (que é em assembly) e utilizar [color=brown]C[/color] para programar o sistema, optei por criar o meu próprio kernel. Vai ser fácil criar o kernel, pego o código fonte do java (se não me engano o java é livre), e ele chamará o java automaticamente para executar o sistema.
Como o assembly vai invocar programa em [color=brown]C[/color](o java)?

O kernel do Linux é escrito em quase sua totalidade em C, é claro que existe código em assembly mas não majoritariamente.

Veja no artigo abaixo que a Linguagem C é usada em 97% no kernel Linux enquanto a Linguagem Assembly é usada em pouco mais de 2%.

http://www.h-online.com/open/features/Kernel-Log-15-000-000-lines-of-code-3-0-promoted-to-long-term-kernel-1408062.html

E

mcirqueira:
Olá,
Pretendo criar um sistema operacional básico, em assembly e java.
Como gosto de assembly e também de java, em vez de pegar o kernel do linux (que é em assembly) e utilizar [color=brown]C[/color] para programar o sistema, optei por criar o meu próprio kernel. Vai ser fácil criar o kernel, pego o código fonte do java (se não me engano o java é livre), e ele chamará o java automaticamente para executar o sistema.
Como o assembly vai invocar programa em [color=brown]C[/color](o java)?

Leia o fonte do Java; você vai ver que ele tem uma porção de dependências em relação ao sistema operacional.
O mais fácil no seu caso é pegar a versão do fonte do Java que roda em Linux/Solaris.
O seu sistema operacional, para poder rodar confortavelmente o Java, terá provavelmente de ser uma distribuição do Linux - não um sistema operacional pequeninho em Assembly.
Outra forma é pegar os fontes do Java e começar a remover as dependências em relação ao sistema operacional - o que é bastante difícil, na verdade. Você vai ver quanto trabalho vai dar :frowning:

M

Eu vou criar um kernel em assembly para comunicar com a mémoria do computador e chamar o java para rodar o programa. “Você não pode acessar um kernel usando Java”, mas em c eu posso (o java não é em c?).
Se você não sabe o que é kernel veja aqui:

http://pt.wikipedia.org/wiki/N%C3%BAcleo_(inform%C3%A1tica)

juliocbq:
sozinho você iria levar no mínimo uns 100 anos para fazer isso. A equipe da microsoft no singularity é enorme, e o projeto tá na prancheta desde 2000. Para você ver como essa idéia não é muito viável.

Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.


Esses caras conseguiram em menos de 100 anos fazer o que eu estou querendo fazer:

http://www.jnode.org/

O sistema é todo em java, e o kernel é todo em assembly.

M

Cara, o que vocÊ tá querendo fazer não é trivial. Além do mais, o JNode que você citou e que suponho que você entrou no site e viu os detalhes do projeto é algo meio embrionário. Fazer um kernel e fazer um sistema em java para evocar o kernel é algo extremamente difícil. Como você irá comunicar o kernel com os bytecodes do Java?
Agora vou fazer aquela velhar perguntinha: qual o objetivo do seu projeto?

M
matheuslmota:
Cara, o que vocÊ tá querendo fazer não é trivial. Além do mais, o JNode que você citou e que suponho que você entrou no site e viu os detalhes do projeto é algo meio embrionário. Fazer um kernel e fazer um sistema em java para evocar o kernel é algo extremamente difícil. Como você irá comunicar o kernel com os bytecodes do Java? Agora vou fazer aquela velhar perguntinha: qual o objetivo do seu projeto?
Ou me expressei mal ou vocês não estão entendendo, quando ligar o PC a BIOS vai procurar pelos 512 bytes gravados no primeiro setor do pendrive ( Cabeça: 0, Trilha: 0, Setor: 1 ). Caso não encontre, ele busca por um sistema operacional na MBR ( Master Boot Record ) do HD. Aí eu vou fazer um Loader, que é basicamente uma seqüência de instruções ( com no máximo 512 bytes para caber no primeiro setor ), que é responsável por carregar o Kernel do disco para a memória. Após isso ele deverá executar o programa Java SDK modificado para poder rodar no kernel, que por sua vez executar o .class do sistema ( o programa que eu vou criar para mostrar hora, editar textos e etc. ). Por exemplo: Em java, tenho um programa Teste.java:
public class Teste { 
  
    public static void menu() {  
        System.out.println("Teste!");
    }  
}

E tenho o Menu.java:

public class Menu {
    public static void main(String []args) {
	    Teste t = new Teste();
		t.menu(); //aqui eu estou chamando o método menu de Teste
	}
}

O que eu quero fazer é exatamente isso que está n linha 4, chamar o método responsável por executar o java, pelo assembly ( o kernel ) eu chamo o java, e o java chama o programa.class, que no programa está na linha 4, chamo o programa responsável de executar o .class, que está em c no assembly.

M
mcirqueira:
matheuslmota:
Cara, o que vocÊ tá querendo fazer não é trivial. Além do mais, o JNode que você citou e que suponho que você entrou no site e viu os detalhes do projeto é algo meio embrionário. Fazer um kernel e fazer um sistema em java para evocar o kernel é algo extremamente difícil. Como você irá comunicar o kernel com os bytecodes do Java? Agora vou fazer aquela velhar perguntinha: qual o objetivo do seu projeto?
Ou me expressei mal ou vocês não estão entendendo, quando ligar o PC a BIOS vai procurar pelos 512 bytes gravados no primeiro setor do pendrive ( Cabeça: 0, Trilha: 0, Setor: 1 ). Caso não encontre, ele busca por um sistema operacional na MBR ( Master Boot Record ) do HD. Aí eu vou fazer um Loader, que é basicamente uma seqüência de instruções ( com no máximo 512 bytes para caber no primeiro setor ), que é responsável por carregar o Kernel do disco para a memória. Após isso ele deverá executar o programa Java SDK modificado para poder rodar no kernel, que por sua vez executar o .class do sistema ( o programa que eu vou criar para mostrar hora, editar textos e etc. ). Por exemplo: Em java, tenho um programa Teste.java:
public class Teste { 
  
    public static void menu() {  
        System.out.println("Teste!");
    }  
}

E tenho o Menu.java:

public class Menu {
    public static void main(String []args) {
	    Teste t = new Teste();
		t.menu(); //aqui eu estou chamando o método menu de Teste
	}
}

O que eu quero fazer é exatamente isso que está n linha 4, chamar o método responsável por executar o java, pelo assembly ( o kernel ) eu chamo o java, e o java chama o programa.class, que no programa está na linha 4, chamo o programa responsável de executar o .class, que está em c no assembly.

Cara, basicamente tu tá querendo é implementara uma máquina virtual. Um arquivo .class contém bytecodes e você não pode processá-los diretamente usando assembly. Ou seja, não dá pra invocar diretamente um arquivo compilado em Java usando assembly.
Sua pergunta está respondida?

M

matheuslmota:
Cara, basicamente tu tá querendo é implementara uma máquina virtual. Um arquivo .class contém bytecodes e você não pode processá-los diretamente usando assembly. Ou seja, não dá pra invocar diretamente um arquivo compilado em Java usando assembly.
Sua pergunta está respondida?

É basicamente isso, a unica coisa que o kernel vai fazer é o contato com hardware e servir de base para o Java SDK, aí depois o java entra em ação, o kernel vai ser só pra alocar a mémoria e etc.
E corrigindo assembly para assembler, assembly é para microcontroladores e assembler é para computadores pessoais e etc.
Eu só estou e dúvida é como é que eu vou chamar o Java para rodar ( chamar em assembler o programa em c ).

M

mcirqueira:
matheuslmota:
Cara, basicamente tu tá querendo é implementara uma máquina virtual. Um arquivo .class contém bytecodes e você não pode processá-los diretamente usando assembly. Ou seja, não dá pra invocar diretamente um arquivo compilado em Java usando assembly.
Sua pergunta está respondida?

É basicamente isso, a unica coisa que o kernel vai fazer é o contato com hardware e servir de base para o Java SDK, aí depois o java entra em ação, o kernel vai ser só pra alocar a mémoria e etc.
E corrigindo assembly para assembler, assembly é para microcontroladores e assembler é para computadores pessoais e etc.
Eu só estou e dúvida é como é que eu vou chamar o Java para rodar ( chamar em assembler o programa em c ).

Nada disso. Assembly é uma linguagem de montagem. Assembler é a ferramenta que traduz o código assembly para linguagem de máquina.

R

Cara, você vai ter quer fazer 2 trabalhos que exigem equipes enormes:

1 - implementar um kernel próprio

2 - implementar uma JVM para o seu kernel

Eu imagino que esse trabalho lhe trará muita satisfação pessoal para você abrir mão do que já está pronto.

D

vai na fé cara…

ja vi um linux feito com javascript puro

o lance é montar “emular” o kernel

L

mcirqueira:
Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.
Esses caras conseguiram em menos de 100 anos fazer o que eu estou querendo fazer:

http://www.jnode.org/

O sistema é todo em java, e o kernel é todo em assembly.

Eu lhe indicaria justamente o JNode, mas parece que você já está por dentro de como essas coisas funcionam. Se conseguir fazer algo interessante nos avise. :slight_smile:

Um projeto assim deve ser bem legal de se fazer.

L

boa sorte… e não esqueça de passar seu projeto para seus filhos e dizer a eles passarem para seus netos quem sabe daqui a uns 200 anos seus tataranetos estarão finalizando o mesmo…

J

mcirqueira:

juliocbq:
sozinho você iria levar no mínimo uns 100 anos para fazer isso. A equipe da microsoft no singularity é enorme, e o projeto tá na prancheta desde 2000. Para você ver como essa idéia não é muito viável.

Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.

Esses caras conseguiram em menos de 100 anos fazer o que eu estou querendo fazer:

http://www.jnode.org/

O sistema é todo em java, e o kernel é todo em assembly.

Já pesquisou sobre a equipe por traz do jnode?

http://www.jnode.org/node/48

Com certeza possui mais de uma pessoa que sabe com certeza o que está fazendo.

M

juliocbq:
mcirqueira:

juliocbq:
sozinho você iria levar no mínimo uns 100 anos para fazer isso. A equipe da microsoft no singularity é enorme, e o projeto tá na prancheta desde 2000. Para você ver como essa idéia não é muito viável.

Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.

Esses caras conseguiram em menos de 100 anos fazer o que eu estou querendo fazer:

http://www.jnode.org/

O sistema é todo em java, e o kernel é todo em assembly.

Já pesquisou sobre a equipe por traz do jnode?

http://www.jnode.org/node/48

Com certeza possui mais de uma pessoa que sabe com certeza o que está fazendo.

Estava vendo como é que eles comunicaram o Java com o Kernel, eles têm um compilador nativo que converte bytecodes pra linguagem de máquina. Nem sabia que tal compilador existia.

I

Querendo fazer um S.O. :?: Vai usar Assembly :?: Acesse Assembly Brasil por landantas

flw :thumbup:

J

matheuslmota:
juliocbq:
mcirqueira:

juliocbq:
sozinho você iria levar no mínimo uns 100 anos para fazer isso. A equipe da microsoft no singularity é enorme, e o projeto tá na prancheta desde 2000. Para você ver como essa idéia não é muito viável.

Só diferenciando o android do singularity - O primeiro é um kernel escrito em linguagem c trocando mensagens com uma máquina virtual. O segundo é um kernel escrito em c#, onde até os módulos também são escritos nessa linguagem.

Esses caras conseguiram em menos de 100 anos fazer o que eu estou querendo fazer:

http://www.jnode.org/

O sistema é todo em java, e o kernel é todo em assembly.

Já pesquisou sobre a equipe por traz do jnode?

http://www.jnode.org/node/48

Com certeza possui mais de uma pessoa que sabe com certeza o que está fazendo.

Estava vendo como é que eles comunicaram o Java com o Kernel, eles têm um compilador nativo que converte bytecodes pra linguagem de máquina. Nem sabia que tal compilador existia.

Existe o gcj do set da gnu que compila bytecode pra assembly.

http://gcc.gnu.org/java/

É muito mais prático pegar um kernel linux pronto e embarcar uma jvm como é mais ou menos o caso do android. Bootar um programa na memória ram é fácil e não tem nada a ver com sistemas operacionais. Para desenvolver um sistema desses precisa ter noção de escalonamento de processos, mapeamento de ram e flash, sistemas de arquivos e uma infinidade de outras coisas que um “sistema operacional” deve fazer.

Acho que é muita tarefa para apenas uma pessoa fazer.

S

mcirqueira:
matheuslmota:
Cara, basicamente tu tá querendo é implementara uma máquina virtual. Um arquivo .class contém bytecodes e você não pode processá-los diretamente usando assembly. Ou seja, não dá pra invocar diretamente um arquivo compilado em Java usando assembly.
Sua pergunta está respondida?

É basicamente isso, a unica coisa que o kernel vai fazer é o contato com hardware e servir de base para o Java SDK, aí depois o java entra em ação, o kernel vai ser só pra alocar a mémoria e etc.
E corrigindo assembly para assembler, assembly é para microcontroladores e assembler é para computadores pessoais e etc.
Eu só estou e dúvida é como é que eu vou chamar o Java para rodar ( chamar em assembler o programa em c ).

Não sei se entendi bem, mas você quer chamar a máquina virtual java a partir do seu kernel? Se não me engano, você teria que implementar uma máquina virtual pra rodar com o seu kernel, não dá pra pegar o java para linux e querer que seu kernel rode, a não ser que sejam compatíveis. Corrijam-me se estiver errado.

M

A esperança é a utima que morre…
Só não vou pegar o kernel do linux porque é quase um 500 MB, iria ficar pesado demais, acho que vou pegar o fonte do kernel do JNode e aí fica mais fácil e rápido.
Valeu galera!
Se eu terminar antes de 200 anos eu posto pra vocês verem como ficou…

M

É que nem o amigo entanglement falou:

Leia o fonte do Java; você vai ver que ele tem uma porção de dependências em relação ao sistema operacional.
O mais fácil no seu caso é pegar a versão do fonte do Java que roda em Linux/Solaris.
O seu sistema operacional, para poder rodar confortavelmente o Java, terá provavelmente de ser uma distribuição do Linux - não um sistema operacional pequeninho em Assembly.
Outra forma é pegar os fontes do Java e começar a remover as dependências em relação ao sistema operacional - o que é bastante difícil, na verdade. Você vai ver quanto trabalho vai dar :frowning:

Falou!

D

Estou acompanhando o tópico desde o início e sinceramente, acho que você está perdendo seu tempo…
Não se ofenda, mas qual seu objetivo com isso? Só estudo? Quer vender isso? Acho que tem tanta coisa mais importante para se estudar… Se está a fim de ter um desafio, procure algo que precisa ser feito e que seja útil de alguma maneira ou então contribua com algum projeto que já existe. Quando a gente tenta abraçar o mundo, ainda mais sem nenhuma orientação, normalmente acabamos nos frustrando.

Enfim, boa sorte.

[]'s

J

A esperança é a utima que morre…
Só não vou pegar o kernel do linux porque é quase um 500 MB, iria ficar pesado demais, acho que vou pegar o fonte do kernel do JNode e aí fica mais fácil e rápido.
Valeu galera!
Se eu terminar antes de 200 anos eu posto pra vocês verem como ficou…

De onde você tirou isso? Existem kernels linux que podem rodar em microcontroladores pic e ocupam menos de 50mb.

Esse é apenas um deles. Existem outros. As empresas utilizam linux em produtos embarcados porque possuem várias vantagens. Essa é uma delas.

http://www.minix3.org/

L

Tem um pessoal aí que além de não saber fazer não quer que os outros façam. Contribuir com o quê? Com framework web tosco? Java só tem tosqueira.

Na pior das hipóteses, mesmo que isso não se torne um produto, você terá experiência em uma área que poucos têm e software que pode ser usado como portfólio no seu curriculum.

M

Longino:
Tem um pessoal aí que além de não saber fazer não quer que os outros façam. Contribuir com o quê? Com framework web tosco? Java só tem tosqueira.

Na pior das hipóteses, mesmo que isso não se torne um produto, você terá experiência em uma área que poucos têm e software que pode ser usado como portfólio no seu curriculum.

Você tem noção da quantidade de trabalho que o rapaz tá querendo fazer só? Outra coisa, ninguém aqui mandou ele programar um framework java. Existe muita coisa interessantes que ele pode fazer. Por exemplo, estou desenvolvendo um algorítmo de busca de dados em textos. Já fiz uma versão. Mas agora a brincadeira é ver até onde eu consigo otimizar o algorítmo pra ele achar as informações em menos tempo possível. Mesmo um projeto relativamente simples como esse consegue ser algo desafiante.

V

Liga para as pessoas que estão lhe desencorajando não. Tenta fazer mesmo, vc vai se divertir e aprender um bocado. Pode ser que o negócio tome forma e outras pessoas comecem a se interessar em ajudar também. O Linus quando começou o Linux não reuniu uma equipe do tamanho da Microsoft, ele foi lá e começou o projeto, hoje é o Linux que todo mundo conhece

Eu mesmo comecei a umas semanas atrás projetos “avançados” (IDEs, bancos, linguagens de programação, toolkits gráficos). To nem aí se acreditam que é impossível fazer, que to reinventando a roda. To me divertindo, aprendendo coisas novas e praticando arquitetura de softwares que fogem do padrão de sempre (MVC Web)

J

victorcosta:
Liga para as pessoas que estão lhe desencorajando não. Tenta fazer mesmo, vc vai se divertir e aprender um bocado. Pode ser que o negócio tome forma e outras pessoas comecem a se interessar em ajudar também. O Linus quando começou o Linux não reuniu uma equipe do tamanho da Microsoft, ele foi lá e começou o projeto, hoje é o Linux que todo mundo conhece

Eu mesmo comecei a umas semanas atrás projetos “avançados” (IDEs, bancos, linguagens de programação, toolkits gráficos). To nem aí se acreditam que é impossível fazer, que to reinventando a roda. To me divertindo, aprendendo coisas novas e praticando arquitetura de softwares que fogem do padrão de sempre (MVC Web)

Vocês não tem noção do que estão falando. Primeiro que o Linus usou um kernel unix como modelo totalmente funcional, e contou com uma equipe grande de voluntários da usenet.

Comecem a desenvolver um software em assembly para microcontroladores simples como o 8051 e vão ver o parto que é ter que mapear toda a memória ram que se vai usar.
Além de só mapear 8 bits em área de memória na ram, para fazer cálulos com números maiores de 8 bits você precisa se desdobrar para fazer todo o mesmo cálculo nessa única área.

É tarefa árdua e não trivial como citaram mais acima.

Em um sistema operacional algoritmos complexos gerenciam processos para mantê-los organizados. Criar um sistema de arquivos para esses novos hds também é muito trabalho, e há dezenas de outros pontos de mesma ou maior complexidade.

Criar um bootloader não é complicado, e com ele você pode jogar um programa escrito em c ou outro compilador compatível com o processador que você tenha disponível. Agora desenvolver um “SO” é um trabalho completamente diferente do que alguns estão pensando.

não é questão de querer desanimar alguém, mas imagino que se possa aproveitar o tempo aprendendo os algoritmos usados nesse tipo de sistema do que tentar colocar uma máquina java em um kernel sem saber como tudo funciona primeiramente.

O artigo acima já é um bom ponto de partida.

I

o trabalho necessario pra fazer um kernel, seja lá como voce queira, é o de menos. Tenho toda certeza com bastante esforço voce consegue montar teu próprio kernel.
mas aparentemente voce ainda não tem o skill para começar um projeto que envolva a criação do kernel de um SO.
Voce nem mesmo soube explicar exatamente o quer…
“assembly invocar programa em C (o java)” Isso pra mim não é uma frase com um sentido muito claro… pra falar a verdade ela não tem sentido nenhum.

basico sobre organização computadores (se não me engano era esse nome que davam na faculdade):
voce irá trabalhar com assembler para trabalhar diretamente com seus registradores e outras funcionalidades de mais baixo nível, mas Nunca para fazer chamada de uma API em JAVA ou biblioteca em C.

A

Fico imaginando quantas vezes o Linus Torvalds ouviu isso no começo dos anos 90.

J

Fico imaginando quantas vezes o Linus Torvalds ouviu isso no começo dos anos 90.

Você não leu o artigo? O linus usou o minix. Já estava pronto. Ele adaptou o kernel para outras necessidades. E fez isso com ajuda de uma comunidade grande.

Dá uma olhada no curriculum dessas pessoas.

David Weinehal (2.0), Alan Cox,Marc-Christian Petersen (2.2), Marcelo Tosatti ,Willy Tarreau (2.4) e o próprio Torvalds, Andrew Morton e Adrian Bunk (2.6).

O alan cox é o cara que escreveu toda pilha tcp para linux.

São pessoas que também entendem de hardware, engenheiros, etc…

Para desenvolver um sistema operacional não basta entender só de software.

D

Quer um desafio de verdade? Tente ser menor que o menuetOS e, ainda assim, dar suporte à ambiente gráfico.
Há mais ou menos 6 anos, quando conheci esse sujeito, o mesmo era famoso por ser o único SO com suporte à ambiente gráfico, que cabia, INTEIRO, em um disquete de 1,44.

Atualmente suporte até hardware 64bits.

Mais detalhes, aqui: http://menuetos.net/

J

drsmachado:
Quer um desafio de verdade? Tente ser menor que o menuetOS e, ainda assim, dar suporte à ambiente gráfico.
Há mais ou menos 6 anos, quando conheci esse sujeito, o mesmo era famoso por ser o único SO com suporte à ambiente gráfico, que cabia, INTEIRO, em um disquete de 1,44.

Atualmente suporte até hardware 64bits.

Mais detalhes, aqui: http://menuetos.net/

Ele é inteiro programado em assembly, por isso é tão enxuto. Qual é o sistema de arquivos dele?

L

juliocbq:

Você não leu o artigo? O linus usou o minix. Já estava pronto. Ele adaptou o kernel para outras necessidades. E fez isso com ajuda de uma comunidade grande.

O Minix era a máquina de desenvolvimento dele. Ele não copiou o código do Minix.

V

No primeiro email do Linus ele já disse que já tava começando a ficar amadurecido e quase pronto (lógico que não pronto igual ao oq o linux é hoje, mas era alguma coisa)

E se ele baseou no minix oq que tem? Por acaso o autor do tópico disse que está proibido de olhar código pronto dos outros? Pelo contrário, ele tava afim de estudar o JNode

S

:lol: :lol: :lol: :lol: :lol: :lol: :lol:

Muito engracado. Agora se eu fosse o cara ia ficar puto e fazer a coisa em um mês…

De repente vale mais a pena investir tempo e neurônio num projeto igualmente ambicioso ao mesmo tempo que mais viável que um Kernel.

Já tentaram fazer um Java OS. É uma tarefa ingrata: http://www4.informatik.uni-erlangen.de/Projects/JX/publications.html

Dá uma lida aqui: http://wiki.osdev.org/Languages

Já que vc é maluco o bastante para querer escrever um Kernel, tente inventar algum outro projeto insano pra vc fazer. Algumas dicas:

  • Hackeia a JVM para desligar o GC e permitir que o Java use memory management.
  • Criar um banco-de-dados de objeto. (Dá uma olhada no Space4J)
  • Implementacao sinistra (GC zero e super fast) de reliable UDP (https://www.google.com/search?q=mold+udp) (só conheco o JGroups)

Sei lá. Já fizeram tudo em Java…

Alguém tem outra idéia?

F

immortalSoul:
o trabalho necessario pra fazer um kernel, seja lá como voce queira, é o de menos. Tenho toda certeza com bastante esforço voce consegue montar teu próprio kernel.
mas aparentemente voce ainda não tem o skill para começar um projeto que envolva a criação do kernel de um SO.
Voce nem mesmo soube explicar exatamente o quer…
"assembly invocar programa em C (o java)" Isso pra mim não é uma frase com um sentido muito claro… pra falar a verdade ela não tem sentido nenhum.

basico sobre organização computadores (se não me engano era esse nome que davam na faculdade):
voce irá trabalhar com assembler para trabalhar diretamente com seus registradores e outras funcionalidades de mais baixo nível, mas Nunca para fazer chamada de uma API em JAVA ou biblioteca em C.

tu acha que o java.exe é escrito em que? em Java? acho que era isto que ele tava dizendo!

I

fredferrao:
immortalSoul:
o trabalho necessario pra fazer um kernel, seja lá como voce queira, é o de menos. Tenho toda certeza com bastante esforço voce consegue montar teu próprio kernel.
mas aparentemente voce ainda não tem o skill para começar um projeto que envolva a criação do kernel de um SO.
Voce nem mesmo soube explicar exatamente o quer…
"assembly invocar programa em C (o java)" Isso pra mim não é uma frase com um sentido muito claro… pra falar a verdade ela não tem sentido nenhum.

basico sobre organização computadores (se não me engano era esse nome que davam na faculdade):
voce irá trabalhar com assembler para trabalhar diretamente com seus registradores e outras funcionalidades de mais baixo nível, mas Nunca para fazer chamada de uma API em JAVA ou biblioteca em C.

tu acha que o java.exe é escrito em que? em Java? acho que era isto que ele tava dizendo!

Ok, se o que ele falou é algo tao compreensível, então diz aí o que ele quer… O que ele quis dizer?
1 - utilizar assembler pra iniciar a jvm que vai rodar em um S.O. que ele vai programar?? ? (se é que isso faz algum sentido)
2 - fazer uma jvm rodar em cima de um programar assembler que ele vai escrever?? (isso com certeza nao faz sentido)
3 - recriar a linguagem java nao pra rodar em uma jvm, mas diretamente no SO que ele vai escrever???
ou alguma outra alternativa igualmente sem sentido?

F

immortalSoul:
fredferrao:
immortalSoul:
o trabalho necessario pra fazer um kernel, seja lá como voce queira, é o de menos. Tenho toda certeza com bastante esforço voce consegue montar teu próprio kernel.
mas aparentemente voce ainda não tem o skill para começar um projeto que envolva a criação do kernel de um SO.
Voce nem mesmo soube explicar exatamente o quer…
"assembly invocar programa em C (o java)" Isso pra mim não é uma frase com um sentido muito claro… pra falar a verdade ela não tem sentido nenhum.

basico sobre organização computadores (se não me engano era esse nome que davam na faculdade):
voce irá trabalhar com assembler para trabalhar diretamente com seus registradores e outras funcionalidades de mais baixo nível, mas Nunca para fazer chamada de uma API em JAVA ou biblioteca em C.

tu acha que o java.exe é escrito em que? em Java? acho que era isto que ele tava dizendo!

Ok, se o que ele falou é algo tao compreensível, então diz aí o que ele quer… O que ele quis dizer?
1 - utilizar assembler pra iniciar a jvm que vai rodar em um S.O. que ele vai programar?? ? (se é que isso faz algum sentido)
2 - fazer uma jvm rodar em cima de um programar assembler que ele vai escrever?? (isso com certeza nao faz sentido)
3 - recriar a linguagem java nao pra rodar em uma jvm, mas diretamente no SO que ele vai escrever???
ou alguma outra alternativa igualmente sem sentido?

Acho que ele quer a opção 2, pegar um kernel linux e chamar a JVM pra entao chamar o app java dele, agora se faz sentido ou não, ja é com ele!

I

fredferrao:
immortalSoul:
fredferrao:
immortalSoul:
o trabalho necessario pra fazer um kernel, seja lá como voce queira, é o de menos. Tenho toda certeza com bastante esforço voce consegue montar teu próprio kernel.
mas aparentemente voce ainda não tem o skill para começar um projeto que envolva a criação do kernel de um SO.
Voce nem mesmo soube explicar exatamente o quer…
"assembly invocar programa em C (o java)" Isso pra mim não é uma frase com um sentido muito claro… pra falar a verdade ela não tem sentido nenhum.

basico sobre organização computadores (se não me engano era esse nome que davam na faculdade):
voce irá trabalhar com assembler para trabalhar diretamente com seus registradores e outras funcionalidades de mais baixo nível, mas Nunca para fazer chamada de uma API em JAVA ou biblioteca em C.

tu acha que o java.exe é escrito em que? em Java? acho que era isto que ele tava dizendo!

Ok, se o que ele falou é algo tao compreensível, então diz aí o que ele quer… O que ele quis dizer?
1 - utilizar assembler pra iniciar a jvm que vai rodar em um S.O. que ele vai programar?? ? (se é que isso faz algum sentido)
2 - fazer uma jvm rodar em cima de um programar assembler que ele vai escrever?? (isso com certeza nao faz sentido)
3 - recriar a linguagem java nao pra rodar em uma jvm, mas diretamente no SO que ele vai escrever???
ou alguma outra alternativa igualmente sem sentido?

Acho que ele quer a opção 2, pegar um kernel linux e chamar a JVM pra entao chamar o app java dele, agora se faz sentido ou não, ja é com ele!

Neste caso ele vai ter um bom trabalho pela frente.
E, deixando de lado o fato disso ser completamente inútil, mesmo que seja isso ele deve primeiro começar a pensar em como desenvolver o S.O. em assembler pra depois começar a pensar em desenvolver uma JVM pra ele.

F

Mas é ai que esta, se eu entendi tudo, o “SO” em si, vai ser o proprio app java, o kernel linux vai ser apenas pra levantar a VM :shock: :shock: :shock:

I

fredferrao:
immortalSoul:

Neste caso ele vai ter um bom trabalho pela frente.
E, deixando de lado o fato disso ser completamente inútil, mesmo que seja isso ele deve primeiro começar a pensar em como desenvolver o S.O. em assembler pra depois começar a pensar em desenvolver uma JVM pra ele.

Mas é ai que esta, se eu entendi tudo, o “SO” em si, vai ser o proprio app java, o kernel linux vai ser apenas pra levantar a VM :shock: :shock: :shock:

a VM precisa rodar em cima de alguma coisa (provavelmente o kernel que ele vai construir) e pra rodar uma app java ele precisa de uma VM… sei que é importante insistir e não acreditar em quem diz que não é possível e etc, mas, infelizmente, também não existe mágica.
se ele quer construir um kernel, vai ter que reescrever a VM.

pq se ele quer colocar um SO rodando em JAVA em um ambiente onde ja existe um SO, isso é duplamente sem sentido.

J

Longino:
juliocbq:

Você não leu o artigo? O linus usou o minix. Já estava pronto. Ele adaptou o kernel para outras necessidades. E fez isso com ajuda de uma comunidade grande.

O Minix era a máquina de desenvolvimento dele. Ele não copiou o código do Minix.

copiou sim, e uma delas foi o código do sistema de arquivos do minix. O linux é um sistema baseado no unix( e esse unix é o minix).

J

fredferrao:
immortalSoul:

Neste caso ele vai ter um bom trabalho pela frente.
E, deixando de lado o fato disso ser completamente inútil, mesmo que seja isso ele deve primeiro começar a pensar em como desenvolver o S.O. em assembler pra depois começar a pensar em desenvolver uma JVM pra ele.

Mas é ai que esta, se eu entendi tudo, o “SO” em si, vai ser o proprio app java, o kernel linux vai ser apenas pra levantar a VM :shock: :shock: :shock:

se o so for proprietário, ele precisa levantar uma vm proprietária para a arquitetura dele também. Um bom começo para se entender sistemas operacionais é começar estudando algoritmos de escalonamento, mapeamento, sistemas de arquivos. Dessa maneira se pode montar simuladores. Computadores de bordo de automóveis são máquina de estados finitos.

Você consegue implementar em microcontroladores. Já é uma boa base de estudos.


Y

O que eu posso dizer ao autor do topico?

Provavelmente esse seu projeto nao vai muito longe, voce vai conseguir no maximo, com um esforco monstro, fazer alguma coisa funcionar. Digo isso nao por duvidar da sua capacidade, digo mais por uma questao de probabilidades, baseado no numero de pessoas que tentam fazer coisas do genero, comparado ao numero que tem sucesso. Mas… vai que da certo?

Mas quando voce terminar, ou mesmo quando nao terminar, vai ter aprendido pacas e vai ter se divertido um monte. Quem sabe ate voce possa ser convidado para trabalhar em alguma dessas equipes ai que estao ha muito tempo tentando fazer algo parecido.

Mete a cara nesse negocio ai.

M

Vim pedir uma ajuda para alguem que programa em assembler e que possa esclarecer essa duvida, de chamar um programa em c usando assembler, não pedi opiniões, e não quero que fiquem me criticando, pois se eu quisesse criar um sistema bem grande e funcional eu pegaria o kernel Linux, Minix, Unix, Open Solaris, FreeBSD, JNode, MenuetOS e outros de código-fonte na licença GNU GPL, FreeBSD e desde que seja livre.
É claro que algumas me ajudaram mas muitas me criticaram.

O fredferrao foi um dos únicos que entenderam o que eu quero fazer.
Encerrado para criticadores!!!

E lendo o fonte do MenuetOS descobrir como chamar o determinado programa:

call  exemplo ;onde exemplo é o programa ou método que quero chamar
I

Não seis e entro no tal grupo dos criticadores mas tanto faz…
O problema é justamente esse. Voce não vai conseguir ‘executar’ um programa em C utilizando assembler… pelo menos não da forma que voce está falando.
Se voce quer construir um novo kernel, vai necessariamente ter que gerar teu próprio compilador c, java, seja la o que for, pra executar qualquer coisa na arquitetura que vc quer montar.

respondendo de outra forma :
Não é seu código assembler que vai chamar seu programa em C, Java, seja la o que for, mas o compilador java, c que vai precisar ser reescrito para rodar entender a arquitetura do ambiente que voce pretende montar.

M

[quote=mcirqueira]Vim pedir uma ajuda para alguem que programa em assembler e que possa esclarecer essa duvida, de chamar um programa em c usando assembler, não pedi opiniões, e não quero que fiquem me criticando, pois se eu quisesse criar um sistema bem grande e funcional eu pegaria o kernel Linux, Minix, Unix, Open Solaris, FreeBSD, JNode, MenuetOS e outros de código-fonte na licença GNU GPL, FreeBSD e desde que seja livre.
É claro que algumas me ajudaram mas muitas me criticaram.

O fredferrao foi um dos únicos que entenderam o que eu quero fazer.
Encerrado para criticadores!!!

E lendo o fonte do MenuetOS descobrir como chamar o determinado programa:

call  exemplo ;onde exemplo é o programa ou método que quero chamar

Cara, o que estamos querendo dizer é que não se pode chamar um programa em Java usando linguagem assembly. Você leu o projeto do JNode? Lá eles desenvolveram um compilador que traduz bytecodes para linguagem de máquina. Se eles fizeram isso é justamente porque eles viram ser impossível chamar um invocar um programa JAva usando assembly. Se desse para fazer isso eles não teriam se dado ao imenso trabalho de construir esse compilador. Um dos principais fundamentos do Java é abstrair o hardware sobre o qual a aplicação está trabalhando, coisa que um sistema operacional não pode fazer.
Então, tenta desenvolver teu próprio compilador nativo pra resolver o problema de chamar um .class via assembly.

L

juliocbq:
Longino:
juliocbq:

Você não leu o artigo? O linus usou o minix. Já estava pronto. Ele adaptou o kernel para outras necessidades. E fez isso com ajuda de uma comunidade grande.

O Minix era a máquina de desenvolvimento dele. Ele não copiou o código do Minix.

copiou sim, e uma delas foi o código do sistema de arquivos do minix. O linux é um sistema baseado no unix( e esse unix é o minix).

Não, não copiou. http://www.cs.vu.nl/~ast/brown/codecomparison/

Inclusive essa era uma das coisas que o Tanembaum odiava no Linux, que foi projetado de uma forma antiquada e não usando os conceitos mais modernos na época.

L

O gcc está aí para ser usado. Ele não precisará criar compilador nenhum.

I

Longino:
immortalSoul:

Não é seu código assembler que vai chamar seu programa em C, Java, seja la o que for, mas o compilador java, c que vai precisar ser reescrito para rodar entender a arquitetura do ambiente que voce pretende montar.

O gcc está aí para ser usado. Ele não precisará criar compilador nenhum.

precisa sim, se ele ta pensando em montar um S.O. do zero.

V

Ele poderia aproveitar a análise léxica, sintática e semântica do gcc, além do otimizador.
E teria que reescrever “apenas” a tradução para assembly e o linker…

Mas nada que alguém que faz seu próprio SO não seja capaz.

L

immortalSoul:
Longino:
immortalSoul:

Não é seu código assembler que vai chamar seu programa em C, Java, seja la o que for, mas o compilador java, c que vai precisar ser reescrito para rodar entender a arquitetura do ambiente que voce pretende montar.

O gcc está aí para ser usado. Ele não precisará criar compilador nenhum.

precisa sim, se ele ta pensando em montar um S.O. do zero.

Cara, ele pode reutilizar o gcc, basta criar um ambiente Unix-like com as syscalls necessárias para que o gcc possa rodar. E a partir daí “portá-lo” para o ambiente novo, tipo fazer rodar tudo.

M

Ele pode então usar o prório GCJ pra converter bytecode pra linguagem de máquina, isso resolveria uma parte pequa do problema de desenvolvimento do SO dele. A outra parte é “só” implementar os algorítmos de escalonamento de processos, sistemas de arquivos e mapeamento de memória, como o Juliocbq citou.

M

Para construir algo do principio, seria preciso primeiramente recriar o universo.

Curte fisica ? :smiley:

M

Markus Alemao:
Para construir algo do principio, seria preciso primeiramente recriar o universo.

Curte fisica ? :smiley:

Correção :

Para construir algo(exceto o universo) do principio, seria preciso primeiramente recriar o universo.

J

Longino:
juliocbq:
Longino:
juliocbq:

Você não leu o artigo? O linus usou o minix. Já estava pronto. Ele adaptou o kernel para outras necessidades. E fez isso com ajuda de uma comunidade grande.

O Minix era a máquina de desenvolvimento dele. Ele não copiou o código do Minix.

copiou sim, e uma delas foi o código do sistema de arquivos do minix. O linux é um sistema baseado no unix( e esse unix é o minix).

Não, não copiou. http://www.cs.vu.nl/~ast/brown/codecomparison/

Inclusive essa era uma das coisas que o Tanembaum odiava no Linux, que foi projetado de uma forma antiquada e não usando os conceitos mais modernos na época.

Esse email postado são citações de rumores durante uma análise. O torvalds não deu um control c+v em partes do minix, mas os usou para desenvolver partes do mikro linux. Dessa maneira eles jamais iriam achar indícios de cópia mesmo(usando ferramentas de comparação). A idéia de mikrokernel do torvalds foi bem melhor que utilizar um modelo monoítico como o do minix. Mas ele usou sim partes do minix no linux, e o sistema de arquivos é uma dessas partes.

V

É o contrário, o Minix que era microkernel e o Linux que adotou um modelo monolítico. Isso que inclusive causou a discussão entre o Linus e o Tanembaum

J

Longino:
immortalSoul:

Não é seu código assembler que vai chamar seu programa em C, Java, seja la o que for, mas o compilador java, c que vai precisar ser reescrito para rodar entender a arquitetura do ambiente que voce pretende montar.

O gcc está aí para ser usado. Ele não precisará criar compilador nenhum.

o set da gnu compila c, c++, d, objective c, haskel, java e outras linguagens. Mas no formato que o bootloader(lilo ou o grub) entende somente o gcc(compilador de linguagem c ) pode ser utilizado para criar. E o que ele quer é carregar um programa java. Então vai precisar criar um compilador sim. Mas isso ele pode fazer usando o flex ou o bison. Gerar código “c” a partir dele e usar o gcc para criar uma rom (o binario do lilo ou grub).

Esse formato de executável é o mesmo do famoso “vmlinux”(ou seja o proprio kernel)

Agora se o kernel dele é customizado, como ele quer criar um terá também que escrever o próprio compilador.

Como vê mais alguns meses de trabalho.

J

É o contrário, o Minix que era microkernel e o Linux que adotou um modelo monolítico. Isso que inclusive causou a discussão entre o Linus e o Tanembaum

Você tem razão, inverte a lógica.

E

Quanto à história do compilador: ninguém tenta escrever todas as peças de um sistema operacional. É praticamente impossível.

Tanto o Minix quanto o Linux usaram (e ainda usam) o gcc, que já existia faz algum tempo na época de sua criação.

Só para terem uma idéia, mesmo o MacOS usa também o gcc (embora tenha migrado para o clang faz algum tempo).

Por exemplo, o mcirqueira iria usar, no começo, um ambiente de compilação externo (como o assembler, por exemplo, o “as” e o linker, por exemplo o “ld”, já existentes).
Para fazer o as e o ld rodarem nesse sistema operacional dele (e evitar essa chateação de ter de rodar as coisas externamente) já daria um certo trabalho - e como de costume, como 90% dos sistemas operacionais atuais, acabaria tendo de criar uma camada Posix, nem que seja para rodar esses programas. (Até o Windows tem uma camada de compatibilidade Posix, para ter uma idéia.)

J

entanglement:
Quanto à história do compilador: ninguém tenta escrever todas as peças de um sistema operacional. É praticamente impossível.

Tanto o Minix quanto o Linux usaram (e ainda usam) o gcc, que já existia faz algum tempo na época de sua criação.

Só para terem uma idéia, mesmo o MacOS usa também o gcc (embora tenha migrado para o clang faz algum tempo).

Por exemplo, o mcirqueira iria usar, no começo, um ambiente de compilação externo (como o assembler, por exemplo, o “as” e o linker, por exemplo o “ld”, já existentes).
Para fazer o as e o ld rodarem nesse sistema operacional dele (e evitar essa chateação de ter de rodar as coisas externamente) já daria um certo trabalho - e como de costume, como 90% dos sistemas operacionais atuais, acabaria tendo de criar uma camada Posix, nem que seja para rodar esses programas. (Até o Windows tem uma camada de compatibilidade Posix, para ter uma idéia.)

O MacOS é o kernel bsd em “suma”. Como a licença bsd te permite usar de qualquer maneira e como desejar o jobs viu um prato cheio ali.

Normalmente o que é feito é usar o flex e o bison para criar a gramática e a semântica da linguagem. Mas no final o próprio gcc gera código para o kernel. Com a linguagem vala acontece da mesma maneira.

Como você mesmo postou, criar do zero é praticamente impossível.

http://live.gnome.org/Vala

I

entanglement:
Quanto à história do compilador: ninguém tenta escrever todas as peças de um sistema operacional. É praticamente impossível.

Tanto o Minix quanto o Linux usaram (e ainda usam) o gcc, que já existia faz algum tempo na época de sua criação.

Só para terem uma idéia, mesmo o MacOS usa também o gcc (embora tenha migrado para o clang faz algum tempo).

Por exemplo, o mcirqueira iria usar, no começo, um ambiente de compilação externo (como o assembler, por exemplo, o “as” e o linker, por exemplo o “ld”, já existentes).
Para fazer o as e o ld rodarem nesse sistema operacional dele (e evitar essa chateação de ter de rodar as coisas externamente) já daria um certo trabalho - e como de costume, como 90% dos sistemas operacionais atuais, acabaria tendo de criar uma camada Posix, nem que seja para rodar esses programas. (Até o Windows tem uma camada de compatibilidade Posix, para ter uma idéia.)

Acho que que é possível ou impossível parece que nem está mais sendo discutido.
A questão é que da forma que o autor do tópico pretende fazer, ele não vai conseguir pegar o gcc e usar seja la como for.
Ele quer criar um kernel em assembler e usar o assembler pra fazer chamada ao JVM.
E se ele quer recriar um kernel em assembler, ele nao vai conseguir utilizar o gcc de forma direta nem com reza. sem falar que só Deus sabe como ele ta pensando em montar a arquitetura basica do S.O. dele.

L

No meu entender, um S.O. basicamente é um sistema que permitiria o gerenciamento de recursos da sua máquina e o multiprocessamento. Por isso, seguindo essa minha difinição, eu realmente acredito que vc consiga criar um S.O. , mas ficará bem rustico e certamente instável.

Agora, fazer uma JVM rodar nele acho que será trabalho para a vida toda. Além de vc ter que conhecer o codigo da JVM, vc teria que reescrever o codigo dela utilizando assembly também. Possivelmente, dependendo da arquitetura qeu vc for utilizar, algumas interrupções não serão as mesmas. Aqui é que onde estaria a dificuldade. Mesmo que vc tivesse o codigo fonte do Java 1.0 acho que seria grande de mais para uma pessoa só.

Sobre S.O.:
http://www.numaboa.com.br/informatica/oficina/215-so

Sobre assembly, o que estudei está aqui:

um colega nosso aqui do forum começou um S.O. e ele disponibiliza o codigo no link acima.

Desejo-lhe sorte.

J

Eu olhei o fonte ali, mas não tem boot loader. Qual é usado? O grub ou o lilo?

Edit - Olhei ali. Tem um bootloader em assembly At&t. Bem legal.

Segue a idéia da ferramenta memtest

http://www.memtest.org/

L

juliocbq:
Luiz Augusto Prado:

No meu entender, um S.O. basicamente é um sistema que permitiria o gerenciamento de recursos da sua máquina e o multiprocessamento. Por isso, seguindo essa minha difinição, eu realmente acredito que vc consiga criar um S.O. , mas ficará bem rustico e certamente instável.

Agora, fazer uma JVM rodar nele acho que será trabalho para a vida toda. Além de vc ter que conhecer o codigo da JVM, vc teria que reescrever o codigo dela utilizando assembly também. Possivelmente, dependendo da arquitetura qeu vc for utilizar, algumas interrupções não serão as mesmas. Aqui é que onde estaria a dificuldade. Mesmo que vc tivesse o codigo fonte do Java 1.0 acho que seria grande de mais para uma pessoa só.

Sobre S.O.:
http://www.numaboa.com.br/informatica/oficina/215-so

Sobre assembly, o que estudei está aqui:

um colega nosso aqui do forum começou um S.O. e ele disponibiliza o codigo no link acima.

Desejo-lhe sorte.


Eu olhei o fonte ali, mas não tem boot loader. Qual é usado? O grub ou o lilo?

Edit - Olhei ali. Tem um bootloader em assembly At&t. Bem legal.

Segue a idéia da ferramenta memtest

http://www.memtest.org/

Na época estava estudando Assembly e como funcionava a tranferência de controle do bootloader para os SOs. Faz uns 4 anos que eu vi esse codigo, então eu não me lembro como funciona. Mas dando uma olhada rápida eu encontrei esse link:
http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

Onde diz:
The first 512 bytes of a disk are known as the bootsector or Master Boot Record. The boot sector is an area of the disk reserved for booting purposes. If the bootsector of a disk contains a valid boot sector (the last word of the sector must contain the signature 0xAA55), then the disk is treated by the BIOS as bootable.

Seguindo essa orientação, acredito que o bootloader seja esse aqui:
http://s3o.cvs.sourceforge.net/viewvc/s3o/s3o/boot/bootsec.S?view=markup

Agora aqui, vejo algo bem parecido com o lilo, mas não tenho certeza pois como já disse tem muito tempo que estudei isso:
http://s3o.cvs.sourceforge.net/viewvc/s3o/s3o/bochsrc?view=markup

Vc pode trocar uma idéia com os autores. Foi um deles quem me recomendou dar uma olhada nesse fonte.

J

Luiz Augusto Prado:
juliocbq:
Luiz Augusto Prado:

No meu entender, um S.O. basicamente é um sistema que permitiria o gerenciamento de recursos da sua máquina e o multiprocessamento. Por isso, seguindo essa minha difinição, eu realmente acredito que vc consiga criar um S.O. , mas ficará bem rustico e certamente instável.

Agora, fazer uma JVM rodar nele acho que será trabalho para a vida toda. Além de vc ter que conhecer o codigo da JVM, vc teria que reescrever o codigo dela utilizando assembly também. Possivelmente, dependendo da arquitetura qeu vc for utilizar, algumas interrupções não serão as mesmas. Aqui é que onde estaria a dificuldade. Mesmo que vc tivesse o codigo fonte do Java 1.0 acho que seria grande de mais para uma pessoa só.

Sobre S.O.:
http://www.numaboa.com.br/informatica/oficina/215-so

Sobre assembly, o que estudei está aqui:

um colega nosso aqui do forum começou um S.O. e ele disponibiliza o codigo no link acima.

Desejo-lhe sorte.


Eu olhei o fonte ali, mas não tem boot loader. Qual é usado? O grub ou o lilo?

Edit - Olhei ali. Tem um bootloader em assembly At&t. Bem legal.

Segue a idéia da ferramenta memtest

http://www.memtest.org/

Na época estava estudando Assembly e como funcionava a tranferência de controle do bootloader para os SOs. Faz uns 4 anos que eu vi esse codigo, então eu não me lembro como funciona. Mas dando uma olhada rápida eu encontrei esse link:
http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

Onde diz:
The first 512 bytes of a disk are known as the bootsector or Master Boot Record. The boot sector is an area of the disk reserved for booting purposes. If the bootsector of a disk contains a valid boot sector (the last word of the sector must contain the signature 0xAA55), then the disk is treated by the BIOS as bootable.

Seguindo essa orientação, acredito que o bootloader seja esse aqui:
http://s3o.cvs.sourceforge.net/viewvc/s3o/s3o/boot/bootsec.S?view=markup

Agora aqui, vejo algo bem parecido com o lilo, mas não tenho certeza pois como já disse tem muito tempo que estudei isso:
http://s3o.cvs.sourceforge.net/viewvc/s3o/s3o/bochsrc?view=markup

Vc pode trocar uma idéia com os autores. Foi um deles quem me recomendou dar uma olhada nesse fonte.

Então luiz, o que acontece aí é um software sendo carregado na memória ram através de um bootloader, assim como o memtest logo acima. São carregados pelo grub, lilo ou qualquer outro, mas ainda estão muito longe de ser um kernel de um so. Para poder chamar um programa de kernel ele precisa te suprir com uma “linguagem de programação”, sistema de arquivos, paginação de memória, escalonamento de processos… Em suma deve ser capaz de abstrair todo o hardware até o nível de aplicação.


A tarefa de desenvolvimento desses sistemas envolvem muitos algoritmos complexos para tratar filas, concorrência de recursos(inrerrupções externas de input output), uma pilha para guardar programas em execução. Tratar esses ítens é o essencial de um pequeno kernel. Até então os outros são apenas aplicações.

Criado 7 de fevereiro de 2012
Ultima resposta 13 de fev. de 2012
Respostas 66
Participantes 22