Content for Linux Operating Systems Class Content for Linux Operating Systems Class linux linux

Content for Linux Operating Systems Class


My list:

  1. What an operating system's concerns are: Abstraction and extension of the physical machine and resource management.
  2. How the build process works ie, how architecture specific/machine code stuff is implanted
  3. How system calls work and how modules can link up
  4. Memory management / Virtual Memory / Paging and all the rest
  5. How processes are born, live and die in POSIX and other systems
  6. userspace vs kernel threads and what the difference is between process/threads
  7. Why the monolithic Kernel design is growing tiresome and what are the alternatives
  8. Scheduling (and some of the alternative / domain specific schedulers)
  9. I/O, Driver development and how they are dynamically loaded
  10. The early stages of booting and what the kernel does to setup the environment
  11. Problems with clocks, mmu-less systems etc
  12. ... I could go on ...
  13. I almost forgot IPC and Unix 'eveything is a file' design decisions
  14. POSIX, why it exists, why it shouldn't

In the end just get them to go through tanenbaum's modern operating systems and also do case studies on some other kernels like Mach/Hurd's microkernel setup and maybe some distributed and exokernel stuff.

Give a broad view past Linux too, I recon

For those who are super geeky, the history of operating systems and why they are the way they are.


The Virtual File System layer is an absolute must for any Linux Operating System class.

I took a similar class in college. The most frustrating but, at the same time, helpful project was writing a small file system for the Linux operating system. Getting this to work takes ~2-3 weeks for a group of 4 people and really teaches you the ins and outs of the Kernel.


I recently took an operating systems class, and I found the projects to be challenging, but essential in understanding the concepts in class. The projects were also fun, in that they involved us actually working with the Linux source code (version 2.6.12, or thereabouts).

Here's a list of some pretty good projects/concepts that I think should be covered in any operating systems class:

  • The difference between user space and kernel space
  • Process management (i.e. fork(), exec(), etc.)
  • Write a small shell that demonstrates knowledge of fork() and exec()
  • How system calls work, i.e. how do we switch from user to kernel mode
  • Add a simple system call to the Linux kernel, write a test application that calls the system call to demonstrate it works.
  • Synchronization in and out of the kernel
  • Implement synchronization primitives in user space
  • Understand how synchronization primitives work in kernel space
  • Understand how synchronization primitives differ between single-CPU architectures and SMP
  • Add a simple system call to the Linux kernel that demonstrates knowledge of how to use synchronization primitives in the Linux kernel (i.e. something that has to acquire, say, the tasklist lock, etc. but also make it something where you have to kmalloc, which can't be done while holding a lock (unless you GFP_ATOMIC, but you shouldn't, really))
  • Scheduling algorithms, and how scheduling takes place in the Linux kernel
  • Modify the Linux task scheduler by adding your own scheduling policy
  • What is paging? How does it work? Why do we have paging? How does it work in the Linux kernel?
  • Add a system call to the Linux kernel which, given an address, will tell you if that address is present or if it's been swapped out (or some other assignment involving paging).
  • File systems - what are they? Why do they exist? How do they work in the Linux kernel?
  • Disk scheduling algorithms - why do they exist? What are they?
  • Add a VFS to the Linux kernel