The goal of the course is to convey the fundamental concepts that enable programs to execute on real hardware. Those concepts include how the operating system virtualizes the hardware to provide basic services and abstractions to enable a user program to effectively use the available hardware resources. The course also addresses how different programming constructs and idioms work.
The basic abstraction of a program running as one or more threads of control in a single flat address space (a Unix process) is the key to the course. Emphasizing that abstraction as the underlying model for understanding how a program works, from both the user program and hardware perspective (with the OS in between), run as a theme through all topics in the course. Examples include C pointers (to data and functions), function calls and runtime stack management, dynamic memory management in the heap, and the fork/exec system calls.
Prerequisite → C- or better in CMSC132 and MATH 141
Corequisite → CMSC 250 (or equivalent)
Credits → 4
| Name | Office |
|---|---|
| Anwar Mamat | AVW 3259 |
| Nelson Padua-Perez | AVW 1203 |
| Neil Spring | AVW 4133 |
For office hours and other contact information, visit the staff link.
| Title | Authors | ISBN | Type |
|---|---|---|---|
| C Programming, 2nd edition | K.N. King | 9780393979503 | Required |
| Computer Systems: A Programmer's Perspective, 3rd edition | R.E. Bryant and D. R. O'Hallaron | 9780134092669 | Recommended |
Additional information for students in the honor's (cmsc216H) section can be found at Honors.
Final grades will be computed according the following weights:
| 26% | Projects |
|---|---|
| 10% | Announced Quizzes |
| 6% | Exercises, Lab, Lecture Work |
| 28% | Midterms(2), (12% and 16%) |
| 30% | Final Exam |
Once we have graded any class material (e.g., exams, projects, etc.) we will post an announcement and a deadline by which you must submit any regrade request (if necessary). It is your responsibility to submit regrade requests by the specified deadline; no regrade requests will be processed afterwards.
Keep in mind that in-lecture graded exercises (sometimes without advance notice) are an integral part of the work of the course.
Office hours get extremely busy the day before a project deadline. Therefore do not wait to start your projects. Regarding office hours and the TA Room:
You need to keep backups of your projects as you develop them. No extensions will be granted because you accidentally erased your project. Feel free to use the submit server as a backup tool by submitting often. You can also use tools like git, etc. Do not post code in any online system that is accessible to others (e.g., GitHub).
Note that academic dishonesty includes not only cheating, fabrication, and plagiarism, but also includes helping other students commit acts of academic dishonesty by allowing them to obtain copies of your work. In short, all submitted work must be your own. Cases of academic dishonesty will be pursued to the fullest extent possible as stipulated by the Office of Student Conduct.
It is very important for you to be aware of the consequences of cheating, fabrication, facilitation, and plagiarism. For more information on the Code of Academic Integrity or the Student Honor Council, please visit http://www.shc.umd.edu.
The CS Department takes academic integrity seriously. Information on how the CS Department views and handle academic integrity matters can be found at Academic Integrity.
The following are examples of academic integrity violations:
Additional information can be found in the sections titled "Academic Integrity" and "Code of Student Conduct" available at Course Related Policies.
We will be using (Piazza) for class communication. You will not be able to register to Piazza yourself. Your instructor will register you using the e-mail you have in the school system.
See the section titled "Attendance, Absences, or Missed Assignments" available at Course Related Policies.
See the section titled "Accessibility" available at Course Related Policies.
All course materials are copyright UMCP, Department of Computer Science © 2017. All rights reserved. Students are permitted to use course materials for their own personal use only. Course materials may not be distributed publicly or provided to others (excepting other students in the course), in any way or format.
This schedule is tentative and subject to change. Keep in mind that the slides may not include all the material discussed in lecture. You are responsible for any material we present in lecture, even if it does not appear in the posted slides. Notice that code examples can be found in the grace cluster (public directory).
| Week | Topics | Slides | Readings | Work |
|---|---|---|---|---|
| CMSC216 Schedule | ||||
| Week #1 (Jan 25) |
Course Introduction, C Data Types, Operators, Input/Output, Control Statements, Active Learning |
Course-Intro.pdf C-Intro.pdf ActiveLearningWorkshop.pdf |
King's book, Chapters 1 → 6 |
|
| Week #2 (Jan 30) |
Functions, scope, C Storage Types, Linkage, sizeof, Input/Output Redirection (lab) |
C-Lang-I.pdf C-Lang-II.pdf |
King's book, 7.1 → 7.4 7.6 9.1 → 9.4 Chapter 10, 18.1→18.2 |
E1 Out (Tue) E1 Due (Fri) E2 Out (Fri) |
| Week #3 (Feb 6) |
Pointers, Arrays, Debugging/GDB (lab), Math Library(lab) |
Debugging.pdf Pointers.pdf Pointers-Arrays.pdf |
King's book, 8.1 Chapter 11, 23.3 |
Q1 (Wed) E2 Due (Wed) P1 Out (Thu) |
| Week #4 (Feb 13) |
Pointer Arithmetic, Strings, Command Line Arguments, 2-Dim Arrays |
Ptr-Arithmetic.pdf Strings.pdf CmdLine-Args-2DArrays.pdf |
King's book, 8.2, Chapter 11, 12, 13, 23.5, 23.6 |
Q2 (Wed) P1a Due (Wed) E3 Out (Fri) |
| Week #5 (Feb 20) |
Structures, Data Representation, Bitwise Operations |
Structures.pdf Data-Rep.pdf BitwiseOperators.pdf |
King's book, Chapter 16, 20.1 Bryant's book, Chapter 2 |
Q3 (Wed) E3 Due (Fri) P1 Due (Wed) P2 Out (Wed) |
| Week #6 (Feb 27) |
Formatted I/O |
IO.pdf |
King's book, Chapter 14, Chapter 22 |
Midterm I (Thu) (Lecture) P2 Due (Wed) P3 Out (Fri) |
| Week #7 (Mar 6) |
PreprocessorI, Make, Dynamic Memory Allocation, Function Pointers |
PreprocessorI.pdf Make.pdf (Lab) DynamicMemAlloc.pdf FunctionPtrs.pdf |
King's book, 15.4, 17.1 - 17.7 |
E4 Out (Thu) |
| Week #8 (Mar 13) |
Dynamic Structures, Optimization |
DynamicMemAllocII.pdf Optimization.pdf |
King's book, 20.1 |
P3 Due (Wed) E4 Due (Fri) |
| Spring Break 2017 (Mar 19-Mar 26) | ||||
| Week #9 (Mar 27) |
Assembly, Encapsulation in C (Lab) |
AssemblyI.pdf AssemblyII-If-Loops.pdf |
P4 Out (Mon) Q4 (Wed) |
|
| Week #10 (Apr 3) |
Assembly, Process Control |
AssemblyIII-CallStack.pdf AssemblyIV-ParamLocal.pdf |
Bryant's book, 1.7, 8.2 - 8.4 |
P4 Due (Wed) P5 Out (Wed) |
| Week #11 (Apr 10) |
Process Control, System I/O (read, write, file descriptors) |
ProcessControlI.pdf ProcessControlII.pdf System-IO-I.pdf (Lab) |
Bryant's book, 10.1 - 10.4, 10.8 - 10.12 |
E5 Out (Thu) P5 Due (Fri) |
| Week #12 (Apr 17) |
System I/O (dup2, pipes) |
System-IO-II.pdf |
Midterm II (Thu) (Lecture) P6 Out (Thu) E5 Due (Fri) |
|
| Week #13 (Apr 24) |
Concurrency, Time |
Concurrency.pdf Time.pdf |
E6 Out (Wed) |
|
| Week #14 (May 1) |
Signals, Libraries, Preprocessor, Course Evaluations |
Signals.pdf Libraries.pdf PreprocessorII.pdf |
Bryant's book, Chapter 2, 12.3 - 12.7 |
P7 Out (Mon) P6 Due (Tue) |
| Week #15 (May 8) |
Review |
Review.pdf |
E6 Due (Mon) P7 Due (Tue) Last Day of Classes (Thu/May 11) Final Exam (Sat/May 13 4pm-6pm) |
|
| Name | Anwar Mamat |
|---|---|
| Office | AVW 3259 |
| Office Hours | Tue, Thu: 1:00-2:00 pm |
| anwar [AT] cs [DOT] umd [DOT] edu |
| Name | Nelson Padua-Perez |
|---|---|
| Office | AVW 1203 |
| Office Hours | Mon, Wed: 12:30-2:00 pm |
| nelson [AT] cs [DOT] umd [DOT] edu |
| Name | Neil Spring |
|---|---|
| Office | AVW 4133 |
| Office Hours | TBA |
| TBA [AT] cs [DOT] umd [DOT] edu |
Please see Office Hours Guidelines
All TA office hours take place in AVW 1112.
| Name | Pic | |
|---|---|---|
| Swati Singhal (Grader) | swati [AT] cs.umd [DOT] edu | ![]() |
| Snehesh Shrestha (Grader) | snehesh [AT] cs.umd [DOT] edu | |
| Peratham Wiriyathammabhum (Grader) | peratham [AT] cs.umd [DOT] edu | ![]() |
| Mahmoud Sayed (Grader) | mfayoub [AT] cs.umd [DOT] edu | ![]() |
| Mohammed Salem (Grader) | mefathy [AT] cs.umd [DOT] edu | |
| Kyungjun Lee (Grader) | kjlee [AT] cs.umd [DOT] edu | ![]() |
| Gabriella Farley | gfarley [AT] terpmail.umd [DOT] edu | ![]() |
| Stefani Moore | stemoore [AT] cs.umd [DOT] edu | ![]() |
| Ian Longo | ilongo [AT] cs.umd [DOT] edu | ![]() |
| Adam Hamlin | ahamlin2 [AT] cs.umd [DOT] edu | ![]() |
| Xi Chen | xchen141 [AT] terpmail.umd [DOT] edu | ![]() |
| Justin Park | park1996 [AT] terpmail.umd [DOT] edu | ![]() |
| Khanh Nguyen | kqn28 [AT] cs.umd [DOT] edu | ![]() |
| Lee Williams | drummerx04 [AT] gmail [DOT] com | ![]() |
| Shravan Sanjiv | ssanjiv [AT] cs.umd [DOT] edu | |
| Victor Chang | vchang50 [AT] cs.umd [DOT] edu | ![]() |
| Allen Cheng | allen12 [AT] cs.umd [DOT] edu | ![]() |
| Stefan Su | stefansu [AT] cs.umd [DOT] edu | ![]() |
| Simon Schlegel | smschleg [AT] cs.umd [DOT] edu | |
| Raghav Bhasin | bhasin97 [AT] cs.umd [DOT] edu | ![]() |
| Christopher Giessner | cgiessne [AT] terpmail.umd [DOT] edu | ![]() |
| Mehdi Moaddeb | moaddebmehdi [AT] hotmail [DOT] edu | ![]() |
| Jihoon Ok* | jihoonok [AT] terpmail.umd [DOT] edu | ![]() |
| Christopher Nakamura* | cnaka [AT] terpmail.umd [DOT] edu | ![]() |
| Andrew(Mingbo) Gu* | mgu123 [AT]terpmail.umd [DOT] edu |
* This class is supported by the new Academic Peer Mentoring Program (AMP). Tutors are former cmsc216 students that will help you with the course. Keep in mind they will not be able to address grading concerns. Tutors will hold tutoring hours in the TA room. Additional information about this program can be found at http://tltc.umd.edu/amp.
| Name | Anwar Mamat |
|---|---|
| Office | AVW 3259 |
| Office Hours | Tue, Thu: 1:00-2:00 pm |
| anwar [AT] cs [DOT] umd [DOT] edu |
| Name | Nelson Padua-Perez |
|---|---|
| Office | AVW 1203 |
| Office Hours | Mon, Wed: 12:30-2:00 pm |
| nelson [AT] cs [DOT] umd [DOT] edu |
| Name | Neil Spring |
|---|---|
| Office | AVW 4133 |
| Office Hours | TBA |
| TBA [AT] cs [DOT] umd [DOT] edu |
Please see Office Hours Guidelines
All TA office hours take place in AVW 1112.
| Name | Pic | |
|---|---|---|
| Swati Singhal (Grader) | swati [AT] cs.umd [DOT] edu | ![]() |
| Snehesh Shrestha (Grader) | snehesh [AT] cs.umd [DOT] edu | |
| Peratham Wiriyathammabhum (Grader) | peratham [AT] cs.umd [DOT] edu | ![]() |
| Mahmoud Sayed (Grader) | mfayoub [AT] cs.umd [DOT] edu | ![]() |
| Mohammed Salem (Grader) | mefathy [AT] cs.umd [DOT] edu | |
| Kyungjun Lee (Grader) | kjlee [AT] cs.umd [DOT] edu | ![]() |
| Gabriella Farley | gfarley [AT] terpmail.umd [DOT] edu | ![]() |
| Stefani Moore | stemoore [AT] cs.umd [DOT] edu | ![]() |
| Ian Longo | ilongo [AT] cs.umd [DOT] edu | ![]() |
| Adam Hamlin | ahamlin2 [AT] cs.umd [DOT] edu | ![]() |
| Xi Chen | xchen141 [AT] terpmail.umd [DOT] edu | ![]() |
| Justin Park | park1996 [AT] terpmail.umd [DOT] edu | ![]() |
| Khanh Nguyen | kqn28 [AT] cs.umd [DOT] edu | ![]() |
| Lee Williams | drummerx04 [AT] gmail [DOT] com | ![]() |
| Shravan Sanjiv | ssanjiv [AT] cs.umd [DOT] edu | |
| Victor Chang | vchang50 [AT] cs.umd [DOT] edu | ![]() |
| Allen Cheng | allen12 [AT] cs.umd [DOT] edu | ![]() |
| Stefan Su | stefansu [AT] cs.umd [DOT] edu | ![]() |
| Simon Schlegel | smschleg [AT] cs.umd [DOT] edu | |
| Raghav Bhasin | bhasin97 [AT] cs.umd [DOT] edu | ![]() |
| Christopher Giessner | cgiessne [AT] terpmail.umd [DOT] edu | ![]() |
| Mehdi Moaddeb | moaddebmehdi [AT] hotmail [DOT] edu | ![]() |
| Jihoon Ok* | jihoonok [AT] terpmail.umd [DOT] edu | ![]() |
| Christopher Nakamura* | cnaka [AT] terpmail.umd [DOT] edu | ![]() |
| Andrew(Mingbo) Gu* | mgu123 [AT]terpmail.umd [DOT] edu |
* This class is supported by the new Academic Peer Mentoring Program (AMP). Tutors are former cmsc216 students that will help you with the course. Keep in mind they will not be able to address grading concerns. Tutors will hold tutoring hours in the TA room. Additional information about this program can be found at http://tltc.umd.edu/amp.
This schedule is tentative and subject to change. Keep in mind that the slides may not include all the material discussed in lecture. You are responsible for any material we present in lecture, even if it does not appear in the posted slides. Notice that code examples can be found in the grace cluster (public directory).
| Week | Topics | Slides | Readings | Work |
|---|---|---|---|---|
| CMSC216 Schedule | ||||
| Week #1 (Jan 25) |
Course Introduction, C Data Types, Operators, Input/Output, Control Statements, Active Learning |
Course-Intro.pdf C-Intro.pdf ActiveLearningWorkshop.pdf |
King's book, Chapters 1 → 6 |
|
| Week #2 (Jan 30) |
Functions, scope, C Storage Types, Linkage, sizeof, Input/Output Redirection (lab) |
C-Lang-I.pdf C-Lang-II.pdf |
King's book, 7.1 → 7.4 7.6 9.1 → 9.4 Chapter 10, 18.1→18.2 |
E1 Out (Tue) E1 Due (Fri) E2 Out (Fri) |
| Week #3 (Feb 6) |
Pointers, Arrays, Debugging/GDB (lab), Math Library(lab) |
Debugging.pdf Pointers.pdf Pointers-Arrays.pdf |
King's book, 8.1 Chapter 11, 23.3 |
Q1 (Wed) E2 Due (Wed) P1 Out (Thu) |
| Week #4 (Feb 13) |
Pointer Arithmetic, Strings, Command Line Arguments, 2-Dim Arrays |
Ptr-Arithmetic.pdf Strings.pdf CmdLine-Args-2DArrays.pdf |
King's book, 8.2, Chapter 11, 12, 13, 23.5, 23.6 |
Q2 (Wed) P1a Due (Wed) E3 Out (Fri) |
| Week #5 (Feb 20) |
Structures, Data Representation, Bitwise Operations |
Structures.pdf Data-Rep.pdf BitwiseOperators.pdf |
King's book, Chapter 16, 20.1 Bryant's book, Chapter 2 |
Q3 (Wed) E3 Due (Fri) P1 Due (Wed) P2 Out (Wed) |
| Week #6 (Feb 27) |
Formatted I/O |
IO.pdf |
King's book, Chapter 14, Chapter 22 |
Midterm I (Thu) (Lecture) P2 Due (Wed) P3 Out (Fri) |
| Week #7 (Mar 6) |
PreprocessorI, Make, Dynamic Memory Allocation, Function Pointers |
PreprocessorI.pdf Make.pdf (Lab) DynamicMemAlloc.pdf FunctionPtrs.pdf |
King's book, 15.4, 17.1 - 17.7 |
E4 Out (Thu) |
| Week #8 (Mar 13) |
Dynamic Structures, Optimization |
DynamicMemAllocII.pdf Optimization.pdf |
King's book, 20.1 |
P3 Due (Wed) E4 Due (Fri) |
| Spring Break 2017 (Mar 19-Mar 26) | ||||
| Week #9 (Mar 27) |
Assembly, Encapsulation in C (Lab) |
AssemblyI.pdf AssemblyII-If-Loops.pdf |
P4 Out (Mon) Q4 (Wed) |
|
| Week #10 (Apr 3) |
Assembly, Process Control |
AssemblyIII-CallStack.pdf AssemblyIV-ParamLocal.pdf |
Bryant's book, 1.7, 8.2 - 8.4 |
P4 Due (Wed) P5 Out (Wed) |
| Week #11 (Apr 10) |
Process Control, System I/O (read, write, file descriptors) |
ProcessControlI.pdf ProcessControlII.pdf System-IO-I.pdf (Lab) |
Bryant's book, 10.1 - 10.4, 10.8 - 10.12 |
E5 Out (Thu) P5 Due (Fri) |
| Week #12 (Apr 17) |
System I/O (dup2, pipes) |
System-IO-II.pdf |
Midterm II (Thu) (Lecture) P6 Out (Thu) E5 Due (Fri) |
|
| Week #13 (Apr 24) |
Concurrency, Time |
Concurrency.pdf Time.pdf |
E6 Out (Wed) |
|
| Week #14 (May 1) |
Signals, Libraries, Preprocessor, Course Evaluations |
Signals.pdf Libraries.pdf PreprocessorII.pdf |
Bryant's book, Chapter 2, 12.3 - 12.7 |
P7 Out (Mon) P6 Due (Tue) |
| Week #15 (May 8) |
Review |
Review.pdf |
E6 Due (Mon) P7 Due (Tue) Last Day of Classes (Thu/May 11) Final Exam (Sat/May 13 4pm-6pm) |
|
You must satisfy a minimum set of requirements for each project (Good Faith Attempt) otherwise you will not pass the course (automatic grade of F). Each project defines its own good faith attempt criteria. Notice that you will not receive extra points for completing the good faith attempt. The grade you obtain in the project will be based on your ontime/late submission.
| Project | Good Faith Attempt | Deadline |
| Project #1 | All Public Tests | Mon Feb 27 |
|---|---|---|
| Debugging Quiz | Mon Mar 6 | |
| Project #2 | All Public Tests | Fri Mar 10 |
| Project #3 | All Public Tests | Fri Mar 31 |
| Project #4 | Public Tests 01, 02, 03, 04 (05 is not included) | Mon Apr 17 |
| Project #5 | Public Tests 01, 02, 03 | Fri Apr 28 |
| Project #6 | Public Tests 00, 01, 02, 03, 06, 07, 11 | Fri May 5 |
| Project #7 | Public Tests | Thu May 11 |
After any class material is graded, you have a period to address any grading concerns. Unfortunately we will not be able to address any grading concerns after the specified deadline.
| Class Material | Grading Concerns Deadline |
|---|---|
| Exercise #1 | Wed Feb 15 |
| Quiz #1 | Wed Feb 22 |
| Project #1 (Part a) | Wed Feb 22 |
| Debugging Quiz | Mon Mar 6 |
| Quiz #2 | Wed Mar 1 |
| Exercise #2 | Wed Mar 8 |
| Exercise #3 | Wed Mar 15 |
| Project #1 | Wed Mar 15 |
| Midterm #1 | Wed Mar 29 |
| Project #2 | Fri Mar 31 |
| Exercise #4 | Fri Mar 31 |
| Project #3 | Fri Apr 14 |
| Quiz #4 | Wed Apr 12 |
| Project #5 (Part a) | Wed Apr 19 |
| InLectureExerciseApr6 | Wed Apr 19 |
| Project #4 | Wed Apr 26 |
| InLectureExerciseApr17 | Wed Apr 26 |
| Exercise #5 | Wed May 3 |
| Project #5 | Mon May 8 |
| Project #6 (Part a) | Mon May 8 |
| Midterm #2 | Mon May 8 |
| Project #6 | Wed May 10 |
| Exercise #6 | Fri May 12 |
| Project #7 | Sat May 13 |
The planned dates when projects will be handed out and due is given in the course schedule. Beware that the exact dates are subject to change, but we will try to give you fair notice of any changes.
Information can be found at Frequent Submission Problems
Project descriptions can be found in the grace cluster (along
with the project files). You can download the project
description to your computer using the link:
A few days prior to each quiz (except pop quizzes) we plan to post a worksheet on this page. The dates for the quizzes are given in the course schedule. Beware that the exact dates are subject to change, but we will try to give you fair notice of any changes.
Worksheets are not turned in and they are not graded. The problems on the worksheet are for your own benefit and are designed to prepare you for the quiz. We will not be giving answers to the worksheet problems, but if you have a question you can talk to the course TA(s).
| Worksheet | Quiz Date |
|---|---|
| Worksheet #1 | Wed Feb 8 |
| Worksheet #2 | Wed Feb 15 |
| Debugging Quiz | Wed Feb 22 |
| Worksheet #4 | Wed Mar 29 |
The planned dates when exercises will be handed out and due is given in the course schedule. Beware that the exact dates are subject to change, but we will try to give you fair notice of any changes.
Descriptions can be found in the grace cluster (along
with the exercise files). You can download the project
description to your computer using the link:
https://dav.terpconnect.umd.edu/
In case you are having problems accessing the description from grace we have included the description for the first exercise below. For future exercises you will need to download the description from the grace cluster.
| Description | Due Date |
|---|---|
| squares_table.pdf | Fri Feb 3 |
| draw_figures.pdf | Wed Feb 8 |
This page provides information regarding course exams.
| Exam | Date |
| Midterm I | Thu Mar 2 |
|---|---|
| Midterm II | Thu Apr 20 |
| Final | Sat May 13 |
We will be using (Piazza) for class communication. Regarding Piazza:
Note: In Panopto you can reduce the time you spend watching a video with some of the speed options.
The goal of the course is to convey the fundamental concepts that enable programs to execute on real hardware. Those concepts include how the operating system virtualizes the hardware to provide basic services and abstractions to enable a user program to effectively use the available hardware resources. The course also addresses how different programming constructs and idioms work.
The basic abstraction of a program running as one or more threads of control in a single flat address space (a Unix process) is the key to the course. Emphasizing that abstraction as the underlying model for understanding how a program works, from both the user program and hardware perspective (with the OS in between), run as a theme through all topics in the course. Examples include C pointers (to data and functions), function calls and runtime stack management, dynamic memory management in the heap, and the fork/exec system calls.
@2017 University of Maryland College Park, MD 20742