Planeamento

Aulas

Apresentação e motivação

Programa, bibliografia e avaliação.

Sistemas de numeração - representação e conversão de naturais e racionais

Bases binária, octal e hexadecimal. Bits, bytes e múltiplos do byte. Conversão entre bases de numeração.

Sistemas de numeração - aritmética de naturais e lógica booleana

Aritmética de números naturais. Transporte e empréstimo na aritmética. Operações lógicas: NOT, OR, AND e XOR.

Sistemas de numeração - representação e aritmética com Inteiros

Representação de inteiros: sinal magnitude, complemento para um, complemento para dois e excesso-127. Aritmética em complemento para dois. Transbordo (overflow) na aritmética.

Sistemas de numeração - Vírgula-flutuante

Representação de números em notação científica e vírgula-flutuante IEEE 754. Normalização. Conversão e aritmética.

Sistema Computacional - Dados

Representação computacional de vários tipos de dados: números, texto (ASCII e UTF), e outros. Discretização e codificação em geral. Armazenamento de dados em memória: organização (little endian e big endian) e alinhamento.

Sistema Computacional - Arquitetura

Arquitetura geral de um computador. Arquitetura de Von Neumann, Harvard e modificada. Arquitetura dos computadores atuais. Introdução à arquitetura do reportório de instruções,. Exemplos: x86, Arm, MIPS e Risc-V.

Reportório x86 - Arquitetura

Arquitetura do reportório de instruções x86: registos, registo de flags, unidades de execução, ALU e FPU, ciclo fundamental de execução.
Mapa de memória de um programa. Dados e instruções. Alinhamento de instruções.

Reportório x86 - Instruções gerais e aritméticas

Instruções e seus operandos. Instruções gerais: nop, mov, xchg, movzx, movsx, stc, clc, cmc, syscall. Instruções aritméticas: add, adc, sub, sbb, mul, imul, div, idiv. Instruções vírgula flutuante: movss, movsd, cvtXX2XX, addXX, subXX, mulXX, divXX

Reportório x86 - Instruções lógicas, deslocamentos e rotações

Instruções: not, or, and, xor, shl, shr, sal, sar, rol, ror, rcl, rcr

Reportório x86 - Controlo de fluxo

Estruturas de controlo de fluxo, if-then-else e ciclos, instruções de controlo de fluxo, comparação, salto incondicional e saltos incondicionais.

Reportório x86 - Endereçamento

Modos de endereçamento à memória, endereçamento de base e indexado. Apontadores.

Reportório x86 - Pilha

A pilha, topo da pilha, operações sobre a pilha, aplicações da pilha, endereçamento da pilha, argc e argv

Reportório x86 - Funções

Chamada e execução de funções, passagem de parâmetros, resultado de uma função, variáveis locais.

Reportório x86 - Programas

Geração e carregamento de programas

Processador - Arquitetura geral

Arquitetura básica. Blocos principais: circuito de dados e circuito de controlo. Ciclo fundamental de execução.

Processador - Condutas

Condutas. Arquitetura escalar e superescalar.

Processador - Paralelismo

Paralelismo. Taxonomia de Flynn.

Memória - Hierarquia e memória virtual

Hierarquia de memória. Introdução à memória virtual. Endereços virtuais e endereços físicos. Unidade de gestão de memória. Cache TLB.

Memória - Localidade e cache de mapeamento direto

Princípio da localidade. Memória cache. Cache de mapeamento direto. Decomposição de um endereço físico: tag, index e offset.

Memória - Cache associativa

Cache associativa. Políticas de escrita e de substituição. Níveis da cache. A cache nos CPUs atuais.

Memória - Integridade de dados

Integridade de dados: paridade e códigos de Hamming.

Reportório x86 - Otimização

Otimização de programas: ocupação de espaço em memória e velocidade de execução.

Entradas/saídas - Dispositivos e comunicação

Dispositivos, barramentos e pontes. Comunicação, notificação de eventos e estado, e transferência de dados.
Interrupões e exceções. Interrupções no x86.

Entradas/saídas - Armazenamento

Dispositivos de armazenamento: HDD e SSD.

Sistema Computacional - Servidores

Servidores.

Sistema Computacional - Introdução à virtualização

Máquinas virtuais; Hypervisor; exemplo: VirtualBox. Containers.

Aulas

Não houve aula

Não havia matéria lecionada

Guião Linux

Introdução ao LINUX nos labs DI. Interface gráfica (GUI) e de linha de comando (CLI). Diretórios e ficheiros. Comandos essenciais em Linux.

Exercícios SN - Naturais

Representação, conversão e aritmética de naturais em diferentes bases de numeração.

Guião SN - Naturais

Bases de numeração numa linguagem de programação e em Linux. Conversão e aritmética com naturais. Ocorrência de transporte.

Exercícios SN - Inteiros e lógica

Representação e aritmética de números inteiros. Operações lógicas.

Guião SN - Inteiros

Representação de inteiros e operações aritméticas.

Exercícios SN - Vírgula-flutuante

Representação, conversão e aritmética de números em vírgula-flutuante.

Guião SN - Vírgula-flutuante

Representação em vírgula-flutuante. Imprecisão na vírgula-flutuante: representação e aritmética.

Revisões para a 1ª prova

Revisões e exercícios.

1ª prova

1ª prova da avaliação periódica

Exercícios x86 - Programas em assembly

Introdução ao Assembly com endereçamento imediato, registo e direto. Operações aritméticas básicas: add, sub, inc, dec, mul e div.

Guião x86 - Execução e depuração com SASM

Execução de programas sobre endereçamento e operações aritméticas e lógicas com o SASM. Técnicas de depuração com o SASM.

Exercícios x86 - Operações e controlo de fluxo

Operações sobre a carry flag: stc, clc, cmc. Operações aritméticas: adc, sbb, imul, idiv, neg. Operações lógicas: not, or, and, xor, test, sh(r/l), sa(r/l), ro(r/l), rc(r/l).  Operações aritméticas básicas sobre vírgula-flutuante.

Guião x86 - Operações

Execução de programas com operações aritméticas de inteiros e vírgula-flutuante e lógicas. Técnicas de depuração com o SASM.

Exercícios x86 - Ciclos e endereçamento

Ciclos. Modos de endereçamento de base e indexado. Utilização de endereçamento em ciclos.

Guião x86 - Ciclos e endereçamento

Execução de programas sobre endereçamento dinâmico de uma imagem. Técnicas de depuração com o SASM.

Exercícios x86 - Pilha e endereçamento

Pilha, acesso com endereçamento, argc, argv e envp.

Guião x86 - Pilha e endereçamento

Execução de programas sobre endereçamento dinâmico na pilha do programa. Técnicas de depuração com o SASM.

Exercícios

Revisões e preparação para a 2ª prova

2ª prova

2ª prova de avaliação periódica

Exercícios x86 - Funções

Funções, convenção de chamada System V e endereçamento de parâmetros e variáveis locais. Demonstração Jasmin com consola ASCII.

Guião x86 - Funções e GDB

Execução de programas sobre endereçamento dinâmico, pilha e funções. Técnicas de depuração com o GDB.

Exercícios CPU e Memória

Exercícios sobre condutas e memória virtual.

Guião x86 - Otimização

Alinhamento de dados em memória e processamento vetorial. Técnicas de depuração com o GDB.

Exercícios CPU e Memória (2)

Exercícios sobre cache, paridade e codificação de Hamming.

Guião Identificação de componentes de um PC

Identificar características de: CPU, RAM, Mboard, Chipset, HDD, DVD, GPU, APU, NIC, KVM, Power.