Pesquisar neste blogue

Mostrar mensagens com a etiqueta Arquitectura de Computadores. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Arquitectura de Computadores. Mostrar todas as mensagens

terça-feira, 29 de abril de 2025

Resumo extraído do Capítulo 1 do livro Structured Computer Organization de Andrew S. Tanenbaum (5.ª edição)

1. Introdução

Este capítulo começa por definir o que é um computador digital: uma máquina capaz de resolver problemas executando instruções fornecidas por pessoas. Estas instruções formam programas, que têm de ser convertidos numa linguagem de máquina simples para serem executados. Como esta linguagem é difícil de usar, os sistemas são estruturados em camadas ou níveis de abstração para facilitar o seu desenvolvimento e utilização. Este conceito é a base da “organização estruturada dos computadores”.


1.1 Organização Estruturada de Computadores

1.1.1 – Linguagens, Níveis e Máquinas Virtuais

A diferença entre o que é conveniente para as pessoas e para os computadores exige a criação de linguagens intermédias. Cada linguagem (L0, L1, L2, ..., Ln) representa um nível (ou máquina virtual) de abstração. A execução de programas escritos nestas linguagens pode ser feita por tradução (converter para uma linguagem de nível inferior) ou por interpretação (executar directamente, instrução a instrução).

Isto dá origem à ideia de uma máquina multinível, onde apenas o nível mais baixo (L0) é executado directamente pelo hardware. Os níveis superiores são implementados por interpretadores ou tradutores baseados nos níveis inferiores. Esta estrutura facilita o desenvolvimento de sistemas complexos, escondendo detalhes de baixo nível e aproximando a linguagem da máquina à forma como os humanos pensam.

1.1.2 – Máquinas Multinível Contemporâneas

A maioria dos computadores modernos é estruturada em múltiplos níveis (até seis), desde o nível de hardware até às linguagens orientadas ao utilizador. Estes níveis são:

  1. Nível 0 – Lógica Digital: baseia-se em portas lógicas digitais (AND, OR, etc.), implementadas com transístores.

  2. Nível 1 – Microarquitectura: combina registos e uma ALU (Unidade Aritmética e Lógica). Pode ser controlado por hardware ou por microprogramas.

  3. Nível 2 – Arquitetura do Conjunto de Instruções (ISA): é a interface formal entre hardware e software. Define o conjunto de instruções que a máquina pode executar.

  4. Nível 3 – Máquina do Sistema Operativo: adiciona funcionalidades como multitarefa e manipulação de memória, interpretadas pelo sistema operativo.

  5. Nível 4 – Linguagem Assembly: forma simbólica da linguagem da máquina, traduzida por um assembler.

  6. Nível 5 – Linguagens de Alto Nível: como C, Java, etc., traduzidas por compiladores ou interpretadas.

Cada nível é construído com base no anterior, e os programadores de aplicações normalmente trabalham nos níveis mais altos, abstraindo-se dos níveis inferiores.

1.1.3 – Evolução das Máquinas Multinível

Historicamente, os computadores começaram com apenas dois níveis (lógica digital e ISA). A introdução da microprogramação por Maurice Wilkes simplificou o hardware ao mover parte do controlo para o software.

O sistema operativo surgiu para automatizar a operação dos computadores, criando um novo nível virtual. Ao longo do tempo, mais funcionalidades foram adicionadas ao microcódigo e aos sistemas operativos, aumentando a complexidade dos níveis intermédios.

Na década de 1980, houve uma tendência para eliminar a microprogramação em favor de execução direta (hardware controlado), como nas arquiteturas RISC. A linha entre hardware e software tornou-se cada vez mais fluida: funcionalidades podem ser implementadas em qualquer nível, dependendo do custo, desempenho e fiabilidade.


Secção 1.2 – Marcos na Arquitetura de Computadores

1.2.1 – Geração Zero: Computadores Mecânicos (1642–1945)

Iniciada com Pascal e Leibniz, esta geração é marcada por máquinas de cálculo mecânicas. Charles Babbage idealizou a Analytical Engine, considerada a antecessora dos computadores modernos. Ada Lovelace foi a primeira programadora da história.

