Aulas Teóricas

Aula 1: 12.02.2018

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

Aula 2: 19.02.2018

Conceitos Básicos
O que é um sistema de operação e para que serve. Definições de sistema de operação. Principais componentes e serviços de um sistema de operação. Multiprogramming e multitasking (time sharing). Interrupts por hardware e por software.

Aula 3: 20.02.2018

Conceitos Básicos
Dispositivos de I/O, controladores, drivers e direct memory access (DMA). Proteção do CPU. Operação em dual-mode: kernel mode, user mode e bit de modo. Chamadas ao sistema (system calls).

Processos
Noção de processo. Distinção entre programa e processo. Process Control Block (PCB). Estados de um processo.

Aula 4: 26.02.2018

Processos
Mudança de contexto de um processo. Criação de processos: o que envolve, potenciais custos e possíveis alternativas de criação. Terminação de processos: processos zombie e processos orfãos. Processos em UNIX/Linux: as chamadas ao sistema fork(), exec(), exit() e wait().

Aula 5: 27.02.2018

Processos
Princípios gerais de comunicação entre processos por memória partilhada e por troca de mensagens. Conceito de pipe. Pipes em UNIX/Linux. Resolução de exercícios.

Escalonamento de Processos
Escalonamento preemptivo versus não-preemptivo.

Aula 6: 05.03.2018

Escalonamento de Processos
Critérios de escalonamento. Algoritmos de escalonamento: First-Come First-Served (FCFS), Round Robin (RR), Shortest-Job-First (SJF), Shortest-Remaining-Time-First (SRTF) e Priority Scheduling.

Aula 7: 06.03.2018

Escalonamento de Processos
Algoritmos de escalonamento: Multilevel Queue (MLQ), Multilevel Feedback Queue (MLFQ) e Completely Fair Scheduler (CFS). Resolução de exercícios.

Aula 8: 12.03.2018

Sincronização entre Processos
Secções críticas e race conditions. Operações atómicas. Conceito de lock. Soluções para o "Too Much Milk Problem". Problema da secção crítica: conceitos e requisitos da solução. Algoritmo de Peterson.

Aula 9: 13.03.2018

Sincronização entre Processos
Soluções para exclusão mútua: inibição de interrupções, instruções atómicas test_and_set() e compare_and_swap(). Mutex locks e spinlocks. Implementação de locks minimizando o tempo de espera ativa em máquinas uniprocessador e em máquinas multiprocessador.

Aula 10: 19.03.2018

Sincronização entre Processos
Semáforos. Implementação de semáforos minimizando o tempo de espera ativa. Starvation (inanição) versus deadlock (impasse). Problemas clásicos de sincronização: problema do buffer limitado, problema dos escritores-leitores.

Aula 11: 20.03.2018

Sincronização entre Processos
Problemas clásicos de sincronização: problema do jantar dos filósofos. Requisitos para a ocorrência de deadlocks. Grafo de alocação de recursos. Técnicas para prevenir, evitar, detetar e recuperar de deadlocks. Resolução de exercícios.

Aula 12: 03.04.2018

Threads
Noção de thread. Distinção entre processo e thread. Processos com múltiplas threads. Principais benefícios e implicações da utilização de processos multithreaded. Thread Control Block (TCB). Estados de uma thread. Mudança de contexto com threads. Bibliotecas user-level versus kernel-level. Biblioteca Pthreads: criação, terminação e junção de threads. Semântica das chamadas ao sistema exec() e fork() com threads. Resolução de exercícios.

Aula 13: 09.04.2018

Sistema de Ficheiros
Conceito de sistema de ficheiros. Ficheiros: atributos, tipos de ficheiros comuns, partilha de ficheiros e permissões de acesso. Organização em partições e em volumes. Estrutura e hierarquia de diretórios. Gestão de ficheiros abertos: system-wide open-file table, per-process open-file table, file control block, file descriptors. Montar um sistema de ficheiros. Sistema de ficheiros virtual.

Aula 14: 10.04.2018

Sistema de Ficheiros
Implementação de sistemas de ficheiros. Acesso sequencial versus acesso aleatório a ficheiros. Alocação de espaço em disco: alocação contígua, alocação em listas ligadas, alocação em listas ligadas com File-Allocation Table (FAT), alocação indexada, alocação indexada de múltiplos níveis, alocação indexada com inodes. Resolução de exercícios.

Aula 15: 16.04.2018

Dispositivos de Armazenamento
Discos HDD e SSD. Tempos de latência em operações de I/O. Algoritmos de acesso ao disco: First-Come First-Served (FCFS), Shortest Seek Time First (SSTF), algoritmo do elevador (SCAN) e versões do algoritmo do elevador (C-SCAN, LOOK e C-LOOK). Resolução de exercícios.

Aula 16: 17.04.2018

Gestão de Memória
Espaço de memória e mecanismos de proteção de memória. Espaço de endereçamento lógico e físico. Memory Management Unit (MMU). Alocação dinâmica e registo de recolocação. Swapping. Alocação contígua de memória: partições de tamanho fixo e de tamanho variável. Algoritmos de alocação first-fit, best-fit e worst-fit.

Aula 17: 23.04.2018

Gestão de Memória
Fragmentação interna versus fragmentação externa. Segmentação: conceito, arquitetura, vantagens e desvantagens. Tabela de segmentos. Segmentos partilhados. Paginação: conceito, arquitetura, vantagens e desvantagens. Tabela de páginas.

Aula 18: 24.04.2018

Gestão de Memória
Páginas partilhadas. Tamanho das páginas. Implementação da tabela de páginas. Paginação com múltiplos níveis.

Aula 19: 30.04.2018

Gestão de Memória
Translation Look-aside Buffer (TLB). Segmentação com paginação. Resolução de exercícios.

Aula 20: 14.05.2018

Gestão de Memória
Revisões. Resolução de exercícios.

Aula 21: 15.05.2018

Memória Virtual
Espaço de endereçamento virtual. Paginação a pedido. Page fault. Algoritmos de substituição de páginas: First-In First-Out (FIFO), página ótima (OPT), Least Recently Used (LRU).

Aula 22: 21.05.2018

Memória Virtual
Algoritmos de substituição de páginas: segunda tentativa, relógio, Not Recently Used (NRU), Least Frequently Used (LFU), Aging (envelhecimento).

Aula 23: 22.05.2018

Memória Virtual
Alocação de frames. Trashing. Modelo working set. Modelo page-fault frequency. Resolução de exercícios.