Informações Gerais

Horário: Terça-feira, 18:10 – 21:30
Local: P1-204 (Sala 1)


Descrição

Se você já utilizou um computador, um smartphone ou um tablet você certamente já lidou com algum sistema operacional. Desses sistemas, você provavelmente conhece a porção mais externa, geralmente apresentada através de uma interface gráfica intuitiva. Entretanto, por baixo dos panos, quase de forma imperceptível (ao menos gostaríamos que fosse assim), os sistemas operacionais estão atuando para permitir que diversas aplicações executem ao mesmo tempo (ou quase) de forma isolada (sem interferirem uma com as outras) obtendo sua porção justa dos recursos necessários para sua execução (processador, memória, etc). Além disso, o sistema operacional também cria diversas abstrações que facilitam a nossa vida como usuários ou desenvolvedores de aplicações e estendem os recursos físicos providos pelo hardware. Nesse curso, nós vamos explorar os mecanismos e as políticas empregadas pelos sistemas operacionais para atingir tais objetivos.


Bibliografia Básica

  1. Remzi H. Arpaci-Dusseau e Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces (Disponível em https://pages.cs.wisc.edu/~remzi/OSTEP/)
  2. Russ Cox, Frans Kaashoek e Robert Morris, xv6: a simple, Unix-like teaching operating system (Disponível em xv6)
  3. Anderson, Thomas e Dahlin, Michael, Operating Systems Principles and Practice – 2ª edição, Volumes 1-4, Recursive Books
  4. TANENBAUM, Andrew S., Sistemas Operacionais Modernos, 4a edição, Editora Pearson Prentice Hall, 2016.

Cronograma

O cronograma abaixo é uma estimativa e pode variar no decorrer do curso.


Avaliação

Ao longo do semestre o aluno será avaliado através da aplicação de 4 provas:

  • P1: aplicada no meio do semestre letivo e cobre a metade do conteúdo do curso;
  • P2: aplicada no final do semestre letivo e cobre a segunda metade do conteúdo do curso;
  • P3: aplicada no final do semestre letivo apenas para os alunos que faltarem a AV1 ou AV2 (substituindo a nota da avaliação faltante).
  • PF: aplicada no final do semestre letivo para aqueles alunos que obtiveram média inferior a 7

Além das provas, também serão propostos três projetos (Proj1, Proj2 e Proj3) de programação que irão complementar a nota da P1. Esses projetos são opcionais e cada um deles vale um ponto (N_Proj = Proj1 + Proj2 + Proj3 <= 3). Os projetos são descritos a seguir.

A nota parcial (NP) do aluno será calculada da seguinte forma: NP = MAX(10, P1 + N_Proj) * 0,5 + P2 * 0,5.

  • Se NP < 3 => a nota final do aluno será sua nota parcial (NF = NP) e o aluno estará reprovado;
  • Se 3 <= NP < 7 => aluno fará prova final e sua nota final será calculada como NF = (NP + PF)/2. O aluno estará aprovado se NF >= 5;
  • Se NP >= 7 => NF = NP e o aluno estará aprovado.

Projetos

Nesta disciplina utilizaremos um fork dos projetos propostos pelo prof. Remzi H. Arpaci-Dusseau, disponíveis em OSTEP Projects. Para realizar os projetos, você precisará de uma distribuição Linux. Para tanto, eu recomendo utilizar uma máquina virtual com a distribuição Ubuntu. Eu preparei um breve passo a passo para que você possa instalar e configurar o seu ambiente (acessar o passo a passo).

O terceiro projeto que desenvolveremos é baseado no sistema operacional xv6. O xv6 foi desenvolvido pelo MIT (Massachusetts Institute of Technology) com propósitos educacionais, mas é um sistema operacional completo e funcional. Para maiores informações sobre o funcionamento do xv6 consulte a bibliografia básica número 2.

Todos os projetos devem ser compilados com as seguintes flags do gcc: -Wall -Werror. Além de compilar, o projeto deve ser executado utilizando o framework de testes desenvolvido pelo autor, cuja documentação está disponível em Framework de Testes. Para que o projeto tenha pontuação máxima, ele deve compilar sem erros e passar em todos os testes propostos. Cada teste no qual o projeto não passar acarretará em desconto proporcional ao número de testes propostos para o projeto.

Além do conhecimento em programação na linguagem C, os projetos também exigem alguma familiaridade com o shell do Linux. Sendo assim, eu preparei esse video tutorial com uma introdução sobre o shell para vocês.