Courses/Computer Science/CPSC 457.F2013

= Principles of Operating Systems (Fall 2013) =

The course overview page is located at: http://pages.cpsc.ucalgary.ca/~locasto/teaching/2013/CPSC457-Fall/

You may also be interested in the wiki pages for the Winter 2012 and Winter 2013 versions of this course.

This course is a curiosity-driven cross-layer introduction to the principles and design decisions reflected in modern commodity operating systems with a special focus on the Linux/x86 platform to ground the discussion in real technical detail.

The university calendar entry for CPSC457 describes the course as:

"An introduction to operating systems principles. Performance measurement; concurrent programs; the management of information, memory and processor resources. Prerequisite(s): Computer Science 319 or 331 and one of Computer Science 325 or Computer Engineering 369."

How This Class is Taught

 * Curiosity - This class is driven by seemingly simple questions about what a computer system is in a practical sense. This is not an anatomy-style class where you memorize charts and pictures drawn by other people. It's a hands-on exploration of what makes digital hardware actually do interesting things for us.
 * Cross-layer - layers of abstraction become boundaries of competence. This class deliberately bridges the semantic gap to give multiple aspects of the same concept, component, or primitive.
 * Learning through failure modes - what we do to systems to break them (out of curiosity, ignorance, or malice) can teach us a great deal. Stretching and abusing a system's limits and normal modes of operation helps outline the boundaries of (in this case, OS) concepts more clearly.

Although this courses focuses on Linux, it is not about Linux per se; we simply demonstrate abstract OS concepts relative to a mature, real-world, and complex piece of software.

Announcements, Policies, and Metadata
This section includes the syllabus, textbooks, course policies, grading scheme, midterm and file exam policies, and submission instructions.

Courses/Computer_Science/CPSC_457.F2013/Policies

This term we will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TA, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, email team@piazza.com.

Find our class page at: https://piazza.com/ucalgary.ca/fall2013/cpsc457/home

= Assignments =

Homework Assignments:

Courses/Computer_Science/CPSC_457.F2013/Assignments

This section enumerates the homework assignments.

= Lecture Schedule =

Please see the University Academic Calendar for important add/drop dates, holidays, etc.

Courses/Computer_Science/CPSC_457.F2013/Lecture Notes

This section contains the class session notes.

= Tutorial Schedule =

Here is the (tentative) schedule of tutorial topics.

Courses/Computer_Science/CPSC_457.F2013/Tutorial_Schedule

= Links & Miscellaneous Resources =

Courses/Computer Science/CPSC 457.W2012/Links and Other Resources

kernel version we will use in this class: 2.6.32

CPSC LXR mirror for this kernel version: http://lxr.cpsc.ucalgary.ca/lxr/#linux/

Splitting your c457 virtual machine VDI image into 2GB chunks to fit onto your USB thumbdrive:

http://pages.cpsc.ucalgary.ca/~locasto/teaching/2013/CPSC457-Fall/split-VM.txt

Stuff:
 * http://www.tldp.org/LDP/lkmpg/2.6/html/x569.html
 * http://www.tldp.org/LDP/lkmpg/2.6/html/x710.html
 * http://fuse.sourceforge.net/
 * http://www.tldp.org/LDP/lkmpg/2.6/html/x892.html
 * http://www.eresi-project.org/wiki/EresiHowTo
 * http://www.red-book.eu/
 * http://vikaskumar.org/amd64/cpuid.htm
 * http://lkml.indiana.edu/hypermail/linux/kernel/9907.0/0122.html

= Random News and Links =


 * http://www.cnn.com/2012/11/21/tech/innovation/witch-computer-restoration/index.html%3Fc=&page=2?iref=obnetwork
 * http://www.zdnet.com/graying-linux-developers-look-for-new-blood-7000020026/
 * http://valleywag.gawker.com/this-is-why-there-arent-enough-women-in-tech-1221929631
 * http://shell-storm.org/blog/Shellcode-On-ARM-Architecture/
 * http://www.salon.com/2013/08/26/school_is_a_prison_and_damaging_our_kids/
 * http://www2.macleans.ca/2011/08/25/why-your-teenager-cant-use-a-hammer/
 * Sniffing and emulating USB
 * http://travisgoodspeed.blogspot.ca/2012/07/emulating-usb-devices-with-python.html
 * http://goodfet.sourceforge.net/hardware/facedancer11/
 * http://hackaday.com/2013/07/02/usb-sniffing-with-the-beagleboard-xm/
 * http://archive.arstechnica.com/paedia/r/ram_guide/ram_guide.part1-4.html
 * http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html
 * http://kroah.com/log/blog/2013/09/02/booting-a-self-signed-linux-kernel/
 * http://freedesktop.org/wiki/Software/gummiboot/
 * http://www.robertgraham.com/journal/030815-blaster.c

= Things We Won't Cover =


 * A full consideration of multiprocessor architectures and machines (we only touch on this in the context of concurrency and synchronization)
 * Advanced I/O architectures and multimedia
 * cluster computing
 * other operating systems like *BSD, Windows, OS X, GNU Hurd, or Minix