FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos [email protected] www.oficinadapesquisa.com.br ESQUEMA DE UM COMPUTADOR Uma Unidade Central de Processamento (CPU – Central Processing Unit) é a parte principal de um computador, sendo responsável pelo execução de programas que fazem do computador uma máquina extremamente versátil. É importante notar que a CPU é um circuito eletrônico chamado processador. Entretanto, dentro de um computador existem vários processadores (em placas de comunicação, gráficas e de som, em discos rígidos, etc). O que chamamos de CPU é o principal processador do computador, e que controla todos os outros. ESQUEMA INTERNO DE UM COMPUTADOR UC Unidade de Controle (Control Unit) ULA Unidade de Lógica e Aritmética (Aritmethic Logic Unit) REGS Registradores (Registrators) Dispositivos de E/S Dispositivos de Entrada/Saída (I/O Devices Input/Output Devices) CPU Para informações mais detalhadas, recomendo uma visita ao site do Laércio Vasconcelos: http://www.laercio.com.br Barramento BUS BARRAMENTOS DE UM COMPUTADOR Uma CPU só se comunica com outros dispositivos por meio de barramentos. De acordo com Vasconcelos (2003), “barramentos são conjuntos de sinais digitais através dos quais o processador transmite e recebe dados de circuitos externos”. Em um computador existem basicamente 3 tipos de barramentos: • Barramento do processador • Barramento de memória • Barramentos de E/S BARRAMENTO DO PROCESSADOR - I Conhecido também como barramento local (Local Bus) ou barramento de sistema, é aquele que faz contato direto com o Chipset (dividido em North Bridge e South Bridge), que estudaremos mais tarde. É através do Chipset que a CPU se comunica com a memória (Barramento de Memória) e com outros dispositivos (Barramentos de E/S, por exemplo, ISA, EISA, PCI, AGP, AMR, IDE, SCSI, USB, Firewire, entre outros). O Barramento do Processador é dividido em três grupos, a saber: o Barramento de Dados, o Barramento de Endereços e o Barramento de Controle. Um esquema destes barramentos pode ser conferido no próximo slide. BARRAMENTO DO PROCESSADOR - II BARRAMENTO DO PROCESSADOR - III Barramento de Endereços: de acordo com Vasconcelos (2003), este é o barramento através do qual a CPU especifica de qual interface ela vai receber ou transmitir dados, sendo também utilizado para endereçar memória. Os processadores modernos costumam ter de 36 a 40 bits para endereçamento, suficientes para endereçar de 64 GB a 1 TB de memória física. Utiliza modo de transmissão Simplex. Barramento de Dados: utilizado para receber ou enviar dados, funciona em modo de transmissão HalfDuplex (enviam e recebem, mas não simultanemente). Os processadores atuais possuem barramentos de dados de 64 a 128 bits. BARRAMENTO DO PROCESSADOR - IV Barramento de Controle: de acordo com Vasconcelos (2003), este barramento contém vários sinais que são necessários ao funcionamento do processador. Entre outras atribuições, tem a função de controlar o tráfego do barramento de dados. Alguns dos seus sinais são de saída, outros são de entrada, outros são bidirecionais. Existem sinais para indicação do tipo de operação (leitura ou escrita), sinais se especificação de destino/origem de dados (memória ou E/S), sinais de sincronismo, sinais de interrupção, sinais que permitem a outro dispositivo tomar o controle do barramento, sinais de clock, sinais de programação e diversos outros. BARRAMENTO DE MEMÓRIA Em CPUs antigas, a memória era ligada diretamente ao processador, e funcionava em sincronia. Com o crescimento impressionante de velocidades das CPUs, a memória passou a se comunicar com a CPU por meio do Chipset, de forma assíncrona (VASCONCELOS, 2003). Em geral, o barramento de memória é utilizado também para trafegar dados, por meio de uma técnica chamada de multiplexação (que permite que um único canal seja compartilhado por mais de um sinal). BARRAMENTOS DE E/S - I São barramentos utilizados para a CPU se comunicar com placas ou interfaces, podendo (ou não) ser acessados por meio de slots. Os mais comuns são: AGP: Lançado pela Intel em 1997, o Acelerated Graphics Port foi criado para acelerar o desempenho de placas de vídeo em PCs equipados com o recém lançado Pentium II (ver figura) . Este padrão evoluiu para o AGP 8x e o AGP Pro. Começa a perder terreno para o Fast PCI. Fonte: http://www.laercio.com.br/artigos/hardware/hard013/hard-013.htm BARRAMENTOS DE E/S - II PCI: O Peripheral Component Interconnect é o padrão mais utilizado para barramento de E/S e para slots de expansão. Utilizando estes slots, pode-se conectar placas de vídeo, placas aceleradoras gráficas, placas de captura de vídeo, placas de rede, placas de interface (SCSI, por exemplo), etc. Em geral, as interfaces para controle de disco rígido e para comunicação USB utilizam este tipo de barramento, apesar de não usarem slots. Este padrão evoluiu para o Fast PCI. Ver figura . Fonte: http://www.laercio.com.br/artigos/hardware/hard013/hard-013b.htm FUNCIONAMENTO DE UMA CPU – CICLO DE BUSCA – DECODIFICAÇÃO - EXECUÇÃO Toda CPU funciona de acordo com um ciclo de sete estágios, a saber: 1. Trazer a próxima instrução (no caso inicial, a primeira instrução) da memória para o registrador de instruções do processador; 2. Atualizar o Contador de Programa (PC Program Counter ou IP Instruction Pointer) para indicar o endereço de memória que contém a próxima instrução; 3. Decodificar a instrução; FUNCIONAMENTO DE UMA CPU – CICLO DE BUSCA – DECODIFICAÇÃO - EXECUÇÃO 4. Se a instrução necessitar de operandos, determinar os endereços de memória que contém todas as palavras necessárias à execução da instrução; 5. Trazer as palavras para os registradores de dados 6. Executar a instrução; 7. Voltar ao primeiro estágio do ciclo e continuar a executar esse ciclo até o término do programa. ARQUITETURAS DE CPU: RISC E CISC (I) RISC é uma sigla que significa Reduced Instruction Set Computer, que pode ser traduzido como Conjunto (ou Tabela) Reduzido de Instruções de Computador. A arquitetura RISC resulta em processadores com poucas instruções (em geral, menos de 50), pequenas, mas extremamente rápidas. CISC significa Complex Instruction Set Computer, ou Conjunto Complexo de Instruções de Computador. A arquitetura CISC resulta em processadores com muitas instruções (em geral, mais de 150), grandes, mas comparativamente mais lentas. ARQUITETURAS DE CPU: RISC E CISC (II) Qual arquitetura é melhor? Esta discussão é muito parecida com discussões futebolísticas. Quem é melhor? Brasil ou Argentina? Cruzeiro ou Atlético? São Paulo ou Coríntians? Com certeza, a resposta será diferente dependendo da pessoa a quem você perguntar, mas vamos ver algumas características. Um processador RISC tem compromisso com a velocidade de processamento. São poucas instruções: elas são pequenas, mas são muito, muito rápidas. Dá muito mais trabalho programar em processadores RISC. O código de máquina usado nesse tipo de arquitetura é traduzido. ARQUITETURAS DE CPU: RISC E CISC (III) Um processador CISC tem compromisso com a facilidade de implementação de programas. São muitas instruções, que são geralmente grandes e lentas, mas dá muito menos trabalho programar, pois o código de máquina usado nessa arquitetura é interpretado. Processadores RISC são os preferidos em workstations, mainframes e supercomputadores. Processadores CISC são os preferidos de microcomputadores. Ultimamente, os projetistas estão construindo processadores híbridos, usando as duas arquiteturas. Esta tendência começou com o 486 e continua evoluindo, como veremos em breve. ESTRATÉGIAS PARA PROJETOS DE CPU’s (I) Uma CPU deve ser o mais rápida possível. Quando pensamos o que fazer para que uma CPU seja mais rápida, a resposta mais provável é aumentar o seu clock, afinal de contas, quanto maior o clock de uma CPU, menor o tempo de ciclo, o que resulta em um maior número de instruções executadas por segundo. Uma das maneiras de se medir a velocidade de uma CPU é em MIPS (Milhões de Instruções por Segundo). Assim, um computador de 500 MIPS é com certeza cinco vezes mais rápido que um de 100 MIPS. ESTRATÉGIAS PARA PROJETOS DE CPU’s (II) O problema de aumentar o clock é a quantidade de energia que se gasta: quanto maior o clock, maior será a energia gasta pela CPU, e maior também será a dissipação de calor. Então só o aumento do clock não é a solução para aumentar a velocidade de processamento. Além disso, atualmente estamos muito perto do limite máximo de clock que a atual tecnologia de construção de microprocessadores comerciais pode suportar. Hoje, o limite teórico é algo próximo de 5 GHz, mas são raríssimos processadores que superam 4 GHz na prática. Vamos ver que estratégias os projetistas costumam utilizar para contornar esse problema: ESTRATÉGIAS PARA PROJETOS DE CPU’s (III) 1. Todas as instruções devem ser executadas diretamente por hardware: instruções executadas apenas por hardware são mais simples e extremamente rápidas. Por este motivo, são a base da arquitetura RISC. Na arquitetura CISC, o fato de ter uma fase de interpretação de instruções é um fator a mais para a demora no processamento. Se um processador CISC puder subdividir suas grandes instruções em instruções menores que possam ser processadas diretamente em hardware (em um núcleo RISC), consegue-se aumentar a velocidade de processamento. ESTRATÉGIAS PARA PROJETOS DE CPU’s (IV) 2. Aumentar o número de registradores: uma vez que o acesso à memória principal é muito lento, se você puder aumentar o número de registradores, o processamento ficará muito mais rápido. Como existe um limite para isso, a solução encontrada foi criar uma área de memória de acesso rápido dentro do próprio processador. Esta área de memória é conhecida como CACHE. Vamos estudar em detalhes o funcionamento dela na próxima unidade. ESTRATÉGIAS PARA PROJETOS DE CPU’s (V) 4. Otimizar o código de máquina: se toda instrução que necessitasse de operandos conseguisse ser executada buscando esses operandos nos registradores e a eles retornando, a execução seria muito rápida. Assim, deve-se evitar instruções que façam acesso à memória principal. Esse princípio diz que apenas as instruções LOAD (carregar em um registrador o conteúdo de um endereço de memória) e STORE (armazenar na memória o conteúdo de um registrador) devem referenciar a memória. Esta estratégia é um dos princípios da arquitetura RISC. ESTRATÉGIAS PARA PROJETOS DE CPU’s (VI) 5. Maximizar a taxa de execução de instruções: nos primeiros processadores, uma instrução só podia ser executada quando a instrução anterior já tivesse acabado. Se você puder executar mais de uma instrução ao mesmo tempo, a velocidade de processamento aumenta. O nome para isso é paralelismo (a nível de instrução e a nível de processador). Pipelining, arquitetura superescalar, processamento matricial, processamento vetorial, multithreading são algumas destas implementações que permitem realizar esta façanha. É o que veremos em seguida. PIPELINING Pipelining é o nome que se dá ao paralelismo ao nível de instrução. Sua implementação se dá através de uma estrutura chamada pipeline. Basicamente, é uma divisão de tarefas que permite a execução de mais de uma instrução: Tempo Tempo Tempo Nesse pipeline (típico do 486), a cada ciclo de clock uma instrução pode ser completada (em tese), o que pode resultar em um ganho de velocidade 5 vezes maior. ARQUITETURA SUPERESCALAR (I) Se um pipeline é bom, dois (ou mais) pipelines devem funcionar melhor ainda. Este é o princípio da arquitetura superescalar. A partir do processador Pentium, a Intel passou a utilizar este tipo de estrutura: O pipeline de 5 estágios do 486 (slide anterior) as vezes demorava ao executar alguma instrução, o que atrasava toda a fila. No Pentium, os projetistas fizeram um pipeline para instruções mais complexas (demoradas) e um outro para instruções mais simples (princípio da arquitetura RISC). ARQUITETURA SUPERESCALAR (II) Com o tempo percebeu-se que o estágio 4 (S4 execução de instruções) era o gargalo de todo o processo. Quando não havia um par de instruções compatíveis, o processamento parava em S4 até que uma instrução mais complexa fosse completada. Para resolver isso, no Pentium II em diante, o pipeline foi modificado, conforme figura abaixo: O estágio 4 (S4) passou a contar com várias ULAs para não permitir que instruções inacabadas atrasassem a fila. Variações deste tipo de pipeline são utilizadas até hoje. MULTITHREADING - I A Multithreading é uma técnica que permite aumentar a velocidade de processamento de uma CPU, e o suporte a esta técnica deve estar previsto no SO. Threads são processos que possuem a capacidade de se dividirem em dois ou mais processos concorrentes que podem ser executados simultaneamente. Se o processador possuir um único núcleo, essa divisão ocorre de maneira virtual (multithreading virtual), em geral por linha de execução ou por chaveamento, dando a impressão de que dois processos estão sendo executados simultaneamente. MULTITHREADING - II O Multithreading virtual foi uma tecnologia criada pela Intel com o nome de Hyper-Threading (HT). Esta tecnologia permite simular dois processadores virtuais em um único processador físico (de apenas um núcleo). Foi introduzida primeiramente no Xeon (mercado de servidores) e depois no Pentium 4. O Multithreading real acontece quando um processador possui mais de um núcleo físico. Nesse caso, dois (ou mais) processos podem realmente ser executados simultaneamente. Um bom exemplo de aplicação dessa técnica são em jogos: um processo pode atualizar a imagem enquanto outro processo atualiza o áudio do jogo. MULTITHREADING - II O Multithreading virtual foi uma tecnologia criada pela Intel com o nome de Hyper-Threading (HT). Esta tecnologia permite simular dois processadores virtuais em um único processador físico (de apenas um núcleo). Foi introduzida primeiramente no Xeon (mercado de servidores) e depois no Pentium 4. O Multithreading real acontece quando um processador possui mais de um núcleo físico. Nesse caso, dois (ou mais) processos podem realmente ser executados simultaneamente. Um bom exemplo de aplicação dessa técnica são em jogos: um processo pode atualizar a imagem enquanto outro processo atualiza o áudio do jogo. ARQUITETURA DE INSTRUÇÕES - I A motivação para o uso do poder de processamento paralelo é a demanda cada vez maior de aplicações que necessitam de grande poder de processamento. Utilização militar (projeto de aeronaves, submarinos e armas nucleares), pesquisas científicas (por exemplo, sequenciamento genético), simulações aerodinâmicas, prospecção mineral e petrolífera, modelagem climática, sistemas especialistas e de inteligência artificial são algumas das aplicações que necessitam de grande poder de processamento. Flynn propôs uma classificação de arquiteturas paralelas de computadores com base na arquitetura de instruções: SISD, SIMD, MISD e MIMD. ARQUITETURA DE INSTRUÇÕES - II SISD (Single Instruction Single Data): nesta classe, um único fluxo de instruções opera sobre um único fluxo de dados. É a conhecida máquina de von Neumann, sendo o modelo de computador usado da Segunda Guerra Mundial até os primeiros microprocessadores (até o Pentium, inclusive). Apesar dos aplicativos estarem organizados como uma série de instruções sequenciais, elas podem ser executadas de forma sobreposta em vários estágios usando um pipeline. Arquiteturas SISD possuem apenas uma Unidade de Controle, mas podem ter mais de uma unidade funcional. ARQUITETURA DE INSTRUÇÕES - III Disponível em: http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia ARQUITETURA DE INSTRUÇÕES - IV SIMD (Single Instruction Multiple Data): nesta classe, uma única instrução pode ser aplicada simultaneamente sobre um conjunto de dados. Os aplicativos ainda seguem uma organização sequencial, mas o acesso a múltiplos dados é facilitado pela organização da memória em diversos módulos. Este tipo de arquitetura de instruções é ideal para trabalhar com aplicações gráficas, em que um grande volume de dados deve ser modificado por uma única instrução. Ainda há apenas uma Unidade de Controle, mas existem diversas unidades funcionais. Corresponde aos processadores vetoriais e matriciais. O Pentium MMX e o AMD K6 são os primeiros representantes desta classe. ARQUITETURA DE INSTRUÇÕES - V Disponível em: http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia ARQUITETURA DE INSTRUÇÕES - VI MISD (Multiple Instruction Single Data): nesta classe, um conjunto de instruções pode ser aplicado sobre um único dado. Sob o ponto de vista tecnológico, esta classe de arquitetura de instrução de Flynn não tem aplicação prática, razão pela qual não existem computadores que utilizem esta arquitetura. ARQUITETURA DE INSTRUÇÕES - VII Disponível em: http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia ARQUITETURA DE INSTRUÇÕES - VIII MIMD (Multiple Instruction Multiple Data): nesta classe, um múltiplo conjunto de instruções são aplicados sobre múltiplos conjuntos de dados. Sob o ponto de vista tecnológico, esta classe de arquitetura de instrução de Flynn é representada por arquiteturas massivamente paralelas, com servidores multiprocessados ou redes de estações (sistemas distribuídos). Neste caso, várias unidades de controle comandam suas unidades funcionais, mas com um certo grau de interação entre as máquinas. Qualquer grupo de máquinas atuando como uma unidade se encaixa nesta categoria. Assim, os atuais processadores multi-núcleos estão nesta categoria. ARQUITETURA DE INSTRUÇÕES - IX Disponível em: http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia