Computação de 64 bits - 64-bit computing

Na arquitetura do computador , inteiros de 64 bits , endereços de memória ou outras unidades de dados são aqueles que têm 64 bits (8 octetos ) de largura. Além disso, as arquiteturas de unidade de processamento central (CPU) e unidade lógica aritmética (ALU) de 64 bits são aquelas baseadas em registros de processador , barramentos de endereço ou barramentos de dados desse tamanho. Os microcomputadores de 64 bits são computadores em que os microprocessadores de 64 bits são a norma. Da perspectiva do software, computação de 64 bits significa o uso de código de máquina com endereços de memória virtual de 64 bits . No entanto, nem todos os conjuntos de instruções de 64 bits suportam endereços completos de memória virtual de 64 bits; x86-64 e ARMv8 , por exemplo, suportam apenas 48 bits de endereço virtual, com os 16 bits restantes do endereço virtual sendo todos 0s ou 1s , e vários conjuntos de instruções de 64 bits suportam menos de 64 bits de memória física Morada.

O termo 64 bits descreve uma geração de computadores em que os processadores de 64 bits são a norma. 64 bits é um tamanho de palavra que define certas classes de arquitetura de computador, barramentos, memória e CPUs e, por extensão, o software que é executado neles. CPUs de 64 bits têm sido usadas em supercomputadores desde a década de 1970 ( Cray-1 , 1975) e em estações de trabalho e servidores baseados em computadores com conjunto de instruções reduzidas (RISC) desde o início de 1990, notavelmente o MIPS R4000 , R8000 e R10000 , o equipamento digital Corporation (DEC) Alpha , Sun Microsystems UltraSPARC e IBM RS64 e POWER3 e microprocessadores POWER posteriores . Em 2003, CPUs de 64 bits foram introduzidas no mercado de computadores pessoais convencionais (anteriormente de 32 bits ) na forma de processadores x86-64 e PowerPC G5 , e foram introduzidas em 2012 na arquitetura ARM visando smartphones e tablets , primeiro vendido em 20 de setembro de 2013, no iPhone 5S equipado com o sistema ARMv8-A Apple A7 em um chip (SoC).

Um registro de 64 bits pode conter qualquer um dos 2 64 (mais de 18 quintilhões ou 1,8 × 10 19 ) valores diferentes. A faixa de valores inteiros que podem ser armazenados em 64 bits depende da representação inteira usada. Com as duas representações mais comuns, o intervalo é de 0 a 18.446.744.073.709.551.615 (2 64 - 1) para representação como um número binário ( sem sinal ) e −9.223.372.036.854.775.808 (−2 63 ) a 9.223.372.036.854.775.807 (2 63 - 1) para representação como complemento de dois . Conseqüentemente, um processador com endereços de memória de 64 bits pode acessar diretamente 2 64 bytes (16 exbibytes ou EiB) de memória endereçável por byte .

Sem nenhuma qualificação adicional, uma arquitetura de computador de 64 bits geralmente tem registros de processador de endereço inteiro e de 64 bits de largura, permitindo suporte direto para endereços e tipos de dados de 64 bits. Porém, uma CPU pode ter barramentos de dados externos ou barramentos de endereços com tamanhos diferentes dos registradores, ainda maiores (o Pentium de 32 bits tinha barramento de dados de 64 bits, por exemplo).

O termo também pode se referir ao tamanho dos tipos de dados de baixo nível, como números aritméticos de ponto flutuante de 64 bits .

Implicações arquitetônicas

Os registros do processador são normalmente divididos em vários grupos: inteiro , ponto flutuante , instrução única e dados múltiplos ( SIMD ), controle e, muitas vezes, registros especiais para aritmética de endereço que podem ter vários usos e nomes, como endereço , índice ou base registra . No entanto, em projetos modernos, essas funções são frequentemente realizadas por registradores inteiros de propósito mais geral . Na maioria dos processadores, apenas inteiros ou registradores de endereço podem ser usados ​​para endereçar dados na memória; os outros tipos de registradores não podem. O tamanho desses registradores, portanto, normalmente limita a quantidade de memória endereçável diretamente, mesmo se houver registradores, como registradores de ponto flutuante, que são mais largos.

A maioria dos processadores de alto desempenho de 32 e 64 bits (algumas exceções notáveis ​​são a arquitetura ARM mais antiga ou incorporada (ARM) e as CPUs de arquitetura MIPS de 32 bits (MIPS)) têm hardware de ponto flutuante integrado, que é frequentemente, mas nem sempre, baseado em unidades de dados de 64 bits. Por exemplo, embora a arquitetura x86 / x87 tenha instruções capazes de carregar e armazenar valores de ponto flutuante de 64 bits (e 32 bits) na memória, os dados de ponto flutuante interno e o formato de registro têm 80 bits de largura, enquanto o formato de registro de uso geral registradores têm 32 bits de largura. Em contraste, a família Alpha de 64 bits usa um formato de registro e dados de ponto flutuante de 64 bits e registradores inteiros de 64 bits.

História

