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.