Syllabus

This class will build on your skills from CSC 213: Operating Systems & Parallel Algorithms. In this version of Advanced OS we will write an operating system kernel and supporting libraries and tools. My hope is that this course will give you an opportunity to build your design, programming, debugging, and teamwork skills. As we work on our kernels, we’ll read research and design papers about operating systems to inform our designs. After spending the first half of the semester with the whole class working on roughly-equivalent systems, we’ll switch over to a project phase of the course where small teams will add useful extensions (e.g. a filesystem, multicore support) to the kernel.

Required Background

This class requires CSC 213, and I will expect you to remember or review some important concepts from that class as part of your work for CSC 395. You must also be comfortable programming in C, particularly when it comes to dealing with pointers.

Accommodations

My goal is to help you learn as much as possible in this course; please let me know what I can do meet your learning needs. If you have a disability that requires accommodations, please contact Disability Resources. Disability Resources will work with you to determine your needs, and will provide you with paperwork outlining the accommodations you require. If at all possible, please try to get this information to me at least a week before the course activity for which you need accommodations.

Workload

Under a normal 16 credit load, I expect that you will spend at least 40 hours per week on your studies (class time, homework, and studying). That means you should spend a minimum of 10 hours per week on this course, although that workload is likely to vary from week to week. You may find that you need to spend some additional time early in the semester if your C programming skills are a bi rusty, or if you need to go back to review concepts from CSC 213.

It is likely that you will have at least one issue during your implementation work for this class that takes a significant amount of debugging time. While I hope you are able to resolve issues like this on your own, I don’t want you to spend endless hours without making progress. If you find yourself in this situation please let me know so we can talk about debugging strategies, and work out a rough timeline to make sure you are able to keep on track with the implementation.

Attendance & Participation

Attendance is not required for this course, but you are assessed based on your participation during in-class discussions and activities. Each day that you attend and participate (constructively) in class will earn 0.75% toward your final grade in the class, up to a maximum of 18%. I may give partial credit for participation on days when you are present but less prepared or engaged in the class activities. We have a total of 27 days of class this semester, so you can miss up to three days and still earn full credit for participation, provided you are prepared and actively engaged in every day of class you do attend.

If your are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counseling Services (SHACS) offers health and mental health services to students. It’s better for you to miss a few points for discussion that to prolong your illness and potentially risk the health of your classmates (and instructor). If you need to be out for more than three days we can work out an alternate arrangement, but please talk to me as soon as you know this will be required. If you need to miss class for religious observation (see the college calendar of high holy days) please let me know ahead of time and we will arrange an alternative to class participation on those days.

Status Updates

Most days of the semester will include a short status update from two or three students in the class. The idea with these status updates is to share your approach to an implementation task, to discuss a bug you are struggling with, or some other aspect of our work in the class that may be helpful to other students. These updates will be short (approximately two minutes each) and every student will need to complete three updates during the semester. You are welcome to show code, slides, or graphics during your status update if that helps you, but that is entirely optional. Drawing simple pictures on the whiteboard may be the easiest way to convey complex issues while making good use of your short two-minute time block for the update. When you give status updates you are welcome to go back to issues that did not come up in the most recent implementation task, provided you think they are still relevant to others in the class.

I will select students randomly to provide status updates, but I may re-draw names to make sure students aren’t assigned two status updates over a short time period. I will let you know at least 24 hours before the class when you are giving the status update so you have time to prepare.

You are not assessed on whether your status update include a completed task; a status update about a bug you have been unable to fix can still earn full credit. Focus on clearly and concisely sharing the state of your implementation with the class.

Kernel Implementation

For the first nine weeks of the semester we will be working on a basic kernel implementation. These kernel implementations can be completed individually or in pairs, and you will be free to choose your partner if you opt to work with someone else. As we progress through the implementation I will assign smaller implementation tasks to help move the class along at roughly the same rate. You should do your best to keep up with these implementation tasks, but you do not have to turn in work at regular intervals. Instead, I will be checking in with every student in the class during class time to see how you are progressing. You will be assessed on the completeness of your implementation in week 10. The completed implementation will account for 34% of your grade in the class.