1.2.2 – Primeira Geração: Válvulas de Vácuo (1945–1955)

Com o estímulo da Segunda Guerra Mundial, surgiram os primeiros computadores electrónicos como o ENIAC, EDSAC e Whirlwind I. John von Neumann propôs o modelo de computador com armazenamento em memória, que ainda hoje é usado (arquitetura de Von Neumann).

1.2.3 – Segunda Geração: Transístores (1955–1965)

A invenção do transístor permitiu construir computadores mais fiáveis e eficientes. Destacam-se o IBM 7094 (científico), o CDC 6600 (supercomputador com unidades funcionais paralelas), e o PDP-8 (minicomputador popular da DEC).

1.2.4 – Terceira Geração: Circuitos Integrados (1965–1980)

Com os circuitos integrados, surgem famílias de computadores como o IBM System/360, com várias versões compatíveis entre si. Introduziu-se o conceito de emulação e multiprogramação. No mundo dos minicomputadores, destaca-se o PDP-11 da DEC.

1.2.5 – Quarta Geração: VLSI e Computadores Pessoais (1980–?)

A integração em larga escala (VLSI) possibilitou a criação de computadores pessoais. O IBM PC, lançado em 1981, dominou o mercado, dando origem à indústria dos clones de PC. A Apple destacou-se com o Macintosh e o conceito de interface gráfica (GUI). Nesta geração destacam-se ainda os processadores RISC, como o MIPS e SPARC, e o Alpha da DEC (64 bits).

1.2.6 – Quinta Geração: Computadores Invisíveis

A promessa japonesa de inteligência artificial não se concretizou como esperado. No entanto, deu-se o aparecimento dos computadores invisíveis: embebidos em dispositivos, cartões e electrodomésticos. Esta visão, chamada computação ubíqua ou computação pervasiva, representa uma mudança de paradigma mais do que uma nova arquitetura.


1.3 – O Zoo dos Computadores

Esta secção explora a diversidade atual de computadores, motivada por forças tecnológicas e económicas.

1.3.1 – Forças Tecnológicas e Económicas

A evolução do hardware tem sido guiada pela Lei de Moore, que prevê a duplicação de transístores por chip de circuito integrado a cada 18 meses. Isso permite mais memória e maior desempenho. A crescente capacidade dos chips impulsiona novas aplicações e mercados, alimentando um ciclo virtuoso de inovação tecnológica.

1.3.2 – O Espectro dos Computadores

Os computadores variam desde os mais baratos (como cartões com chips descartáveis) até supercomputadores. O autor apresenta uma escala com tipos de computadores, preços aproximados e exemplos de aplicação, demonstrando a diversidade de equipamentos existentes.

1.3.3 – Computadores Descártaveis

Exemplos incluem chips RFID, usados em etiquetas inteligentes e até em seres vivos. Estes chips, sem bateria, são ativados por sinais externos e podem ser usados para identificação e seguimento de objetos, pessoas e animais, levantando implicações éticas e sociais.

1.3.4 – Microcontroladores

Presentes em electrodomésticos, brinquedos, carros e equipamentos médicos. São computadores completos (CPU, memória, E/S) integrados num único chip, programados para tarefas específicas e produzidos em massa a baixo custo.

1.3.5 – Computadores de Jogo

Ex: consolas como a Xbox e PlayStation. São sistemas especializados em multimédia, com CPUs gráficas poderosas e arquitecturas optimizadas para jogos.

1.3.6 – Computadores Pessoais

Incluem computadores de secretária, portáteis e PDAs. Têm múltiplos periféricos e sistemas operativos complexos. Os portáteis são versões compactas dos de secretária.

1.3.7 – Servidores

Computadores semelhantes a PCs mas com mais capacidade de memória, armazenamento e rede. São utilizados em redes empresariais e na Internet, executando sistemas operativos como Linux ou Windows Server.

1.3.8 – Conjuntos de Estações de Trabalho (COWs)