Muitos conjuntos de instruções de computador são projetados para que um único registro inteiro possa armazenar o endereço de memória em qualquer local na memória física ou virtual do computador . Portanto, o número total de endereços para a memória é freqüentemente determinado pela largura desses registros. O IBM System / 360 da década de 1960 foi um dos primeiros computadores de 32 bits; ele tinha registradores inteiros de 32 bits, embora usasse apenas os 24 bits de ordem inferior de uma palavra para endereços, resultando em um espaço de endereço de 16  MiB ( 16 × 1024 2 bytes ). Superminicomputadores de 32 bits , como o DEC VAX , tornaram-se comuns na década de 1970, e os microprocessadores de 32 bits, como a família Motorola 68000 e os membros de 32 bits da família x86, começando com o Intel 80386 , surgiram em meados de 1980, tornando 32 bits um consenso de fato como um tamanho de registro conveniente.

Um registro de endereço de 32 bits significava que 2 32 endereços, ou 4  GiB de memória de acesso aleatório (RAM), podiam ser referenciados. Quando essas arquiteturas foram criadas, 4 GiB de memória estava muito além das quantidades típicas (4 MiB) em instalações, que foi considerado espaço suficiente para endereçamento. 4,29 bilhões de endereços foram considerados um tamanho apropriado para trabalhar por outro motivo importante: 4,29 bilhões de inteiros são suficientes para atribuir referências exclusivas à maioria das entidades em aplicativos como bancos de dados .

Algumas arquiteturas de supercomputador das décadas de 1970 e 1980, como o Cray-1 , usavam registradores de até 64 bits de largura e suportavam aritmética inteira de 64 bits, embora não suportassem endereçamento de 64 bits. Em meados da década de 1980, o desenvolvimento do Intel i860 começou a culminar em um (tarde demais para o Windows NT) lançamento de 1989; o i860 tinha registradores inteiros de 32 bits e endereçamento de 32 bits, portanto não era um processador totalmente de 64 bits, embora sua unidade gráfica suportasse aritmética de inteiros de 64 bits. No entanto, 32 bits permaneceram a norma até o início de 1990, quando as reduções contínuas no custo de memória levaram a instalações com quantidades de RAM próximas de 4 GiB, e o uso de espaços de memória virtual excedendo o teto de 4 GiB tornou-se desejável para lidar com certos tipos de problemas. Em resposta, MIPS e DEC desenvolveram arquiteturas de microprocessador de 64 bits, inicialmente para estações de trabalho de ponta e máquinas de servidor . Em meados da década de 1990, a HAL Computer Systems , a Sun Microsystems , a IBM , a Silicon Graphics e a Hewlett Packard desenvolveram arquiteturas de 64 bits para suas estações de trabalho e sistemas de servidor. Uma exceção notável a essa tendência eram os mainframes da IBM, que então usavam dados de 32 bits e tamanhos de endereços de 31 bits; os mainframes IBM não incluíam processadores de 64 bits até 2000. Durante a década de 1990, vários microprocessadores de 64 bits de baixo custo foram usados ​​em eletrônicos de consumo e aplicativos incorporados. Notavelmente, o Nintendo 64 e o PlayStation 2 tinham microprocessadores de 64 bits antes de sua introdução nos computadores pessoais. Impressoras de última geração, equipamentos de rede e computadores industriais também usaram microprocessadores de 64 bits, como o Quantum Effect Devices R5000 . A computação de 64 bits começou a se infiltrar no desktop do computador pessoal de 2003 em diante, quando alguns modelos nas linhas de Macintosh da Apple mudaram para processadores PowerPC 970 (denominado G5 pela Apple), e Advanced Micro Devices (AMD) lançou seu primeiro 64- processador de bits x86-64 .

Linha do tempo de dados de 64 bits

1961
A IBM oferece o supercomputador IBM 7030 Stretch , que usa palavras de dados de 64 bits e palavras de instrução de 32 ou 64 bits.
1974
A Control Data Corporation lança o supercomputador vetorial CDC Star-100 , que usa uma arquitetura de 64 bits (os sistemas CDC anteriores eram baseados em uma arquitetura de 60 bits).
International Computers Limited lança a série ICL 2900 com inteiros de complemento de dois de 32 bits, 64 bits e 128 bits ; Ponto flutuante de 64 e 128 bits; Decimal compactado de 32 bits, 64 bits e 128 bits e um registro de acumulador de 128 bits. A arquitetura sobreviveu por meio de uma sucessão de máquinas ICL e Fujitsu. O mais recente é o Fujitsu Supernova, que emula o ambiente original em processadores Intel de 64 bits.
1976
A Cray Research oferece o primeiro supercomputador Cray-1 , que se baseia em uma arquitetura de 64 bits e formará a base para os supercomputadores vetoriais Cray posteriores.
1983
Elxsi lança o paralelo Elxsi 6400 minisupercomputer . A arquitetura Elxsi possui registradores de dados de 64 bits, mas um espaço de endereço de 32 bits.
1989
A Intel apresenta o processador Intel i860 de conjunto de instruções reduzidas (RISC). Comercializado como um "microprocessador de 64 bits", tinha essencialmente uma arquitetura de 32 bits, aprimorada com uma unidade gráfica 3D capaz de operações inteiras de 64 bits.
1993
A Atari apresenta o console de videogame Atari Jaguar , que inclui alguns caminhos de dados de 64 bits em sua arquitetura.

