Computer Systems Programming-LEIC

Course: BSc in Computer Science and Computer Engineering
Curricular Unit (UC)

Computer Systems Programming

Mandatory  X
Scientific Area IC
Year: 2nd Semester: 1st ECTS: 6 Total Hours: 160
Contact Hours T: TP: 67.5 PL: S: OT:
Professor in charge

Ezequiel Augusto Cachão Conde

T - Theoretical; TP - Theory and practice; PL - Laboratory; S - Seminar; OT - Tutorial.

  • Intended learning outcomes

    Students who successfully complete this course unit will be able to:

    1. Understand the execution model of programs written in high-level languages in real computer systems;
    2. Design and implement programs of moderate complexity in C language;
    3. Write software modules in assembly to integrate into programs developed in C language;
    4. Understand the basic architecture of RAM caches;
    5. Develop software using the separate build model;
    6. Understand the differences between the static and dynamic connection of modules;


    7. Produce, debug and test modular software for native environments.

  • Syllabus


    I. Language C: arrays, structures, pointers and their arithmetic.

    II. Write programs in assembly x86-64. Function-calling convention: C-language conventions in the x86-64 architecture. Programs involving code in C and assembly. Path and manipulation of stack frames.

    III. Memory hierarchy. Cache notion. Organization of RAM access cache and impact on program performance.

     IV. Modular construction of programs: pre-processor; separate compilation; header and object files; static connection; static libraries.

    V. Implementation of dynamic memory allocation system without automatic recycling    VI.      Dynamic code binding. Building and using dynamic link libraries. Dynamic binding at load time and at run time.

    VI. Dynamic code binding. Building and using dynamic link libraries. Dynamic binding at load time and at run time.


  • Evidence of the syllabus coherence with the curricular unit’s intended learning outcomes

    In this curricular unit, students understand the execution model of programs written in high-level languages in the real computational system (points II, III, V and VI of the programmatic contents) and acquire the practice of developing modular applications in C language (points I and IV). Such capabilities are critical to progression in the areas of operating systems and embedded systems. In the practical component on points IV and VI, students develop, in C language, Web API consuming applications, using standard open-source libraries (e.g., curl and jansson). Finally, the introduction to RAM access caches (point III) supports further studies in the area of concurrent programming.

  • Teaching methodologies (including evaluation)


    Theoretical-practical teaching, with 30 classes planned during the semester corresponding to 67.5 contact hours (15 lessons of 3 hours and 15 of 1,5 hours). The total work time of the student is 162 hours. The classes are designed to present topics and practical examples of application. The main topics are further explored through practical group work.

    Learning outcomes are assessed individually through written test and final discussion of group work.

    The final grade of the UC is assigned individually, being the result of adding the grade of the written evaluation with the grade assigned in the discussion of the practical assignments (in the range -3 to +3 points).


  • Evidence of the teaching methodologies coherence with the curricular unit’s intended learning outcomes

    The syllabus contents are presented in the theoretical-practical classes, complementing an interactive presentation of the subjects with the accomplishment, by the students, of small exercises of consolidation of the same ones.

    The competences indicated in points 2, 3, 5, 6 and 7 of the learning objectives are developed in carrying out the group work.

    Theoretical-practical classes are given to support the development of group work, especially regarding the use of open-source libraries used in UC.

  • Main Bibliography:

    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