Clusters de computadores interligados que operam como um sistema único para tarefas paralelas. São usados como supercomputadores baratos ou "server farms" em sites de grande tráfego.

1.3.9 – Mainframes

Máquinas grandes e antigas, usadas ainda hoje por empresas com investimentos pesados em software antigo. Têm grande capacidade de E/S e armazenamento e foram ressuscitadas com a Internet para lidar com grandes volumes de transacções.

1.3.10 – Supercomputadores

Antes mais poderosos que os mainframes, hoje têm menos relevância, sendo substituídos por clusters mais baratos e flexíveis.


1.4 – Famílias de Computadores de Exemplo

O livro foca-se em três tipos de computadores:

  1. Computadores Pessoais – representados pelo Pentium 4

  2. Servidores – representados pelo UltraSPARC III

  3. Computadores Embebidos – representados pelo 8051

1.4.1 – Introdução ao Pentium 4

A família de CPUs da Intel evoluiu do 4004 (1970) até ao Pentium 4, com grande compatibilidade com versões anteriores. O Pentium Pro introduziu cache de dois níveis e execução paralela de até 5 instruções. O Pentium 4 trouxe a tecnologia de hyperthreading e novas instruções multimédia (SSE).

1.4.2 – Introdução ao UltraSPARC III

A Sun Microsystems criou a linha SPARC, baseada numa arquitectura RISC. A CPU UltraSPARC III, com 64 bits e total compatibilidade retroactiva, é um exemplo de processador poderoso para servidores. O SPARC distingue-se por ser uma arquitetura aberta com vários fabricantes licenciados.

1.4.3 – Introdução ao 8051

O 8051 é um microcontrolador de 8 bits com CPU, memória e E/S num só chip, lançado pela Intel em 1980. Muito usado em sistemas embebidos devido ao seu baixo custo, larga disponibilidade, vasta documentação e suporte por múltiplos fabricantes. Há variantes como o 8751 (regravável) e o 8052 (mais memória). A família MCS-51 é ainda amplamente usada em engenharia e investigação.


1.5 – Unidades Métricas

Esta secção esclarece o uso das unidades métricas no contexto da ciência computacional, e especialmente nas áreas de armazenamento e transmissão de dados.

Unidades Padrão

  • A informática adopta o sistema métrico internacional (SI), evitando unidades tradicionais anglo-saxónicas.

  • As principais prefixos métricos utilizados são:

    • mili (10⁻³), micro (10⁻⁶), nano (10⁻⁹), pico (10⁻¹²), kilo (10³), mega (10⁶), giga (10⁹), tera (10¹²), entre outros.

Ambiguidade entre base 10 e base 2

  • No contexto da memória, a indústria usa:

    • 1 KB = 2¹⁰ = 1024 bytes,

    • 1 MB = 2²⁰ = 1.048.576 bytes,

    • 1 GB = 2³⁰ = 1.073.741.824 bytes,

    • 1 TB = 2⁴⁰ = 1.099.511.627.776 bytes.

  • Contudo, em comunicações, os prefixos referem-se a potências de 10:

    • 1 kbps = 10³ bits/segundo,

    • 1 Mbps = 10⁶ bits/segundo, etc.

Esta dualidade pode causar confusão, por isso o livro usa:

  • KB, MB, GB, TB → para potências de 2 (memória),

  • kbps, Mbps, Gbps, Tbps → para potências de 10 (transmissão de dados).


1.6 – Estrutura do Livro

Esta secção apresenta uma visão geral da estrutura e abordagem do livro.

Objectivo principal

O livro trata da organização estruturada de computadores multinível, examinando quatro níveis em detalhe:

  1. Lógica digital – circuitos e portas lógicas.

  2. Microarquitectura – como o hardware interpreta instruções da ISA.

  3. ISA (Instruction Set Architecture) – conjunto de instruções da máquina.

  4. Máquina do sistema operativo – funcionalidades oferecidas pelo sistema operativo.

A obra foca-se em conceitos fundamentais e exemplos práticos, evitando pormenores excessivamente matemáticos ou técnicos.

Exemplos usados

