Barramento de Sistema: É o dispositivo que conecta as várias partes do sistema. Existem três: Barramento de endereço, barramento de dados, e barramento de controle. Variam de processador para processador. Um típico sistema 80x86 utiliza a lógica TTL.
Barramento de dados: O tamanho é diferente para cada processador da família 80x86. Na verdade o tamanho desse barramento define o tamanho do processador. Num típico sistema 80x86, ele contém 8,16,32 ou 64 linhas. Tamanho do barramento nos processadores:
Barramento de Endereço: Na família 80x86 transfere informações entre uma memóra particular e sistema de E/S e CPU. Família 80x86 e tamanhos:
Ordenamento de Bit e Byte: Na figura abaixo, você poderá ver que as memórias mais baixas(endereços menores) estão embaixo. Os endereços aumentam em direção ao topo. Como vimos na seção de dados, os bits são da direita para esquerda. Os processadores Intel 64 e IA-32 são máquinas Little-endian. Isso quer dizer que os bytes de uma palavra (word) são enumerados, começando pelo byte menos significativo:
Bits Reservados e Compatibilidade de Software: Em muitos registradores e camadas de memórias, certos bits estão marcados como reservados. Isso é essencial para processadores futuros, para que o software trate esses bits como tendo uma finalidade futura, mas ainda desconhecida, nos processadores atuais. Como isso pode ser feito? Há algumas sugestões:
- Não dependa dos estados desses bits reservados, quando testar os valores nos registradores que contém tais bits. Mascare esses bits antes de testá-los;
- Não dependa do estado desses bits quando armazenar para a memória ou para o registrador;
- Não dependa da habilidade deles de reter informação escrita nesses bits;
- Quando rodar um registrador, sempre rode esses bits reservados com os valores escritos nos manuais do fabricante;
Obs.: Evite qualquer software dependente do estado desses bits. Isso torna eles dependentes de forma imprevisível. E correm risco de incopatibilidade futura.
Operandos de instruções: Na família 80x86 usamos esse formato:
label: mnemonic argument1, argument2, argument3
onde :
label = rótulo, identificador.
mnemonic = nome reservado para uma classe de opcode, que possuem as mesmas funções.
argument 1, 2 e 3 = são opcionais. Depende do opcode.
Quando dois operandos estão presentes, o da direita é a fonte e o da esquerda o destino. Exemplo:
LOADREG: mov eax, subtotal
Neste exemplo LOADREG é o rótulo. MOV é o mnemônico identificador do opcode. EAX é o destino do operando, e SUBTOTAL é a fonte do operando. Algumas linguagens assembly colocam isso na ordem inversa.
Endereçamento Segmentado: O processador usa endereçamento por byte. Isso quer dizer que a memória é acessada, lida e escrita, como uma sequencia de bytes. O intervalo de memória que pode ser endereççada é chamada de espaço de memória. O processador também suporta a forma segmentada. Essa é a forma onde o processador usa segmentos independentes de memórias. Por exemplo, o processador pode ter os códigos(instruções) e a pilha em segmentos separados. Códigos de endereço serão sempre referentes ao espaço de código, e a pilha ao espaço da pilha. A convenção abaixo refere-se a um byte de endereço com segmento:
REGISTRADOR DE SEGMENTO:BYTE DE ENDEREÇO
Exemplo: DS:FF79H
Significa endereço FF79H, no segmento apontado pelo registrador DS.
Outro exemplo: CS:EIP
Significa que o registrador EIP contém o endereço da instrução, e o registrador CS o segmento.
Pense na memória como uma matriz linear de bytes. O endereço do primeiro byte é 0, e o endereço do último byte é 2^n -1, onde n é o número de bits no barramento de endereços. Para um processador 8088 com 20 bits de barramento de endereço, a declaração da matriz pseudo-pascal é uma boa aproximação da memória:
Memory: matriz [0..1048575] de byte;
Para executá-la, o processador sabe que isso é equivalente a “Memory [125] := 0;” A CPU coloca o valor 0 no barramento de dados, o valor 125 no barramento de endereços, e a assertiva escrever(w) linha, já que neste exemplo é escrever(w), mas pode ser ler(R):
Para executar o equivalente a “CPU := Memory [125];” a CPU coloca o valor 125 no barramento de endereços, a assertiva ler linha(r), e lê o dado resultado disso no barramento de dados. Olhe a figura:
Isso só ocorre quando há acesso a um simples byte na memória. Mas o que ocorre, quando a CPU acessa uma WORD ou DOUBLEWORD? Como é uma matriz, como pode ter valores maiores do que oito bits?
Diferentes computadores possuem soluções diferentes para isso. A família 80x86 resolve isso armazenando o byte menos significativo da WORD no endereço especificado, e o byte mais significativo no próximo local. Mas a WORD consome dois endereços consecutivos de memória(dois bytes). Similarmente a DOUBLEWORD consome quatro endereços consecutivos de memória. O endereço da DW é o byte menos significativo. O restante dos três bytes seguem o menos significativo, com o mais significativo aparecendo no endereço da DW mais 3 bytes. Bytes, WORD e DW podem começar em qualquer endereço válido na memória. Nós veremos depois que começar com objetos mais largos que o normal não é uma boa idéia.
Repare na figura abaixo, que endereços de BYTE, WORD e DOUBLEWORD podem se sobrepôr. Quando for lido, é de baixo para cima, portanto serão sobrepostos.
Os processadores 8088 e 80188 possuem barramento de dados de oito bits. Isso significa que a CPU SÓ PODE TRANSFERIR DADOS no valor de oito bits por vez. O termo "matriz byte de memória endereçável" significa que a CPU pode endereçar memórias truncadas no valor tão pequeno quanto um simples byte. É a menor unidade de memória acessada pelo processador. Por exemplo, se ele quiser ler apenas quatro bits, terá que ler oito bits, e desprezar quatro. A CPU também não acessa qualquer oito bytes endereçáveis arbitrariamente. Se você inseriu 125, ela vai processar o byte desse valor, nem mais, nem menos. Endereços são sempre inteiros. O processador 8088 e 80188 podem manipular WORD e DW mesmo que seu barramento seja de apenas 1 byte. Isso requer outras operações de manipulações, porque eles só podem processar oito bits por vez. Para rodar uma WORD precisa de duas operações de memória. Para rodar DW(DOUBLWWORD), precisariam de quatro operações de memória. Aqui no blog, vamos inicar as programações com a família 80x86, pois é o padrão universal. Devagar, vamos ampliando nosso leque até as famílias mais atuais. Isso, claro, levará muito tempo. Paciência. Do contrário, não terá lógica. Aprendemos a andar, depois a correr.
As famílias 8086, 80186, 80286 e 80386sx têm um barramento de endereço de dados de 16 bits. Isso, permite o processador acessar duas vezes mais memória num único período de tempo, do que o de oito bits. Esses processadores organizam a memória em dois blocos: os pares e os ímpares:
A figura abaixo denota que a CPU utiliza como byte menos significativo D0-D7 no barramento de dados, o byte mais significativo D8-D15 no barramento de dados.
Lembram do que falei a respeito da família de 16 bits usar memórias consecutivas: Os oito bits menos significativos, mais os consecutivos? Isso cria uma problema sutil. O que ocorreria se olhar a figura acima, se o endereço de uma word fosse par? Ainda bem que a CPU reconhece esse problema e resolve ela mesmo. Apesar de ser 16 bits, a CPU ainda assim lerá em duas operações uma WORD na memória. O segundo problema é ainda mais obscuro. Quando as palavras de acesso, nós estamos realmente acessando dois bytes separados, cada qual tem seu próprio endereço de byte.. Quando as palavras de acesso, nós estamos realmente acessando dois bytes separados, cada qual tem seu próprio endereço de byte. Então surge a pergunta:
"Que endereço aparece no barramento de endereços?"
Os processadores de 16 bits do 80x86 sempre colocam endereços pares no barramento. Bytes pares sempre aparecem nas linhas de dados D0-D7 e os bytes ímpares sempre aparecem em linhas de dados D8-D15. Se você acessar uma word em um endereço par, a CPU pode trazer um fragmento inteiro de 16 bits em uma operação de memória. Da mesma forma, se você acessar um único byte, a CPU ativa o bloco apropriado (utilizando um byte "enable" linha de controle). Se o byte apareceu em um endereço ímpar, a CPU automaticamente move-o do byte mais significativo no barramento para o byte menos significativo. Então o que acontece quando a CPU acessa uma word em um endereço ímpar, como o exemplo dado anteriormente? Bem, a CPU não pode colocar o endereço 125 no barramento de endereços e ler os 16 bits da memória. Não há endereços ímpares resultantes de uma CPU de 16 bits do 80x86. Os endereços são sempre os mesmos. Portanto, se você tentar colocar 125 no barramento de endereços, esta vai colocar 124 para o barramento de endereços. Se você ler os 16 bits nesse endereço, você começaria a palavra no endereço 124 (byte menos significativo) e 125 (byte mais significaivo) - não é o que você esperaria. Acessando uma palavra em um endereço ímpar requer duas operações de memória em famílias 80x86. Primeiro o processador tem de ler o byte no endereço 125, então ele precisa ler o byte no endereço 126. Finalmente, ele precisa de swap as posições destes bytes internamente, uma vez que ambos entraram na CPU na metade errada do barramento de dados.
Felizmente, as CPUs de 16 bits do 80x86 ocultam esses detalhes de você. Seus programas podem acessar palavras a qualquer endereço e a CPU acessará apropriadamente e trocará (se necessário) o dados na memória. No entanto, como para acessar uma word em um endereço ímpar requer duas operações de memória (exatamente como o 8088/80188). Portanto, acessar words em endereços ímpares em um processador de 16 bits é mais lento do que acessar words em endereços pares. O uso organizando de memória, pode melhorar a velocidade do seu programa. Acessar quantidades de 32 bits sempre leva pelo menos duas operações na memória de 16 bits processadores. Se você acessar uma quantidade de 32 bits em um endereço ímpar, o processador exigirá três operações de memória para acessar os dados. Isso, na família 8088, ok?
Os processadores de 32 bits do 80x86 (o 80386, 80486 e Pentium Overdrive) utilizam quatro bancos de memória conectado ao barramento de dados de 32 bits:
O endereço colocado no barramento de endereços é sempre um múltiplo de quatro. Usando byte "permitir várias linhas", a CPU pode selecionar quais dos quatro bytes nesse endereço o software quer acessar. Tal como acontece com o Processador de 16 bits, a CPU automaticamente reorganizar bytes, se necessário. Com uma interface de memória de 32 bits, a CPU do 80x86 pode acessar qualquer byte com uma memória operação. Se (o endereço MOD 4) não é igual a três, em seguida, uma CPU de 32 bits pode acessar uma palavra usando esse endereço de uma operação única memória. No entanto, se o restante é três, então terá duas operações de memória para acessar essa palavra(acessando palavra em endereço mod 4=3):
Vamos resumir então algumas características dos processadores:
-Processadores 16 bits, segmentação(1978):
O IA-32 da família de arquitetura foi precedida por processadores de 16-bits, o 8086 e 8088. O 8086 tem registos de 16 bits e 16-bit barramento de dados externos, com 20-bit endereçamento dando um 1-MByte espaço de endereço. O 8088 é semelhante ao 8086, exceto se tem um 8-bit ônibus de barramento de dados externa.
A segmentação 8086/8088 introduziu a arquitetura IA-32. Com a segmentação, de 16-bit registrador de segmento contém um ponteiro para um segmento de memória de até 64 KBytes. Utilizando quatro registradores de segmento de cada vez, 8086/8088 processadores são capazes de endereçar até 256 KBytes sem alternar entre os segmentos. Os 20-bit endereços que podem ser formados usando um registrador de segmento e um adicional de 16 bits como ponteiro para fornecer um intervalo de endereços total de 1 MByte.
-Processador Intel ® 286 (1982):
O processador Intel 286 introduziu a operação em modo protegido para a arquitetura IA-32. Modo Protegido usa o conteúdo de registro do segmento como selectores ou ponteiros em tabelas como descritores. Descritores fornecem endereços de 24-bit com uma base física tamanho de memória de até 16 MBytes, suporte para o gerenciamento de memória virtual em uma troca de base do segmento, e uma série de mecanismos de proteção. Estes mecanismos incluem:
• verificação de limite de segmento Vol 2-2.1 Intel ® 64 e IA-32 arquiteturas
• Read-only e executar as opções único segmento
• Quatro níveis de privilégio
-Processador Intel386 ™(1985):
O processador Intel386 foi o primeiro processador de 32 bits da família IA-32. Ele introduziu os registros 32-bit para o uso tanto para conter operandos e para endereçamento. A metade inferior de cada registrador 32-bit Intel386 mantém as propriedades dos registros de 16 bits
das gerações anteriores, permitindo a compatibilidade com versões anteriores. O processador também fornece um modo virtual-8086 que permite ainda maior eficiência na execução programas criados para processadores 8086/8088.
Além disso, o processador Intel386 tem o apoio:
• A 32-bit endereço que suporta até 4 GBytes de memória física
• Um modelo de memória segmentado e um modelo de memória plana
• Paging, com 4 fixas KByte tamanho página que fornece um método para a gerenciamento de memória virtual
• Suporte para estágios em paralelo
-Processador Intel486 ™(1989):
O processador Intel486 ™ acrescentou mais capacidade de execução paralela através da expansão do decodificador do processador Intel386 de instrução e em cinco unidades de execução em estágios pipeline. Cada estágio funciona em paralelo com os outros em até cinco instruções diferentes em fases de execução.
Além disso, o processador acrescentou:
• Um 8-Kbyte de cache nível primeiro chip-que aumentou a porcentagem de instruções que possa executar a taxa de escalar de um ciclo do clock
• Uma x87 FPU integrado
• Poupar energia e recursos de gerenciamento de sistema
-O processador Intel ® Pentium ® (1993):
O lançamento do processador Pentium Intel adicionou uma segunda execução pipeline para alcançar um desempenho superescalar (duas pipeline, conhecido como u e v, juntos podem executar duas instruções por pulso). The on-chip cache de primeiro nível dobrou, com 8 KBytes dedicado para codificar e outros 8 KBytes dedicados aos dados. O cache de dados utiliza o protocolo MESI para um apoio mais eficiente cache write-back, além da WriteThrough cache anteriormente utilizada pelo processador Intel486. Ramo de previsão com uma na tabela de filial chip foi adicionado para aumentar o desempenho em construções em looping.
Além disso, o processador acrescentou:
Vol. 1 2-3 nas arquiteturas Intel ® 64 e IA-32 :
• Extensões para tornar o virtual-8086 de modo mais eficiente e permitir 4-MByte bem como 4-Kbyte páginas
• Os dados interno de 128 trajetos e 256 bits para adicionar velocidade para as transferências de dados internos
• Burstable barramento externo de dados foi aumentado para 64 bits
• Uma APIC para apoiar sistemas com múltiplos processadores
• Um processador dual mode para apoiar glueless com sistemas de dois processadores
Depois,houve um aprofundamento da família Pentium Intel quando introduziu a tecnologia MMX (o Processador Pentium com tecnologia MMX). A tecnologia Intel MMX usa o singleinstruction, múltiplos dados (SIMD modelo de execução) para realizar cálculos em paralelo inteiro embalado em dados contidos em registros de 64-bit.
-A família P6 de processadores (1995-1999):
A família de processadores P6 foi baseada em uma micro-arquitetura super escalar que estabelecem novos padrões de desempenho;
Um dos objetivos do projeto da micro arquitetura da família P6 podia exceder ao desempenho do processador Pentium significativamente enquanto estiver usando o mesmo 0,6 - micrômetro, quatro camadas, processo de fabricação BICMOS metal. Os membros desta família incluem os seguintes:
• O processador Intel Pentium Pro é de três super escalas. Usando técnicas de processamento paralelo, o processador é capaz de decodificar, em média, de expedição, e execução completa de três instruções por ciclo de clock. O Pentium Pro apresenta a análise de fluxo de execução dinâmica (micro-dados, fora de ordem de execução, previsão de desvio superior e execução especulativa) em uma implementação super escalar. O processador foi reforçado pelos seus esconderijos. Ele tem os mesmos dois on-chip 8-Kbyte caches de nível 1 como o processador Pentium e um adicional de 256 KByte cache de nível 2 no mesmo pacote do processador.
• O processador Intel Pentium II acrescentou a tecnologia Intel MMX para a família P6 de processadores, juntamente com novas embalagens e acessórios de hardware diversas. O núcleo do processador é embalado no cartucho Single Edge Contact (SECC). O Nível L de Dados e caches de instrução foram ampliados para 16 servidores cada, e cache de nível 2 com tamanhos de 256 servidores, 512 KBytes, e 1 MByte são suportados. A meia-velocidade de relógio o barramento traseiro liga o cache de nível 2 no processador. Múltiplos de baixa potência, Estados como AutoHALT, Stop-Grant, sono, sono profundo e são suportados para conservar energia quando em marcha lenta.
• O processador Pentium II Xeon combina as características premium das gerações anteriores de processadores Intel. Isto inclui: 4-way, 8-way (e acima) escalabilidade e um 2 MByte-Level 2 cache rodando em uma faixa backside em plena velocidade por detrás do barramento.
• A família de processadores Intel Celeron foca no segmento de valor de mercado do PC.
A sua introdução oferece um integrado 128 Kbytes de cache de nível 2 e um pino de plástico Grid Array (PPGA form factor) para diminuir o custo do sistema de design.
Arquiteturas Vol 2-4. 1 Intel ® 64 e IA-32 :
• O processador Intel Pentium III introduziu a Streaming SIMD Extensions (SSE) para a arquitetura IA-32. Extensões SSE expandir a execução SIMD modelo introduzido com a tecnologia Intel MMX, fornecendo um novo conjunto de 128 -- registros bits e capacidade de realizar operações SIMD em singleprecision com valores de ponto flutuante .
• O processador Pentium III Xeon estende os níveis de desempenho do IA-32 com o aumento da velocidade, on-die, e Advanced Transfer Cache.
-O processador Intel ® Pentium ® 4 Família (2000-2006):
A família de processadores Intel Pentium 4 é baseado na microarquitetura Intel NetBurst;
O processador Intel Pentium 4 introduziu Streaming SIMD Extensions 2 (SSE2)
Arquitetura Intel 64 foi introduzida no processador Intel Pentium 4 Extreme Edition Hyper-Threading e no processador Intel Pentium 4 6xx e 5xx seqüências.
Intel ® Virtualization Technology (Intel ® VT) foi introduzida no processador Intel Pentium 4 processador de 672 e 662.
-O processador Intel ® Xeon ® (2001 - 2007):
Processadores Intel Xeon (com exceção para os dual-core Intel Xeon LV, da Intel Xeon série 5100) são baseados na micro arquitetura Intel NetBurst.
O processador Intel Xeon MP introduziu o suporte para processadores Intel ® Hyper-Threading.
The 64-bit Intel ® Xeon ® 3,60 GHz (com um sistema de 800 MHz Bus) foi utilizado para introduzir Intel 64. O processador Dual-Core Intel Xeon dual inclui A tecnologia de núcleo. O processador Intel Xeon série 70xx inclui Virtualização da tecnologia Intel.
O processador Intel Xeon série 5100 apresenta potência de desempenho eficiente e de alta Micro arquitetura Intel Core. Este processador é baseado na arquitetura Intel ® 64, que inclui a Tecnologia de Virtualização da Intel e da tecnologia dual-core. O Intel Xeon série 3000 do processador também são baseados na micro arquitetura Intel Core. O Intel Xeon da série 5300 apresenta quatro núcleos de processamento em um pacote físico, eles são também baseado na micro arquitetura Intel Core.
-O processador Intel ® Pentium ® M (2003-atual):
A família de processadores Intel Pentium M é um alto desempenho, baixo consumo de energia móvel na família de processadores com melhorias na micro arquitetura com relação às gerações anteriores de IA-32, móveis da Intel. Esta família é projetada para prolongar a vida da bateria e integração perfeita com inovações de plataforma que permitem que novos modelos de uso (como a mobilidade estendida, forma ultra-fino fatores, e rede sem fio integrada).
Sua micro arquitetura Enhanced inclui:
• Suporte para arquitetura Intel com Dynamic Execution
• A alta performance, core de baixo consumo da Intel fabricados com avançada tecnologia de processo com interconexão de cobre
• On-Die, principal 32-KByte cache de instruções e 32-KByte write-back cache de dados
• On-die, cache de segundo nível (até 2 MByte) com Advanced Transfer Cache Architecture
• Advanced Branch Prediction and Data Prefetch Logic
• Suporte para a tecnologia MMX, instruções Streaming SIMD, e ao conjunto de instruções para SSE2
• A 400 ou 533 MHz, Source-Synchronous Processor System Bus
• gerenciamento avançado de energia usando a tecnologia Enhanced Intel SpeedStep ®
- O Processador Intel ® Pentium ® Extreme Edition (2005-2007):
O processador Intel Pentium Extreme Edition introduziu a tecnologia dual-core. Esta tecnologia oferece hardware avançado com multi-threading. O processador é com base na micro arquitetura Intel NetBurst e suporta SSE, SSE2, SSE3, Hyper - Threading, Intel e 64.
-O processador Intel ® Core ™ Duo e Intel ® Core ™ Solo
(2006-2007) :
O processador Intel Core Duo oferece energia eficiente, o desempenho dual-core com um design de baixo consumo, que aumenta a vida útil da bateria. Esta família e os single-core Intel Core Vol 2-6. 1 Individual oferecem melhorias na micro arquitectura sobre processador Pentium M família.
Sua micro arquitetura Enhanced inclui:
• Intel ® Smart Cache que permite o compartilhamento eficiente de dados entre dois núcleos de processador
• Melhoria da execução de decodificação e SIMD
• Intel ® Dynamic Power Coordination e Enhanced Intel ® Deeper Sleep para reduzir consumo de energia
• Intel ® Manager Advanced Thermal que apresenta sensor térmico digital com interfaces
• Suporte para poder otimizado barramento 667 MHz
O dual-core Intel Xeon LV baseia-se na mesma micro arquitetura que Intel Core Duo, e suporta a arquitetura IA-32.
- O Processador Intel ® Xeon ® 5100, 5300 e Série Intel ® Core ™ 2 Family (2006-atual) :
O processador Intel Xeon 3000, 3200, 5100, 5300 e 7300 series, Intel Pentium Dual-Core, Intel Core 2 Extreme, Intel Core 2 Quad e Intel Core 2 Duo com apoio à família do processador Intel de 64 de arquitetura, pois eles são baseados no desempenho de alta velocidade, poder e eficiência na micro arquitetura Intel ® Core construída sobre tecnologia de processo 65 nm.
A micro arquitetura Intel Core inclui as seguintes características inovadoras:
• Intel ® Wide Dynamic Execution para aumentar o desempenho e a execução
throughput
• Intel ® Intelligent Power Capability para reduzir o consumo de energia
• Intel ® Advanced Smart Cache que permite o compartilhamento eficiente de dados entre dois núcleos de processamento
• Intel ® Smart Memory Access para aumentar a largura de banda de dados e esconder a latência dos acessos à memória
• Intel ® Advanced Digital Media Boost que melhora o desempenho do aplicativo
utilizando várias gerações de Streaming SIMD Extensions
- O Processador Intel ® Xeon ® 5200, 5400, 7400 e Série Intel ® Core ™ 2 Family (2007-atual) :
O processador Intel Xeon 5200, 5400 e 7400, processador Intel Core 2 Quad
Q9000 Series, processador Intel Core 2 Duo E8000 série de suporte da Intel 64 arquitetura; eles são baseados na micro arquitetura Enhanced Intel ® Core utilizando processo de 45 nm tecnologia. O Enhanced microarquitetura Intel Core oferece os seguintes características melhoradas:
• A raiz-16 com divisor, primitivos e rápidos SO que aumenta ainda mais o desempenho do Intel ® Wide Dynamic Execution.
• Melhora Intel ® Advanced Smart Cache com até 50% maior cache de nível dois
e até 50% de aumento no caminho-set associatividade.
• Um motor de 128-bit shuffler melhora significativamente o desempenho do Intel ®
Advanced Digital Media Boost e SSE4.
Processador Intel Xeon série 5400 e Intel Core 2 Quad Série Q9000 Processador
suportam os processadores Intel quad-core. Processador Intel Xeon série 7400 oferece até seis núcleos do processador e um cache L3 de até 16 MBytes.
- O processador Intel ® Atom ™ Processor Family (2008-atual) :
Os processadores Intel ® AtomTM são construídos sobre a tecnologia de processo 45 nm. Elas são baseadas em uma nova micro arquitetura, AtomTM micro arquitetura Intel ®, que é otimizada para dispositivos de potência ultra-baixa. A micro arquitetura Intel ® AtomTM duas características em ordem de execução de condutas que minimizam o consumo de energia, aumentam a vida útil da bateria, e permite ultra-fatores de forma pequena. Ele fornece as seguintes características:
• Enhanced Intel SpeedStep ®
• Intel ® Hyper-Threading
• Deep Power Down Technology com Dynamic Cache Sizing
• Suporte para novas instruções até e inclusive Supplemental Streaming SIMD
Extensões de 3 (SSSE3).
• Suporte para processadores Intel ® Virtualization Technology
• Suporte para Arquitetura Intel ® 64 (excluindo o processador Intel Atom Z5xx Series)
- O processador Intel ® Core ™ i7 Família (2008-atual) :
O processador Intel Core i7 da Intel suporte a arquitetura 64, pois eles são baseados em Intel (Nehalem), utilizando tecnologia de processo de 45 nm. O processador Intel Core i7 processador inclui as seguintes características inovadoras:
• Intel ® Turbo Boost tecnologia converte headroom térmica em um melhor desempenho.
• Intel ® Hyper Tecnologia em conjunto com Quadcore para quatro
núcleos e oito threads.
Unidade de controlo
• Dedicado poder de reduzir o consumo de energia ativo e inativo.
• controlador de memória integrado no processador com suporte para três canais de memória DDR3 memória.
• 8 MB inclusiva Intel ® Smart Cache.
• Intel ® QuickPath Interconnect (QPI) fornecendo ponto-a-ponto link para o chipset.
• Suporte para SSE4.2 e conjuntos de instruções SSE4.1.
• Segunda geração Intel Virtualization Technology.
Bom, isso é um resumo das estruturas modernas. Nem esquenta cabeça com isso. Era apenas para se ver como evoluiu a tecnologia nos processadores. Lá na frente pretendo me aprofundar muito nisso. Muito mesmo, com detalhes. Mas, me concentrarei mais na família 80x86. Neste momento.
Barramento de controle família 80x86: É um conjunto de sinais elétricos que comandam o resto atravéns da CPU. Considere por um momento o seguinte:
Considere por um momento o barramento de dados. A CPU envia dados para a memória e recebe dados da memória no barramento de dados. Isso leva a pergunta: "está enviando ou recebendo?" Há duas linhas no barramento de controle, ler e escrever, que especificam a direção do fluxo de dados. Outros sinais incluem clocks do sistema, interromper linhas, o estado, e assim por diante. A exata composição do barramento de controle varia entre os processadores da família 80x86. No entanto, algumas linhas de controle são comuns a todos os processadores e merecem uma breve menção. A linha ler e escrever de controle controlam a direção dos dados no barramento de dados. Quando ambos contêm uma lógica de um, a CPU e memória de E / S não estão se comunicando um com o outro. Se a linha de leitura é baixa (zero lógico), a CPU está lendo dados da memória (isto é, o sistema está transferindo dados da memória para a CPU). Se a linha de escrita está baixa, o sistema de transferências de dados é da CPU para a memória. O byte de habilitar linhas são um outro conjunto de linhas de controle importante. Estas linhas de controle permitem processadores 16, 32 e 64 de lidar com pequenos pedaços de dados.
A família 80x86, ao contrário de muitos outros processadores, fornece dois espaços de endereços distintos:
-uma para a memória e um para I / O.
Enquanto o barramento de endereço de memória em vários processadores 80x86 variam em tamanho, o barramento de E / S endereço em todas as CPUs do 80x86 é de 16 bits. Isso permite que o processador possa endereçar até 65.536 diferentes localizações I / O(e/s). Como se constata, a maioria dos dispositivos (como o teclado, impressora, discos, etc) exigem mais do que um I / O local. No entanto, 65.536 locais de I / O(e/s) são mais que suficientes para a maioria das aplicações. O IBM PC original no design só é permitido o uso de 1.024 destes.
Embora a família 80x86 suporte dois espaços de endereço, ele não tem dois endereços de barramento (para I / O e memória). Em vez disso, o sistema compartilha o barramento de endereços, tanto para I / O e endereços de memória. Linhas de controle adicionais decidem se o endereço é destinado à memória ou I / O. Quando tais sinais estão ativos, os dispositivos de I / O usam o endereço do byte menos significativo de 16 bits do barramento de endereços. Quando inativos, os dispositivos de I / O ignoram os sinais no barramento de endereços (o subsistema de memória assume nesse momento).
-Sistema I/O(E/S:ENTRADA/SAÍDA):
Além dos 20, 24 ou 32 linhas de endereço que acessam a memória, a família 80x86 fornece um de 16 bits I / O para o barramento de endereços. Isto dá às CPUs do 80x86 dois espaços de endereços distintos: um para memória e um para operações de I / O. Linhas no barramento de controle diferenciam entre a memória e o endereço da E / S. Outras linhas de controle separadas e um barramento menor. O endereçamento de I / O se comporta exatamente como a memória de endereçamento. Memória e dispositivos de I / O compartilham ambos o barramento de dados e a mesma 16 linhas no barramento de endereços(byte menos significativo).
Há três limitações para o subsistema de E / S no PC da IBM: primeiro, as CPUs do 80x86 requerem instruções especiais para acessar dispositivos de I / O, em segundo lugar, os projetistas do IBM PC utilizam o "melhor" local de I / O para seus próprios fins, forçando os desenvolvedores de terceiros a utilizar os locais menos acessíveis, em terceiro lugar, os sistemas de 80x86 podem endereçar mais de 65.536 (216)Endereços de I / O. Quando você considerar que uma placa de vídeo VGA típica requer mais de 128.000 locais diferentes, você pode ver um problema com o tamanho do barramento de E / S.
Felizmente, os projetistas de hardware podem mapear seus dispositivos de I / O para o endereço de memória com espaço tão facilmente como para o espaço de endereço do I / O. Então, usando o circuito adequado, eles podem fazer seus dispositivos de I / O olhar apenas como memória. Isto é como, por exemplo, mostrar,adaptadores no trabalho IBM PC. Por enquanto você pode assumir que eles acessam a memória do mesmo jeito.
Sistema de Tempo:
Embora os computadores modernos sejam bastante rápidos e estão ficando mais rápido o tempo todo, eles ainda requerem uma quantidade finita de tempo para realizar até mesmo as menores tarefas. Nas máquinas Von Neumann, como o 80x86, a maioria das operações são serializados. Isto significa que o computador executa comandos em uma ordem prescrita. Não faria, por exemplo, para executar a instrução
I: = I * 5 +2; antes I: = J; na seguinte seqüência:
I: = J;
I: = I * 5 + 2;
É evidente que precisamos de alguma forma de controle que executa a primeira declaração e que executa a segunda. Claro que, em sistemas de computador real, as operações não ocorrem instantaneamente. Movendo uma cópia de J para I toma uma certa quantidade de. Da mesma forma, multiplicando I por cinco em seguida, adicionando dois e armazenar o resultado de volta para I leva tempo. Como você poderia esperar, a segunda afirmação Pascal acima toma um pouco mais de tempo para executar do que a primeira. Para aqueles interessados em escrever o software rápido, uma questão natural perguntar é: "Como é que o processador executa instruções, e como podemos medir quanto tempo demora para executar? "
A CPU é uma peça muito complexa de circuitos. Sem entrar em muitos detalhes, vamos apenas dizer que as operações dentro da CPU devem ser cuidadosamente coordenadas ou a CPU produzirá resultados errados. Para garantir que todas as operações ocorram no momento certo, atualmente , as CPUs do 80x86 usam um sinal alternado chamado relógio do sistema(clock).
O CLOCK:
No nível mais básico, o relógio do sistema lida com toda a sincronização dentro de um sistema de computador. O relógio do sistema é um sinal elétrico no barramento de controle que alterna entre zero e um, a uma taxa periódica (ver Figura). CPUs são um bom exemplo de um sistema de lógica complexa síncrona. O relógio do abre muitas das portas lógicas que compõem a CPU o que lhes permite operar em um modo sincronizado.
A freqüência com que o relógio do sistema alterna entre zero e um é o sistema freqüência de clock. O tempo que leva para o relógio do sistema para mudar de zero a um e volta ao zero é o período de relógio. Um período completo é chamado também um ciclo de relógio. Nos sistemas mais modernos, o relógio do sistema alterna entre zero e um a velocidades superiores a vários milhões vezes por segundo. A freqüência do relógio é simplesmente o número de ciclos de relógio que ocorrem a cada segundo. Um chip 80486 típica roda em velocidades 66 milhões de ciclos por segundo.
"Hertz" (Hz) é o termo técnico que significa um ciclo por segundo. Portanto, o chip 80486 funciona em 66 milhões hertz, ou 66 megahertz (MHz). As freqüências típicas de 80x86 escala peças de 5 MHz a 200 MHz ou mais. Note-se que um período de clock (a quantidade de tempo para completar um ciclo de relógio) é o inverso da freqüência do relógio. Por exemplo, um clock de 1 MHz teria um período de clock de um microssegundo (1 / 1, 000.000 de um anúncio segundo). Da mesma forma, um relógio de 10 MHz teria um período de clock de 100 nanossegundos (100 bilionésimos de um segundo). Uma CPU rodando a 50 MHz teria um período de clock de 20 nanossegundos.Note que nós normalmente expressamos períodos de relógio em milionésimos ou bilionésimos de segundo.Para garantir a sincronização, a maioria dos CPUs iniciam uma operação sobre a crista de queda (quando o clock vai de um a zero) ou a borda de subida (quando o relógio vai de zero a um). O relógio do sistema passa a maior parte de seu tempo em zero ou um e muito pouco tempo com comutação entre os dois. Portanto clock é o ponto de sincronização perfeita. Uma vez que todas as operações da CPU são sincronizadas em torno do relógio, a CPU não pode executar tarefas mais rapidamente do que o clock4. Entretanto, apenas porque uma CPU está funcionando em algumas frequências de relógio não significa que ele está sendo executado, em muitas operações por segundo. Muitas operações tem múltiplos ciclos de clock para completar, então a CPU geralmente executa operações em uma operação significativamente mais baixa.
Sistema de Acesso à Memória e CLOCK:
Acesso à memória é provavelmente a mais comum das atividades da CPU. Acesso à memória é definitivamente uma operação sincronizada com o relógio do sistema. Ou seja, a leitura de um valor de memória ou escrever um valor para a memória não ocorre mais frequentemente do que uma vez a cada relógio ciclo 5. De fato, em muitos processadores 80x86, leva vários ciclos de clock para acessar um local de memória.
O tempo de acesso à memória é o número de ciclos de relógio do sistema requer acesso a uma localização de memória, este é um valor importante já que o resultado da memória os tempos de acesso em desempenho inferior.
Diferentes processadores 80x86 têm tempos diferentes de memória de acesso que variam de um a quatro ciclos de relógio. Por exemplo, as CPUs 8088 e 8086 requerem quatro ciclos de clock para acessar memória; o 80486 requer apenas um. Portanto, a 80486 vai executar programas que acessam memória mais rápido que um 8086, mesmo quando rodando a mesma freqüência. Abaixo um ciclo de memória do 80486 para leitura de um dado:
Abaixo, um modelo de escrever na memória do 80486:
Tempo de acesso à memória é a quantidade de tempo entre um pedido de operação de memória (leitura ou escrita) e o tempo que a operação de memória leva para ser concluída. Em uma CPU 5 MHz a 8088/8086 o tempo de acesso à memória é de aproximadamente 800 ns (nanossegundos). Em uma de 50 MHz 80486, o tempo de acesso é um pouco menos de 20 ns. Note-se que o tempo de acesso de memória para o 80486 é de 40 vezes mais rápido do que o 8088/8086. Isso ocorre porque o 80486 da freqüência do relógio é dez vezes mais rápido e que utiliza um quarto do ciclo de clock para acessar a memória. Durante a leitura da memória, o tempo de acesso à memória é a quantidade de tempo a partir do ponto que a CPU coloca um endereço no barramento de endereços e a CPU recebe os dados off barramento de dados. Em um processador 80486 com um tempo de acesso a um ciclo de memória, uma leitura é algo como mostrado na figura . Gravação de dados em memória é similar (ver Figura).
Note-se que a CPU não esperar pela memória. O tempo de acesso é especificado pela freqüência. Se o subsistema de memória não funciona suficientemente rápido, o processador irá ler lixo sobre uma operação de leitura de memória e não armazena corretamente os dados em uma operação de memória write. Isto vai certamente causar a falha do sistema. Dispositivos de memória têm avaliações diferentes, mas as duas mais importantes são a capacidade e velocidade (tempo de acesso). RAM dinâmica típica (memória de acesso aleatório), os dispositivos têm capacidade de quatro (ou mais) Megabytes e uma velocidade de 50-100 ns. Você pode comprar dispositivos maiores ou mais rápido, mas eles são muito mais caros. Um típico 33 MHz 80486 sistema usa 70 ns nos dispositivos de memória. Aguarde só um segundo aqui! Aos 33 MHz, o relógio do período é de aproximadamente 33 ns. Como pode um programador fugir do uso de memória de 70 ns? A resposta é esperar estados.
- Estados de Espera
Um estado de espera não é nada mais do que um ciclo de clock extra para dar algum tempo ao dispositivo para concluir uma operação. Por exemplo, um sistema de 50 MHz 80486 tem um período de relógio de 20 ns. Este implica que você precisa de memória de 20 ns. Na verdade, a situação é pior do que isso. Na maioria dos computadores, nos sistemas há circuitos adicionais entre a CPU e memória: decodificação e lógica buffering. Este circuito adicional introduz atrasos adicionais no sistema :
Neste diagrama, o sistema perde 10ns em buffering e decodificação. Assim, se o CPU precisa dos dados de volta em 20 ns, a memória deve responder em menos de 10 ns. Você pode realmente comprar 10ns memória. No entanto, é muito caro, volumoso, consome uma muita energia, e gera uma grande quantidade de calor. Estes são atributos ruins. Supercomputadores usam este tipo de memória. No entanto, os upercomputadores também custam milhões de dólares, ocupam todo os quartos, requerem refrigeração especial, e fontes de alimentação gigante. Não é o tipo de coisa que você quer sentar em sua mesa. Se o custo-eficaz de memória não irá funcionar com um processador rápido, como as empresas gerem PCs para vender rápido? Uma parte da resposta é o estado de espera. Por exemplo, se você tiver um 20 MHz, com um tempo de ciclo de memória de 50 ns e você perde 10 ns para tamponamento e decodificação, você vai precisar de memória 40 ns. E se você só pode comprar uma memória de 80 ns em 20 MHz de sistema? Adicionando um estado de espera para prolongar o ciclo de memória de 100 ns (dois ciclos de relógio) resolverá este problema. Subtraindo 10ns para as folhas de decodificação e buffering 90 ns.Portanto, a memória de 80 ns responde bem antes de a CPU requerer os dados. Quase todas as CPUs de uso geral na existência fornece um sinal no barramento de controle para permitir a inserção de estados de espera. Geralmente, o circuito de decodificação afirma essa linha para demorar um período de relógio adicional, se necessário. Isto dá a memória de acesso tempo suficiente, o sistema funciona corretamente .
Às vezes nem um único estado de espera é suficiente. Considere a 80486 rodando a 50 MHz. O tempo de ciclo normal de memória é inferior a 20 ns. Portanto, menos de 10 ns estão disponíveis para depois subtrair o tempo de decodificação e buffering. Se você estiver usando 60 ns de memória no sistema, a adição de um único estado de espera não irá fazer o truque. Cada estado de espera dá-lhe 20 ns, assim com um único estado de espera você precisaria de memória de 30 ns. Para trabalhar com memória de 60 ns você seria necessário adicionar três estados de espera (zero estados de espera = 10 ns, um estado de espera = 30 ns, dois estados de espera = 50 ns, e três estados de espera = 70 ns). Desnecessário será dizer que, do ponto de vista do desempenho do sistema, estados de espera não são uma boa coisa. Enquanto a CPU está à espera de dados da memória não pode operar sobre esses dados.
Adicionando um único estado de espera para um ciclo de memória em uma CPU 80486 dobra a quantidade de tempo necessário para acessar os dados. Este, por sua vez, divide na metade da velocidade o acesso à memória. Rodando um estado de espera em cada acesso à memória é quase como cortar a freqüência do relógio do processador pela metade. Você está conseguindo metade do trabalho realizado no mesmo período de tempo. Você provavelmente já viu os anúncios. "80386DX, 33 MHz, 8 megabytes de RAM 0 estado de espera ... apenas X! "Se você olhar de perto as especificações você notará que o fabricante está utilizando memória 80ns(nas família 80x86). Como eles podem construir sistemas que funcionam em 33 MHz e tem zero estados de espera?
Fácil. Eles mentem. Não há nenhuma maneira um 80386 pode ser executado em 33 MHz, executando um programa arbitrário, sem nunca inserir um estado de espera. É claramente impossível. No entanto, é perfeitamente possível conceber um subsistema de memória que, sob certas circunstâncias excepcionais, consegue operar sem parte dos estados de espera do tempo. A maioria dos tipos de comercialização desconfigura se o seu sistema já funciona em zero estados de espera, eles podem afirmar isso em sua literatura. Na verdade, a maioria de marketing desse tipo não tem nenhuma idéia que um estado de espera é outro que não é ruim e com os estados de espera não é algo para se gabar. No entanto, nós não estamos condenados a uma execução lenta por causa da adicionou estados de espera. Há vários truques projetistas de hardware podem desempenhar para atingir zero estados de espera maior parte do tempo. O mais comum deles é o uso de cache de memória.
-Memória Cache:
Se você olhar para um programa típico (como muitos pesquisadores), você vai descobrir que ele tende a acessar os mesmos locais de memória repetidamente. Além disso, você também descobrirá que um programa geralmente acessa posições de memória adjacentes. Os nomes técnicos dados a este fenômeno são localidade temporais de referência e localidade espacial de referência. Quando exibindo localidade espacial, um programa acessa posições de memória vizinhas. Ao exibir localidade temporal de referência um programa acessa repetidamente a mesma memória local durante um curto período de tempo. Ambas as formas de localização ocorrer nos seguintes segmentos de códigos Pascal:
for i: = 0 to 10 do
A [i]: = 0;
Há duas ocorrências de cada localidade espacial e temporal de referência dentro desta loop. Vamos considerar o primeiro.
No código Pascal acima, o programa faz referência à variável i muitas vezes. O loop for compara icom 10 para ver se o ciclo está completo.Ele também incrementa i de um na parte inferior do loop. A atribuição declarada também usa i como um índice da matriz. Isto mostra a localidade temporal de referência em ação desde que a CPU acessa i em três pontos em um curto período de tempo.
Este programa também exibe localidade espacial de referência. O próprio laço zera os elementos da matriz A escrevendo um zero para o primeiro local em A, então para o segundo local em A, e assim por diante. Assumindo que Pascal armazena os elementos de A em posições de memória consecutivas de memória, cada iteração do loop acessa espaços de memória que estão lado a lado. Há um exemplo adicional de localidade temporal e espacial de referência no exemplo Pascal acima, embora não seja tão óbvio. Instruções de computador que informam o sistema para fazer a tarefa especificada também residem na memória. Essas instruções aparecem sequencialmente na memória - a localidade espacial. O computador também executa essas instruções repetidamente, uma vez para cada iteração - a localidade temporal.
Se você olhar o perfil de execução de um programa típico, você descobrirá que o programa geralmente executa menos da metade das declarações. Geralmente, um programa típico pode usar apenas 10-20% da memória destinada a ele. Em qualquer dado momento, um programa de um megabyte pode acessar apenas 4-8 kilobytes de dados e código.
A memória cache fica entre a CPU e memória principal. É uma pequena quantidade de de memória muito rápida(zero estados de espera). Diferentemente da memória normal, os bytes que aparecem dentro de um cache não têm endereços fixos. Em vez disso, a memória cache pode transferir o endereço de um objeto de dados.
Isso permite que o sistema mantenha os valores recentemente acessados em cache. Endereços que a CPU nunca acessou em algum tempo permanecem na memória principal (lenta). Como a maioria dos acessos de memória são para variáveis acessadas recentemente (ou para locais perto de um local recentemente acessados), os dados geralmente aparecem na memória cache.
A memória cache não é perfeita. Embora um programa possa gastar um tempo considerável na execução do código em um lugar, eventualmente, ele vai chamar um procedimento ou desviará para alguma seção do código fora da memória cache, como num evento em que a CPU tem que ir à memória principal para buscar os dados. Como a memória principal é lenta, isso vai requerer a inserção de estados de espera. Um acerto de cache ocorre sempre que a CPU acessa a memória e encontra os dados no cache. Em tal caso a CPU pode realmente acessar o dado com zero estados de espera. Uma falha de cache ocorre se a CPU acessa a memória e os dados não estão na cache. Em seguida, o processador tem de ler os dados da memória principal, incorrendo em um desempenho de perda. Para tirar vantagem da localidade de referência, a CPU copia dados para o cache sempre que acessa um endereço não presente no cache. Uma vez que é provável que o sistema acesse o mesmo local em breve, o sistema irá salvar os estados de espera por ter esses dados em cache.
Como descrito acima, a memória cache trata dos aspectos temporais do acesso à memória, mas não da quantidade. Pegando locais de memória, se você acessá-los não vai acelerar o programa se você constantemente acessa locais consecutivos (localidade espacial). Entraremos mais nesse tópico mais tarde, quando usarmos computadores com essa arquitetura.
Depois de escrever esses tópicos muito técnicos e complicados, não quero que o leitor fique desanimado. Isto é apenas uma apresentação contínua das arquiteturas de microprocessadores. Eu quis usar a evolução da tecnologia, como um raciocínio contínuo, para ter lógica. Na verdade, irei apenas trabalhar o assembly na arquitetura intel, por ser o que a maioria dos computadores no mundo usam. E começarei de baixo....de baixo mesmooo...precisamos primeiro aprender a soletrar, depois aprender a juntar palavras, e só depois formar textos. Começaremos a trabalhar com processores arcaicos, mas dentro deles, todo o aprendizado será feito. Primeiro, com o 8080 ou 8085, este, é de oito bits. Apesar do que alguma spessoas acham, eles são úteis e muito utilizados até hoje. A eletrônica o usa para aúdio e estúdios, e fazem qualquer coisa lá. Outros, o usam como microcontrolador, de oito bits, usados em indústrias. A linguagem muda, mas, a lógica é exatamente a mesma. Depois, iremos abordar o 8088 e 8086. De onde todas as outras são derivadas. Ele possui 16 bits, mas é a base de todos os outros, e veremos depois o porquê. E assim, por diante. Com o pouco tempo que disponho, e devido à alta complexidade do assunto, isso levará tempo.
Referências Bibliográficas:Por favor ler o tópico específico desse item...há muitas referências e gosto de lembrar de todas!