Linha do tempo do endereço de 64 bits

1991
A MIPS Computer Systems produz o primeiro microprocessador de 64 bits, o R4000 , que implementa a arquitetura MIPS III , a terceira revisão de sua arquitetura MIPS . A CPU é usada em estações de trabalho de gráficos SGI, começando com o IRIS Crimson . A Kendall Square Research oferece seu primeiro supercomputador KSR1, baseado em uma arquitetura de processador RISC de 64 bits com OSF / 1 .
1992
A Digital Equipment Corporation (DEC) apresenta a arquitetura Alpha de 64 bits pura que nasceu do projeto PRISM .
1994
A Intel anuncia planos para a arquitetura IA-64 de 64 bits (desenvolvida em conjunto com a Hewlett-Packard ) como sucessora de seus processadores IA-32 de 32 bits . Uma data de lançamento de 1998 a 1999 foi planejada.
1995
A Sun lança um processador SPARC de 64 bits , o UltraSPARC . A HAL Computer Systems, de propriedade da Fujitsu , lança estações de trabalho baseadas em uma CPU de 64 bits, o SPARC64 de primeira geração projetado de forma independente da HAL . A IBM lança os microprocessadores A10 e A30, os primeiros processadores PowerPC AS de 64 bits. A IBM também lança uma atualização do sistema AS / 400 de 64 bits , que pode converter o sistema operacional, banco de dados e aplicativos.
1996
A Nintendo apresenta o console de videogame Nintendo 64 , construído em torno de uma variante de baixo custo do MIPS R4000. A HP lança a primeira implementação de sua arquitetura PA-RISC 2.0 de 64 bits , o PA-8000 .
1998
A IBM lança a linha POWER3 de processadores PowerPC / POWER completos de 64 bits .
1999
A Intel lança o conjunto de instruções para a arquitetura IA-64. A AMD divulga publicamente seu conjunto de extensões de 64 bits para IA-32, chamadas x86-64 (posteriormente denominado AMD64).
2000
A IBM lança seu primeiro mainframe z / Architecture de 64 bits , o zSeries z900. z / Architecture é uma versão de 64 bits da arquitetura ESA / 390 de 32 bits , um descendente da arquitetura System / 360 de 32 bits .
2001
A Intel lança sua linha de processadores IA-64, após repetidos atrasos para chegar ao mercado. Agora com a marca Itanium e voltada para servidores de ponta, as vendas não atendem às expectativas.
2003
A AMD apresenta suas linhas de processadores Opteron e Athlon 64 , com base em sua arquitetura AMD64 , que é a primeira arquitetura de processador de 64 bits baseada em x86. A Apple também fornece o CPU "G5" PowerPC 970 de 64 bits produzido pela IBM. A Intel afirma que seus chips Itanium permaneceriam como seus únicos processadores de 64 bits.
2004
A Intel, reagindo ao sucesso de mercado da AMD, admite que está desenvolvendo um clone das extensões AMD64 chamado IA-32e (mais tarde renomeado EM64T, e novamente renomeado como Intel 64). A Intel fornece versões atualizadas de suas famílias de processadores Xeon e Pentium 4 com suporte para o novo conjunto de instruções de 64 bits.
A VIA Technologies anuncia o processador Isaiah de 64 bits.
2006
Sony, IBM e Toshiba começam a fabricar o processador Cell de 64 bits para uso no PlayStation 3 , servidores, estações de trabalho e outros aparelhos. A Intel lançou o Core 2 Duo como o primeiro processador x86-64 mainstream para sua linha móvel, desktop e estação de trabalho. As linhas anteriores de processadores de extensão de 64 bits não estavam amplamente disponíveis no mercado de varejo (a maioria dos Pentium 4 / D de 64 bits eram OEM), Pentium 4 de 64 bits, Pentium D e Celeron não estavam em produção em massa até o final de 2006 devido ao problema de rendimento pobre (a maioria dos wafers de bom rendimento eram direcionados ao servidor e mainframe, enquanto o mainstream ainda permanecia em linha de processador de 32 bits de 130 nm até 2006) e logo se tornou baixo após o lançamento do Core 2. A AMD lançou seu primeiro processador móvel de 64 bits e fabricado em 90 nm.
2011
ARM Holdings anuncia ARMv8-A, a primeira versão de 64 bits da arquitetura ARM .
2012
ARM Holdings anunciou seus núcleos Cortex-A53 e Cortex-A57, seus primeiros núcleos baseados em sua arquitetura de 64 bits, em 30 de outubro de 2012.
2013
A Apple anuncia o iPhone 5S , com o primeiro processador de 64 bits do mundo em um smartphone, que usa seu sistema em um chip A7 ARMv8-A.
2014
O Google anuncia o tablet Nexus 9 , o primeiro dispositivo Android a rodar no chip Tegra K1 de 64 bits.

Linha do tempo do sistema operacional de 64 bits

