Schedule (Tentative!)
- Stuff listed in bold indicates a due date of some sort, attached to a grade item that will influence your final grade. See Assessment for more details.
- Assignments are due on the day listed before lecture! Tasks that don't have a more specific time attached are due before midnight that day!
Week 1: Introduction and Overview (January 28 – February 3)
Lecture:
- Monday: Welcome to Unix Systems Programming!
- Wednesday: Unix from 10,000 Meters
- Friday: A very brief Review of C
Reading:
- Required: Stevens, Chapters 1 and 2
- Recommended: Nick Parlante: Essential C
- Optional: Dennis M. Ritchie: The Development of the C Language
Tasks:
- Monday: Grab Assignment 1 and get started!
- Wednesday: Introduce yourself on the course mailing list!
Week 2: Files and Directories (February 4 – February 10)
Lecture:
- Monday: Introduction to Files
- Wednesday: Files and Directories
- Friday: Code Review for Assignment 1 (Lab!)
Reading:
- Required: Stevens, Chapters 3 and 4
- Recommended: Rob Pike: Notes on Programming in C
- Optional: Christopher M. Lott's Collection of C and C++ Style Guides; Apache Developers' C Language Style Guide
Tasks:
- Monday: Hand in Assignment 1 and relax!
- Monday: Grab Assignment 2 and get started!
- Friday: Programming style is a vague notion sometimes given a more concrete form in style guides. Discuss on the class mailing list what "programming style" means to you, and try to figure out why projects such as Apache have a style guide. Things to think about: How do you develop your own style? Can you still change it at this point in your career? Should you? When does style matter most? When does style matter least? Have fun with the discussion. :-)
Week 3: Files and Directories, Processes (February 11 – February 17)
Lecture:
- Monday: Finishing up Files and Directories, Introduction to Process Environment
- Wednesday: More Process Stuff
-
Friday:
Example of
forkandexecsystem calls. (?) (Lab!)
Reading:
- Required: Stevens, Chapters 4, 7, 8, and 9
- Recommended: Stevens, Chapters 5 and 6 (no lectures about those)
- Optional: (I would love to put a link to a Makefile tutorial here, but all I found on the web are crap. If you know of a good one, let me know... :-/)
Tasks:
- Monday: Hand in Assignment 2 and relax!
- Monday: Grab Assignment 3 and get started!
Week 4: Signals, Pipes (February 18 – February 24)
Lecture:
- Monday: Backlogged Process Stuff, Introduction to Signals
- Wednesday: Proper system calls for signals, Introduction to Pipes
- Friday: Example of creating pipes between processes by hand (Lab!)
Reading:
- Required: Stevens, Chapters 10, 15.1 - 15.2
- Recommended: Stevens, Chapter 9
Week 5: Finishing Pipes, Threads (February 25 – March 2)
Lecture:
- Monday: More on Pipes and FIFOs, Introduction to Threads
- Wednesday: More on Threads, Examples
-
Friday:
Threads and Mutexes (planned),
How to use
select(2)(actually). (Lab!)
Reading:
- Required: Stevens, Chapters 11, 12, 15.3 - 15.5
- Recommended: Whatever useful scraps of information you can find on threads... :-)
Tasks:
- Monday: Grab Assignment 4 and get started!
- Wednesday: Hand in Assignment 3 and relax!
- Friday: Read through John K. Ousterhout's presentation Why Threads Are A Bad Idea (for most purposes) and discuss it on the course mailing list. How well do you think John's "events" measure up? How would you structure a complex server using events, how using threads? Any insights? :-)
Week 6: Finishing Threads, Sockets (March 3 – March 9)
Lecture:
- Monday: Discussion of Chat Protocol
- Wednesday: Threads and Mutexes (finally!), Read-Write Locks, Introduction to Sockets
- Friday: More on Sockets (Lab!)
Reading:
- Required: Stevens, Chapters 11, 12, 16
- Recommended: Anything useful on threads and sockets you can find...
Tasks:
- Monday: Grab Assignment 5 and get started!
- Wednesday: Hand in Assignment 4 and relax!
Week 7: Projects, Sockets, Midterm 1 (March 10 – March 16)
I am leaving early Wednesday morning for SIGCSE 2008 to learn more about teaching. Sorry I'll miss the exam, but I believe you'll be in capable hands... :-)
Lecture:
-
Monday:
Discussion of possible Final Projects;
More on sockets,
discussing
echoserver.cagain - Wednesday: Guest Lecture on Using GDB (Jason Williams)
- Friday: Midterm 1 (Raluca Musaloiu-Elefteri) (Hodson 203)
Reading:
- Required: Review the Stevens book, Chapters 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 15.1 - 15.5, and 16 for Midterm 1!
- Optional: Whatever you think helps... :-)
Tasks:
- Friday: Suggest a final project, ideally one that has not been suggested before, on the discussion list. The project should be sizable to keep you busy for the rest of the semester (so another echo server won't fly :-). It should be systems-oriented (so GUIs are only incidental). It should be something that has potential for actual use (so it could become a free software project). Outline what the final outcome would be, why it's useful and interesting in the context of this course, what you bring to the table and what you would look for in your partners if that project were approved, and suggest some metrics for evaluating the project to get you an actual grade. Enjoy! :-)
Week 8: Spring Break! (March 17 – March 23)
Have fun! :-)
Week 9: Projects, More Unix Topics (March 24 – March 30)
Lecture:
- Monday: Discussion of Final Project Ideas, Forming Teams for Final Project
-
Wednesday:
Advanced I/O Concepts such as
Non-blocking I/O,
Advisory and Mandatory File Locks,
I/O Multiplexing (
selectandpoll),readvandwritev, Memory Mapping -
Friday:
Daemon Processes, Lockfiles, Logging with
syslog(Lab!)
Reading:
- Required: Stevens, Chapters 14, TBD
- Recommended: Anything useful on advanced I/O and daemon processes you can find...
Tasks:
- Monday: Hand in Assignment 5 and relax!
- Wednesday: Each team needs to send me a three-paragraph proposal detailing (a) your goals for the final project, (b) how you will achieve them, (c) how you will evaluate what you have done. This will count as Assignment 6, so it's weight is much higher than the usual "participation grade" stuff... Hand it in on time (before midnight)!
- Thursday: Grab Assignment 7 and get started!
Week 10: More IPC Mechanisms (March 31 – April 6)
Lecture:
- Monday: XSI IPC Mechanisms, Message Queues
- Wednesday: XSI IPC Part II, Semaphores, Shared Memory
- Friday: Hacking a Shared Memory Example
Week 11: Finishing Up, Starting Over in Python (April 7 – April 13)
Lecture:
- Monday: (Peter is late due to car trouble) Random Chats with Random People who drop by... :-)
- Wednesday: Terminal I/O
- Friday: Introduction to Python
Tasks:
- Monday: Hand in Assignment 7 and relax!
- Monday: Grab Assignment 8 and get started!
Week 12: More Python Stuff (April 14 – April 20)
Lecture:
- Monday: Modules and Classes in Python
- Wednesday: Hacking Word Count in Python, Hacking a Socket Chat Server and Client in Python
- Friday: Database Case Study (code part)
Week 13: Various Topics (April 21 – April 27)
Lecture:
- Monday: Database Case Study (design part)
- Wednesday: Discussion on Various C and Unix Development Topics (improvised because of questions from the class)
- Friday: Linking and Loading: Static Linking, Static Libraries
Reading:
- Required: David Wheeler's Program Library HOWTO
- Recommended: A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux; John Levine's Linkers and Loaders book draft (the full book is available here and hey, yours truly is even in the acknowledgements section :-)
Tasks:
- Monday: Hand in Assignment 8 and relax!
- Monday: Grab Assignment 9 and get started!
Week 14: Review and Outlook (April 28 – May 2)
Lecture:
- Monday: Linking and Loading: Shared and Dynamic Libraries
- Wednesday: Stump The Chump (Q&A session with candy)
- Friday: Final Presentations
Reading:
- Required: David Wheeler's Program Library HOWTO
- Recommended: Dissecting shared libraries; Shared objects for the object disoriented!; Ulrich Drepper's How to Write Shared Libraries [PDF]
Tasks:
- Friday: Hand in Assignment 9 and relax! Note: This is due before midnight, not before the final presentations. But you probably want to hand in earlier just so you can put it all behind you! :-)