EA878:2010 2S

De DCA-Wiki

Contents

EA878 - Laboratório de Micro e Minicomputadores: Software

  • Prof. Eleri Cardozo (DCA/FEEC, sala 302)
  • Auxiliar Didático: Veruska Rodrigues Moreira (Sala I - Terceiro Piso)
  • Horário das aulas: 414 415 (turma K) e 416 417 (turma L)
  • Sala: LE-27

Avisos

  • 03/08: página disponibilizada

Notas e Frequência

Introdução e Objetivos da Disciplina

Esta disciplina será baseada no desenvolvimento de um projeto. A idéia é oferecer ao aluno a oportunidade de desenvolver durante o período letivo um software que tenha uma grande interação com o software de sistema (sistema operacional). Isto será possível graças à substituição de experimentos independentes por sub-projetos inter-dependentes, onde cada sub-projeto agrega os resultados dos sub-projetos anteriores. A disciplina é dividida em atividades que, em seqüência, resultarão no desenvolvimento de um elemento da arquitetura WWW (World-Wide Web): o servidor HTTP (Hyper-Text Transfer Protocol). Este servidor, apesar de simples quando comparado aos servidores HTTP comerciais, será capaz de:

  • interagir com navegadores comerciais,
  • manter um diretório de páginas HTML (Hyper-Text Markup Language),
  • responder às principais requisições HTTP.

As atividades cobrirão principalmente os seguintes temas ministrados na disciplina EA876:

1. compiladores: será construído um parser para o processamento do protocolo HTTP utilizando as ferramentas lex e yacc;

2. sistemas operacionais: várias chamadas de sistema serão empregadas para:

  • manter um diretório de páginas HTML (sistema de arquivos);
  • criar e controlar processos para atender concorrentemente a requisições HTTP submetida ao servidor (controle de processos);
  • utilizar um pool de buffers na transferência de arquivos para o cliente (gerenciamento de memória).

Adicionalmente, o aluno irá utilizar as chamadas de sistemas para acesso à rede (biblioteca de sockets), adquirindo assim os conceitos básicos de programação distribuída (network programming). O servidor será desenvolvido na linguagem C e será baseado no sistema operacional Unix.

Dinâmica da Disciplina

  • O professor apresentará no início de cada atividade uma explanação sobre a mesma enfocando os principais conceitos necessários ao seu desenvolvimento.
  • O material será disponibilizado exclusivamente na página Web da disciplina.
  • O professor e auxiliar didático estarão a disposição dos alunos durante os horários de aula, bem como fora destes de acordo com horário e local agendados via email.
    • E-mail: veruska'em'decom.fee.unicamp.br

Critérios de Avaliação

  • Os alunos deverão conduzir as atividades individualmente.
  • Cada aluno deverá adquirir um caderno de capa dura (não espiral) com no mínimo 200 folhas para ser utilizado como caderno de laboratório. Neste caderno o aluno registrará o desenvolvimento das atividades propostas como um diário de laboratório.
  • Periodicamente, o professor verificará o caderno de laboratório e o estágio da implementação e atribuirá uma nota ao mesmo. Caso o aluno escolhido esteja ausente e/ou não apresente o registro das atividades por duas aulas consecutivas, a nota atribuída para esta verificação será zero.
  • No final do semestre cada aluno fará uma apresentação completa de seu projeto para o professor, onde o aluno será questionado sobre o conteúdo da disciplina, detalhes da implementação do projeto, bem como demonstrar os programas em funcionamento sob diversas situações.
  • A nota final será composta de:
    • média das notas parciais (caderno de laboratório e implementações) com peso de 60%;
    • nota da apresentação e relatório final do projeto com peso de 40%.
  • Para ser aprovado o aluno precisa obter nota final maior ou igual a 5,0, ter freqüência maior ou igual a 75%.
    • Caso a nota final seja inferior a 5,0, o aluno poderá fazer um exame final prático englobando todo o conteúdo da disciplina. O peso do exame é de 50%.

