Sistemas Operativos

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)

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.