The exact set of implementation tasks you need to complete will depend on how quickly we move through the kernel implementation as a class. I will be adjusting the pace to make sure we are making progress without overloading the entire class. Unless I explicitly state otherwise, any implementation task we discuss in class will be expected in the final implementation. The exact list of features your kernel must support will be available on the Kernel Implementation page, which I will update as we add new tasks.

With the exception of code I provide or link to in guides, your kernel implementation should be written entirely by you and your partner (if you have one). You are free to discuss implementation strategies with the class (that’s part of the reason we do status updates) but you may not share code directly with others. If you use a reference or code from another source you must cite that source, but you may not copy large parts of an implementation from any source. If you are unsure whether it is appropriate to use code from a specific source I am always happy to discuss that with you.

Readings

We do not have a textbook for this course. Instead, you will read a variety of references to help with our kernel implementations, as well as a number of research papers later in the semester. Research papers will be accessible from on campus, but will require a login if you access them from off campus. I have changed the links to these papers to go through Grinnell’s library proxy, which should give you access after you log in with your Grinnell account. If you are unable to access an assigned paper for any reason, please let me know as soon as possible so I can correct the issue.

You are expected to read and understand every paper assigned for this class. It’s okay if some details of the assigned reading are unclear, but you should be able to identify the problem the paper is addressing, the key idea(s) in the researchers’ work, and summarize their findings.

Reading Journals

You will need to write a reading journal for some of the assigned readings in this class. Most reading journals will ask you to provide an overview of the problem the paper solves, its research contributions, a list of positive and negative points about the paper, and two or three discussion questions. In some cases we will read survey papers that introduce an area rather than a specific problem; in these cases we will have different reading journal questions. Reading journals will account for 12% of your total grade in this class.

Team Project

During the last five weeks of the course you will work with a small team to extend the basic kernel we build during the first nine weeks of the course. Your team project will include a short proposal describing what you plan to add and how you will implement it, an implementation of that work, and a final presentation to the class during our final exam time. The full team project will account for 30% of your grade in the class.

Your project grade will be based on three parts with the following weights:

Proposal
20%
Implementation
40%
Presentation
40%

Detailed rubrics for the implementation and presentation will be posted shortly.

Grading

There will be no curves or competitive grading in this course. Every student has an opportunity to earn an A. Your final grade will be determined with the following weighting:

Class Participation
18%
Status Updates
6%
Kernel Implementation
34%
Reading Journals
12%
Team Project
30%

The grading scale for this course will be:

A
93–100%
A-
90–93%
B+
87–90%
B
83–87%
B-
80–83%
C+
77–80%
C
70–77%
D
60–70%
F
0–60%

You may note that a score of exactly 90% could earn either a B+ or an A-. In this unlikely scenario, I will always choose the higher of the two grades. You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.

Academic Honesty

I encourage collaboration when it promotes learning. However, it is important for you to understand the course materials and demonstrate your own learning on assignments. You are free to discuss the work in this class with other students, but sharing of code or written responses is permitted. When you complete work on an implementation task, written response, final report, or discussion topic you are expected to accurately represent the sources of your ideas. You must acknowledge the contributions of others, whether they come from other students in the class, or from print and online resources.

If you are unsure whether it is appropriate for you to use a particular source I am happy to discuss that with you, with no risk to you. If you make inappropriate use of an outside resource it is out of my hands, so please ask if you are unsure. It is my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing.

Getting Help

Office Hours

If you have questions or concerns about the course or would simply like to discuss the course material, please come to my office hours. To provide equitable access to all students regardless of course schedules, I hold my office hours by appointment. You can make an appointment at https://calendly.com/curtsinger/office-hours.

Email

I am happy to answer questions by email, but please allow 24 hours for a response (except on weekends, when I may not answer email at all).