Observações

  • É incentivada a discussão e a troca de informações entre os alunos, mas registros no caderno de laboratório e/ou programas em duplicata poderão acarretar a anulação da nota da atividade e a reprovação dos alunos envolvidos (recomenda-se que cada aluno proteja sua área de trabalho com o comando "chmod go-rwx ." executado em sua área home, para evitar cópias por parte de "colegas").
  • Os cadernos serão avaliados apenas durante as aulas e na presença do aluno.
  • Atividades incompletas serão reavaliadas em definitivo na aula seguinte.
  • O exame não substitui atividades não realizadas ou incompletas.
  • Listagens de programas e impressão de resultados de saída podem ser recortados e colados no caderno. As demais partes do registro da atividade deverão ser manuscritas.

Material didático de apoio

  • Novo webspace para testes: foi disponibilizado um webspace completo e variado para permitir que os alunos possam testar seus programas com maior rigor e flexibilidade. Os procedimentos para instalar este webspace são:
    • copiar para seu atual webspace o arquivo testes.zip;
    • extrair todo o seu conteúdo na raiz do seu webspace;
    • executar o script 'script.sh' para acertar as permissões de alguns arquivos e diretórios.
    • Seus testes precisam funcionar bem com este webspace, que contém textos, imagens e gráficos.

Programa de atividades

Atividade Semanas Início Fim Referências
1 1 04/08 11/08 Roteiro da Atividade 1 (PDF)
2 1 11/08 18/08 Roteiro da Atividade 2 (PDF)
3 1 18/08 25/08 Roteiro da Atividade 3 (PDF)
4 1 25/08 01/09 Roteiro da Atividade 4 (PDF)
5 1 01/09 08/09 Roteiro da Atividade 5 (PDF)
6 1 08/09 15/09 Roteiro da Atividade 6 (PDF)
7 3 15/09 06/10 Roteiro da Atividade 7 (PDF)
8 2 06/10 20/10 Roteiro da Atividade 8 (PDF)
9 2 20/10 03/11 Roteiro da Atividade 9 (PDF)
10 2 03/11 17/11 Roteiro da Atividade 10 (PDF)

Relatório e entrevista finais

Funcionalidades esperadas na versão final do servidor Web

Espera-se que o servidor tenha todos os recursos que foram especificados durante as atividades do semestre. Alguns destes recursos são:

  • obtenção das requisições do navegador (browser) via rede (sockets);
  • passagem direta dos dados do socket para os analisadores léxico e sintático (isto é, sem o uso de arquivos intermediários);
  • análise léxica e sintática das requisições por meio de código gerado pelas ferramentas lex (ou flex) e yacc (ou bison);
  • processamento de pelo menos 5 comandos do protocolo HTTP : GET, HEAD, OPTIONS, POST e TRACE;
  • apresentação para o navegador de páginas com mensagens de erro adequadas para os diversos tipos de erro que podem surgir após o recebimento de uma requisição;
  • confinamento do espaço de atuação do servidor à área definida como webspace;
  • uso eficiente de concorrência para permitir o atendimento de várias requisições simultaneamente: criação, sob demanda, de um número arbitrário de threads para atender várias requisições de uma vez;
  • uso de mecanismos de autenticação.

Estes recursos estão aqui relacionados apenas como ponto de partida. Há outros, mais detalhados, que foram especificados no decorrer das atividades e outros opcionais que não foram exigidos, mas que o aluno pode inserir no seu servidor como um serviço extra.

  • Funcionalidades extras poderão ser contempladas com pontuações extras que dependerão do nível de complexidade e da qualidade da implementação.

Sobre o relatório final

O relatório final terá duas partes.

