Syllabus: CMSC412 Spring 2021
Staff and meeting times
-
Instructor:
A. Udaya Shankar.
Contact: Piazza or shankar@cs.umd.edu (please start the header with 412-S21)
-
TAs:
Shreya Suresh,
Zejun Liu,
Hana Hailu,
Deepti Bisht,
Haoran Zhou,
Wichayaporn Wongkamjan
-
Lectures:
TuTh 11:00am - 12:15pm
(Zoom link for lectures)
-
Discussions:
MW 10:00am - 10:50am (section 0101);
MW 11:00am - 11:50am (section 0102)
-
Piazza:
Announcements, office hours, questions, responses
Course description
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.
Learning outcomes
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.
Resources
Required text:
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).
If you want another good book:
Operating Systems: Principles and Practice,
by
Thomas Anderson, Michael Dahlin.
Slides
Lecture and discussion videos
Videos by Neil Spring (umd box)
- 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
Topics
-
Processes:
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,
recovery.
-
Disk and storage systems
-
Other topics: security, networking, etc.
-
GeekOS distribution and setup info on Piazza
-
Project submissions on submit server
-
GeekOS distro overviews:
-
Specifications (due dates on Piazza)
-
Late submission policy:
See Piazza for detail.
(Briefly: 80% (2 days), 40% (1 week);
1 late pass of 2 days.)
-
Minimum requirement:
To pass the course,
for each project you must have passed a minimum number of public tests
(see Piazza) by May 14 (day after the final).
-
Exam 1: Wed Feb 24 (in discussion, 60min)
-
Exam 2: Wed Mar 31 (in discussion, 60min)
-
Exam 3: Wed Apr 21 (in discussion, 60min)
-
Exam 4: Thu May 13 8-10am (during the Final slot, 60 min)
-
Exams will be proctored.
-
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 released on Thursdays to be submitted by the next day
(details on Piazza).
Course grade
-
Exams: 56% (exam 1, exam 2, exam 3, exam4; each 14%, 60min)
-
Quizzes: 8% (top 8 of all quizzes; each 1%, 15min)
-
Projects: 36%
(PZ: 1%; P0: 4%; P1: 5%; P2: 6%; P3: 4%; P4A: 3%; P4B: 5%; P5.1: 3%; 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, conduct, etc
The course will follow
UMD policies for
undergradtuate courses.
Please read that carefully,
in particular the sections on:
-
Attendance, Absences, or Missed Assignments
-
Accessibility and Acommodations
-
Academic Integrity
-
Student Conduct
The course will also follow the
CS Department Academic Integrity policy.
Please read that carefully.
Also:
-
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,
e.g., 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,
e.g., 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.
Web Accessibility