Serão utilizados três computadores de referência ao longo do livro:

  • Pentium 4 (PCs),

  • UltraSPARC III (servidores),

  • 8051 (sistemas embebidos).

Estes foram escolhidos por:

  • Serem largamente utilizados.

  • Apresentarem arquitecturas diferentes.

  • Permitirem comparação crítica entre soluções de design.

O autor destaca que não se trata de um manual de programação de nenhuma dessas máquinas, mas sim de uma exploração dos princípios subjacentes a todas elas.

Estrutura dos capítulos seguintes

  • Cap. 2: Introdução aos componentes principais (processadores, memórias, E/S).

  • Cap. 3: Nível de lógica digital – portas, circuitos e álgebra booleana.

  • Cap. 4: Microarquitectura – implementação da ISA.

  • Cap. 5: ISA – detalhes das instruções e dados.

  • Cap. 6: Nível do sistema operativo – controlo de processos, memória, etc.

  • Cap. 7: Linguagem assembly e o processo de ligação (linking).

  • Cap. 8: Computadores paralelos – multiprocessadores, COWs e SoCs.

  • Cap. 9: Leituras sugeridas e bibliografia anotada.




Capa do livro Structured Computer Organization de Andrew S. Tanenbaum (5.ª edição)

Capítulo 1 do livro Structured Computer Organization de Andrew S. Tanenbaum (5.ª edição)





🎓 Quer melhorar os seus resultados na universidade? 
Disponibilizamos explicações de ensino superior adaptadas às suas necessidades, com acompanhamento personalizado para diferentes disciplinas.
✔ Explore a nossa Lista de Matérias disponíveis.
🌟 Veja os testemunhos de alunos que já atingiram melhores notas com o nosso apoio.
📬 Contacte-nos por email ou pelo formulário de contacto e obtenha a ajuda que precisa para dominar os seus estudos!

EuExplico Eu Explico Explicações de Ensino Superior

sábado, 12 de abril de 2025

Resumo extraído do capítulo 2 livro "Computer Organization and Design RISC-V 2nd edition, by Hennessy and Patterson


Capítulo 2: Instruções: A linguagem do Computador

2.1 Introdução

Apresenta o conceito de linguagem máquina, onde cada instrução é uma "palavra" e o conjunto de todas constitui o conjunto de instruções (ISA). É introduzido o RISC-V como ISA base do livro, comparando-o com o MIPS e o x86, mostrando a importância de um design simples, eficaz e de fácil implementação para hardware e compiladores.


2.2 Operações do Hardware do Computador

Explica os tipos de instruções básicas: aritméticas, lógicas, de transferência de dados e de controlo de fluxo: add, sub, lw, sw, e beq.


2.3 Operandos do Hardware do Computador

Discute os registos (e.g., x0 a x31 no RISC-V), usados para armazenar operandos, e a razão para a sua limitação (tipicamente 32 registos): menor complexidade e maior velocidade.


2.4 Números com e sem sinal

Aborda a representação de números inteiros com sinal (signed) usando complemento para dois, e sem sinal (unsigned). Explica as diferenças nas instruções e como o hardware as interpreta.


2.5 Representar Instruções no Computador

Mostra como as instruções RISC-V são codificadas em binário, detalhando os campos opcode, rd, rs1, rs2, funct3 e funct7. Apresenta os formatos R, I, S, B, U e J.


2.6 Operações Lógicas

Explora as instruções lógicas como and, or, xor, sll, srl, sra, etc. Mostra como são úteis em manipulação de bits, máscaras e operações de baixo nível.


2.7 Instruções para Tomada de Decisão

Introduz as instruções condicionais como beq, bne, blt, bge, etc. Usa exemplos de condições e ciclos (if, while) para mostrar a sua tradução para assembly.


2.8 Suporte a Procedimentos no Hardware

Explica a chamada e retorno de procedimentos (jal, jalr, ret), a passagem de parâmetros (x10, x11, ...), o uso da stack (sp) e a preservação de registos (ra, s0-s11), incluindo o prólogo e epílogo das funções.


2.9 Comunicação com Pessoas