1985
A Cray lança o UNICOS , a primeira implementação de 64 bits do sistema operacional Unix .
1993
A DEC lança o sistema operacional de 64 bits DEC OSF / 1 AXP Unix (posteriormente renomeado para Tru64 UNIX) para seus sistemas baseados na arquitetura Alpha .
1994
O suporte para o processador R8000 foi adicionado pela Silicon Graphics ao sistema operacional IRIX na versão 6.0.
1995
A DEC lança o OpenVMS 7.0, a primeira versão completa de 64 bits do OpenVMS para Alpha. É lançada a primeira distribuição Linux de 64 bits para a arquitetura Alpha.
1996
O suporte para os processadores R4x00 no modo de 64 bits foi adicionado pela Silicon Graphics ao sistema operacional IRIX na versão 6.2.
1998
A Sun lança o Solaris 7, com suporte total para UltraSPARC de 64 bits .
2000
A IBM lança z / OS , um sistema operacional de 64 bits descendente do MVS , para os novos mainframes zSeries de 64 bits; O Linux de 64 bits em z Systems segue o lançamento da CPU quase imediatamente.
2001
O Linux se torna o primeiro kernel do sistema operacional a oferecer suporte total ao x86-64 (em um simulador, já que nenhum processador x86-64 foi lançado ainda).
2001
A Microsoft lança o Windows XP 64-Bit Edition para a arquitetura IA-64 do Itanium ; ele pode executar aplicativos de 32 bits por meio de uma camada de execução.
2003
A Apple lança seu sistema operacional Mac OS X 10.3 "Panther" que adiciona suporte para aritmética nativa de inteiros de 64 bits em processadores PowerPC 970 . Várias distribuições de Linux são lançadas com suporte para AMD64 . Lançamentos do FreeBSD com suporte para AMD64.
2005
Em 4 de janeiro, a Microsoft descontinuou o Windows XP 64-Bit Edition, já que nenhum PC com processadores IA-64 estava disponível desde setembro anterior, e anuncia que está desenvolvendo versões x86-64 do Windows para substituí-lo. Em 31 de janeiro, a Sun lança Solaris 10 com suporte para processadores AMD64 e EM64T. Em 29 de abril, a Apple lança o Mac OS X 10.4 "Tiger", que fornece suporte limitado para aplicativos de linha de comando de 64 bits em máquinas com processadores PowerPC 970; versões posteriores para Macs baseados em Intel suportam aplicativos de linha de comando de 64 bits em Macs com processadores EM64T. Em 30 de abril, a Microsoft lançou o Windows XP Professional x64 Edition e o Windows Server 2003 x64 Edition para processadores AMD64 e EM64T.
2006
A Microsoft lança o Windows Vista , incluindo uma versão de 64 bits para processadores AMD64 / EM64T que mantém a compatibilidade de 32 bits. Na versão de 64 bits, todos os aplicativos e componentes do Windows são de 64 bits, embora muitos também tenham suas versões de 32 bits incluídas para compatibilidade com plug-ins .
2007
A Apple lança o Mac OS X 10.5 "Leopard", que oferece suporte total para aplicativos de 64 bits em máquinas com processadores PowerPC 970 ou EM64T.
2009
A Microsoft lança o Windows 7 , que, como o Windows Vista, inclui uma versão completa de 64 bits para processadores AMD64 / Intel 64; a maioria dos novos computadores é carregada por padrão com uma versão de 64 bits. A Microsoft também lança o Windows Server 2008 R2 , que é o primeiro sistema operacional de servidor somente de 64 bits. A Apple lança o Mac OS X 10.6 , "Snow Leopard", que vem com um kernel de 64 bits para processadores AMD64 / Intel64, embora apenas alguns modelos recentes de computadores Apple executem o kernel de 64 bits por padrão. A maioria dos aplicativos incluídos no Mac OS X 10.6 agora também são de 64 bits.
2011
A Apple lança o Mac OS X 10.7 , "Lion", que executa o kernel de 64 bits por padrão nas máquinas suportadas. Máquinas mais antigas que não conseguem executar o kernel de 64 bits executam o kernel de 32 bits, mas, como em versões anteriores, ainda podem executar aplicativos de 64 bits; O Lion não oferece suporte a máquinas com processadores de 32 bits. Quase todos os aplicativos incluídos no Mac OS X 10.7 agora também são de 64 bits, incluindo o iTunes.
2012
A Microsoft lança o Windows 8 que oferece suporte a UEFI Classe 3 ( UEFI sem CSM) e inicialização segura .
2013
A Apple lança o iOS 7 , que, em máquinas com processadores AArch64, possui um kernel de 64 bits que suporta aplicativos de 64 bits.
2014
O Google lança o Android Lollipop , a primeira versão do sistema operacional Android com suporte para processadores de 64 bits.
2017
A Apple lança o iOS 11 , suportando apenas máquinas com processadores AArch64. Ele tem um kernel de 64 bits que suporta apenas aplicativos de 64 bits. Os aplicativos de 32 bits não são mais compatíveis.
2019
A Apple lança o macOS 10.15 "Catalina", eliminando o suporte para aplicativos Intel de 32 bits.
2021
O Google lança o Android 12 , eliminando o suporte para aplicativos de 32 bits. A Microsoft lança o Windows 11 , sem lançar uma versão de 32 bits do sistema operacional.

Limites de processadores

