globe1 Image dept Image
course Title


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.


PrerequisiteC or better in CMSC132 and MATH 141
CorequisiteCMSC 250(or equivalent)

Course Coordinator

Name Office
Nelson Padua-Perez   AVW 1203

For office hours and other contact information, visit the staff link.


Title Authors ISBN Type
Computer Systems: A Programmer’s Perspective, 2nd edition R.E. Bryant and D. R. O’Hallaron 0–13–610804–0 Required
Pointers on C K.A. Reek 0–673–99986–6 Recommended

Course Topics (Subject to Change)

  • Unix Memory Model
  • Moving from Java to C
  • Pointers and dynamic data structures in C
  • I/O, standard libraries
  • Testing
  • Assembly Language
  • Process control
  • Systems programming
  • Program measurement and optimization
  • Multithreaded programming with pthreads
  • Libraries and linking
  • Dynamic memory management


Final grades will be computed according the following weights:

35% Projects(6)
16% Quizzes/Lab Exercises
24% Midterms(3) (8% each)
25% Final Exam

The weights of the individual projects are: (5%,6%,7%,6%,6%,5%)

About Quizzes

Quizzes will be in lab or lecture and some could be unannounced pop quizzes.

Project Deadlines

All projects are due at 6pm on the specified day in the project description. If for some reason you have not been able to finish your project by this deadline, then you have until 9am of the next day to submit your project with a 20% penalty. Projects are to be submitted electronically according to instructions given with the projects.  Exceptional circumstances will be considered only if discussed with the instructor before the project is due.

Which Project Gets Graded

Your grade for an project will be based on the greater value of two scores: (1) The score on the very last compilable submission prior to the deadline; (2) The score minus 20% on the very last compilable submission prior to the late deadline.

Good-Faith Attempt

Understanding programming concepts is a hands-on activity, and so all students are expected to complete and submit all programming projects. The instructor reserves the right to fail, regardless of overall numeric score, any student who does not submit a good-faith effort to complete all projects. In this context, a good-faith effort means that a project works on at least 75% of the public tests. This means that, even if the late deadline has passed for a project, you must still submit a reasonably complete version of the project in order to be able to pass the course, although you will not receive any score for it. If you have any questions, discuss your situation with your instructor in person.

Closed Projects

Unless stated otherwise by the instructor, all programming assignments are to be written individually. Cooperation between students on exams, quizzes, or projects is a violation of the Code of Academic Integrity.

About Graded Material

Once we have graded any class material (e.g., exams, projects, etc.) we will post an announcement that the specific assignment has been graded, and the 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.


Students are responsible for all material covered, and all announcements, deadlines, policies, etc., discussed in lecture and discussion section, regardless of whether they were in class to hear the information or not. It’s understood that students may occasionally have to miss class for various reasons, but email and office hours are not intended as a replacement for class attendance. Consequently, only students who typically and regularly attend class will receive assistance during office hours.

Instructional Assistance

As a general rule, the instructional staff prefers to provide help with projects and course material in person, as opposed to via email, as a face-to-face, real-time discussion is much better suited to helping students understand concepts and debugging programs. While we will often make an attempt to answer questions raised in email, please understand that we may have to direct you to ask the question in person during office hours instead so that we can adequately answer your question; specifically, debugging questions will not be answered via email. Therefore please ask questions about projects in person, either during office hours, or before or after class.

Class Announcements

Class announcements are located at Class Announcements. You should check announcements often (at least once every day). You can also receive the class announcements by subscribing to the announcements RSS Feed and receive announcements via your favorite RSS reader (see the Resources section for additional information).

Computing Environment

OIT Grace Cluster

Programming will be done on the OIT Grace Cluster, in particular on the two Linux machines that can be accessed at Students will use their own Glue (also known as TerpConnect) accounts to access the Grace cluster and do coursework, so students who don’t have a Glue account yet should request one online immediately by going to the following link:

Project Submissions

Project submission will be done using the same CMSC project submission and testing server used in earlier introductory courses, which can be reached at the following link:

However, you will use a different mechanism to turn projects in to the server than was used in earlier introductory courses. Details will be provided later on. Unlike earlier courses, the program development environment will not be the Eclipse IDE, but rather command–line use of Linux.

While students may use other environments to develop their programs, to be judged correct, a project must build and work correctly on the Linux Grace systems, with the compilation method and compiler options specified for that project.

About Project Submissions

Projects must be submitted electronically using the CMSC project submission and testing server. Attempts to submit a project using any other means (such as an emailed project) will not be considered. Only the projects electronically submitted via the submit server can be graded; it is each student’s responsibility to test their program and verify that it works properly before submitting, and to check a project’s results on the public tests on the submit server after submitting it.

Project extensions will not be given to individual students as a result of system problems, network problems, power outages, etc., so do not leave submitting a project until just before it is due. It is strongly suggested you finish and submit your program at least one day early, to allow time to reread the project assignment and ensure you have not missed anything that could cause you to lose credit on the project.

Any hardcoding in a project assignment will result in a score of zero for that project. Hardcoding refers to attempting to make a program appear as if it works correctly and actually calculates and computes correct results, when for some reason it actually does not do so. Examples would include a program that prints the desired output instead of computing it, or a program that works only because it takes advantage of properties that the public test cases happen to have, etc. These are only a few examples; if you have any question about whether a particular situation would constitute hardcoding be sure to ask ahead of time.

Academic Honesty

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. You are allowed to use the Web for reference purposes, but you may not copy code from any website or any other source. 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. Without exception every case of suspected academic dishonesty will be referred to the Office. If the student is found to be responsible of academic dishonesty, the typical sanction results in a special grade "XF", indicating that the course was failed due to academic dishonesty. More serious instances can result in expulsion from the university. If you have any doubt as to whether an act of yours might constitute academic dishonesty, please contact your TA or the course coordinator.

The University of Maryland, College Park has a nationally recognized Code of Academic Integrity, administered by the Student Honor Council.  This code sets standards for academic integrity at Maryland for all undergraduate and graduate students. As a student you are responsible for upholding these standards for this course. 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

To further exhibit your commitment to academic integrity, remember to sign the Honor Pledge on all examinations and assignments: "I pledge on my honor that I have not given or received any unauthorized assistance on this examination (assignment)."

Excused Absence and Academic Accommodations

Excused absences are given for quizzes and exams. Also project/homework extensions (of short duration, depending upon severity of illness) are possible. Students requesting an excused absence/extension should contact the instructor for additional information.

It is also the student's responsibility to inform the instructor of any intended absences from exams for religious observances in advance. Notice should be provided as soon as possible but no later than the Monday prior to the exam for midterm(s) and the final.

Any student eligible for and requesting reasonable academic accommodations due to a disability is requested to provide, to the instructor in office hours, a letter of accommodation from the Office of Disability Support Services within the first two weeks of the semester.

Evaluation System (CourseEvalUM)

Your participation in the evaluation of courses through CourseEvalUM is a responsibility you hold as a student member of our academic community. Your feedback is confidential and important to the improvement of teaching and learning at the University as well as to the tenure and promotion process. Please go directly to the website ( to complete your evaluations. By completing all of your evaluations each semester, you will have the privilege of accessing online, at Testudo, the evaluation reports for the thousands of courses for which 70% or more students submitted their evaluations.

You can find more information, including periodic updates, at the IRPA course evaluation web site


All course materials are copyright Pete Keleher and Jan Plane (and other CMSC faculty and instructors) © 2011. 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.