Descreve input/output em baixo nível, abordando syscalls, o uso de ecall no RISC-V, e o papel do sistema operativo para fornecer serviços como impressão no ecrã ou leitura do teclado.


2.10 Endereçamento RISC-V para Imediatos e Endereços Longos

Discute os desafios de representar constantes grandes (imediatos) e endereços longos, e como o RISC-V usa instruções como lui, auipc, combinadas com outras (addi, jalr) para construir valores de 32 bits.


2.11 Paralelismo e Instruções: Sincronização

Apresenta o conceito de sincronização em multiprocessadores com instruções como lr.w (load reserved) e sc.w (store conditional), fundamentais para evitar condições de corrida (race conditions) e implementar locks.


2.12 Traduzir e Iniciar um Programa

Explica as etapas de tradução de um programa C: compiladorassemblyobjetoligação (linking)carregamento (loading). Introduz as ferramentas envolvidas (e.g., assembler, linker, loader) e os tipos de ficheiros (.c, .s, .o, .exe).


2.13 Exemplo de Ordenação em C: Tudo Junto

Fornece um exemplo completo de ordenar um array em C, a sua tradução para assembly RISC-V, e a análise do desempenho. Mostra como os ciclos for e chamadas a funções são representadas em assembly.


2.14 Arrays vs Ponteiros

Compara o uso de arrays com o uso de ponteiros em C, tanto a nível de sintaxe como de geração de código assembly. Mostra que os ponteiros podem gerar código mais compacto e rápido, dependendo da optimização.


2.15 Compilação de C e Interpretação de Java

Apresenta técnicas de compilação e optimização em C, como propagação de constantes e alocação de registos, e compara com a execução de bytecode Java numa Java Virtual Machine (JVM), incluindo métodos, objectos, garbage collection, etc.


2.16 ARMv8: Material Real

Compara o RISC-V com o conjunto de instruções ARMv8 (64 bits), destacando diferenças e semelhanças, tais como o número de registos, formatos de instruções e modos de endereçamento.


2.17 x86-64: Material Real

Explora a complexidade da ISA x86-64, mostrando como lida com instruções variáveis em tamanho (1 a 15 bytes), modos de endereçamento avançados, e a sua longa história de compatibilidade com versões anteriores.


2.18 Falácias e Armadilhas

Lista ideias erradas comuns em design de instruções e hardware, como “mais instruções = melhor desempenho” ou “hardware complexo é sempre mais rápido”, explicando por que estas ideias são enganadoras.


2.19 Considerações Finais

Resume os principais conceitos do capítulo, reforçando a ligação entre linguagens de alto nível, linguagem de máquina e execução no hardware. Destaca a importância de compreender a base para construir sistemas eficientes.


2.20 Perspectiva Histórica e Referências

Apresenta a evolução dos conjuntos de instruções desde os primeiros computadores até aos dias de hoje, mencionando marcos como o IBM 701, o PDP-11, o MIPS, e os princípios que guiaram o design moderno de ISAs.


2.21 Tudo Junto: Multiplicação de Matrizes em C

Aplica os conhecimentos do capítulo numa tarefa prática: multiplicação de matrizes, analisando o impacto do código, do compilador e da ISA no desempenho.


2.22 Falácias e Armadilhas

Reforça e detalha falhas de raciocínio comuns, com exemplos concretos de como certas decisões de design podem parecer vantajosas mas serem prejudiciais.


2.23 Observações Finais

Conclui o capítulo com um reforço da ideia central: compreender a linguagem do computador é essencial para todos os programadores, pois permite otimizar desempenho, detectar problemas e compreender o funcionamento interno dos sistemas.






🎓 Quer melhorar os seus resultados na universidade? 
Disponibilizamos explicações de ensino superior adaptadas às suas necessidades, com acompanhamento personalizado para diferentes disciplinas.
✔ Explore a nossa Lista de Matérias disponíveis.
🌟 Veja os testemunhos de alunos que já atingiram melhores notas com o nosso apoio.
📬 Contacte-nos por email ou pelo formulário de contacto e obtenha a ajuda que precisa para dominar os seus estudos!

