Focuses on advanced and graduate-level topics in operating systems. Presents important recent developments in operating systems, topics not covered in undergraduate operating systems courses. This includes novel operating system designs and techniques to improve existing ones.
Lecture: | TuTh 9:30-10:50 (HH 178) |
Demos: | We 9:30-12:00, Th 2:30-5:00, Fr 9:30-12:00, Fr 2:30-5:00 |
Office: | Tu 2:00-3:00 (DBH 3038) |
Final Exam: | Thu, Dec 12, 8:00-10:00 |
TAs: | Mike Heddes (mheddes@uci.edu), Igor Nunes (igord@uci.edu) |
Grade: | Projects 75%, Final Exam 25%, Extra Project Credit 10% |
Discussion: | Canvas |
Submissions: | Canvas |
Project Demo Schedule: | Canvas |
Here's a preliminary overview of the main themes to be discussed in our upcoming lectures. Attendance at the lectures is essential for a comprehensive understanding. Our primary objective is to delve into advanced topics in Operating Systems, aiming to enhance our precision and push the boundaries of current knowledge. It is assumed that you have [some] familiarity with the following subjects.
The five upcoming projects are quite extensive and will demand substantial research and development efforts on your part. Due to our time constraints, we will supply a substantial portion of the necessary code for each project. Nonetheless, every project will include a crucial component that you are required to develop, test, and submit to earn full credit. Given the expansive nature and complexity of these projects, we will primarily cover the introductory material and code walkthrough during lectures. Consequently, attending these lectures is highly recommended.
A compressed/archived project folder can be downloaded here: projects.zip Alternatively, try this:
Please ensure timely submission of your projects by packaging them into a single zip file. This zip file should include the following components, all organized within a dedicated directory: (1) your source code, (2) a README.txt file containing any special comments, issues, and/or notable features, (3) if applicable, an strace output from the invocation of your program, and (4) if applicable, a valgrind report demonstrating the absence of memory leaks. Please stay tuned for further details, which will be communicated during lectures.
Design a program that accepts a mathematical expression (a string containing the symbols: +, -, *, /, %, (, ), value). This program will dynamically generate a C program based on the input string, invoke a C compiler to create an equivalent loadable module, and then load and execute the machine code equivalent of the C program to produce the evaluated result of the expression. You may use the following to bootstrap the project:
This project earns you 15% of your class credit. You can earn 2% extra-credit if you implement the sigmoid(double x) function that resides in your main program but is called from the generated C code to transform the final value of the expression (i.e., sigmoid(expression-value)).
Develop a dynamic thread scheduler library with an API akin to the POSIX pthread library, providing the capability to create threads and enable cooperative concurrent execution among them. You may use the following to bootstrap the project:
This project earns you 15% of your class credit. You can earn 2% extra-credit if you implement an automatic context switch (e.g., every second) from one thread to another without the need for the user threads to call scheduler_yield().
Create a robust memory management system featuring an API reminiscent of the C malloc() function. This system will utilize a file as its underlying storage to ensure persistent data availability across different processes. You may use the following to bootstrap the project:
This project earns you 15% of your class credit. You can earn 2% extra credit by implementing the scm_free() function and showcasing the correctness of your implementation through the addition of the required code to enable a "remove" command for words.
Develop a key/value file system that utilizes raw and direct I/O operations on a block device. Deploy your system on a loop-back device. Ensure that your implementation avoids reliance on kernel buffers for both reading and writing by incorporating efficient write buffering and read caching mechanisms to optimize performance. You may use the following to bootstrap the project:
This project earns you 15% of your class credit. You can earn 2% extra credit by implementing the ability to store and restore the state of the key/value file system on open/close. Modify the test programs to test this new behaviour.
Create a real-time system monitoring tool similar to the Unix top command that provides two different performance statistics in two different categories (e.g., CPU, memory, network, I/O). You may use the following to bootstrap the project:
This project earns you 15% of your class credit. You can earn 2% extra credit by adding a third category to your tool.
These tools and environments are essential for successfully completing the projects in this course. Make sure to invest the time needed to attain a proficient level of skill with these applications and systems.
The internet is full of an abundance of valuable resources, encompassing e-books, write-ups, blogs, and Wiki pages that delve into the various subjects covered in this course. Below, you'll find a mini-curated selection, though it's important to note that this list is not exhaustive. You are encouraged to assemble your personal compilation of references to support your learning journey in this course and beyond.
*** Commitment to an inclusive learning environment: this class adheres to the philosophy that all community members should enjoy an environment free of any form of harassment, sexual misconduct or discrimination. Please be respectful and kind to one another. ***