Homeworks are due in the svn repository by start of class on Tuesdays. Make sure that your turn-in is correct by checking it out in a fresh directory, building and running the executables, just like we would.

Homework Schedule

Topic Due 3:30 pm
on Tue
PointsSorted descending
Midterm 1 3/2 20
8 - DIY memory allocator 3/29 15
10 - Homebrew file system (rw and improved) 4/28 15
6 - elevator controller (scheduling) 3/1 10
7 - an inter-process messaging library 3/15 10
9 - Homebrew file system (read-only) 4/13 10
1 - types and expressions 1/18 5
2 - functions and memory management 1/25 5
3 - data structures in C 2/1 5
4 - homebrew command line interpreter 2/8 5
5 - elevator controller (thread synchronization) 2/15 5

Late turn-in policy

Late turn-ins are not accepted, as solutions are often discussed in class immediately after the due date.

If you for whatever technical reason cannot commit your homework to the repository on time, make a tarball of your homework directory and email it to Tim Merrifield <tmerri4@uic.edu>. Then, commit your homework (unchanged) to the repository ASAP, and let Tim know the revision number. The tarball will not be graded; it simply serves as a time stamp allowing you to commit your code after the due date.

WARNING: Do not change your turn-in between sending the tarball and committing the code. Any differences between your tarball and the indicated revision of the code will be considered cheating.

Tentative homework topics

This list is preliminary and will be updated throughout the course of the semester.

  1. Understanding types and expressions in C
    1. structs, primitive types and typedefs
    2. type casting
    3. create a Virtual Machine and install Linux
    4. start using subversion for turn-in
  2. Functions and memory management
    1. calling conventions and the call stack
    2. stack vs. heap allocation
    3. heap allocation with malloc() / free()
    4. also, compile and install your own Linux kernel
  3. Data structures in C
    1. generic doubly-linked list
    2. generic binary heap
    3. or alternatively, a Rope
    4. debugging with gdb
    5. profiling with gprof
  4. Homebrew command line interpreter
    1. process management with fork / execve / dup2 / open/close
    2. more string handling functions
  5. Concurrent programming and synchronization
    1. multi-threading with pthreads
    2. mutexes / binary semaphores
    3. condition variables
    4. barriers
    5. deadlocks, race conditions, and starvation
  6. Inter-process communication
  7. A faster malloc() and free()
  8. Roll your own USB-stick file system
  9. Exploiting vulnerabilities and cracking binaries
Topic revision: r4 - 2011-02-11 - 01:40:18 - Main.jakob
Copyright 2016 The Board of Trustees
of the University of Illinois.webmaster@cs.uic.edu
Helping Women Faculty Advance
Funded by NSF