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 docente e discutidos com a turma. Os conceitos e informações serão apresentados aos alunos através, por exemplo, de apresentações em slides ou discussões orais. Será utilizado nas aulas para a estruturação e esquematização da informação.

2. Método demonstrativo: baseia-se na exemplificação pelo docente de uma operação técnica ou prática que se deseja aprendida. Centra-se na forma como se executa uma dada operação, destacando as técnicas, as ferramentas e os equipamentos mais adequados. Será por exemplo utilizado em aulas práticas e laboratoriais.

3. Método interrogativo: processo que se fundamenta em interações verbais, sob a condução do docente, adotando o formato de questões e respostas. Permite obter maior dinâmica na aula e consolidar a aprendizagem. Será utilizado por exemplo para recordar elementos de aulas anteriores, e em revisões do conteúdo lecionado.

4. Métodos ativos: serão utilizadas técnicas pedagógicas em que o aluno é o centro do processo de aprendizagem, sendo um participante ativo e envolvido na sua própria formação. O docente assume o papel de facilitador, estimulando o pensamento crítico, a colaboração, a criatividade e a autonomia dos alunos. Serão aplicados nas aulas para alcançar um ambiente de aprendizagem dinâmico e mais duradouro.

Resultados de Aprendizagem

No final da unidade curricular o estudante ficará habilitado a:

1. Classificar os diferentes tipos de Sistemas Operativos (SO). Identificar a estrutura e serviços de um SO. Discutir a utilização de máquinas virtuais, docker e kubernetes em cloud computing.

2. Definir o conceito de processo. Identificar os constituintes de um processo. Reconhecer os componentes envolvidos no escalonamento. Sumariar a criação e término de processos. Construir software que desempenhe as ações anteriores. Criar programas que implementem a comunicação entre processos.

3. Explicar o conceito de threads. Criar programas que demonstrem a utilização de threads. Classificar os modelos de multithreading e as bibliotecas thread.

4. Sumariar o escalonamento. Explicar o conceito de ciclo CPU-IO. Discutir os algoritmos de escalonamento. Comparar os algoritmos anteriores.

5. Discutir o mecanismo de sincronização. Construir programas que implementem técnicas de sincronização. Explicar os deadlocks. Sintetizar os métodos existentes para evitar deadlocks.

6. Identificar os diferentes tipos de memória. Analisar as técnicas utilizadas na sua gestão.

7. Sintetizar a interface e implementação de sistemas de ficheiros. Explicar a estrutura dos sistemas RAID.

8. Analisar o software de código aberto. Descrever os tipos de licenciamento de software. Identificar as organizações, sistemas operativos e software no âmbito do software de código aberto. Instalar e operar uma distribuição Linux.

9. Discutir a configuração de shells. Explicar a organização de diretorias e as formas de manipulação de ficheiros. Criar e modificar diretorias e ficheiros.

10. Demonstrar a obtenção informação sobre processos e hardware. Explicar o processo de criação e término de contas de utilizador e de grupos. Criar e modificar utilizadores e grupos. Modificar a propriedade e permissões de ficheiros e diretorias.

Programa

1. Introdução. Evolução dos Sistemas Operativos (SO). Função, estrutura e serviços de um SO. Interface com um SO. Chamadas ao sistema. Cloud computing: máquinas virtuais, docker e kubernetes.

2. Processos. Escalonamento: filas de espera, schedulers e context switch. Criação e término de processos. Comunicação entre processos: sinais, pipes, memória partilhada e filas de mensagens. Comunicação em sistemas cliente-servidor: sockets.

3. Threads. Modelos de multithreading. Bibliotecas thread. Implementação em software.

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. Implementação em software de soluções de sincronização.

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. Sistemas RAID.

8. Software de código aberto. Tipos de licenciamento. UNIX e o Open Group. Distribuições BSD. FSF e o projeto GNU. Distribuições Linux. Arranque: sistema V, systemd.

9. Shells. Fontes de ajuda. Variáveis de shell. Ficheiros de configuração. Aliases. Quoting. Estrutura de diretorias. Gestão de ficheiros e diretórios. Globbing. Leitura e edição de ficheiros de texto. Pipes. Redirecionamento. Expressões regulares. Scripts e automação de tarefas.

10. Gestão de processos e hardware. Segurança do sistema e do utilizador. Contas de utilizador. Gestão de grupos e utilizadores. Propriedade e permissões.

Docente(s) responsável(eis)

Métodos de Avaliação

Avaliação final
  • - exame - 50.0%
  • - relatório - 50.0%
Avaliação Periódica
  • - Teste Teórico 2 - 25.0%
  • - Teste Teórico 1 - 25.0%
  • - Relatório - 50.0%

Estágio(s)

NAO

Bibliografia

Bresnahan, C. (2020). LPIC-1: Linux Professional Institute certification study guide (5th ed.). Sybex.

Marques, J. A., Ferreira, P., Ribeiro, C., Veiga, L., & Rodrigues, R. (2012). Sistemas operativos (2nd ed.). FCA.

Matthew, N., & Stones, R. (2007). Beginning Linux Programming (4th ed.). Wrox.

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.