Course mailing
list: See piazza -- NB: We will use Piazza for group
announcements. Make sure you read it regularly.
Prerequisites:
This course assumes
that students have a solid background in C and/or C++
programming. Experience with UNIX to edit, build and execute
programs is also required.
CS210 is a
prerequisite course.
Course Summary:
This course will
focus on various aspects of system programming. We will study
the UNIX/POSIX programming interface, from the point-of-view
of system calls and library routines to perform file, I/O and
process management, as well as inter-process communication and
synchronization.
The C language will
be used throughout the course, but aspects of shell
programming and other languages such as Perl will also be
discussed where appropriate.
Unlike CS552, which
delves into the inner-workings of the operating system, this
course focuses on the interface to the OS and how user-space
applications and services are written to take advantage of OS
abstractions.
Libraries, shells,
binary and filesystem tools, debuggers, threads, webservers,
and so forth will be discussed and implemented in
programming assignments.
This course is
likely to feature a group project. Further information will be
provided but be prepared to develop your own assignments to
exercise the use of libraries, system calls and programming
concepts for topics such as debuggers, interpreters, runtime
environments, sockets/networked/distributed computing,
Android/iOS programming, Arduino, Raspberry Pi, and embedded
computing.
Time permitting,
the course will encompass programming of embedded and
single-board computer systems such as the Raspberry Pi and
Arduino.
We may also use the
Quest operating system
in some of the class projects.
Further Information:
Additional
recommended reading:
Larry Wall, Tom
Christiansen and Jon Orwant, "Programming Perl", 3rd
Edition, O'Reilly and Associates, ISBN:0-596-00027-8. There
are many other O'Reilly books on Perl and one
of the "Learning Perl" books might be easier to follow.
W.R. Stevens,
"UNIX Network Programming", Volumes I & II,
Prentice-Hall, ISBN 0-13-490012-X and 0-13-081081-9,
respectively.
You should
know how to write makefiles. Further information can be
found by typing 'info make' on a UNIX machine, reading the
man pages, or checking the GNU on-line documentation.
If you're having
trouble debugging your C/C++ programs, look at the gdb
manual pages, or the GNU
online documentation.