Skip to main content
Unit of study_

COMP2017: Systems Programming

In this unit of study, elementary methods for developing robust, efficient, and re-usable software will be covered. The unit is taught in C, in a Unix environment. Specific coding topics include memory management, the pragmatic aspects of implementing data structures such as lists and hash tables and managing concurrent threads. Debugging tools and techniques are discussed and common programming errors are considered along with defensive programming techniques to avoid such errors. Emphasis is placed on using common Unix tools to manage aspects of the software construction process, such as version control and regression testing. The subject is taught from a practical viewpoint and it includes a considerable amount of programming practice.

Code COMP2017
Academic unit Computer Science
Credit points 6
Prerequisites:
? 
INFO1113 OR INFO1105 OR INFO1905 OR INFO1103
Corequisites:
? 
COMP2123 OR COMP2823 OR INFO1105 OR INFO1905
Prohibitions:
? 
COMP2129 OR COMP9017 OR COMP9129

At the completion of this unit, you should be able to:

  • LO1. apply code quality strategies appropriate for C, including preprocessor techniques, and use of common idioms
  • LO2. use Unix commands and system calls (including usage of flags etc) from online manual system
  • LO3. demonstrate the approach and concepts of Unix, including its tools philosophy, processes (including pipes and redirection), the file system, and the shell
  • LO4. compose correct, clean code in C that allocates, deallocates and manages memory
  • LO5. construct correctly implement standard linked list data structures. Higher performance could involve slightly more complicated structures such as binary search trees
  • LO6. assess code execution using debugging tools
  • LO7. apply a thorough automated testing regime using tools such as make, diff, scripts to present the outcomes, and a tool to manage regression testing. Higher performance could involve ability to construct such a regime
  • LO8. read and write code that correctly uses the main standard library functions, especially for I/O, file handling, and string handling. Higher performance could involve elegant use of these functions, particularly avoiding idioms which are extremely inefficient.
  • LO9. evaluate common memory-related errors (such as memory leaks, dangling pointers) and how to avoid these. Higher performance could involve detecting errors in example code, and fixing them using debuggers
  • LO10. construct, debug, and evaluate parallel or concurrent programs.
  • LO11. Understand and identify security vulnerabilities in memory usage patterns.