CS 270, Systems Programming, Fall 2019

CS 270 is a general introduction to computer systems. Its goal is to provide an overall view of the components that make up a computer system and the ways in which programs interact with those components. The course touches on a broad range of topics, including hardware, assembly language, compilers, operating systems, networking, and client-server interaction. It presents topics from a programmer's perspective, hoping to develop a complete understanding of what happens when a program is executed. The course also introduces useful programming and debugging tools that can assist students in creating robust and efficient code. The course provides foundational programming skills required by many upper level classes.

More specifically, the course touches on hardware instruction sets, data representations, assembly and machine-level program representations, translation from C to assembly language, linking and loading, multiprogramming and multitasking, process and thread management, memory management, virtual memory, file I/O, network programming, and client-server protocols.

Learning Outcomes

Students will acquire knowledge of computer systems and how to program them. More specifically, students will be able to:

  1. understand overall computer system structure and operating system design.
  2. understand how specific high-level language program constructs are implemented in assembly language.
  3. effectively use a debugger.
  4. understand the concepts of processes and threads and use them to achieve concurrent execution.
  5. understand the interfaces provided by the memory-management component of the operating system.
  6. use the interfaces provided by the file system in developing applications.
  7. use a networking API (application programming interface) to create networked applications.

Times and places

Class CB 122 MWF 1:00p ‒ 1:50p
Instructor Raphael Finkel
Web http://www.cs.uky.edu/~raphael/courses/CS270.html
Email raphael @cs.uky.edu
Office Hardymon 230 (7-3885)
Office hours M 9:00a-10:30p, R 2:00p-3:30p.

Course Prerequisites

The course assumes a basic understanding of computer hardware. It also assumes a basic level of proficiency in the C or C++ programming language. Students should have completed or be simultaneously enrolled in EE 280. Students must have taken CS 216. Completion of CS/EE 380 is helpful but not required. It is helpful to have more advanced programming skills; see http://www.cs.uky.edu/~raphael/programming.html for a refresher.


The class has five in-class laboratories and five projects. These exercises all use virtual machines that students can access from their own computers. Students must bring laptop computers to the in-class laboratories. The purpose of all these exercises is to prepare for the assignments and to expose students to the challenges of developing robust and efficient software.

Students submit all projects and in-class lab assignments electronically via the CS Portal: https://www.cs.uky.edu/csportal. This class does not use Canvas.


The required textbook is Randal E. Bryant and David R. O'Hallaron, Computer Systems: A Programmer's Perspective (3rd edition), Pearson, 2016, ISBN-13: 978-0-13-409266-9. The webpage for the book is at http://csapp.cs.cmu.edu. The textbook has an associated "student site" at http://csapp.cs.cmu.edu/3e/students.html, with pointers to helpful resources for the C language and the Linux operating system/programming environment, as well as additional resources for specific textbook chapters. One can likely get a 2nd edition copy for much less money, and it will mostly serve, although the 3rd edition is more complete with respect to 64-bit instructions.

The following books are not required, but they may be helpful as additional sources of information.

  1. Andrew S. Tannenbaum, Structured Computer Organization 5th edition, Prentice Hall, 2006
  2. Kernighan and Richie, The C Programming Language 2nd edition, Prentice Hall, 1988.
  3. Brian Kernighan and Rob Pike, The Unix Programming Environment, Prentice-Hall, 1984.
  4. Rodriguez, Fischer, and Smolski, The Linux Kernel Primer Prentice Hall, 2006
  5. William Stallings, Operating Systems: Internals and Design Principles, 6th edition, Prentice Hall, 2009.
  6. Andrew S. Tanenbaum, Modern Operating Systems, 4th edition, Prentice Hall, 2015.
  7. Andrew S. Tanenbaum, Operating Systems Design and Implementation, 3rd edition, Prentice Hall, 2006.
  8. Raphael Finkel, An Operating Systems Vade Mecum, 2nd edition, Prentice Hall, 1988. ftp://ftp.cs.uky.edu/cs/manuscripts/vade.mecum.2.pdf


There will be two exams: an in-class midterm and a final. The final exam will only test material in the course covered after the midterm.


The following is a very tentative with respect to subjects covered.

Aug 26 
Sep 2 
Sep 9 La 
Sep 16  
Sep 23 
Sep 30 Lb 
Oct 7 
Oct 14  
Oct 21 9c 
Oct 28 10 10 
Nov 4 10 10 
Nov 11 10 11 11d
Nov 18 11 11 11 
Nov 25 11 
Dec 1 11 11 11e 
Dec 9 11 11f 11 
Dec 18  i
Code Meaning
1‒15 Chapter in the textbook
Project 1 due at 1 PM
Project 2 due at 1 PM
Project 3 due at 1 PM
Project 4 due at 1 PM
Project 5 due at 1 PM
Absolute deadline for submitting work, 1PM
Midterm exam
Discuss midterm exam
In-class laboratory
No class - University holiday
No class - Religious holiday
Final: Wednesday Dec 18 1:00‒3:00pm


Students will be graded 50% on projects, 40% on exams (30% on each student's better exam, 10% on the other one), 5% on attendance, and 5% on in-class lab assignments. Final grades will be assigned according to the following scale: A=90-100%, B=80-89%, C=70-79%, D=60-69%, E=0-59%. I generally do not give incomplete grades.

Late penalty

Projects are due at the start of class on the days indicated above. Laboratory assignments should be done during class on the indicated days, but they will be accepted until midnight that night. After that time they will get a 0 grade.

Late projects are penalized 3% (of the total possible points) per day for each day late, not including weekend or holidays. The maximum penalty is 7 days late; after that, one may hand in an assignment and still get 79%. However, the absolute deadline is class time on Wednesday of the last week of classes. No extra credit is available on late projects. A student who turns in a project early gains early credits (which also ignore weekends and holidays), which are only used to offset late penalties on other assignments but have no other value.

Attendance policy

Attendance is mandatory. If you attend 80% or more of the classes (ignoring classes for which you have an excused absence), you get the full 5 points. If you attend fewer than 80%, you get 0 attendance points. I'll make reasonable allowances for family emergencies, medical events (suitably documented at Tier 2 or Tier 3), job interviews (with verification) or religious observances (inform me in writing during the first week of class).

Responsible use of computers

Students must use the computing facilities on campus in accordance with standards of honesty and personal conduct. Those standards, outlined in the University of Kentucky Policy governing access to and use of University of Kentucky computing resources , available at https://www.uky.edu/regs/sites/www.uky.edu.regs/files/files/ar/ar10-1.pdf, call for all members of the community to act in a responsible, ethical, and professional way.


All academic work, written or otherwise, that you submit is expected to be the result of your own thought, research, or self-expression. You may certainly discuss the assignments with each other, but you must not show each other your work; everyone must develop the assignments completely independently. It is a serious offense to allow other students to copy your work or to copy the work of other students (even if it is in a public computer file or on github based on similar assignments). If you borrow ideas, algorithms, wording, or code from other sources, you must acknowledge that fact or you have committed plagiarism. You may not use any code you find on the Internet. If you re-use code you acquired in a previous course, insert a comment indicating what course provided the code. If you directly take more than about 4 words in a row from any source, you must indicate that you have done so, typically with a footnote or an in-line citation, using indentation or quote marks to set off the quoted text. (Some of this text was taken years ago from an online plagiarism guide that I can no longer find.)  I punish offenses against this policy quite strictly.