Em princípio, um microprocessador de 64 bits pode endereçar 16 EiB ( 16 × 1024 6 = 2 64 = 18.446.744.073.709.551.616 bytes , ou cerca de 18,4 exabytes) de memória. No entanto, nem todos os conjuntos de instruções, e nem todos os processadores que implementam esses conjuntos de instruções, suportam um espaço de endereço físico ou virtual completo de 64 bits.

A arquitetura x86-64 (em 2016) permite 48 bits para memória virtual e, para qualquer processador, até 52 bits para memória física. Esses limites permitem tamanhos de memória de 256  TiB ( 256 × 1024 4 bytes ) e 4  PiB ( 4 × 1024 5 bytes ), respectivamente. Um PC atualmente não pode conter 4  pebibytes de memória (devido ao tamanho físico dos chips de memória), mas a AMD imaginou grandes servidores, clusters de memória compartilhada e outros usos de espaço de endereço físico que podem se aproximar disso em um futuro previsível. Assim, o endereço físico de 52 bits oferece amplo espaço para expansão, sem incorrer no custo de implementação de endereços físicos completos de 64 bits. Da mesma forma, o espaço de endereço virtual de 48 bits foi projetado para fornecer 65.536 (2 16 ) vezes o limite de 32 bits de 4 GiB ( 4 × 1024 3 bytes ), permitindo espaço para expansão posterior e não incorrendo em sobrecarga de tradução total de 64 bits endereços.

O Power ISA v3.0 permite 64 bits para um endereço efetivo, mapeado para um endereço segmentado com entre 65 e 78 bits permitidos, para memória virtual, e, para qualquer processador, até 60 bits para memória física.

A Oracle SPARC Architecture 2015 permite 64 bits para memória virtual e, para qualquer processador, entre 40 e 56 bits para memória física.

A arquitetura do sistema de memória virtual ARM AArch64 permite 48 bits para memória virtual e, para qualquer processador, de 32 a 48 bits para memória física.

A especificação DEC Alpha requer um mínimo de 43 bits de espaço de endereço de memória virtual (8 TiB) para ser suportado, e o hardware precisa verificar e detectar se os bits não suportados restantes são zero (para suportar compatibilidade em processadores futuros). Alpha 21064 suportava 43 bits de espaço de endereço de memória virtual (8 TiB) e 34 bits de espaço de endereço de memória física (16 GiB). Alpha 21164 suportava 43 bits de espaço de endereço de memória virtual (8 TiB) e 40 bits de espaço de endereço de memória física (1 TiB). O Alpha 21264 suportava 43 ou 48 bits configuráveis ​​pelo usuário de espaço de endereço de memória virtual (8 TiB ou 256 TiB) e 44 bits de espaço de endereço de memória física (16 TiB).


Aplicativos de 64 bits

32 bits vs 64 bits

Uma mudança de uma arquitetura de 32 bits para uma de 64 bits é uma alteração fundamental, já que a maioria dos sistemas operacionais deve ser amplamente modificada para aproveitar as vantagens da nova arquitetura, porque esse software tem que gerenciar o hardware de endereçamento de memória real. Outro software também deve ser portado para usar as novas habilidades; software de 32 bits mais antigo pode ser suportado em virtude do conjunto de instruções de 64 bits ser um superconjunto do conjunto de instruções de 32 bits, de modo que os processadores que suportam o conjunto de instruções de 64 bits também podem executar código para a instrução de 32 bits definido, ou por meio de emulação de software , ou pela implementação real de um núcleo de processador de 32 bits dentro do processador de 64 bits, como com alguns processadores Itanium da Intel, que incluíam um núcleo de processador IA-32 para executar aplicativos x86 de 32 bits . Os sistemas operacionais para essas arquiteturas de 64 bits geralmente oferecem suporte a aplicativos de 32 e 64 bits.

Uma exceção significativa a isso é o AS / 400 , software para o qual é compilado em uma arquitetura de conjunto de instruções virtuais (ISA) chamada Technology Independent Machine Interface (TIMI); O código TIMI é então traduzido para o código de máquina nativo por software de baixo nível antes de ser executado. O software de tradução é tudo o que deve ser reescrito para mover todo o sistema operacional e todo o software para uma nova plataforma, como quando a IBM fez a transição do conjunto de instruções nativas para AS / 400 do antigo IMPI de 32/48 bits para o mais recente PowerPC de 64 bits -AS , codinome Amazon . O conjunto de instruções IMPI era bastante diferente até mesmo do PowerPC de 32 bits, então essa transição foi ainda maior do que mover um determinado conjunto de instruções de 32 para 64 bits.

Em hardware de 64 bits com arquitetura x86-64 (AMD64), a maioria dos sistemas operacionais e aplicativos de 32 bits podem ser executados sem problemas de compatibilidade. Embora o maior espaço de endereço das arquiteturas de 64 bits torne o trabalho com grandes conjuntos de dados em aplicativos como vídeo digital , computação científica e grandes bancos de dados mais fácil, tem havido um debate considerável sobre se eles ou seus modos de compatibilidade de 32 bits serão mais rápidos do que sistemas de 32 bits com preços comparáveis ​​para outras tarefas.

