Sistemas Operativos

Conhecimentos de Base Recomendados

O conhecimento das matérias abaixo indicadas é absolutamente essencial e necessário:

  • Programação em C (Introdução À Programação, Programação, 1º ano)
  • Arquitecturas e tecnologias de computadores (Tecnologias e Arquitecturas de Computadores, 1º ano)

Métodos de Ensino

As aulas são teóricas e práticas. Nas aulas teóricas, é utiIizada uma metodologia expositiva para a apresentação da dos fundamentos teóricos da matéria com exempIos de aplicação. Nas aulas práticas os alunos aplicam os conhecimentos das aulas teóricas, desenvolvendo aplicações, com a supervisão dos docentes. Fora das aulas, os alunos desenvolvem, em grupos de dois, um projecto de média dimensão cujo progresso é verificado numa fase intermédia e avaliado numa fase final.

Resultados de Aprendizagem

Competências a adquirir e desenvolver pelos alunos nesta unidade curricular:

  • Compreender, explicar e justificar o funcionamento interno dos sistemas operativos modernos
  • Compreender, explicar e planear a operação e gestão de sistemas Unix/Linux
  • Compreender, planear, desenvolver, explicar, e justificar o desenvolvimento de aplicações em C para a plataforma Unix
  • Planear e elaborar documentação técnica sobre projetos de software para sistemas.

Programa

O programa da unidade curricular está organizado em 3 temas:

  • Introdução e funcionamento do sistema e ambiente Unix e sua operação.
  • Desenvolvimento de aplicações Unix em C.
  • Fundamentos teóricos de sistemas operativos.

Introdução e funcionamento do sistema e ambiente Unix e sua operação:

  • Conceitos básicos e mecanismos subjacentes ao funcionamento do Linux do ponto de vista de configuração.
    • Arranque e início de funcionamento do sistema. Partições e sistemas de ficheiros. Sistema de ficheiros típico Unix. Proteção e permissões de utilizadores e de ficheiros em Unix. Mecanismos sudo e bit setuid. Configuração de aspetos básicos de Linux.
  • Comandos Unix e programação em Bash – Introdução ao sistema e tópicos de utilização do sistema Unix/Linux em linha de comando do ponto de vista do utilizador e do administrador.
    • Introdução ao sistema Unix do ponto de vista do utilizador. i) Arquitetura e componentes principais, ii) Arranque do sistema, iii) processo de login, iv) Sistema de ficheiros
    • Comandos Unix para i) manipulação de ficheiros e diretorias, ii) Gestão de processos, iii) Gestão de utilizadores iv) Extração e manipulação de informação em ficheiros de texto estruturados, v) Redireccionamento.
    • Introdução a programação em Shell Script (Bash)

Desenvolvimento de aplicações Unix em C. Aspetos introdutórios e de carácter fundamentais de desenvolvimento de aplicações para ambiente Unix.

  • Processo de compilação. Ficheiros fonte, objeto, biblioteca e executável. Funções biblioteca e funções sistema.
  • Programas e processos. Criação de processos. Mecanismos fork e exec. Gestão de processos. PID.
  • Sinais. Mecanismos simples de sincronização com sinais. Exemplos de aplicação
  • I/O em Unix. Ficheiros e tabela de ficheiros. Redirecionamento e pipes anónimos. Introdução a funções de manipulação do sistema de ficheiros
  • Named pipes em Unix. Aplicações em modelo cliente servidor. Funcionamento síncrono e assíncrono.
  • Programação multithreaded em Unix
  • Sincronização simples com semáforos binários e variáveis condicionais

Fundamentos teóricos de sistemas operativos. Conceitos de carácter teórico de sistemas operativos abrangendo 1) tópicos de carácter geral, 2) a arquitetura, 3) tópicos de implementação, 4) gestão de processos, 5) a gestão de memória.

  • 1 Conceitos gerais.
    • Objetivos dos sistemas operativos. Programas, processos e threads. Tipos de sistemas. Arquitetura de sistemas operativos. Núcleo de sistemas operativos.
  • 2 Tópicos de programação multi-tarefa e de sicronização
    • Programação multi-tarefa. Instrodução a sincronização: Trincos lógicos e mutexes. Variáveis condicionais.
  • 3 Tópicos de implementação de sistemas
    • Implementação de processos. Modos de execução. Espaço núcleo e espaço utilizador. Controlo de interrupções e respetiva aplicação.  Implementação de chamadas ao sistema. Implementação de trincos lógicos e mutexes. Tópicos de programação em modo núcleo.
  • 4 Gestão de processos
    • Tipos e algoritmos de escalonamento. Estado e ciclo de vida dos processos. Indicadores de desempenho de escalonamento.
  • 5 Gestão de memória
    • Conceitos fundamentais de gestão de memória. Endereçamento virtual. Tipos de endereçamento virtual. Algoritmos de gestão de memória virtual.

Docente(s) responsável(eis)

Estágio(s)

NAO

Bibliografia

Referências principais

Marques, J. A., Guedes, P. (1998). Fundamentos de Sistemas Operativos (4rd ed.), Editorial Presença – 1A-3-114

Silberschatz, A., Galvin, P. B., Gagne, G. (2009). Operating Systems Concepts (8th ed.), Wiley & Sons – 1A-3-137

Matthew, N., Stones R., (1999). Beginning Linux Programming (2nd ed.), Wrox press – 1A-3-155

 

Referências complementares

Stallings, W. (2017). Operating Systems: Internals and Design Principles (9th ed.), Pearson
 
Marques, J. A., Ferreira, P., Ribeiro, C., Veiga, L., Rodrigues, R. (2012). Sistemas Operativos (2nd ed.), FCA
  
Wirzenius L., (2021). The Linux System Administrators’ Guide, The Linux Documentation Project, online: https://tldp.org/