ISA 563: Fundamentals of Systems Programming
* INFS 590 (Program Design and Data Structures) or permission of instructor.
* Access to recent (2.6.x) Linux environment.
* Familiarity with a decent editor (VIM or Emacs) or an IDE, and the GCC.
This course is a hands-on in-depth introduction to the structure of the
Unix operating system with emphasis to the system libraries using ANSI
C. It is appropriate for students who want to learn the principles of
how to design and implement system applications. The course begins with
an introduction of the C programming language and continues with the
basic Unix Operating System data structures and Application Programming
Interfaces (APIs). Using hands-on laboratory exercises students will be
exposed to the concepts of inter-process communications, synchronization,
and process and thread management with emphasis on security applications.
* Demystify systems programming
* Focus on principles, methods, and tools
* Sound application design principles
* Efficient and secure implementation strategies
* Concepts and mechanics of secure programming.
* UNIX operating system programming environment.
* Develop applications using popular tools and systems including C, UNIX, IPC, and threading.
Supplemental Texts: (not required, but helpful C references)
The C Programming Language, Second Edition by
Kernighan and Ritchie.
[Amazon] (wikipedia entry)
Advanced Programming in the UNIX(R) Environment by W. Richard Stevens, Addison-Wesley Professional; 2nd edition (June 17, 2005), ISBN-10: 0201433079, ISBN-13: 978-0201433074.
UNIX Systems Programming: Communication, Concurrency and Threads, 2 Ed. by Kay Robbins and Steve Robbins. San Antonio, Texas,
Prentice Hall ISBN-10:0130424110, ISBN-13: 978013042411
Practical C Programming, Third Edition by
Steve Oualline. (ISBN 1-56592-306-5)
Mastering Algorithms with C by Kyle Loudon. (ISBN 1-56592-453-3).
C How To Program, Fourth Edition by Harvey and Paul Deitel.
(ISBN 0-13-142644-3). [Prentice Hall][Amazon]
The point of this course is your intellectual enlightenment and enjoyment.
I want the course to run as smoothly as possible, so I encourage feedback
on both positive and negative aspects. Feel free to drop by my office,
send email, or leave a note. Note that the Instructor reserves the right
to modify the schedule and topics as needed.
Programs must be turned in to the TA, and are due before class on the day of their due dates. Please do not skip class to finish your program!
Student grade is split according to the following schedule:
Student letter grade is determined as follows:
- 40% homeworks
- 40% mini-project
- 15% final exam
- 5% class participation
|Letter Grade|| Grade|
|A || [93,97)|
|B || [80,84)|
|C || [65,73)|
|F || [0,65)|
When your work is returned to you, check it. If you disagree about a
particular solution, please document in writing what you think the
grading mistake is. Please do not make immediate verbal complaints to
the professor or TA.
Class participation counts toward your grade. I expect and
encourage thoughtful and lively participation and discussion.
I typically DO NOT scale or curve grades unless there is
a classwide epidemic of failure. Plan your work and effort based on the
assumption that there will be no curve.
You can contact me via email, but please start your email's subject
with the string
[ISA563]; it helps me filter my email. Short
(one or two paragraphs) emails are appreciated.
While collaboration on homework and projects is greatly
encouraged, your answers must be original. No collaboration is
allowed on the final exam. Students collaborating on
assignments must clearly list with whom they worked. The bottom line
is that general discussion is welcome, but specific solutions cross
Cheating and Plagiarism are absolutely forbidden. I assume
that you have read GMU Honor Code. Please refer
to the links at the top of this page. It is almost absurdly easy to
Late work is generally not accepted. Late submission loses 10%
of the assignment's value per day.