Um programa Java compilado pode ser executado em uma máquina virtual Java de 32 ou 64 bits sem modificação. Os comprimentos e precisão de todo o embutido tipos, tais como char, short, int, long, float, e double, e os tipos que podem ser utilizados como índices de matriz, são especificados pelo padrão e não são dependentes da arquitectura subjacente. Os programas Java executados em uma máquina virtual Java de 64 bits têm acesso a um espaço de endereço maior.

A velocidade não é o único fator a ser considerado na comparação de processadores de 32 e 64 bits. Aplicativos como multitarefa, teste de estresse e clustering - para computação de alto desempenho (HPC) - podem ser mais adequados para uma arquitetura de 64 bits quando implantados de forma adequada. Por esse motivo, os clusters de 64 bits foram amplamente implantados em grandes organizações, como IBM, HP e Microsoft.

Resumo:

  • Um processador de 64 bits tem melhor desempenho com software de 64 bits.
  • Um processador de 64 bits pode ter compatibilidade com versões anteriores , permitindo-lhe executar software de aplicativo de 32 bits para a versão de 32 bits de seu conjunto de instruções e também pode suportar a execução de sistemas operacionais de 32 bits para a versão de 32 bits de seu conjunto de instruções .
  • Um processador de 32 bits é incompatível com software de 64 bits.

Prós e contras

Um equívoco comum é que as arquiteturas de 64 bits não são melhores do que as arquiteturas de 32 bits, a menos que o computador tenha mais de 4 GiB de memória de acesso aleatório . Isso não é inteiramente verdade:

  • Alguns sistemas operacionais e certas configurações de hardware limitam o espaço de memória física a 3 GiB em sistemas IA-32 , devido a grande parte da região de 3-4 GiB ser reservada para endereçamento de hardware; veja barreira de 3 GiB ; As arquiteturas de 64 bits podem lidar com muito mais do que 4 GiB. No entanto, os processadores IA-32 do Pentium Pro em diante permitem um espaço de endereço de memória física de 36 bits , usando Physical Address Extension (PAE), o que dá uma faixa de endereço físico de 64 GiB, dos quais até 62 GiB podem ser usados ​​pela memória principal ; os sistemas operacionais que oferecem suporte a PAE não podem ser limitados a 4 GiB de memória física, mesmo em processadores IA-32. No entanto, drivers e outros softwares de modo kernel, mais ainda versões mais antigas, podem ser incompatíveis com PAE; isso foi citado como o motivo para as versões de 32 bits do Microsoft Windows serem limitadas a 4 GiB de RAM física (embora a validade desta explicação tenha sido contestada).
  • Alguns sistemas operacionais reservam partes do espaço de endereço de processo para uso do SO, reduzindo efetivamente o espaço de endereço total disponível para mapear a memória para programas de usuário. Por exemplo, o Windows de 32 bits reserva 1 ou 2 GiB (dependendo das configurações) do espaço de endereço total para o kernel, o que deixa apenas 3 ou 2 GiB (respectivamente) do espaço de endereço disponível para o modo de usuário. Esse limite é muito maior em sistemas operacionais de 64 bits.
  • Os arquivos mapeados pela memória estão se tornando mais difíceis de implementar em arquiteturas de 32 bits à medida que os arquivos com mais de 4 GiB se tornam mais comuns; esses arquivos grandes não podem ser mapeados na memória facilmente para arquiteturas de 32 bits, pois apenas parte do arquivo pode ser mapeada para o espaço de endereço por vez, e para acessar tal arquivo por mapeamento de memória, as partes mapeadas devem ser trocadas em e fora do espaço de endereço conforme necessário. Isso é um problema, pois o mapeamento de memória, se implementado corretamente pelo sistema operacional, é um dos métodos mais eficientes de disco para memória.
  • Alguns programas de 64 bits, como codificadores, decodificadores e software de criptografia, podem se beneficiar muito dos registros de 64 bits, enquanto o desempenho de outros programas, como os orientados a gráficos 3D, permanece inalterado ao mudar de um 32 bits para um Ambiente de 64 bits.
  • Algumas arquiteturas de 64 bits, como x86-64 , suportam mais registradores de uso geral do que suas contrapartes de 32 bits (embora isso não seja devido especificamente ao comprimento da palavra). Isso leva a um aumento significativo de velocidade para loops estreitos, uma vez que o processador não precisa buscar dados do cache ou da memória principal se os dados couberem nos registradores disponíveis.
Exemplo em C :
int a, b, c, d, e;
for (a = 0; a < 100; a++)
{
    b = a;
    c = b;
    d = c;
    e = d;
}
Se um processador pode manter apenas dois ou três valores ou variáveis ​​nos registradores, ele precisaria mover alguns valores entre a memória e os registradores para poder processar as variáveis ​​d e e também; este é um processo que leva muitos ciclos da CPU. Um processador que pode conter todos os valores e variáveis ​​em registros pode fazer um loop através deles sem a necessidade de mover dados entre os registros e a memória para cada iteração. Esse comportamento pode ser facilmente comparado com a memória virtual, embora quaisquer efeitos dependam do compilador.

