We will explain the enduring concepts underlying all computer systems, and show the concrete ways that these ideas affect the correctness, performance, and utility of any application program.

This course serves as an introduction to the students who go on to implement systems hardware and software.  But this course also pushes students towards becoming the rare programmers who know how things work and how to fix them when they break.  It is not a course reserved to geeks, it is a course for all programmers!

 


TDs: The TDs are the heart of the course and will illustrate how to put the above at work in everyday programming practice.  Among other things we will reverse-engineer a binary program, implement a buffer overflow attack, optimise a processor design, and implement our own memory allocator.

Student's background: We assume that the student has familiarity with programming.  Experience with C or C++ languages is a plus, but If your only prior experience is with Java we will help.  We do not assume any prior experience with hardware, machine language, or assembly-language programming.

Language: Lectures will be in French or English, as requested by the students.
Exam and grading: Labs are graded + a final written exam.
ECTS credits: 4