Acessibilidade

Programação em Sistemas Computacionais - LEIC

Curso Engenharia Informática e de Computadores
Unidade Curricular

Programação em Sistemas Computacionais

Obrigatória  X
Opcional  
Área Científica Engenharia Informática e de Computadores
Ano: 2º Semestre:  ECTS: 6 Total de Horas: 160
Horas de Contacto T: TP:67,5 PL: S: OT:
Docente

Jorge Manuel Rodrigues Martins Pião

T - Teórica; TP - Teórico-prática; PL - Prática Laboratorial; S - Seminário; OT - Orientação Tutorial.

  • Objetivos da aprendizagem

    Os estudantes que terminam com sucesso esta unidade curricular serão capazes de:

    (1) Compreender o modelo de execução de programas escritos em linguagens de alto nível nos sistemas computacionais reais.

    (2) Conceber e implementar programas de complexidade moderada em linguagem C.

    (3) Escrever módulos de software em assembly para integrar em programas desenvolvidos em linguagem C.

    (4) Compreender a arquitectura básica das caches de acesso à memória RAM.

    (5) Traduzir as construções de linguagens orientadas por objectos, nomeadamente herança e despacho dinâmico, em código equivalente na linguagem C.

    (6) Compreender as diferenças entre a ligação estática e dinâmica de módulos.

    (7) Produzir, depurar e testar software modular para ambientes nativos.

  • Programa

    I. Linguagem C: arrays, estruturas, ponteiros e sua aritmética.

    II. Escrita de programas em assembly IA-32. Convenção de chamada a funções: convenções de chamada da linguagem C na arquitectura IA-32. Programas envolvendo código em C e assembly. Percurso e manipulação de stack frames.

    III. Hierarquia de memória. Noção de cache. Organização de cache de acesso a RAM e impacto no desempenho dos programas.

    IV. Construção modular de programas: pré-processador; compilação separada; ficheiros header e objecto; ligação estática; bibliotecas estáticas.

    V. Implementação de sistema de alocação dinâmica de memória sem reciclagem automática.

    VI. Construções das linguagens orientadas por objectos e sua tradução em código nativo: interfaces, herança e polimorfismo de inclusão;

    VII. Ligação dinâmica de código. Construção e utilização de bibliotecas de ligação dinâmica. Ligação dinâmica em tempo de carregamento e em tempo de execução.

    VIII. Construção de aplicações extensíveis via plugins.

  • Demonstração de coerência entre conteúdos programáticos e resultados da aprendizagem

    Nesta unidade curricular, os estudantes compreendem o modelo de execução de programas escritos em linguagens de alto nível no sistema computacional real (pontos II, III, V, VI e VII dos conteúdos programáticos) e adquirem prática de desenvolvimento de aplicações modulares em linguagem C (pontos I, IV e VIII). Tais capacidade são fundamentais para a progressão nas áreas de sistemas operativos e de sistemas embebidos.

    O estudo de sistemas de alocação dinâmica de memória sem reciclagem automática (ponto V) e a concretização em código nativo das construções próprias das linguagens de programação orientada por objectos (ponto VI), são importantes no estudo posterior dos ambientes virtuais de execução modernos.

    Finalmente a introdução às caches de acesso a RAM (ponto III) suporta estudos posteriores na área da programação concorrente.

  • Metodologia de ensino e avaliação

    Ensino teórico-prático, estando previstas 30 aulas durante o semestre a que correspondem 67,5 horas de contacto (15 aulas de 3 horas e 15 de 1,5 horas). O tempo total de trabalho do estudante é de 160 horas. As aulas destinam-se à apresentação dos temas e de exemplos práticos de aplicação. Os tópicos principais são ainda explorados através da realização de trabalhos práticos em grupo. Os resultados da aprendizagem são avaliados individualmente através do teste escrito e das fichas realizadas durante o semestre, e na discussão final dos trabalhos de grupo.

  • Demonstração de coerência entre metodologias de ensino e resultados de aprendizagem

    Os conteúdos programáticos são expostos nas aulas teórico-práticas, complementando uma apresentação interactiva das matérias com a realização, pelos estudantes, de pequenos exercícios de consolidação das mesmas.

    As competências indicadas nos pontos 2, 3, 5, 6 e 7 dos objectivos de aprendizagem são desenvolvidas na realização dos trabalhos de grupo.

    São efectuadas aulas práticas de acompanhamento dos trabalhos de grupo, que complementam a avaliação, na discussão final, da globalidade dos objectivos de aprendizagem.

  • Bibliografia principal

    R. Bryant, D. O’Hallaron, Computer Systems: A Programmers Perspective, 2nd ed., Prentice Hall, 2010.

    B. Kernighan, D. Ritchie, The C Programming Language, 2nd ed., Prentice Hall, 1988.