Sistemas Operativos

Conhecimentos de Base Recomendados

Algoritmos e Programação I, Algoritmos e Programação II, Arquitetura de Computadores e Análise Matemática I.
Embora não exista precedências definidas, é de todo desejável que o aluno tenha conhecimentos base em várias áreas, nomeadamente em algoritmos e programação, lógica matemática, interpretação de problemas, modelação e representação algorítmica (pelo menos procedimental/estruturada) de soluções de problemas.

Métodos de Ensino

As aulas são lecionadas em regime teórico-prático, com recurso à utilização de computadores e ferramentas digitais. Será utilizada um processo dinâmico de ensino e aprendizagem, fundamentalmente interativo, com suporte a ferramentas digitais e baseado nas metodologias “Scrum” e “Flipped Classroom” (tipo de “Blended learning”), centrados no aluno, disponibilização antecipada dos materiais de ensino, desenvolvimento de atividades e aulas quase integralmente destinadas à aplicação dos conceitos.

Resultados de Aprendizagem

Objetivos:
Estudo dos sistemas operativos, incluindo sua organização, serviços fornecidos e sua programação. Mais concretamente, gestão de processos, comunicação entre processos, situações de impasse, escalonamento de processos, gestão de memória, sistemas de ficheiros, gestão de entradas e saídas e proteção e segurança. Introdução à programação Shell script e programação multitarefa cooperativa.

Competências a desenvolver:
Aquisição de conhecimentos fundamentais utilizados na conceção dos sistemas operativos modernos.
Identificação das potenciais situações de risco inerentes à programação concorrente e utilização dos mecanismos de controlo apropriados.
Aquisição de conhecimentos práticos sobre sistemas operativos baseados em Linux e capacidade de utilização dos principais serviços disponibilizados pelo sistema operativo para o desenvolvimento de aplicações, abrangendo a programação multitarefa cooperativa.
Aquisição de conhecimentos de programação em Shell Script.

Programa

Componente Teórica
1. Introdução aos Sistemas Operativos
2. Estrutura dos Sistemas Operativos
3. Gestão de processos: Processos, Tarefas (threads) e Concorrência, Escalonamento da CPU
4. Noções de programação concorrente: comunicação e sincronização de processos e threads (tarefas)
5. Gestão de situações de impasse (deadlocks)
6. Gestão de memória: memória principal e memória virtual
7. Gestão de armazenamento de dados e periféricos: estrutura de armazenamentos massivos, sistemas de entrada/saída e sistema de ficheiros
8. Segurança e Proteção
9. Casos de Estudo: Sistema Linux, Windows 10 e os Sistemas Operativos orientados para a mobilidade

Componente Prática
1. O sistema operativo Linux
2. A Shell em Linux:
2.1 Interpretador de comandos;
2.2 Ficheiros, diretorias e permissões;
2.3 Redirecionamento, pipes e filtros;
2.4 Metacaracteres e expressões regulares;
2.5 Controlo de processos;
2.6 Programação utilizando Shell Scripts.
3. Gestão de projetos em Linux:
3.1 A ferramenta make;
3.2 O preprocessador de C (cpp);
3.3 Compiladores de C;
3.4 Ferramentas de ligação (linker) e afins (gestão de bibliotecas de código).
4. Programação multitarefa cooperativa em Linux:
4.1 Criação de processos e threads;
4.2 Comunicação entre processos;
4.3 Sincronização de processos (exclusão mútua, secções críticas).

Docente(s) responsável(eis)

Estágio(s)

NAO

Bibliografia

1. A. Silberschatz, G. Gagne, and P. B. Galvin (April 2018) “Operating System Concepts”, 10th Ed., John Wiley & Sons, Inc., ISBN: 978-1119320913
2. R. Love (2013) “Linux System Programming”, 2nd Ed., O’Reilly & Media Inc. ISBN: 978-1449339531
3. A. H. Lashkari, and M. Moradhaseli (2011) “Mobile Operating Systems and Programming: Mobile Communications”, VDM Verlag Dr. Müller. ISBN: 978-3639369175
4. S. Tanenbaum, and H. Boss (2014) “Modern Operating Systems”, 4th ed., Pearson ISBN: ‎ 978-1292061429
5. W. Stallings (2018) “Operating Systems: internals and design principles”, 9th Ed., Pearson ISBN-13: 978-0134670959
6. K. A. Robbins, S. Robbins (2015) “UNIX SYSTEMS Programming: Communication, Concurrency, and Threads”, 2nd Ed., Pearson ISBN-13: 978-0134424071
7. A. Rubini, J. Corbet (2005) “Linux Device Drivers”, 3rd Ed., O’Reilly & Associates (https://lwn.net/Kernel/LDD3/)
8. Dora Melo (2022) “Apontamentos Teóricos e Práticos de Sistemas Operativos”, Polytechnic of Coimbra, Coimbra Business School | ISCAC