EuExplico Eu Explico Explicações de Ensino Superior

sábado, 15 de março de 2025

Resumo extraído do capítulo 1 livro "Computer Organization and Design RISC-V 2nd edition, by Hennessy and Patterson


Capítulo 1: Abstrações e Tecnologia de Computadores

1.1 Introdução

O capítulo introduz a importância dos sistemas computacionais na sociedade moderna e a constante evolução da tecnologia. São destacados exemplos de avanços tecnológicos, como a computação em automóveis, telemóveis, o Projeto Genoma Humano e a Web. Além disso, são apresentadas três grandes categorias de aplicações de computadores:

  1. Computadores Pessoais (PCs) – Focados na performance para um único utilizador a baixo custo.
  2. Servidores – Computadores de grande capacidade, projetados para múltiplos utilizadores e aplicações complexas.
  3. Computadores Embebidos – Presentes em eletrodomésticos, automóveis, entre outros, com requisitos específicos de desempenho e consumo energético.

O capítulo também discute a transição da era do PC para a era dos dispositivos móveis pessoais (PMDs) e a ascensão da computação na nuvem (Cloud Computing).


1.2 As Sete Grandes Ideias da Arquitetura de Computadores

O capítulo apresenta sete princípios fundamentais da arquitetura de computadores, que orientam o design e a evolução dos sistemas computacionais:

  1. Uso de Abstração para Simplificar o Design – Permite projetar sistemas complexos de forma modular.
  2. Fazer com que o Caso Comum seja Rápido – Otimização das operações mais frequentes para aumentar o desempenho.
  3. Desempenho via Paralelismo – Execução de múltiplas operações simultaneamente para melhorar a velocidade de processamento.
  4. Desempenho via Pipeline – Divisão da execução de instruções em etapas sequenciais para maior eficiência.
  5. Desempenho via Previsão – Técnicas que antecipam resultados para reduzir atrasos computacionais.
  6. Hierarquia de Memória – Uso de múltiplos níveis de memória (cache, RAM, armazenamento) para otimizar acesso a dados.
  7. Confiabilidade via Redundância – Implementação de mecanismos para garantir funcionamento contínuo mesmo em caso de falhas.

1.3 Por baixo do seu Programa

O software é organizado em camadas hierárquicas, com as aplicações no topo e o hardware na base. Duas camadas fundamentais do software são:

  • Sistemas Operativos (SO) – Gerem recursos do computador e fornecem serviços como manipulação de ficheiros e controlo de dispositivos.
  • Compiladores – Traduzem programas escritos em linguagens de alto nível (como C ou Java) para instruções que o hardware pode executar.

A arquitetura de computadores é baseada numa linguagem binária simples, com instruções representadas por números em base 2. A introdução de compiladores e linguagens de alto nível revolucionou a programação, tornando-a mais acessível e eficiente.


1.4 Por Dentro do Computador

Os computadores são compostos por cinco componentes principais:

  1. Entrada (Input) – Dispositivos como teclados e sensores que inserem dados no sistema.
  2. Saída (Output) – Dispositivos como monitores e impressoras que exibem os resultados do processamento.
  3. Processador (CPU) – Unidade que executa instruções e controla a operação do sistema.
  4. Memória – Armazena dados e programas temporariamente durante a execução.
  5. Dispositivos de Armazenamento – Guardam dados permanentemente (discos rígidos, SSDs, memória flash).

Os dispositivos modernos também incluem ecrãs táteis (touchscreen), sensores e conectividade sem fios.


1.5 Tecnologias para Construção de Processadores e Memória

Os avanços tecnológicos permitiram a evolução dos processadores e memórias ao longo do tempo. O transistor, um interruptor eletrónico, é o componente fundamental dos circuitos integrados (chips), que contêm milhões ou bilhões desses dispositivos.

A Lei de Moore previa a duplicação da densidade dos transistores a cada dois anos, impulsionando melhorias no desempenho dos computadores. No entanto, essa tendência tem desacelerado recentemente devido a limitações físicas.