PARTE I: documentação com os seguintes itens obrigatórios:

  • (A) descrição do sistema (objetivos, especificações, o que foi efetivamente implementado e o que faltou, formas de uso);
  • (B) estrutura do sistema (blocos que compõem o sistema e diagrama do fluxo de dados pelos mesmos);
    • OBS: o diagrama não precisa ser detalhado a ponto de descrever cada instrução do programa, mas deve ter detalhes suficientes que permitam a visualização dos principais blocos e funções que compõem o servidor e o relacionamento entre eles;
  • (C) estrutura do webspace usado para testes, mostrando árvore de diretórios, permissões e conteúdo dos arquivos;
  • (D) casos de teste (como o sistema foi testado, casos submetidos para teste e seus resultados); estes testes devem ser completos e mostrar cada funcionalidade do servidor e cada tipo de erro que ele pode tratar, não deixando nenhuma funcionalidade sem ser demonstrada;
  • (E) limitações da implementação feita;
  • (F) possíveis trabalhos futuros de melhoria do sistema;
  • (G) comentários, críticas e sugestões do aluno sobre o sistema desenvolvido e sobre a disciplina de um modo geral.

PARTE II: código fonte:

  • código fonte completo.

OBS: Entregas da documentação após o horário definido terão uma penalização de dois (2) pontos para cada 24 horas de atraso.

Sobre a entrevista

  • A entrevista ocorrerá no laboratório LE-27.
  • A entrevista consistirá de demonstração do servidor desenvolvido durante o semestre e de questões sobre os detalhes da implementação, em especial sobre aqueles relacionados a sistemas operacionais e construção de parsers/compiladores.
    • O horário deverá ser rigidamente respeitado, sob pena da entrevista não ser realizada.
    • Os horários poderão ser trocados entre alunos, desde que os envolvidos comuniquem ao professor com antecedência.
    • Recomenda-se aos alunos prepararem a demonstração com antecedência, pois não haverá segunda chance em caso de falha do programa ou de falta do aluno.
    • No início da demonstração será compilado e executado o código-fonte enviado previamente pelo aluno.

Escala de entrevistas

Atenção:

  • Os alunos poderão fazer trocas de horários entre si desde que comuniquem o professor com antecedência.
  • Independentemente do dia/horário da entrevista, o relatório final deverá ser entregue (em papel) 48 horas antes do horário marcado.
  • O aluno deverá submeter o código da Atividade 10 (contendo os servidores HTTP e HTTPS) compactados no formato zip ou tgz (Tar gzip) através deste LINK.
  • A data limite para a entrevista é 01/12.

Turma K

Dia  Hora  Aluno
===  ===== ================
17   14:00 59454 - Caio
26   14:00 59595 - Carlos Cabral
26   14:20 43624 - Flavio
29   16:00 64781 - Tiago Alves
30   10:00 82414 - Otávio Augusto
30   10:20 71621 - Luis Forquesato
30   10:40 59748 - Christian Koji
01   09:00 82743 - Rodrigo Franceschini
01   09:30 37371 - André Vasconcelos
01   10:40 70882 - Fernando Nakatani
01   11:00 63903 - Rafael Tanaka
01   14:00 80677 - Andre Reis
01   14:20 80517 - Alexandre Donna
01   14:40 69921 - Diego Fernandes
01   15:20 62241 - Leonardo Zeferino
01   15:40 60586 - Frabricio Carrara
02   10:00 64811 - Tiago Pavan
02   10:30 86015 - Rodolfo Labsch

Turma L

Dia  Hora  Aluno
===  ===== ================
24   16:00 60999 - Gabriel Prado
29   16:20 65117 - Willian Akamine
29   16:40 72071 - Pedro Bartelli
29   17:20 73651 - Régis Galvão 
30   11:00 72197 - Raphael Danella 
30   16:00 43821 - Guilherme
01   16:00 81742 - João Paulo
01   16:20 83016 - Victor Hiroki
01   16:40 81085 - Danilo Hirama
01   17:20 71855 - Matheus Souza
01   17:40 45934 - Rafael Bandeira
01   18:00 45927 - Rafael Obregon
02   09:30 63649 - Pedro Thomé
02   10:50 58815 - Ana Claudia
02   15:30 71839 - Mateus Lara
02   16:00 42255 - Bruno Barbosa
02   16:30 71739 - Marcos Raimundo
02   17:00 83977 - Paulo Belluci
02   18:00 73432 - Marcelo Casemiro
Ferramentas pessoais