Programação em Sistemas Computacionais
Objectivos
Os estudantes que terminam com sucesso esta unidade curricular serão capazes de:
- Compreender o modelo de execução de programas escritos em linguagens de alto nível nos sistemas computacionais reais;
- Conceber e implementar programas de complexidade moderada em linguagem C;
- Escrever módulos de software em assembly para integrar em programas desenvolvidos em linguagem C;
- Compreender a arquitetura básica das caches de acesso à memória RAM;
- Desenvolver software usando o modelo de compilação separada;
- Compreender as diferenças entre a ligação estática e dinâmica de módulos;
- Produzir, depurar e testar software modular para ambientes nativos.
Programa
- Linguagem C: arrays, estruturas, ponteiros e sua aritmética.
- Escrita de programas em assembly. Convenção de chamada a funções: convenções de chamada da linguagem C. Programas envolvendo código em C e assembly. Percurso e manipulação de stack frames.
- Hierarquia de memória. Noção de cache. Organização de cache de acesso a RAM e impacto no desempenhodos programas.
- Construção modular de programas: pré-processador; compilação separada; ficheiros cabeçalho e objeto; ligação estática; bibliotecas estáticas.
- Implementação de sistema de alocação dinâmica de memória sem reciclagem automática.
- 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.
Resultados
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 aplicações, em linguagem C, utilizando bibliotecas open-source standard. Finalmente, a introdução às caches de acesso a RAM (ponto III) suporta estudos posteriores na área da programação concorrente.
Bibliografia
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