A fabricação de chips envolve um processo complexo que inclui:

  • Produção de lingotes de silício
  • Corte em wafers
  • Aplicação de múltiplas camadas de circuitos
  • Testes e embalagem dos chips

A eficiência na fabricação de chips influencia diretamente o custo dos dispositivos.


1.6 Desempenho

O desempenho de um computador pode ser medido por diversos critérios, como a rapidez na execução de tarefas ou a capacidade de processar múltiplos trabalhos simultaneamente. Para avaliar o desempenho, são utilizados benchmarks, que testam diferentes aspectos do hardware e software.


1.7 A Barreira de Energia (The Power Wall)

O aumento da frequência dos processadores levou a um consumo excessivo de energia e geração de calor, limitando os ganhos de desempenho. Para superar essa barreira, os designers passaram a focar-se em eficiência energética e computação paralela.


1.8 A Mudança para Multiprocessadores

Devido às limitações da velocidade do clock, a indústria passou a adotar processadores multinúcleo (multicore), que permitem a execução paralela de múltiplas tarefas. Isso exige que os programadores desenvolvam software que aproveite essa arquitetura.


1.9 Benchmarks: Avaliação do Intel Core i7

Para medir o desempenho real de um processador, são utilizados benchmarks, que são conjuntos de testes padronizados. O capítulo apresenta um estudo de caso do desempenho do Intel Core i7 em diversas aplicações.


1.10 Acelerando Computações: Multiplicação de Matrizes em Python

O capítulo ilustra como técnicas de otimização podem melhorar o desempenho de cálculos matemáticos em linguagens de alto nível, como Python.


1.11 Falácias e Armadilhas

Os autores alertam sobre equívocos comuns no design de computadores, como:

  • Assumir que maior frequência de clock significa automaticamente melhor desempenho.
  • Acreditar que um processador mais rápido melhorará o desempenho de qualquer programa.

1.12 Considerações Finais

O capítulo reforça a importância da compreensão da arquitetura de computadores para programadores e engenheiros, destacando que a evolução tecnológica continua a moldar o futuro da computação.


Computer Organization and Design RISC-V 2nd edition, Hennessy and Patterson, Cap 1





Se quiser tutoria e/ou explicações sobre matérias que encontre neste blogue, contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer. Veja a Lista de Matérias já disponíveis para explicações. Leia testemunhos de antigos alunos.


quinta-feira, 14 de março de 2019

Código de um programa em Assembly do PEPE

Código de um programa em Assembly, do PEPE, para efectuar a potência: X elevado a Y. Existem várias formas possíveis. Esta é apenas uma forma possível. Não deixe de imaginar e testar outras possibilidades.

O programa foi testado no simulador do PEPE e funciona. Pode fazer download aqui.





Se quiser explicações sobre matérias que encontre neste blogue, contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.

Contacte-nos:

quinta-feira, 7 de março de 2019

Mapa de memória - Arquitectura de Computadores


Como obter uma memória, RAM, das dimensões desejadas partindo dos integrados existentes?
Aqui está um exemplo.









Se quiser explicações sobre matérias que encontre neste blogue, contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.

Contacte-nos:

domingo, 25 de novembro de 2018

Resolução de problema de teste de Sistemas Digitais I - UAL - 2009-04-15


Implementação de uma função com um MUX





Se quiser explicações sobre matérias que encontre neste blogue, contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.

Contacte-nos:

quinta-feira, 8 de novembro de 2018

Resolução de pergunta de teste de Arquitectura de Computadores - Universidade Lusíada







Se quiser explicações sobre matérias que encontre neste bloguecontacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer. Veja a Lista de Matérias já disponíveis para explicações. 



segunda-feira, 29 de outubro de 2018

Como construir um flip-flop JK com um flip-flop D e lógica adicional


Precisa de um flip-flop do tipo JK mas só tem um flip-flop tipo D e circuitos combinatórios?
Não tem problema. Veja abaixo como pode fabricar um JK com um D e lógica combinatória.



Se quiser explicações sobre matérias que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.






