PSU CS 201: Computer Systems Programming

Winter 2016

Instructor: Bart Massey <>
Time: Tuesday/Thursday 14:00-15:50 (2:00-3:50 PM)
Place: TBA
CRN: 45910

TA: Hao Wu <>
TA office hour: Thursday 12:15-1:45 PM at FAB fishbowl

As always, this is a tentative syllabus. Everything here is subject to vast change with little notice.

About This Course

This course teaches thinking about computers as hardware on which software runs, and thinking about software as something that runs on hardware. This is a crucial perspective for the practicing computer scientist who wants to connect their work with the real world. It is even more crucial for the industry practitioner; efficiency, correctness and security often depend on understanding low-level details and inner workings of computer systems.

Course Description

The catalog says "Introduction to computer systems from a software perspective." It then proceeds with a long list of specific topics in that vein.

In this course, we will learn how computer programs are executed by a computer system. We will explore low-level representations of instructions and data. We will learn about how the various software components of modern computer systems interact with the sophisticated hardware underneath.

Course Goals

The catalog says:

Introduce computer systems from a software perspective. Teach C and assembly language programming and reading skills. Teach basic systems programming skills and tools. Show how to measure and improve program performance based on an understanding of key aspects of machine architecture.

The catalog's list of course goals is that students be able to:

  • Describe basic computer system organization including the operating system (processes, files, virtual memory) and the underlying hardware (CPU, registers, memory hierarchy).

  • Describe the compilation system (preprocessing, assembling, compiling, and linking) and the function of object/executable files and shared libraries, as well as how basic system utilities such as debuggers and Makefiles work.

  • Write C programs to illustrate basic systems programming concepts, including file I/O, system calls, memory management, exception handling and process management.

  • Do arithmetic in hexadecimal, decimal, octal, and binary notation, and convert among these notations.

  • Explain how data types such as integers, characters, floating point numbers, arrays, pointers, and structures are represented.

  • Describe the basic instruction set architecture for the IA32 family (or similar machine), including the arithmetic/logic instructions, registers, memory model and addressing, and control instructions.

  • Explain how high-level programming constructs such as loops and stack-based function calls are implemented in underlying machine code.

  • Explain how exceptions, traps, and context switches occur and how they are handled at the machine level.

  • Explain the performance impact of hardware features such as pipelining, and architecture principles such as memory locality.

  • Use profiling and timing facilities to identify performance bottlenecks in C programs.

Seems like enough for 10 weeks.

Course Mechanics

This course is a high-effort essential part of the PSU undergraduate CS curriculum. There will be lectures, quizzes, examinations and homework. Anonymous peer review will be a part of the course activity.


The course website (see above) will be the focus of communication. Students are encouraged to contact the instructor any time by email for an appointment if there are things that seem worth discussing. Special and/or regular office hours will be run by the TA and occasionally by the instructor.


The course lectures will cover a variety of topics. Please attend them all; they are required and should be useful.


The course textbook is

Computer Systems: A Programmer's Perspective (3rd ed.)
Bryant and O'Hallaron, Pearson 2016

Sadly, you will need the third edition, as it switches from x86 to x86-64 for the target architecture. The book is expensive, but quite complete and clear.


There will be many in-class assignments and weekly quizzes. You need to be in class every session. If you cannot make it to class, please contact the TA in advance of the class meeting. The TA will advise you on how to deal with the situation.

There will be a midterm examination and a final examination. These are likely to have a laboratory component.


  • Homework: 30%
  • In-class quizzes: 30%
  • Midterm : 20%
  • Final: 20%

Due to the size of the course and the volume of material to be covered, late assignments will not be accepted. A grade of 0 may be given to any assignment not turned in on time; failing any one assignment is grounds for failure in the course.

Anonymous peer evaluation will be a component of assignment grading. A student will be graded both on the assignment itself and on the student's grading of the assignment of others.

Hardware and Software

This class is x86-64 UNIX-based. You will need access to a genuine actual x86-64 computer running Linux, BSD or some other form of UNIX for in-class and out-of-class work. It is highly recommended that you bring an appropriate laptop to class. If you cannot afford a laptop, you may:

  • Borrow one from the Department for the quarter. Contact the Department Chair.

  • Go to FreeGeek in Southeast Portland, which has quite affordable laptops and may even provide them free in hardship situations.

The Linux Lab is also available.

Academic Honesty

If you do something that violates the University's or the Department's Student Conduct code, there will be the most severe penalties I can manage. In particular, if you plagiarize (use other people's ideas, text, or code without acknowledgment) I will do what I legally and ethically can to end your academic career. If you have questions, please contact me for clarification.

Last modified: Friday, 8 January 2016, 1:48 PM