A principal desvantagem das arquiteturas de 64 bits é que, em relação às arquiteturas de 32 bits, os mesmos dados ocupam mais espaço na memória (devido a ponteiros mais longos e possivelmente outros tipos, e preenchimento de alinhamento). Isso aumenta os requisitos de memória de um determinado processo e pode ter implicações para o uso eficiente do cache do processador. Manter um modelo parcial de 32 bits é uma maneira de lidar com isso e, em geral, é razoavelmente eficaz. Por exemplo, o sistema operacional z / OS adota essa abordagem, exigindo que o código do programa resida em espaços de endereço de 31 bits (o bit de ordem superior não é usado no cálculo de endereço na plataforma de hardware subjacente) enquanto os objetos de dados podem opcionalmente residir em 64- regiões de bits. Nem todos esses aplicativos requerem um grande espaço de endereço ou manipulam itens de dados de 64 bits, portanto, esses aplicativos não se beneficiam desses recursos.

Disponibilidade de software

Os sistemas de 64 bits baseados em x86 às vezes não possuem equivalentes de software escrito para arquiteturas de 32 bits. O problema mais grave no Microsoft Windows são os drivers de dispositivo incompatíveis para hardware obsoleto. A maioria dos softwares de aplicativos de 32 bits pode ser executada em um sistema operacional de 64 bits em um modo de compatibilidade , também denominado modo de emulação , por exemplo, Microsoft WoW64 Technology for IA-64 e AMD64. O ambiente de driver do modo nativo do Windows de 64 bits é executado sobre NTDLL.DLL de 64 bits , que não pode chamar o código do subsistema Win32 de 32 bits (geralmente dispositivos cuja função de hardware real é emulada no software do modo de usuário, como Winprinters). Como os drivers de 64 bits para a maioria dos dispositivos estavam indisponíveis até o início de 2007 (Vista x64), usar uma versão de 64 bits do Windows era considerado um desafio. No entanto, a tendência mudou desde então para a computação de 64 bits, ainda mais porque os preços da memória caíram e o uso de mais de 4 GiB de RAM aumentou. A maioria dos fabricantes começou a fornecer drivers de 32 e 64 bits para novos dispositivos, portanto, a indisponibilidade de drivers de 64 bits deixou de ser um problema. Os drivers de 64 bits não eram fornecidos para muitos dispositivos mais antigos, o que, conseqüentemente, não podia ser usado em sistemas de 64 bits.

A compatibilidade do driver era menos problemática com os drivers de código aberto, já que os de 32 bits podiam ser modificados para uso de 64 bits. O suporte para hardware feito antes do início de 2007 era problemático para plataformas de código aberto, devido ao número relativamente pequeno de usuários.

As versões de 64 bits do Windows não podem executar software de 16 bits . No entanto, a maioria dos aplicativos de 32 bits funcionará bem. Os usuários de 64 bits são forçados a instalar uma máquina virtual de um sistema operacional de 16 ou 32 bits para executar aplicativos de 16 bits.

O Mac OS X 10.4 "Tiger" e o Mac OS X 10.5 "Leopard" tinham apenas um kernel de 32 bits, mas podem executar código de modo de usuário de 64 bits em processadores de 64 bits. O Mac OS X 10.6 "Snow Leopard" tinha kernels de 32 e 64 bits e, na maioria dos Macs, usava o kernel de 32 bits mesmo em processadores de 64 bits. Isso permitiu que os Macs suportassem processos de 64 bits e ainda suportassem drivers de dispositivos de 32 bits; embora não sejam drivers de 64 bits e vantagens de desempenho que podem vir com eles. O Mac OS X 10.7 "Lion" foi executado com um kernel de 64 bits em mais Macs, e OS X 10.8 "Mountain Lion" e versões posteriores do macOS têm apenas um kernel de 64 bits. Em sistemas com processadores de 64 bits, os kernels do macOS de 32 e 64 bits podem executar código de modo de usuário de 32 bits e todas as versões do macOS incluem versões de 32 bits das bibliotecas que os aplicativos de 32 bits usariam, portanto, O software de modo de usuário -bit para macOS será executado nesses sistemas.

Linux e a maioria dos outros sistemas operacionais semelhantes ao Unix, e as cadeias de ferramentas C e C ++ para eles, suportaram processadores de 64 bits por muitos anos. Muitos aplicativos e bibliotecas para essas plataformas são softwares de código aberto , escritos em C e C ++, de modo que, se forem seguros para 64 bits, podem ser compilados em versões de 64 bits. Este modelo de distribuição com base na fonte, com ênfase em lançamentos frequentes, torna a disponibilidade de software de aplicativo para esses sistemas operacionais um problema menor.

Modelos de dados de 64 bits

Em programas de 32 bits, ponteiros e tipos de dados, como inteiros, geralmente têm o mesmo comprimento. Isso não é necessariamente verdadeiro em máquinas de 64 bits. Misturar tipos de dados em linguagens de programação como C e seus descendentes como C ++ e Objective-C pode, portanto, funcionar em implementações de 32 bits, mas não em implementações de 64 bits.

