Diferença das arquiteturas

Diferenças de Hardwares e porque não o mesmo software em todos?


Todos os hardwares que existem no mercado, sejam eles smartphones, pc’s, Mac’s, PowerPC’s, SUN SPARC e outros, possuem uma demanda de sistema operacional nativos ou instaláveis. É necessário entender o que é um sistema operacional, pelo fato desse assunto pode ser muito mais complexo do que se parece.Usamos o GNU/Linux, ou seja, aplicativos GNU com o kernel Linux.

Um sistema operacional possui varias camadas, que permitem o gerenciamento do hardware, como por exemplo um telefone com android, seu sistema operacional Android é um derivado do Linux, ele usa o kernel Linux, mas a sua estrutura de bibliotecas e até mesmo o HFS, que é sistema de arquivos hierárquico é bem diferente do que costumamos ver em Linux.

Ele é derivado de uma distribuição Linux da antiga Android Inc (http://code.google.com/intl/pt-BR/android/),e é um sistema mobile e usa um micro-kernel que trabalha com eventos e chamadas baseados em camadas de aplicação -> framework de aplicações -> bibliotecas e uma camada de runtime para o Android -> e o kernel Linux, que definem todos os seus drivers e módulos que permitem ligar tais componentes.

O que acontece nesse sentido é que quando temos um sistema mobile, como no caso do android, ele recebe certas caracteristicas diferentes de um sistema operacional para PC, como por exemplo. Outro GRANDE FATOR (é claro), é que o Android não utiliza o X11 padrão do Linux e o seu conjunto de bibliotecas gráficas são totalmente diferentes, por isso que HOJE em dia vc ainda não consegue abrir uma aplicação Linux diretamente no Android. Mas como existem alguns softwares para portar o X11 para Android, o mesmo funcionou corretamente no OSX, disponibilizado no CD de instalação do OSX Snow, pela Apple. Aguardo a Google e a todos os desenvolvedores.

O micro-kernel dele, possui uma camada de abstração muito limitada a estes pequenos hardwares, como o sistema operacional que vem no PSP, como o sistema operacional que vem no PS3, iPhone, iPod, são sistemas criados especificamente para atender somente um tipo de hardware específico em que diversas aplicações devem ser traduzidas ou interpretadas para essa arquitetura, ou seja, quando vc tem uma aplicação em PC (para arquitetura intel/amd), ao abrir a aplicação, ela faz uma chamada no kernel e busca por informações de sistema, como por exemplo, o co-processamento matemático para operar. É o mesmo que vc tentar compilar uma aplicação de  AIX de um 43p, f50,RS6000,p5,p6,p7 em Linux no PC, quando a aplicação for compilada para se executada,por ela ter sido escrita para outra arquitetura, no caso POWER, o processo de compilação que também se utiliza de utilitários, como o cc,gcc ou outros compiladores como fortran,assemble, fará uma chamada de sistema no kernel e ao verificar a integridade do hardware pelo qual ela foi escrita, vai falhar e não dará continuidade, pois existe uma dependência muito imporante, a arquitetura que a aplicação que vc esta compilando foi portada, isso não significa, é claro, que a aplicação possa ser compilada para qualquer arquitetura, pois isso vai depender muito da linguagem em que a mesma foi escrita, como C ou java (exemplo).

O kernel Linux, possui varias camadas para interatividade com chamadas de aplicações. Quando vc faz uma aplicação para um kernel, na verdade vc esta fazendo aquela aplicação para uma determinada arquitetura, cujo aquele micro-kernel ou kernel respondem, seja ele, alpha, ppc, arm, x86, amd64, x64/em64t, ia64 e por ai vai…

Vamos la, quando vc compila uma aplicação, porque ela foi escrita para tal arquitetura ou plataforma, essa chamada consulta uma área do kernel chamada CPU specific, que informa a arquitetura de co-processamento e onde o nano-kernel como de virtualizadores trabalham constantemente , como a chamada de para-virtualização. Essa camada consulta a interrupt context ou vice versa que consulta o scheduler sendo uma 3 camada da estrutra do kernel (isso é śo um exemplo). Nessas 3 camadas vc tem sub-camadas, ou módulos que respondem como em system_calls/interrupts, (que verifica disponibilidade de consulta ao CPU), pt_regs , que talvez seja a mais importante, pois permite registros direto com a arquitetura utilizada e fornece suporte a ela, como um simples reboot e oferece a distribuição de chamadas de sistema, e thread_info, que definem ponteiros e outros, entçao ja começaríamos a falar sobre stack pointer e task_struct. Além dessas camadas e outras  poderíamos ficar aqui o dia todo falando a respeito, como o entrar no mais profundo com o user_peripherals, onde falaríamos sobre abstração de vídeo, audio, tais como abstract devices, ou camada de abstração de dispositivos, onde temos modulos para mouses, teclados e mais ainda acima, a camada hi_subsystems, onde temos a camada de terminais tty e drivers diversos para sempre com suporte a arquitetura definida pelo criador da aplicação e do kernel em questao. Ufa!

Quando falamos de Linux Android, estamos falando de um micro-kernel (não um nano-kernel, como no xen, powervm e vmware), estamos falando de um kernel menor, ou compilado para a arquitetura arm ou mobile/embedded em geral, onde todas as aplicações escritas, são menores e de baixa latência, porque são criadas para um sistema operacional que não se exige de muitos recursos do kernel, como de I/O, E/S como o de padrão do mercado. Abaixo segue uma imagem como funciona o Kernel Linux no AndroidOS.

Estamos então, entrando na diferença para ambas as definições e arquiteturas de um kernel, como o darwin/os mobile(chamado de iOS da Apple), e OSX, ou melhor dizendo, a diferença do iOS para o OSX. Não são ambos o sistema operacional da Apple? SIM! Com a diferença citada acima, ele foi totalmente desenhado para agregar uma arquitetura menor, em que todas as aplicações, não teriam a mesma disponibilidade para rodar em um sistema de grande porte e de alta latência, com todos os recursos de I/O, E/S e de um kernel completo que so funciona por causa de uma grande demanda de módulos e bibliotecas que permitem que esses módulos liguem componentes. Estou falando de sistema operacional, e não da bagunça do Windows.

Estou falando sobre kernel, porque eu amo o kernel Linux e os dos demais UNIX , e estamos sempre pronto para a experiência de mercado e como clientes que costumo tratar, é de muita observancias essas coisas, quando falamos de softwares e de sistemas operacionais. Empresas como a IBM, EMC,NetApp, Vmware, Citrix, sabem tanto isso que usam nas suas mais importantes soluções, o kernel Linux como o principal, vc sabia disso? Pergunte a VMWare em que o ESXi/ESX é baseado, pergunte a Citrix em que o Xen é baseado (ahh xensource inc, pra q vc se vendeu), pergunta as outras empresas como a Hitachi, que sistema operacional eles usam em suas soluções de NAS.

Eu tenho na empresa, várias máquinas POWER da IBM, mas como todas as aplicações e instalações para o RHEL for POWER (RedHat Enteprise Linux for POWER), eu preciso muito procurar na rede como maluco aplicações portadas,ou usar softwares que permitem ter camadas de converção. Conversão? O que seria isso? Imagine um aplicativo compilado e feito para x86 rodar em PPC (POWER)? Sim, exatamente isso, no RHEL for POWER eu tenho instalado o powervm-lx86, uma features do POWERVM que permite atraves de um script, executar aplicações de PC, ou seja do co-processamento INTEL (pelo qual as aplicações consultam e são levadas pelo kernel a isso), em um POWER PC. Somos certificados e case da IBM nisso.

Na verdade não é uma emulação, ta longe de ser uma emulação e sim uma conversão. Quando a aplicação é executada, e possui uma demanda de blbiotecas muito grande e de arquitetura diferente (nesse caso, um PC/x86), O lx86 (software de conversão), passam para o kernel a informação re-escrita como com base em um x86, fazendo a aplicação validar aquela informação e o kernel a transcrever tudo para a outra arquitetura, porque a arquitetura ja é conhecida e então permite uma chamada de sistema, interpretada naquela língua. Pode haver muito mais módulos e definições do kernel for POWER, é claro, mas apenas quis te orientar a respeito.

Uma aplicação de iOS não roda em MAC, porque a arquitetura é diferente e depende um kernel e bibliotecas que os fazem conversar, que interpretam isso tudo. Não será possivel, como mencionei la em cima, porque a chamada é com base em plataformas diferentes. É possível rodar? SiM! ae entra o papel do AFAIK, uma das ferramentas de BOCHs, conhecida como a 4 camada de virtualização depois dos ABIs (como no caso do wine que ja esta em outro nível de conversão, sendo a simulação), que oferecem dentro de uma janela ou aplicação em funcionamento, a emulação de todos os conectores do micro-kernel do iOS e hardware, dentro de uma plataforma de emulação, como se vc estivesse la. É assim que funciona com emuladores de video games, emuladores de IOS/CISCO, xOS da extreme e até MAINFRAMES pelo hercules (software de emulação que funciona como bochs para linux).

É impressionante o que podemos ganhar com o kernel e sua adaptação a plataformas, por isso que quando se faz um sistema operacional novo para tal plataforma, como o android, como o ios, e outros, logo logo, as empresas ou envolvidos, disponibilizam ferramentas como jdk e outros para que varios colaboradores do mundo todo e programadores possam criar suas aplicações nas seguintes especificações, emulando a arquitetura, sem estar lá! Existem vários outros tipos de kernel interessantes como o VxWorks, que trabalha com o RTOS, ou seja, em tempo real, seja ele por chamadas real-hard ou soft, e o plan9, que é um outro sistema operacional. Temos muito a ganhar.

Enfim;
o software so pode rodar em plataformas heterogêneas como android, LINUX, BSD, iOS, OSX, se ambas possuírem suporte nativo com base em chamadas de sistema para aquela arquitetura em questão,se ambos forem compilados com suporte para a mesma arquitetura. Como isso não é possível ainda, ou existem outros meios como o paralles e outros, da-se o conceito de nano-kernel, como no xen, que permite modular um kernel de um sistema operacional completo e seus recursos, a um micro-kernel que carrega e assume com maior prioridade fornecendo o que chamados de HAL ( Hardware Abstraction Layer), que em alguns sistema operacionais, como o Linux, pode fornecer . E uma priorização de uma camada mais alta e oferecer suporte em definitivo, passando toda a informação de primeira e com os seus recursos para o sistema operacional, que funciona no caso como módulo.

Como a Apple não quer perder o mercado e Google não quer perder o mercado. então, continua assim como esta. Por isso que muitas empresas como a SUN, odiaram o Linux, porque ele pode rodar em qualquer arquitetura. Agora, é possivel instalar o Ubuntu em celular? SIM! porque como o kernel Linux é aberto, ele é modulado a varias arquiteturas, principalmente como ARM e por isso é possível essa implementação. Ja não podemos dizer o mesmo do sistema do mal da Microsoft e do OSX da Apple, que ambos são restritos para uma arquitetura própria. A Microsoft a tentou rotular o seu OS para a arquitetura itanium, mas quebrou a cara. Eles dependem de terceiros para conseguir essa tarefa! Como o OPENIBOOT, que permite colocar o android no iphone e como as empresas que a microsoft compra, para disponibilizar nas futuras versões, suporte a tais hardwares.

Por isso eu amo Linux, o kernel dele, entende todas as arquiteturas e é portavel a varias arquiteturas. Já se as aplicações para Linux, se funcionam no Ubuntu ou Android, vai depender da boa vontade do programador em querer criar a aplicação homologada na arquitetura. Um exemplo, já pensou vc abrir o libreoffice no android sem portar o mesmo? Deve ser muito chato vc ficar movimento o touch ate chegar no ponto que vc quer, pq as orientações do sistema se perdem.

Agora, a possibilidade de usar todas as aplicações em todos os sistemas operacionais é muito questionável, pois depende principalmente da porca conduta de certas empresas em querer compilar tais aplicações para Linux e outros.

Só nos resta esperar, abraços a todos.

É o poder!

Powered by Moblie Video for WordPress + Daniel Watrous