Aula 1: 16.09.2019

Apresentação
Considerações gerais sobre o programa, bibliografia, funcionamento das aulas e método de avaliação.

Aula 2: 19.09.2019

Conceitos Básicos
Breve história do computador digital e das tecnologias afins. A arquitetura de von Neumann. Microprocessadores. Lei de Moore. Evolução do desempenho dos processadores. Multiprocessadores.

Aula 3: 23.09.2019

Execução de Programas
Estágios na transformação de um programa em C num processo em execução: compilador, assemblador, linker e loader. Código assembly e código máquina. Object files, linking estático e linking dinâmico. Carregar um programa para memória.

Aula 4: 26.09.2019

Representação de Dados
Codificação de caracteres. Números inteiros com e sem sinal. Representação em complemento para 2. Adição de números inteiros. Overflow.

Aula 5: 30.09.2019

Representação de Dados
Números em vírgula flutuante. O formato IEEE 754: precisão simples e precisão dupla. Números normalizados e não normalizados. Adição de números em vírgula flutuante. Overflow e underflow.

Aula 6: 03.10.2019

Representação de Dados
Regras de arredondamento em IEEE 754. Registos e memória como locais de manipulação e armazanamento de dados. Endianness.

Programação em MIPS
O projeto MIPS. Diferenças entre computadores CISC e RISC. Registos do MIPS.

Aula 7: 07.10.2019

Programação em MIPS
Representação de instruções. Código assembly e código máquina. Instruções comuns do MIPS: aritméticas, lógicas, para transferência de dados, e de controle de fluxo.

Aula 8: 10.10.2019

Programação em MIPS
Pseudo-instruções. Modos de endereçamento. Exemplos básicos utilizando construtores aritméticos, condicionais e de controle de fluxo.

Aula 9: 14.10.2019

Programação em MIPS
Espaço de endereçamento. Suporte à execução de procedimentos. Procedure frames. Convenções caller e callee.

Aula 10: 17.10.2019

Programação em MIPS
Exemplos de procedimentos simples e recursivos. Estrutura base de um programa. System calls.

Aula 11: 21.10.2019

Componentes Básicas
Circuitos lógicos sem memória (combinatórios) e com memória (sequenciais). Portas lógicas básicas e portas lógicas universais. Descodificador e multiplexador. Unidade lógica e aritmética (ALU) de 1 bit e de 32 bits.

Aula 12: 24.10.2019

Componentes Básicas
Sinal de relógio. Célula de memória de 1 bit assíncrona - S-R latch. Célula de memória de 1 bit síncrona - D latch e D flip-flop. Implementação da componente de registos - register file.

Aula 13: 28.10.2019

Componentes Básicas
Leitura e escrita do register file. Implementação de memórias SRAM, DRAM e synchronous RAM (SSRAM, SDRAM e DDRRAM).

Análise de Desempenho
Fatores que influenciam o desempenho. Métricas de desempenho. Tempo de resposta (response time) e taxa de transferência (throughput). Relação entre desempenho e tempo de execução.

Aula 14: 31.10.2019

Análise de Desempenho
Diferenças entre tempo de CPU, tempo de utilizador e tempo de sistema. Instruction count (IC), clock cycles per instruction (CPI) e instructions per clock cycle (IPC). Equação de desempenho. Vantagens das arquiteturas RISC.

Implementação do MIPS
Diferenças entre Instruction set architecture (ISA) e possíveis implementações. Arquiteturas single-register, special-purpose register e general-purpose register. Arquiteturas load-store, register-memory e memory-memory. Visão genérica do fluxo de informação para um subconjunto representativo de instruções do MIPS.

Aula 15: 04.11.2019

Implementação do MIPS
Fluxo de informação e de controle para um subconjunto representativo de instruções do MIPS.

Aula 16: 07.11.2019

Implementação do MIPS
Linhas de controle para um subconjunto representativo de instruções do MIPS. Implementação de ciclo-único (single-cycle) versus implementação multi-ciclo (multi-cycle).

Aula 17: 11.11.2019

Implementação do MIPS
Fluxo de informação e de controle da implementação multi-ciclo. Diferenças para a implementação de ciclo-único. Passos da implementação multi-ciclo: IF, ID, EX, MEM e WB.

Aula 18: 14.11.2019

Implementação do MIPS
Máquina de estados da implementação multi-ciclo. Pipelining. Passos da implementação pipelining. Fluxo de informação e registos da implementação pipelining.

Aula 19: 18.11.2019

Implementação do MIPS
Fluxo de controle da implementação pipelining. Pipeline hazards. Data hazards: forwarding e stalls. Forwarding unit e detection unit.

Aula 20: 21.11.2019

Implementação do MIPS
Reordenação de código. Control hazards: branch prediction. Excepções: traps e interrupts. Tratamento de excepções no MIPS.

Hierarquia de Memória
Hierarquia de memória: relação entre níveis da hierarquia, distância ao CPU e tamanho em bytes. Princípio da localidade: localidade temporal e localidade espacial.

Aula 21: 25.11.2019

Revisões para o teste.

Aula 22: 28.11.2019

Teste.

Aula 23: 02.12.2019

Hierarquia de Memória
Acertos (hits) e falhas (misses): taxa de acerto (hit rate), taxa de falha (miss rate), tempo de acesso em caso de acerto (hit time) e em caso de falha (miss penalty). Memórias cache de mapeamento direto (direct-mapped caches). Total de bits na implementação duma cache. Considerações sobre o tamanho dos blocos duma cache.

Aula 24: 05.12.2019

Hierarquia de Memória
Memórias cache associativas: totalmente associativas (fully associative caches) e de n-vias (n-way set associative caches). Políticas de substituição e tratamento de falhas. Caches write-through e write-back.

Aula 25: 09.12.2019

Hierarquia de Memória
Desempenho das caches: relação com o CPI e com a frequência do relógio. Caches multinível. Memória virtual: endereços virtuais e endereços físicos.

Aula 26: 12.12.2019

Hierarquia de Memória
Memória virtual: tabela de páginas, faltas de página (page faults) e algoritmos para a troca de página. Translation-lookaside buffer (TLB). Interação entre a TLB, a tabela de páginas, as caches e a memória física.

Aula 27: 16.12.2019

Discussão e resolução do teste.

Aula 28: 19.12.2019

Discussão e resolução do teste.