Luis Cardoso (07-06-2013, 9:49) escreveu:Claudio Novais (07-06-2013, 1:34) escreveu:Pronto, e então com o ficheiro HEX, que todos os programas têm essa "estrutura" de instruções, como pensas conseguir ultrapassar essa coisa obsoleta?
Ok, tu quando estavas a falar do ficheiro binário, não estavas a falar do binário puro, pois não? Estavas a falar dos executáveis para correr no SO, correcto? Se usas o gcc para criares uma aplicação para um SO, não estás a produzir um binário puro, caso contrário, um simples indicador, teria perto de 100MB. O próprio
SO possui um interpretador que dá as instruções correctas, face ao que está escrito no executável. Os binários puros que tens, são aqueles que são responsáveis pelo arranque do teu SO, quando a BIOS leva o CPU a atingir o MBR. Caso fosse binário puro, o executável criado em Windows, poderia correr em Linux sem necessidade de Wine.
Não Luís, não é assim.
Tu estás a confundir utilização de bibliotecas do kernel com abstração de por parte do Kernel. Segundo o que dizes (negrito), os programas não são binários executados pelo processador mas sim binários lidos pelo kernel (ou algo assim que tu tás a misturar erradamente). Na verdade, o Kernel trabalha em conjunto sim, primeiro no escalonamento, e portanto uma boa percentagem do tempo (falando de um single-core para simplificar) de processamento do processador fica para o Kernel (mas isto é indepenten); e segundo na utilização de bibliotecas do sistema, nomeadamente uma das mais conhecidas o stdio para comunicação com inputs.
Mas isto que eu disse não quer dizer rigorosamente nada de execução sobre um kernel, ou interpretação do mesmo. O Binário é puro sim, mas se utilizar bibliotecas, como é óbvio, vai ter
gotos para essas bibliotecas. Se quiseres fazer uma brincadeira, compila com o GCC um pequeno programa que com um ciclo e somar o número de iterações, sem stdin. Se fores ver o que acontece é que o binário vai ter apenas instruções de utilização do processador e da memória (cache) do processador. Kernel? Ele vai continuar a ser usado e se o ciclo for grande, o processo vai estar a ser parado e executado novamente, através do escalonador do kernel que, sim, usa hardware para interrupção.
Portanto, em suma, o que dizes simplesmente está errado. Utilização de bibliotecas é uma coisa. Binário é outra. Claro que se um binário usa bibliotecas acaba por fazer uso delas, e depois? Falando das bibliotecas também, e voltondo a espicaçar, sugeres então que as bibliotecas sejam replicadas duas ou 3 vezes para ter compatibilidade com duas ou 3 arquiteturas mais conhecidas? Ou sugeres que as bibliotecas sejam todas de 8 bits para serem compatíveis para todo o sempre em termos de hardware?