Jump to content

Que linguagens compilam para código maquina?


pedrotuga
 Share

Recommended Posts

Eu sou de engenharia electrotécnica, já por aí passei pelo assembly, nasm, um pouco de C, etc etc para programar processadores. Era um pouco secante porque as cadeiras eram mal dadas. Eu curtia interagir com um computador enquanto máquina, e não com um sistema operativo a servir de vela, só naquela de experimentar. Mas não dou muito valor a escrever coisas byte a byte.

Link to comment
Share on other sites

Atenção que Python, Java, C#, etc., também compilam para código máquina utilizando JIT, mas a compilação é feita em run-time, o que permite um maior leque de optimizações de código utilizando funcionalidades específicas do processador.

Além do C / C++, tens mais opções que compilam directamente para código máqiuina como D (uma linguagem catita) e Objective-C.

<3 life

Link to comment
Share on other sites

Compilam para código máquina no run time... mmm... estás-me a fazer pensar... 😄 ... não há nenhuma forma de congelar esse processo?

O py2exe acho que é precisamente isso que faz. Mas não me serve porque tem dependencias ao nível do sistema operativo 😉

Epa estava a falar do Psyco, um plugin de JIT para o Python que acelera bue a execução do código. Penso que o py2exe não compila para código máquina, apenas cria um executável, mas continuas dependente do python25.dll. Quanto ao Java e o C# já trazem sistemas JIT de origem.

<3 life

Link to comment
Share on other sites

Penso que qualquer linguagem serve, desde que possua um compilador para código máquina.

Existe variadíssimos sistemas operativos em diversas linguagens. Por exemplo, tens o House em Haskell.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Pelo que andei a ler, só mesmo C, ou assembly 😛

Tens de ler mais 😛 , JNode feito em Java, Haiku feito em C++, são dois exemplos de linguagens além das que mencionaste. Para não falar do que o Betovsky indicou.

Podes escrever um sistema operativo em vários linguagens, os desafios serão quase sempre os mesmos, sendo que poderás ter alguns específicos da linguagem, como será o caso de um feito em Java em que poderás ter o desafio de como iniciar o SO se quiseres usar uma JVM. De resto, linguagens para SOs é o que não falta.

Link to comment
Share on other sites

Quando digo C estou a referir-me tambem ao C++, o windows por exemplo acho que é escrito maioritáriamente e C++.

Mas ficam umas perguntas que me intrigam:

Esses sistemas operativos são compatíveis com um PC normal ou correm apoiados noutra camada de abstracção?

Por exemplo, esse que é escrito em Java, corre num PC ou numa máquina de Java? É que são coisas completamente diferentes.

Alguem me pode dar um exemplo de documentação em como fazer um sistema operativo super básico com um sistema de boot, que corra num PC e que não recorra a C/C++ ou assembly?

Link to comment
Share on other sites

Alguem me pode dar um exemplo de documentação em como fazer um sistema operativo super básico com um sistema de boot, que corra num PC e que não recorra a C/C++ ou assembly?

Qualquer sistema operativo vai ter sempre Assembly.

Aqui tens um sistema super simples que eu fiz há uns tempos: http://code.google.com/p/flush/source/browse/trunk/kernel/

<3 life

Link to comment
Share on other sites

Qualquer sistema operativo vai ter sempre Assembly.

Aqui tens um sistema super simples que eu fiz há uns tempos: http://code.google.com/p/flush/source/browse/trunk/kernel/

mmm

parece-me um bom ponto de partida para eu começar a desbravar mato.

Vamos então esmifrar isso.

Onde é que está o código do boot? É o ficheiro start.S

Tipo... o que eu ainda não percebi é o seguinte. Quando se liga o computador ele vai executar o código que está num endereço pré-definido (no início suponho eu) da unidade de memória externa definida na bios.

Posto isto, como é que se instala um istema operativo, por exemplo, compilas esse código e depois como é que asseguras que a parte do boot está no endereço certo?

Link to comment
Share on other sites

Posto isto, como é que se instala um istema operativo, por exemplo, compilas esse código e depois como é que asseguras que a parte do boot está no endereço certo?

Eu neste caso aderi à especificação Multiboot, definida pela malta do GRUB (http://www.gnu.org/software/grub/manual/multiboot/multiboot.html).

Ou seja, o GRUB vai chamar o ponto de entrada no meu código e passa várias estruturas, nomeadamente memory maps. Se tu quiseres também podes fazer o teu próprio bootloader, nem é assim tão difícil, mas a meu ver não é muito interessante. Basicamente o bootloader inicializa o processador, memória, etc, e passa o controlo para o teu sistema operativo.

Quando fazes boot pelo disco, penso que ele vai buscar a informação ao MBR, e executa a partição assinalada com a flag boot. Quanto a CD-ROMs, eu faço boot utilizando a especificação El-Torito, utilizando uma imagem que vem com a distribuição do GRUB.

Acho que não disse nenhum disparate, até porque já não mexo nisto há uns meses. Qualquer dúvida diz.

<3 life

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.