- Prof. Ricardo Gudwin (DCA/FEEC, sala 307A - ramal 1-3819, fone 3521-3819)
- Auxiliar Didático: infelizmente não teremos auxiliar didático neste semestre
- Horário das aulas: 414 415 (turma K) e 416 417 (turma L)
- Sala: LE-27
- Vetor: OF:S-2 T:000 P:000 L:002 O:000 D:000 HS:002 SL:002 C:002 AV:N EX:N FM:75%
Pré-Req.: EA877/ EA876/ EA879
Calendário
Notas e Frequência
Introdução e Objetivos da Disciplina
O principal objetivo desta disciplina é permitir ao aluno exercitar conceitos de compiladores e sistemas operacionais em experimentos de laboratório. Dentre os conceitos exercitados, estão os seguintes:
- Interpretador de Comandos e Programação em Linguagem Shell
- Instalação de Sistema Operacional em Plataforma Embarcada
- Processo de Boot e Bootloaders
- Princípios de Programação em Rede
- Sistemas de Arquivos
- Processos e Threads
- Compiladores (usando Lex e Yacc)
A disciplina está estruturada 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. Inicialmente, faremos a instalação do Sistema Operacional Linux em uma plataforma embarcada, o Quick Start Board i.MX53 da Freescale. Após a instalação do sistema operacional, as aulas serão compostas por 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 (Linux).
Dinâmica da Disciplina
- A disciplina está estruturada de acordo com a metodologia de aprendizagem ativa. Veja maiores informações sobre aprendizagem ativa aqui.
- O professor apresentará no início de cada atividade uma explanação sobre os objetivos da atividade. Em alguns casos, poderá ser fornecido um roteiro de apoio às atividades. Em outros, de acordo com os princípios de aprendizagem ativa, os alunos serão orientados a buscar informações na Internet, de forma a obter o apoio necessário para desenvolver a atividade.
- O material será disponibilizado exclusivamente na página Web da disciplina.
- O professor estará a disposição dos alunos durante os horários de aula, bem como fora destes, agendando-se previamente um horário por meio eletrônico. Veja maiores informações sobre como agendar um horário aqui.
- As atividades devem ser desenvolvidas individualmente e sofrerão avaliação individual. Em algumas situações, devido ao número limitado de kits de desenvolvimento, poderá ser necessário que 2 alunos compartilhem um mesmo kit de desenvolvimento, momentaneamente. Nesses casos, entretanto, cada aluno deve desenvolver suas atividades individualmente, sendo que os kits serão compartilhados pela rede, e cada aluno deverá desenvolver suas atividades em diretório próprio.
Critérios de Avaliação
- Os alunos serão avaliados 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.
- Ao longo de cada uma das aulas, o professor verificará o caderno de laboratório e o estágio da implementação e atribuirá uma nota ao mesmo. Caso o aluno 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 a demonstração dos 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 45%;
- nota da apresentação e relatório final do projeto com peso de 55%.
- Para ser aprovado o aluno precisa obter nota final maior ou igual a 5,0 e ter freqüência maior ou igual a 75%.
- Seguindo a nova diretiva do vetor de carga horária da disciplina (veja acima), não haverá exame nessa disciplina.
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.
- 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
- O roteiro de cada atividade está disponibilizado no quadro de calendário acima.
- Material de apoio extra:
- 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.
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:
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.
- Cada aluno terá 30 minutos para fazer sua entrevista. 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.
Agendamento de Entrevistas
Atenção:
- As entrevistas devem ser agendadas respeitando-se os horários disponíveis na agenda do professor. Um horário estará agendado somente depois que o professor confirmar a aceitação do horário proposto pelo aluno. Ao agendar um horário, tome cuidado para fazer com que o agendamento apareça adequadamente na agenda do professor como horário ocupado, para evitar que outro aluno marque o mesmo horário, sem perceber. Após o agendamento, verifique se o horário aparece como ocupado na agenda do professor imediatamente. Caso não apareça, entre imediatamente em contato, para verificar qual o erro no processo de agendamento.
- 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 final (contendo o servidor HTTP) compactado no formato zip através deste LINK.
- A data limite para a entrevista é 29/11.