Introduction to a basic system programming language (C):

Constants, variables and basic types. Expressions, statements and control structures. Advanced types: pointers, arrays and structures. Functions and argument passing modes. Function and variable scope (local/global, private/public). Variable lifetime (transient/permanent). Abstract data types (ADT): stack, queue, (double) linked list, token list, priority list and binary tree.

Introduction to system programming:

Memory model, including big and little endian. Process model, including multi-threads, shared variables, register variables (program counter and interrupts), and simple state diagrams. Thread execution diagrams, including function calls. Expression evaluation and abstract syntax trees (AST). Stack segment execution model. Dynamic memory allocation (malloc, free). Process primitives (fork, exec, wait) and thread primitives (create, join).

Introduction to the Unix programming environment:

Command line, including pipe and input/output redirection. File system and privileges, including hard and symbolic links. Regular expressions and Unix variables. Bash shell scripts, make, gdb debugger and performance tools. Secure remote access.


The student will first develop the ability to read C code, use Unix commands and test simple C programs. Then they will learn to write, debug and test C programs including simple concurrent programs, and use more advanced Unix tools (make, gdb debugger, Bash shell scripts). Finally they will learn to specify classical abstract data types in C.