segunda-feira, 8 de outubro de 2018

As 3 funções lógicas básicas


As três portas lógicas básicas, os seus símbolos e as respectivas tabelas de verdade.




Se quiser explicações sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.




quarta-feira, 3 de outubro de 2018

Representação em complemento para dois


Considere o número hexadecimal B561h, de 16 bits em notação de complemento para 2.
Converta-o para decimal.

B561h = 1011010101100001b = 1011 0101 0110 0001b

Complemento para um = 0100 1010 1001 1110b

Complemento para dois = 0100 1010 1001 1111b =

= -(2^14 + 2^11 + 2^9 + 2^7 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0) = -19103


Se quiser explicações sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.







terça-feira, 2 de outubro de 2018

Breve Introdução às Bases de Numeração





 


Se quiser a resolução completa e/ou explicações mais detalhadas sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.




segunda-feira, 1 de outubro de 2018

Quanto é 4KByte


P: Quantos caracteres alfanuméricos (ASCII) conseguimos armazenar em 4KB de memória?

R: Cada caracter ocupa 1 Byte (8 bits), portanto conseguimos armazenar 4K caracteres.
     4K = 2^2 x 2^10 = 2^12 = 4096 caracteres alfanuméricos.


P: Qual o valor de 4KB em hexadecimal?

R: 4KB = 2^2 x 2^10 x 2^3 = 2^15 = 1000000000000000b = 1000 0000 0000 0000 = 8000H


Se quiser explicações sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.







quinta-feira, 16 de março de 2017

Resolução de um problema de Sistemas Digitais - Pág. 2

Implementação de uma função com um MUX
Resolução do problema 4 do 1º teste, 2009-04-15, de Sistemas Digitais I, da UAL.

A primeira página da resolução está aqui


Se quiser a resolução completa e/ou explicações detalhadas sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.





segunda-feira, 20 de fevereiro de 2017

Problema de conversão entre bases de numeração




Se quiser a resolução completa e/ou explicações mais detalhadas sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.


domingo, 19 de fevereiro de 2017

Documento de apresentação do Trabalho Final de Curso


Muitas noites eu passei sem dormir!...
Trabalhar, estudar, ser mãe e esposa, tudo ao mesmo tempo, sem quaisquer ajudas...
Mas deu-me um prazer enorme fazer este trabalho!

Documento de apresentação do meu Trabalho Final de Curso, em Junho de 2003.
Isto é só a apresentação. O Relatório tem 87 páginas.







Se quiser explicações sobre esta matéria (ou outras que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.
 






terça-feira, 15 de dezembro de 2015

Memória RAM


Como obter uma memória, RAM, das dimensões desejadas partindo dos integrados existentes?
Aqui está um exemplo. Publico apenas duas páginas da resolução (a pag. 1 e a pag. 5), de um total de seis páginas.




Se quiser explicações sobre matérias que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.




quinta-feira, 5 de novembro de 2015

AComp


Exame de AComp, do IST, de 17 de Junho de 2010.
 Resolução da pergunta 11), a) e b).

https://app.box.com/s/nbu97gcu9u4uozivoqrf

https://app.box.com/s/nbu97gcu9u4uozivoqrf



Se quiser explicações sobre matérias que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.



sexta-feira, 4 de setembro de 2015

Novo ano lectivo

Olá a todos!

Está quase a começar um novo lectivo!
A alegria de reencontrar os colegas, amigos, professores!
Ou a aventura de uma nova escola/faculdade, novos colegas, novos professores!
A descoberta do ensino superior!
Livros novos, material novo!
:)
Começa uma nova fase da vida escolar/académica!
Tudo é empolgante!
:)




Se quiser explicações sobre matérias que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.



sexta-feira, 2 de janeiro de 2015

Somador de 4 bits - ripple carry e carry-look ahead






Se quiser explicações sobre matérias que encontre neste blogue), contacte-nos, de preferência por email. Este blogue destina-se à divulgação dos nossos serviços. É apenas uma pequena amostra do que sabemos e podemos fazer.



Formulário de Contacto

Nome

Email *

Mensagem *