Syllabus: CMSC412 Spring 2022
Staff and meeting times
A. Udaya Shankar
Office hours: 12:30-1:30 (or later if you want) or by appointment.
Where: IRB 5150 or Zoom
Tasnim Kabir (firstname.lastname@example.org)
Rhys Kittleson (email@example.com)
Geng (Leo) Liu (firstname.lastname@example.org)
TuTh 11:00am - 12:15pm (CSI 2117)
MW 10:00am - 10:50am (section 0101, IRB 1207)
MW 11:00am - 11:50am (section 0102, IRB 1207)
TBD (IRB 2207 Open Area, Zoom)
Announcements, questions, answers, etc.
Please use an account (eg, your umd account) that displays
your name in full; otherwise I may not respond to your post.
An in-depth understanding of how an operating system virtualizes
computer hardware and provides programmers with a
machine and device independent interface.
There is a difficult and time-consuming programming project (GeekOS).
You are provided the source code (a few thousand lines of C and some assembly)
of a skeleton "Unix-style" operating system kernel for a PC-like x86 platform.
You have to understand a large part of this code
and augment it in various ways:
pipes, fork, signals, semaphores, cpu scheduling,
memory paging, file system, etc.
The x86 platform is simulated by QEMU.
The programming environment is Gnu/Linux.
After successfully completing this course you will be able to:
Understand how an operating system kernel virtualizes computer hardware,
i.e., implements processes, virtual address spaces and filesystems.
Read and write source code that implements this virtualization.
Operating Systems: Three Easy Pieces (OSTEP),
by Remzi Arpaci-Dusseau and Andrea Arpaci-Dusseau.
Available online for free
and in hardcopy (make sure it's a sufficiently recent, say version 0.94 or above).
Lecture and discussion videos
Videos by Neil Spring (umd box)
If you want another good book:
Operating Systems: Principles and Practice,
Thomas Anderson, Michael Dahlin.
- Review of CMSC216
- Sizes - Necessary distinction between sizeof and strlen.
- Malloc - Model for how malloc tracks memory, how to interpret memory errors.
- Timing - Reminder of user / kernel separation.
- Synchronization Topics
What is a process, how to create them, run them concurrently,
and achieve interprocess communication.
Threads: What is a thread, how to implement them.
Scheduling: how to achieve good response times
(of interactive applications) and throughput
(of background applications).
Synchronization: Locks, conditions, deadlock freedom, liveness.
Memory management: Paging, segmentation, swapping, memory allocation, etc.
File system Interface and Implementation:
function calls, mounting file systems, organization of disk blocks, allocation,
Disk and storage systems
Other topics: security, networking, etc.
GeekOS distribution and setup info on Piazza
Project submissions on submit server
GeekOS distro overviews:
Project specifications (due dates on Piazza)
You can turn in a project 3 days late for a 20% penalty.
To pass the course,
for each project you must have passed a minimum number of public tests
(to be posted on Piazza) by the last day of classes for the semester.
Exam 1: Thu Mar 3 (in lecture)
Exam 2: Thu Apr 14 (in lecture)
Final: Thu May 12 8-10am
Tell me in the first week of class
if you have a problem with the exam dates.
If you miss an exam due to an excused absence,
I decide whether you do a makeup exam or
get a score by averaging the scores in your other exams
(scaled to compensate for differences in class averages).
Quizzes will be held in discussion sessions (details on Piazza).
Exams: 60% (exam 1: 15%; exam 2: 15%; final: 30%)
(PZ: 1%; P0: 4%; P1: 6%; P2: 6%; P3: 5%; P4A: 4%; P4B: 5%; P5.1: 4%; P5.2: 5%)
Regrade requests must be submitted
within a week of the project grade being posted
or the exam being returned.
After that, they won't be processed.
Academic integrity, etc
The course will follow
UMD policies for
Please read that carefully,
in particular the sections on:
The course will also follow the
CS Department Academic Integrity policy.
Please read that carefully.
Accessibility and Acommodations
Attendance, Absences, or Missed Assignments
Projects are to be done individually.
Consider each programming assignment to be a take-home exam.
Do not expose your source code to others.
Do not leave it potentially accessible to others,
eg, unlocked unattended laptop, publicly accessible websites,
unsecured servers, unsecure communications.
Do not look at another's source code.
This also applies to code from online searches,
eg, Sourceforge, Stackoverflow, Google.
Interaction via course discussion forum is permitted.
Discussion of problems and code solutions is permitted as long as
you do not write down code during your discussion
and you wait at least 30 minutes after the end of the discussion
before you write code based on the discussion.
Procrastination and Piazza
Do not wait for project or exam deadlines before asking your questions.
Piazza is not a replacement for office hours as far as getting responses
from staff is concerned.
Response times on Piazza will inevitably deteriorate as the semester goes by.
Early on, the projects are simple and your questions are relatively precise.
Later projects are more intricate and typically there is a flood of vague
questions (eg, "Why is this not working?") just before due dates.
It's unlikely you will get helpful answers to such questions in time
and on Piazza.
This also applies to questions about class material. Just before exams,
there is usually a flood of questions that should have been asked in
office hours or class when the material was covered.
Again, it's unlikely you will get helpful answers in time and on Piazza.