Porque há no Windows pastas Program Files e Program Files(x86)?
Conhecer o sistema operativo onde normalmente trabalhamos é meio caminho andado para dele tirarmos muito mais e obtermos melhores resultados a vários níveis.
O Windows tem algumas particularidades que chamam à atenção do utilizador e que pode levar em erro os menos atentos. Se as aplicações deste sistemas operativos estão arrumadas na pasta Program Files, porque existe uma pasta Program Files (x86)?
Alguns de vós, utilizadores de Windows com 64 bits, já devem ter questionado a razão da existência de duas diretorias, “Program Files” e “Program Files (x86)” na vossa máquina.
Desde 2005, a Microsoft tem vindo a desenvolver versões de 32 bits e 64 bits de sistemas operativos Windows com o intuito de suportar novos CPUs de 64 bits.
As pastas de aplicações do Windows e as suas diferentes funções:
- Program Files – Contém programas e aplicações de 64 bits
- Program Files (x86) – Contém programas e aplicações de 32 bits
As razões para a existência destas duas pastas:
- Separar os executáveis DLL de 32 bits de DLLs de 64 bits, uma vez que as aplicações de cada arquitetura são compiladas de forma diferente;
- Reduzir as possibilidades de conflito se, por exemplo, instalar uma versão de 32 bits e 64 bits do mesmo programa;
- Aumentar a possibilidade de programas mais antigos funcionarem corretamente, sem que eles interajam acidentalmente com o software de 64 bits.
Desta forma, anulam-se as possibilidades de uma aplicação de 32 bits tentar carregar uma DLL de 64 bits, caso contrário haveria uma falha no sistema seguindo-se uma mensagem de erro.
Enquanto que um programa com instruções de 64 bits não pode ser lido por CPUs de 32 bits, um programa de 32 bits pode ser lido por CPUs de 64 bits. Os processadores de 32 bits também podem ser denominados por x86.
Inicialmente, os de 16 bits, mais concretamente arquiteturas de processadores 8086 e 8088, foram referidos como x86, que mais tarde foi alargado para incluir a família de processadores 80386 e 80486.
Quando os de 64 bits foram introduzidos, intitularam-nos de x64, para os diferenciar das linhas de processadores mais antigos.
Este artigo tem mais de um ano
É possivel explicar o porque de serem escolhidos esses numeros? (x86), é alguma base diferente?
Boas! Com x86 são programas 32bits, sem são 64bits. (eu acho que esta divisão só existe quando usas um SO 64bits, mas como não uso e vejo 32bits SO a muito muito tempo, não te sei dar certeza)
Julgo que tem a ver com a lendária retrocompatibilidade com os processadores que terminavam em 86, ainda com 32 bits
Realmente… Um processador 64bits da intel é baseado na arquitectura x86. Do meu entender existe o x86-32bits, e x86-64bits.
não. x64 é x64. a compatibilidade vem dos instructions set.
quem se baseou na arquitetura física foi a AMD no seu AMD64. a intel fez do 0 o processador de 64 bits mas com compatibilidade de instruções do x86. Mas para isso o SO tem que dizer ao CPU que determinada tarefa vai ser executada em modo 32 bits por isso não é por magia.
Viva Nelson,
Os primeiros processadores da família x86 eram identificados por números terminados em 86, por exemplo, 8086, 80186, 80286, 80386 e 80486. Eis a explicação 🙂
Abraço.
x86 é a arquitetura intel de 32 bits.
x64 é a arquitetura intel de 64 bits.
Visto que em x64 é compatível com x86 normalmente se vê x64-86.
https://en.wikipedia.org/wiki/X86
é comum referir-se aos x86 como todos os CPUs com base em 386, de 32 bits. E vão desde o 386 passando pelos 486, Pentium Pro, Pentium, Pentium MMX, Pentium II e III e IV.
A partir dos Pentium IV já passaram a ser conhecidos como i686
Antes dos 386, era tudo sistemas de 4, 8 e 16 bits sendo o ultimo CPU 16bits o Intel 286 (para PC), pois a Motorola tinha os famosos 680×0 (série 68000 a 68040) que equipavam os CBM Amiga, Atari ST e Apple Mac (desde o Mac II ao Quadra era tudo CPU Motorola).
O CBM Amiga deixou muita saudade…
xiiii…
Os actuais processadores da intel para PC’s continuam a ser baseados em x86.
E x86 não é do 386, mas sim da arquitectura 8086. Antes do 386, ou 80386, existiu o 80286 o 8086, 8080, 8008, 4004… processadores da intel para PC’s. A seguir ao 80386, foi o 80486, 80586 (Pentium)… Actualmente estes processadores da intel é tudo baseado na arquitectura 8086.
Não, só a AMD é que se baseou nos seus de 32 bits.
As instruções continuam a ser iguais quer intel quer amd (SSEx, MMX,…)
Esta mas quase…, tem de referir a introdução no mercado dos CPU’s da AMD de 64bits, o que é a base de todas as instruções da microsoft para CPU’s em 64bits, pois foi lançada muito antes de qualquer CPU intel para consumo (vide: AMD Athlon x64, Opteron x64), e como tal foi desenvolvido o windows xp 64bits com base nos CPU’s da AMD, e quando a intel lançou os CPU’s da linha Core, a microsoft recusou-se a fazer um S. O. para a intel uma vez que já tinha a trabalhar com a AMD em 64bits, por isso as instruções do kernel microsoft são com base na AMD!
para mais duvidas googlem.
O que sao DLLs?? Qual a diferenca entre um .bat um .dll e um .exe? Porque no mac ou linux n existem 2 pastas? Quais as vantagens de programas 64bits em comparacao aos 32bits? Velocidade?
Bom artigo. Parabéns!
Obrigado V.T.
É importante ter feedback por parte dos leitores.
Um abraço.
O que sao DLLs?? Qual a diferenca entre um .bat um .dll e um .exe? Porque no mac ou linux n existem 2 pastas? Quais as vantagens de programas 64bits em comparacao aos 32bits? Velocidade? Agradecia que me explicassem para assim entender melhor o artigo. Obrigado!
Artigo muito vago…o que sao DLLs?? Qual a diferenca entre um .bat um .dll e um .exe? Porque no mac ou linux n existem 2 pastas? Quais as vantagens de programas 64bits em comparacao aos 32bits? Velocidade? Agradecia que me explicassem para assim entender melhor o artigo!
Temos de começar por algum lado e explicar as coisas de forma bem definida. Começamos por conceitos mais básicos e vamos evoluindo.
Mas contamos contigo para nos ajudar e dar ainda mais informações úteis.
DLL são ficheiros compilados onde tens funções para executar. Basicamente um programa tem uma parte de memória só para ele executar. Quando o programa é muito complexo e para ser fácil de gerir é preciso dividir as coisas por livrarias dinâmicas (Dynamic Linked Library). Os programas são “linkados” durante a compilação e quando o programa é corrido e dentro da execução precisa de saltar para uma função num DLL aí o SO cria mais espaço e um endereçamento diferente. É uma questão muito técnica e não quero confundir-te porque sei que não vais entender.
.bat é um ficheiro script com comandos para a linha de comandos. .exe é um ficheiro binário executável já linkado. Os executáveis são linkados com as livrarias do sistema operativo quer estáticas (static libs) quer dinâmicas (dynamic libs ou DLL). Assim o sistema operativo pode apontar para o “start” do programa que por sua vez salta para o “main” do executável. As libs estáticas até são compiladas e juntadas no mesmo executável acho eu.
Mac e linux diferem.
No mac é possível ter várias arquiteturas destintas no mesmo “object file” (ficheiro compilado mas não linkado -> não é executável porque não existe um start).
No linux já é preciso diferir:
/lib
/lib32
/lib64
No MacOS (temos que ver isto pelo kernel. o kernel chama-se XNU, Xnu is not Unix) podemos ver que tipo de ficheiro estamos a lidar:
$ file libosxfuse.dylib
libosxfuse.dylib: Mach-O universal binary with 4 architectures: [ppc_7400: Mach-O dynamically linked shared library ppc_7400] [ppc64: Mach-O dynamically linked shared library ppc64] [i386: Mach-O dynamically linked shared library i386] [x86_64: Mach-O 64-bit dynamically linked shared library x86_64]
libosxfuse.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc_7400
libosxfuse.dylib (for architecture ppc64): Mach-O dynamically linked shared library ppc64
libosxfuse.dylib (for architecture i386): Mach-O dynamically linked shared library i386
libosxfuse.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
esta libraria dinâmica (similar ao dll no windows) tem 4 arquiteturas no mesmo ficheiro. 32 bits da intel e 64 bits da intel e powerPC de 64 bits e powerPC dos antigos que presumo que seja 32 bits.
Executáveis:
$ file Mail
Mail: Mach-O 64-bit executable x86_64
São do tipo Mach-O.
No linux:
# file /lib/security/pam_google_authenticator.so
/lib/security/pam_google_authenticator.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=9da71b105f036115dc6b5cd49bc076f606baac04, stripped
São do tipo ELF. Neste caso é uma livraria compilada para 64 bits da intel.
/bin# file echo
echo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9a7491319c83fdfccc9e23340320177e8d186e3d, stripped
Um exemplo de um executável no linux.
O windows NT chama-se PE (Portable executable). ELF no linux e Mach-O no XNU.
Vantagens?
Num ciclo consegues calcular números muito maiores que em vez de 32 bits.
O número máximo em 32 bits que podes manter num registo no CPU é 2^32-1. Corta a metade se for signed porque precisas de um bit para dizer se é positivo ou negativo.
Em 64 bits é o mesmo mas 2^64-1. E é um valor muito grande.
Termos práticos? 64 bits consegues mapear endereços de memória até 64 bits de tamanho. Imagina uma rua grande. Cada casa pode armazenar 1 byte de informação. O número de casa casa começa em 0 depois 1 depois 2 por aí fora. se tiveres 32 bits podes ir até 4Biliões. Ou 4 biliões de bytes. São 4 GBs. Por isso só podes ter memória endereçada e usável até 4GBs. em 64 bits o número é tão grande que deve ser na ordem dos petabytes. por isso podes ter mais casas na mesma rua 😉
Velocidade é quase igual para situações que não precisas de usar números maiores que 32 bits. se tiveres uma aplicação a 32 bits e precisar de fazer uma multiplicação de um número maior que 4 biliões então tens que fazer-lo em vários ciclos. E isso demora ocupa tempo ao CPU que poderia estar a fazer outras coisas.
Espero que tenha sido simples. Não é algo fácil de explicar porque é necessário um background na área.
CCREDES FTW
Linkados?! Que tal igados? Livrarias ? Não serão bibliotecas ? A tua explicação não explica nada a um leigo.
Um leigo para perceber tem de estudar alguma coisa,ou então será como um burro a olhar para um palacio(não depreciando os burros).
Isto é que é ser mal agradecido. Num texto tão grande (sobre duas questões que nem tem a ver com o tópico) chocas-te com pequenos estrangeirismos…
O macOS não precisa de separar visto que é o único sistema operativo que tem um kernel que consegue lidar no mesmo executável e livrarias de diferentes arquiteturas :p nem o linux consegue.
É interessante explicarem mas não entendi porque a MS nos sistemas 64 bit ainda separa tudo: nas pastas de instalação se estivesse tudo unido e para o utilizador comum é igual ao litro.
não pode. não leste o artigo? pode causar conflitos.
todos os sistemas são assim tirando o macOS
errado, o computador lê as pastas especificas, não as duas pastas 32 e 64, por isso é exactamente igual ao litro…. se um user instalar as duas versões pode haver problemas, mas pensa um bocado antes de falares, o user instala o programa onde lhe dá na gana, não vai usar esta ou aquela pasta se nem souber o que significa…. por isso essa teoria cai por terra…. eu sempre selecciono uma pasta qql, nem sabia dessa separação, umas vezes mando para a 32 e outras para a 64, que nada têm a ser com a versão que eu uso para instalar
Dentro de ambas as pastas os programas são instalados em pastas separadas. Como é possível confundir ficheiros?
ainda tenho o meu 486 aki para os jogos antigos
Mais engraçado é a pasta System32 ter os DLLs de 64 bits (óbvio) e a pasta SysWow64 ter os DLLs de 32 bits (mais óbvio ainda) 😀
é possível um aplicativo 64 bits rodar tranquilamente num computador
q tem os 2 programas, ou seja, 32 e 64 bits?
Excelente esposição. Você ganhou mais uma estrela em seu curriculol