Computer Systems Programming
Goals
Students who successfully complete this course unit will be able to:
- Understand the execution model of programs written in high-level languages in real computer systems;
- Design and implement programs of moderate complexity in C language;
- Write software modules in assembly to integrate into programs developed in C language;
- Understand the basic architecture of RAM caches;
- Develop software using the separate build model;
- Understand the differences between the static and dynamic connection of modules;
- Produce, debug and test modular software for native environments
Syllabus
- Language C: arrays, structures, pointers and their arithmetic.
- Write programs in assembly. Function-calling convention: C-language conventions. Programs involving code in C and assembly. Path and manipulation of stack frames.
- Memory hierarchy. Cache notion. Organization of RAM access cache and impact on program performance.
- Modular construction of programs: pre-processor; separate compilation; header and object files; static connection; static libraries.
- Implementation of dynamic memory allocation system without automatic recycling.
- Dynamic code binding. Building and using dynamic link libraries. Dynamic binding at load time and at run time.
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 applications, in C language, using standard open-source libraries. Finally, the introduction to RAM access caches (point III) supports further studies in the area of concurrent programming.
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