Conhecimentos de Base Recomendados
Recomenda-se a conclusão prévia da seguintes unidades curriculares:
– Fundamentos de Programação;
– Estruturas de Dados.
Métodos de Ensino
Nesta unidade curricular são utilizadas as seguintes metodologias de ensino:
1 – Método expositivo: método explicativo onde fundamentos teóricos e conceitos são apresentados pelo professor e discutidos com a turma, seguidos de exemplos demonstrativos;
2 – Método experimental: método activo onde o aluno desenvolve o conhecimento através da resolução problemas, e o desenvolvimento de projectos laboratoriais individuais ou em dinâmica de grupo.
Resultados de Aprendizagem
No final da unidade curricular o aluno deverá ficar habilitado a:
1. Classificar os diferentes tipos de Sistemas Operativos (SO). Identificar a estrutura e serviços de um SO. Definir as chamadas ao sistema (system calls). Identificar os tipos de Máquinas Virtuais.
2. Definir o conceito de processo. Reconhecer os componentes envolvidos no escalonamento. Sumariar a criação e término de processos, e projetar software que desempenhe essas ações. Discutir e criar programas que implementem a comunicação entre processos.
3. Explicar o conceito de threads e criar programas que demonstrem a sua utilização. Classificar os modelos de multithreading e as bibliotecas thread.
4. Definir o escalonamento. Explicar o conceito de ciclo CPU-IO. Identificar e comparar os algoritmos de escalonamento.
5. Analisar o mecanismo de sincronização. Planear e construir programas que recorram à utilização de semáforos. Explicar os deadlocks e sintetizar os métodos existentes para os evitar.
6. Identificar os diferentes tipos de memória. Analisar as técnicas utilizadas na sua gestão.
7. Ilustrar e analisar a interface e implementação de sistemas de ficheiros. Explicar a estrutura dos sistemas RAID.
8. Projetar, operar e modificar sistemas computacionais baseados em distribuições Linux e Windows.
Programa
1. Evolução dos Sistemas Operativos (SO). Estrutura e serviços de um SO. Interface com um SO. Chamadas ao sistema. Máquinas Virtuais.
2. Processos. Escalonamento: filas de espera, schedulers e context switch. Criação e término de processos. Comunicação entre processos: sistemas de memória partilhada e sistemas com passagem de mensagem. Comunicação em sistemas Cliente-Servidor: sockets, RPC e RMI.
3. Threads. Modelos de Multithreading. Bibliotecas Thread.
4. Escalonamento. Conceito de ciclo CPU-IO e escalonador de CPU. Algoritmos de escalonamento.
5. Sincronização. Semáforos. Problemas de Sincronização Clássicos. Monitores. Deadlocks.
6. Memória. Gestão de Memória. Paging. Segmentação. Memória Principal e Virtual. Swapping.
7. Armazenamento. Gestão do Armazenamento. Métodos de Acesso e Alocação de ficheiros. Gestão do espaço livre. RAID.
8. Distribuições Linux. Sistemas Windows. Processo de Arranque. Instalação de software. Ambientes gráficos. Gestão de Ficheiros, Processos e Utilizadores. Scripting e automação de tarefas. Troubleshooting.
Docente(s) responsável(eis)
Métodos de Avaliação
- - Teste Teórico 1 - 25.0%
- - Teste Teórico 2 - 25.0%
- - Relatório - 50.0%
- - relatório - 50.0%
- - exame - 50.0%
Estágio(s)
NAO
Bibliografia
Bresnahan, C. (2020). LPIC-1: Linux Professional Institute certification study guide (5th ed.). Sybex.
Marques, J. (2012). Sistemas operativos (2nd ed.). FCA.
Robbins, K., & Robbins, S. (2015). Unix systems programming: Communication, concurrency and threads (2nd ed.). Prentice Hall.
Silberschatz, A. (2018). Operating system concepts (10th ed.). Wiley.
Stallings, W. (2017). Operating systems: Internals and design principles (9th ed.). Pearson.
Tanenbaum, A. (2014). Modern operating systems (4th ed.). Pearson Education.