Acessibilidade

Programação em Sistemas Computacionais - LEIC

Curso Licenciatura em Engenharia Informática e de Computadores
Unidade Curricular

Programação em Sistemas Computacionais

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

Ezequiel Augusto Cachão Conde

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 arquitetura básica das caches de acesso à memória RAM;
    5. Desenvolver software usando o modelo de compilação separada;
    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.
  • Conteúdos programáticos

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

    II. Escrita de programas em assembly x86-64. Convenção de chamada a funções: convenções de chamada da linguagem C na arquitetura x86-64. 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 cabeçalho e objeto; 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.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.

  • Demonstração da coerência dos conteúdos programáticos com os objetivos de aprendizagem da unidade curricular

    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 e VI dos conteúdos programáticos) e adquirem prática de desenvolvimento de aplicações modulares em linguagem C (pontos I e IV). Tais capacidades são fundamentais para a progressão nas áreas de sistemas operativos e de sistemas embebidos. Na componente prática relativa aos pontos IV e VI, os alunos desenvolvem, em linguagem C, aplicações consumidoras de Web API, utilizando bibliotecas open-source standard (e.g., curl e jansson). Finalmente, a introdução às caches de acesso a RAM (ponto III) suporta estudos posteriores na área da programação concorrente.

  • Metodologias de ensino (avaliação incluída)

    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 162 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 na discussão final dos trabalhos de grupo.

     

    A nota final da UC é atribuída individualmente, sendo o resultado da soma da nota da avaliação escrita com a nota atribuída na discussão dos trabalhos práticos (na gama -3 a +3 valores). 

     

  • Demonstração da coerência das metodologias de ensino com os objetivos de aprendizagem da unidade curricular

    Os conteúdos programáticos são expostos nas aulas teórico-práticas, complementando uma apresentação interativa 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 objetivos de aprendizagem são desenvolvidas na realização dos trabalhos de grupo.

    São dedicadas aulas teórico-práticas para apoio ao desenvolvimento dos trabalhos de grupo, nomeadamente no que se refere à utilização das bibliotecas open-source utilizadas na UC.

  • Bibliografia principal

    R. Bryant, D. O’Hallaron, Computer Systems: A Programmer’s Perspective, 3rd edition, Pearson, 2016. ISBN 9780134092669

    B. Kernighan, D. Ritchie, The C Programming Language, 2nd edition, Prentice Hall, 1988. ISBN 9780131103627