CS 1651: Advanced System Software

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


Lecture Slides


  • 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.


  • 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


  • 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.

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.