Em muitos ambientes de programação para linguagens derivadas de C e C em máquinas de 64 bits, as intvariáveis ​​ainda têm 32 bits de largura, mas inteiros longos e ponteiros têm 64 bits. Eles são descritos como tendo um modelo de dados LP64 , que é uma abreviatura de "Long, Pointer, 64". Outros modelos são o modelo de dados ILP64 , no qual todos os três tipos de dados têm largura de 64 bits, e até mesmo o modelo SILP64 , em que inteiros curtos também têm largura de 64 bits. No entanto, na maioria dos casos, as modificações necessárias são relativamente pequenas e diretas, e muitos programas bem escritos podem ser simplesmente recompilados para o novo ambiente sem alterações. Outra alternativa é o modelo LLP64 , que mantém a compatibilidade com o código de 32 bits deixando e como 32 bits. LL refere-se ao tipo de número inteiro longo , que tem pelo menos 64 bits em todas as plataformas, incluindo ambientes de 32 bits. intlong

Também existem sistemas com processadores de 64 bits usando um modelo de dados ILP32 , com a adição de inteiros longos longos de 64 bits; isso também é usado em muitas plataformas com processadores de 32 bits. Este modelo reduz o tamanho do código e o tamanho das estruturas de dados contendo ponteiros, ao custo de um espaço de endereço muito menor, uma boa escolha para alguns sistemas embarcados. Para conjuntos de instruções, como x86 e ARM, nos quais a versão de 64 bits do conjunto de instruções tem mais registros do que a versão de 32 bits, ele fornece acesso aos registros adicionais sem a penalidade de espaço. É comum em máquinas RISC de 64 bits, explorado em x86 como x32 ABI e recentemente foi usado no Apple Watch Series 4 e 5.

Modelos de dados de 64 bits
Modelo de dados Inteiro curto) int inteiro longo) longo longo ponteiros,
size_t
Sistemas operacionais de amostra
ILP32 16 32 32 64 32 ABIs x32 e arm64ilp32 em sistemas Linux; MIPS N32 ABI.
LLP64 16 32 32 64 64 Microsoft Windows (x86-64 e IA-64) usando Visual C ++ ; e MinGW
LP64 16 32 64 64 64 A maioria Unix e Unix-like sistemas, por exemplo, Solaris , Linux , BSD , MacOS . Windows ao usar o Cygwin ; z / OS
ILP64 16 64 64 64 64 HAL Computer Systems port do Solaris para o SPARC64
SILP64 64 64 64 64 64 UNICOS clássico (versus UNICOS / mp, etc.)

Muitas plataformas de 64 bits hoje usam um modelo LP64 (incluindo Solaris, AIX , HP-UX , Linux, macOS, BSD e IBM z / OS). O Microsoft Windows usa um modelo LLP64 . A desvantagem do modelo LP64 é que o armazenamento de um longem um intpode truncar. Por outro lado, converter um ponteiro em um long"funcionará" no LP64. No modelo LLP64, o inverso é verdadeiro. Esses não são problemas que afetam o código totalmente compatível com o padrão, mas o código geralmente é escrito com suposições implícitas sobre as larguras dos tipos de dados. O código C deve preferir ( u) ao intptr_tinvés de longlançar ponteiros em objetos inteiros.

Um modelo de programação é uma escolha feita para se adequar a um determinado compilador, e vários podem coexistir no mesmo sistema operacional. No entanto, o modelo de programação escolhido como o modelo principal para a interface de programação de aplicativos (API) do sistema operacional geralmente domina.

Outra consideração é o modelo de dados usado para drivers de dispositivo . Os drivers constituem a maior parte do código do sistema operacional na maioria dos sistemas operacionais modernos (embora muitos possam não ser carregados quando o sistema operacional está em execução). Muitos drivers usam ponteiros intensamente para manipular dados e, em alguns casos, precisam carregar ponteiros de um determinado tamanho no hardware que suportam para acesso direto à memória (DMA). Por exemplo, um driver para um dispositivo PCI de 32 bits solicitando ao dispositivo para DMA dados em áreas superiores da memória de uma máquina de 64 bits não poderia satisfazer as solicitações do sistema operacional para carregar dados do dispositivo para a memória acima da barreira de 4 gibibytes , porque os ponteiros para esses endereços não caberiam nos registros DMA do dispositivo. Esse problema é resolvido fazendo com que o sistema operacional leve em consideração as restrições de memória do dispositivo ao gerar solicitações aos drivers para DMA ou usando uma unidade de gerenciamento de memória de entrada e saída (IOMMU).

Arquiteturas atuais de 64 bits

Desde maio de 2018, as arquiteturas de 64 bits para as quais os processadores estão sendo fabricados incluem:

  • Arquitetura z / da IBM , uma versão de 64 bits da arquitetura ESA / 390 , usada nos mainframes eServer zSeries e System z da IBM :
  • Arquitetura IA-64 da HP – Intel :
  • MIPS Technologies ' MIPS64 arquitetura
  • ARM Holdings ' AArch64 arquitetura
  • Arquitetura Elbrus :
  • Arquitetura NEC SX
  • RISC-V
  • A maioria das arquiteturas de 64 bits derivadas da mesma arquitetura de 32 bits podem executar código escrito para as versões de 32 bits nativamente, sem penalidade de desempenho. Este tipo de suporte é comumente chamado de suporte bi-arco ou, mais geralmente , suporte multi-arco .

    Veja também

    Referências

    links externos