CS3040 Low Level Programming

This course is an accelerated survey of the C programming language for computer scientists. It introduces students to programming practices using the C language, and the tools needed to effectively write and debug C programs. The class illustrates the design decisions associated with the low-level operations not implemented in other modern programming languages, demonstrating C's performance and control capabilities. Topics include function calling convention, dynamic memory allocation, recursion, file input/output, kernel management of files, searching/sorting, data types, data structures using C (arrays, hash tables, doubly linked lists, etc), and secure programming in C. Prerequisites: Students are expected to know how to program in at least one language, or exempted by permission of the instructor. Familiarity with Linux or another UNIX-like operating system will be helpful.

Prerequisite

CS2020

Lecture Hours

3

Lab Hours

2

Course Learning Outcomes

Upon completion of this course, students will be able to:

  • Employ the C language and standard libraries to solve intermediate-level programming problems.
  • Properly employ common productivity and development tools (e.g., gcc, make) to create and compile C programs.
  • Properly employ and interpret the output of C program debugging tools (i.e., gdb, valgrind).
  • Describe and discuss the stages of the C build process.
  • Create C program modules, including building libraries and developing proper header files.
  • Describe the layout of C variables in memory at the byte level.
  • Describe and construct complex C data types and interpret their layout in memory.
  • Describe C data type and space limitations and how to avoid problems such as numeric overflow and underflow.
  • Describe how the call stack operates to support C function calls, variable arguments, and the consequences of abusing the stack (e.g., buffer overflow).
  • Describe C process management and thread management, including creation, communication, synchronization, and race conditions.
  • Describe how the kernel supports C applications in execution using system resources.