CS 1651: Advanced System Software


Instructor: Jack Lange, Associate Professor
Sennott Square, Office #5407
jacklange@cs.pitt.edu
Office Hours:     Tues. 2-4PM
   
Lectures:    Tues/Thurs 6:00 PM - 7:15 PM
Room: Sennott Square, Rm. 5129

Syllabus

Lecture Slides

Announcements

  • All class projects will be evaluated inside a Ubuntu LTS 18 64-bit Linux environment. The best approach to take is to use a virtual machine for the course projects. Any VMM will work such as VMWare Player, KVM, or Virtual Box.
  • The projects will require detailed information of the x86 architecture and instruction set. Both AMD and Intel provide their architecture manuals as free PDFs: (AMD and Intel)
    You will need to use both the system programming and instruction set manuals.

Readings

  • LKD: Linux Kernel Development
  • LWN: Linux Weekly News (www.lwn.net)

  • Date Reading Assignment
    1/8/2019 LKD: Chapters 1, 2
    1/10/2019  Intel Arch. Manual Vol. 1, chapters 2, 3. Ignore floating point topics.
    1/15/2019 LKD: Chapters 5; Intel Arch. Manual Vol. 1, chapters 6, 7. Ignore floating point topics.
    1/17/2019 LKD: Chapters 9, 10
    1/22/2019 LKD: Chapter 3
    1/24/2019 LKD: Chapter 4
    1/29/2019 ULK: Chapter 5, 6
    1/31/2019 LKD: Chapter 12
    2/5/2019 LKD: Chapter 15
    2/7/2019 LKD: Chapter 7
    2/12/2019 LKD: Chapter 8
    2/14/2019 LKD: Chapter 11
    2/19/2019 LKD: Chapter 13
    2/21/2019 LKD: Chapter 14
    2/26/2019 LKD: Chapter 16
    3/12/2019 SPRING BREAK
    3/14/2019 SPRING BREAK
    4/2/2019 The Google File System (pdf)
    4/4/2019 Finding a Needle in Haystack: Facebook's Photo Storage (pdf)
    4/9/2019 MapReduce: Simplified Data Processing on Large Clusters (pdf)
    4/11/2019 Bigtable: A Distributed Storage System for Structured Data (pdf)
    4/16/2019 Google: Large-scale Incremental Processing Using Distributed Transactions and Notifications (pdf)
    4/18/2019 TAO: Facebook’s Distributed Data Store for the Social Graph (pdf)

Projects

  • Project 0 - Due: End of Week 1
      Setup a Linux Ubuntu 18 LTS development environment which you have root access to.

      I strongly recommend you use a virtual machine environment, because you will be doing low level kernel programming that will crash the machine. You can use whatever environment you prefer. On Windows VMWare Player is free to use, but you have to purchase VMWare fusion if you have a Mac. You can also use VirtualBox (cross-platform), KVM (Linux), Hyper-V (Windows), Xen, cloud environments such as Amazon EC2 instances, or even a physical machine if you would like. The only requirement is that it runs Ubuntu 18 LTS, and can support at least 4 CPU cores. Either Ubuntu Desktop or Server is fine, though the hardware requirements for the desktop environment are steeper (> 2GB of RAM is required to avoid responsiveness issues in the GUI environment.) The best approach I've found is to install an SSH server in the VM, and ssh in from your host environment.

      Ubuntu does not include development tools out of the box, so you will need to install everything yourself. A good approach to this is to follow the instructions for installing a new Linux kernel (see Google), which will involve installing all the dev tools you'll likely need for the class. Make sure you also include a decent text editor. If you are still using nano for code development, its time to learn how to use a more full featured editor. I recommend either vim or emacs. If you use an IDE like sublime or VS code they will still work, but probably not as well as you're used to.

  • Project 1 (pdf) Due: 1/30
    • You can download the project framework here
    • For this project you will likely need to reference a number of external documents such as man pages and web pages.
    • At minimum you will want to look at the GCC-Inline-Assembly-HOWTO for information on incorporating inline assembly code.
    • You will also want to reference the Instruction Set Architecture Manuals (Intel Vol. 2 and AMD Vol. 3). I recommend the Intel versions, but its often worthwhile to cross reference with the AMD volumes as well.
  • Project 2 (pdf) Due: 3/3
    • Project framework available here: here
    • The 3rd edition of Linux Device Drivers will be helpful if you are not familiar with Linux kernel development. Chapters 1, 2, 3, 8, and 11 will probably be particularly helpful.
    • You will also find the Intel and AMD System Programming Manuals helpful.
  • Project 3 (pdf) Due: Friday before finals week
    • Project framework available here: here

Disability Resources and Services

If you have a disability for which you are or may be requesting an accommodation, you are encouraged to contact the instructor and Disability Resources and Services, 216 William Pitt Union, 412-648-7890 or 412-383-7355 (TTY), as early as possible in the term.