Capítulo 1 - Abstrações sobre Computadores e Tecnologia
📘 1.1 – Introdução
Esta secção introduz o campo dos sistemas computacionais, destacando a sua relevância na sociedade moderna. Os autores sublinham como a computação está em constante inovação, com impactos comparáveis aos das revoluções agrícola e industrial. Referem-se ao progresso extraordinário impulsionado pela Lei de Moore, que prevê a duplicação dos recursos dos circuitos integrados a cada 18 a 24 meses.
Dá-se destaque à evolução de aplicações antes consideradas ficção científica, como:
-
Computadores em automóveis;
-
Telemóveis;
-
O Projecto Genoma Humano;
-
A Web e motores de busca;
-
Veículos autónomos e realidade aumentada.
São descritas três grandes categorias de computadores:
-
Computadores pessoais (PCs) – focados na performance para um utilizador a baixo custo;
-
Servidores – gerem grandes cargas de trabalho e exigem elevada fiabilidade;
-
Computadores embebidos – são os mais comuns e estão integrados em dispositivos como automóveis, televisores, aviões, etc.
Fala-se da Era pós-PC, dominada por dispositivos móveis pessoais (PMDs), como smartphones e tablets, que usam aplicações distribuídas entre o dispositivo e a computação na nuvem (cloud computing). O conceito de Software como Serviço (SaaS) também é apresentado.
Finalmente, são introduzidos os objectivos do livro, que incluem:
-
Entender a tradução de linguagens de alto nível para linguagem de máquina;
-
Compreender o impacto do hardware e do software no desempenho;
-
Melhorar a eficiência energética;
-
Explorar o paralelismo e as técnicas modernas de projecto de hardware.
💡 1.2 – Oito Grandes Ideias da Arquitectura de Computadores
Esta secção apresenta oito princípios fundamentais que orientam o design de computadores desde há décadas:
-
Conceber para a Lei de Moore – antecipar a evolução tecnológica ao longo do tempo.
-
Utilizar abstracções para simplificar o design – esconder complexidades com modelos mais simples.
-
Tornar o caso comum mais rápido – optimizar as operações mais frequentes.
-
Performance através de paralelismo – realizar várias operações simultaneamente.
-
Performance através de pipeline – sobrepor etapas de execução de instruções (semelhante a uma linha de montagem).
-
Performance através de previsão (prediction) – adivinhar o caminho provável de execução para ganhar tempo.
-
Hierarquia de memórias – combinar diferentes tipos de memória para equilibrar velocidade, custo e capacidade.
-
Confiabilidade através de redundância – usar componentes duplicados para lidar com falhas.
Cada ideia é representada por um ícone e será usada ao longo do livro para ilustrar como essas estratégias estão presentes nas arquitecturas modernas.
🧩 1.3 – Abaixo do Teu Programa
Esta secção explica como um programa escrito numa linguagem de alto nível é transformado até chegar ao nível do hardware:
-
As aplicações são compostas por milhões de linhas de código e usam bibliotecas sofisticadas.
-
O hardware só compreende instruções muito simples em linguagem binária (0s e 1s).
-
Várias camadas de software são necessárias para traduzir essas aplicações para uma forma compreensível pelo hardware.
Dois componentes essenciais do software de sistema são:
-
Sistema operativo (OS) – gere os recursos, entrada/saída e memória, permitindo que múltiplos programas coexistam.
-
Compilador – traduz programas de linguagens como C ou Java para linguagem de máquina, passando por uma fase intermédia de linguagem de montagem (assembly).
O processo é explicado assim:
-
O programador escreve código em C (alto nível);
-
O compilador traduz para assembly;
-
O assembler converte o código assembly para linguagem binária (linguagem de máquina).
As vantagens das linguagens de alto nível são:
-
Maior expressividade e produtividade;
-
Portabilidade entre computadores diferentes;
-
Redução do número de linhas necessárias para implementar uma ideia.
O conceito de abstracção é reforçado como uma das ideias-chave que tornam possível este empilhamento de camadas de software sobre hardware.
🧠 1.4 – Por Detrás da Máquina
Esta secção introduz a estrutura interna de um computador, destacando os seus cinco componentes clássicos:
-
Entrada (Input) – dispositivos como teclados, microfones ou sensores;
-
Saída (Output) – ecrãs, colunas, impressoras;
-
Memória – armazena dados e programas em execução;
-
Caminho de dados (Datapath) – executa operações aritméticas e lógicas;
-
Unidade de controlo (Control) – coordena as operações do datapath, memória e I/O.
As secções seguintes exploram estes componentes em mais detalhe. A memória e o processador formam o núcleo da execução, enquanto os dispositivos de entrada e saída asseguram a comunicação com o exterior.
🖥️ Dispositivos de entrada/saída:
-
Os ecrãs modernos usam LCDs com matriz activa, compostos por milhões de píxeis controlados por transístores.
-
A imagem é mantida num buffer de imagem (frame buffer), que é lido ciclicamente.
-
Tablets e smartphones utilizam ecrãs tácteis capacitivos, que detectam toques com base em alterações de campo eléctrico.
🧩 Organização física:
-
Mostra-se o exemplo do iPad 2 com os seus componentes: ecrã, câmara, sensores (giroscópio, acelerómetro), chip A5 (com dois núcleos ARM), memória, e interfaces de comunicação (Wi-Fi, Bluetooth).
💾 Memória:
-
A memória principal é baseada em DRAM, que é volátil (perde dados sem energia).
-
A memória cache, feita com SRAM, é mais rápida mas mais cara, usada como buffer entre o processador e a DRAM.
-
A memória flash, não volátil, é usada em dispositivos móveis como memória secundária. Tem limitações no número de escritas possíveis.
🌐 Redes:
-
Os computadores estão ligados por redes locais (LANs) ou redes alargadas (WANs).
-
A comunicação em rede permite:
-
Partilha de recursos;
-
Acesso remoto;
-
Comunicação eficiente.
-
-
O Ethernet é um exemplo de rede local, enquanto redes WAN formam a espinha dorsal da Internet.
-
O Wi-Fi (IEEE 802.11) tornou-se central na era pós-PC, sendo económico e de elevada largura de banda.
📏 Abstracção: Arquitetura e Implementação
-
Introduz-se a arquitectura do conjunto de instruções (ISA) como a interface entre o hardware e o software de baixo nível.
-
O ABI (Application Binary Interface) define a compatibilidade binária de aplicações.
-
Diferencia-se arquitectura (funções oferecidas) de implementação (como são concretizadas essas funções).
🔧 1.5 – Tecnologias para Construir Processadores e Memórias
Esta secção aborda as tecnologias físicas que permitiram a evolução dos computadores, com foco especial nos circuitos integrados.
⚙️ Evolução tecnológica:
-
Inicia-se com as válvulas (1950s), passando pelos transístores, depois os circuitos integrados (IC) e mais tarde os VLSI (Very Large Scale Integration).
-
A Lei de Moore prevê a duplicação do número de transístores num chip a cada 18-24 meses.
🏭 Processo de fabrico:
-
O fabrico começa com um lingote de silício, cortado em wafers.
-
Os wafers passam por 20 a 40 etapas de processamento, criando camadas de transístores, condutores e isoladores.
-
Cada wafer é dividido em dies (chips), que são testados. Os bons são embalados e vendidos.
-
O rendimento (yield) depende do número de dies bons por wafer, que diminui com o aumento da área do die.
🧪 Fórmulas de custo:
Apresenta-se uma fórmula simplificada para o custo por die:
Custo por die = Custo por wafer / (dies por wafer × rendimento)
E outra para estimar os dies por wafer e o rendimento com base em defeitos e área.
📏 Processo de miniaturização:
-
A escala de fabrico (ex.: 32 nm) define o tamanho mínimo de elementos no chip.
-
Chips mais pequenos e de menor consumo são mais baratos e permitem maior densidade por wafer.
🧮 1.6 – Desempenho (Performance)
Esta secção trata de como avaliar o desempenho de computadores, tanto do ponto de vista do utilizador como do engenheiro.
📊 Definir desempenho:
-
Para o utilizador: tempo de resposta (tempo entre início e fim de uma tarefa).
-
Para centros de dados: vazão (throughput) – número de tarefas concluídas por unidade de tempo.
-
Um sistema com maior vazão pode não ter menor tempo de resposta para um utilizador individual.
✈️ Exemplo ilustrativo:
-
Compara-se o desempenho com o transporte aéreo: o Concorde é o mais rápido para uma pessoa, mas o Boeing 747 tem maior vazão por transportar mais passageiros.
📐 Fórmulas e métricas:
-
Define-se "A é n vezes mais rápido que B" como:
PerformanceA / PerformanceB = TempoB / TempoA
-
São discutidas várias formas de medir desempenho, como instruções por segundo (IPS), ciclos por instrução (CPI), frequência do relógio (clock rate), etc.
📉 Vieses e armadilhas:
-
Medir mal o desempenho pode levar a conclusões erradas.
-
Benchmarks específicos, como os apresentados mais adiante (ex.: SPEC), tentam capturar métricas reais de desempenho com aplicações típicas.
🔋 1.7 – O Limite da Energia
Esta secção aborda o desafio crítico do consumo de energia e potência nos microprocessadores modernos.
-
Durante décadas, o clock rate e a potência aumentaram em paralelo, até se atingir um limite físico de dissipação térmica (limite de arrefecimento).
-
Este limite é conhecido como Power Wall, e representa uma barreira à continuação do aumento do desempenho apenas através da frequência.
⚙️ Energia e potência em chips CMOS:
-
A tecnologia dominante de fabrico é CMOS (semicondutor de óxido metálico complementar).
-
O consumo principal de energia é o consumo dinâmico, que ocorre quando os transístores mudam de estado (0↔1).
-
A energia consumida por transição é proporcional a:
onde é a carga capacitiva e é a tensão.
-
A potência dinâmica depende também da frequência de comutação:
-
Para reduzir potência, foi comum diminuir a tensão (~15% por geração). Isso permitiu aumentos no clock sem proporcional aumento de potência.
⚠️ Problemas modernos:
-
A descida de tensão tem limites: transístores tornam-se "fugas" (leaky), desperdiçando energia mesmo quando desligados.
-
Cerca de 40% da energia consumida em servidores deve-se a fugas estáticas.
-
Técnicas como desligar partes do chip e melhorar o arrefecimento são usadas, mas limitadas pelo custo, especialmente em dispositivos móveis.
🔁 Conclusão: o design de microprocessadores teve de mudar drasticamente, pois o caminho tradicional baseado em mais velocidade e transístores tornou-se insustentável.
🔄 1.8 – A mudança radical: A passagem dos uniprocessadores para os multiprocessadores
Esta secção descreve uma mudança radical na indústria: o abandono dos processadores únicos (uniprocessors) em favor dos multicore.
-
Até cerca de 2006, o desempenho melhorava com aumento da frequência e melhorias internas.
-
Com a Power Wall, os fabricantes passaram a incluir vários núcleos (cores) num único chip.
-
Exemplo: um “quad-core” tem quatro processadores num só chip.
-
🧠 Consequências para programadores:
-
Antigamente, bastava compilar o código de novo para obter mais desempenho.
-
Agora, é necessário reescrever os programas para que tirem partido do paralelismo.
-
O paralelismo explícito exige que o programador:
-
Divida as tarefas de forma equilibrada;
-
Minimize o tempo de sincronização e comunicação;
-
Garanta que todas as partes do programa terminam ao mesmo tempo.
-
🎻 Analogia:
O texto compara o software antigo a música para solista. O software para múltiplos núcleos é como escrever para uma orquestra sinfónica – mais poderoso, mas muito mais difícil.
🧩 Os capítulos seguintes do livro incluem secções sobre as implicações do paralelismo em cada domínio técnico.
🧪 1.9 – Coisas reais: Avaliação comparativa do Intel Core i7
Esta secção introduz benchmarks reais usados para medir o desempenho de computadores, com foco no Intel Core i7.
📊 Avaliar desempenho:
-
O ideal seria correr os programas reais de cada utilizador, mas isso nem sempre é prático.
-
Por isso, usam-se benchmarks, que são programas-padrão representativos de workloads típicos.
-
O mais importante é o SPEC (System Performance Evaluation Cooperative).
🧮 SPEC CPU2006:
-
Divide-se em dois conjuntos:
-
CINT2006 – 12 benchmarks para processamento inteiro (ex.: compiladores, xadrez, simulação de ADN).
-
CFP2006 – 17 benchmarks para vírgula flutuante (ex.: dinâmica molecular, álgebra linear).
-
-
Os factores de desempenho incluem:
-
Contagem de instruções;
-
CPI (ciclos por instrução);
-
Tempo de ciclo de clock.
-
-
É usado o SPECratio:
Quanto maior o valor, melhor o desempenho.
-
Para sumarizar os resultados de múltiplos benchmarks, calcula-se a média geométrica dos SPECratios.
⚡ SPECpower:
-
Benchmark voltado para medir eficiência energética (operações por segundo por watt).
-
Mede o consumo em diferentes níveis de carga (0% a 100%).
📌 Conclusão: o desempenho real de um processador não pode ser avaliado apenas pela frequência de relógio. Benchmarks como os SPEC ajudam a avaliar a performance com base em situações práticas.
⚠️ 1.10 – Falácias e Armadilhas
Esta secção alerta para conceitos errados (falácias) e erros frequentes (armadilhas) na análise e concepção de sistemas computacionais.
Exemplos abordados:
-
Armadilha: Pensar que melhorar um único componente de um sistema resultará numa melhoria proporcional no desempenho global.
-
Isto é desmentido pela Lei de Amdahl, que mostra que o ganho total depende da fração do tempo de execução que é efectivamente afectada pela melhoria.
-
Exemplo: se 80% do tempo é gasto em multiplicações, mesmo acelerar essas operações infinitamente não tornará o programa 5 vezes mais rápido.
-
-
Falácia: Supor que computadores com baixa utilização consomem pouca energia.
-
Mesmo com pouca carga, servidores consomem uma grande fração da potência máxima.
-
-
Falácia: Acreditar que optimizar para desempenho e para eficiência energética são objectivos incompatíveis.
-
Em muitos casos, optimizações que reduzem o tempo de execução também reduzem o consumo energético global.
-
-
Armadilha: Usar apenas parte da equação do desempenho para avaliar um sistema.
-
A equação completa considera contagem de instruções, ciclos por instrução (CPI) e frequência do relógio.
-
Usar apenas dois desses factores pode levar a conclusões erradas.
-
-
Exemplo prático: O uso de MIPS como métrica de desempenho pode ser enganador:
-
Não permite comparar arquitecturas diferentes;
-
Varia com o tipo de programa;
-
Pode não refletir o tempo de execução real.
-
📌 1.11 – Considerações Finais
Esta secção fecha o capítulo com uma síntese das ideias abordadas:
-
Tempo de execução real é a única medida fiável de desempenho.
-
A abstracção é a base da concepção de sistemas computacionais modernos — em particular, a interface entre hardware e software de baixo nível (ISA).
-
Moore previa a rápida evolução dos circuitos integrados; no entanto, o desempenho melhorou também com novas ideias arquitectónicas.
-
Eficiência energética tornou-se mais importante do que a densidade de transístores, conduzindo à adopção dos processadores multicore.
-
O design de computadores modernos equilibra múltiplos factores:
-
Desempenho;
-
Energia;
-
Fiabilidade;
-
Custo total de propriedade;
-
Escalabilidade.
-
💡 Plano para o livro:
Os próximos capítulos abordam os cinco componentes clássicos:
-
Datapath e controlo – Cap. 3, 4 e 6;
-
Memória – Cap. 5;
-
Entrada/Saída – Cap. 5 e 6.
🕰️ 1.12 – Perspectiva Histórica e Leituras Complementares
Esta secção remete para um suplemento online que acompanha o livro.
-
Fornece o contexto histórico das ideias apresentadas no capítulo.
-
Procura ilustrar o lado humano da evolução tecnológica, mostrando como certos conceitos se desenvolveram ao longo do tempo.
-
Ajuda a compreender melhor o presente e a antecipar o futuro da computação.
-
Inclui sugestões de leitura complementar, também disponíveis no site do livro.