# Welcome to CMPT 295 ## Introduction to Computer Systems My name is Anne Lavergne Lecture 1 – Course Overview + Activity ## Today’s Menu [1] * COVID Protocol * What is CMPT 295? * What shall we learn in CMPT 295? * What should we already know? * Which resources do we have to help us learn all this? * Activity * Questions ## COVID protocol – About masks! [2] Here is a message from Elizabeth Elle, SFU Vice Provost Learning & Teaching, based on the public health order: * Unless we have an approved exemption, we are required to wear a mask in all indoor common and learning spaces, including classrooms. Please come to campus prepared with a non-medical mask. * If we forget our mask, disposable masks are available from Student Central in Burnaby and at the information desks in Vancouver and Surrey. * If we require a mask exemption in the classroom for medical reasons, please contact the Centre for Accessible Learning at cal_admin@sfu.ca for assistance. * If we are requesting mask exemptions on other protected grounds, such as religion, we can contact the Office of Student Support, Rights and Responsibilities at student_support@sfu.ca. * And please remember to be kind to each other. If we see someone not wearing a mask, do not make assumptions or judgments as that person may be exempt. ## What is CMPT 295? [3] * The goal of this course is to give us, software developers, a look “under the hood” of a computer, i.e., to learn about Computer Systems => microprocessor, memory, … a car with its hood up. * This knowledge will allow us to become more efficient software developers ## The big picture: [4] In CMPT 295, we shall learn … * C programs (.c) -- How our code and data are represented in memory * Assembly programs (.s) -- How a compiler transforms our code into machine executable code in several steps * Object (.o) file an executable -- How a compiler optimizes (or not) our code * Computer executes it -- How a microprocessor is designed and how it executes our code * CPU, Memory -- How memory is designed How all of this can impact the execution of our code How to write more efficient and reliable code: * Be able to find and eliminate bugs more efficiently * Be able to ascertain program performance and tune it by optimizing our code ## What should we already know? [5] * Write correct C programs * C constructs (variables, data types, pointers, if/else, switch/case, for/while/do while, function calls, arrays, …) * What a stack is and how it works * Binary/decimal/hexadecimal numeral systems * How to convert from one numeral system to the others * Basic arithmetic * Perform Boolean algebra using and, or, not, xor ## Which resources do we have? [6] * Course web site https://www2.cs.sfu.ca/CourseCentral/295/alavergn/index.html * Textbook * Computer Systems: A Programmer's Perspective, 3/E, Randal E. Bryant, David R. O'Hallaron, Pearson, 2016 * Labs in CSIL (Computing Science Instructional Lab) * Target Machine: CSIL workstation * Linux platform (or OS) * C programming language * x86-64 assembly language * gcc compiler * Instructor and TAs - Office hours ## Activity - Discover our resources [7] Instructions: 1. Form teams of 3 to 4 2. Do Lecture 1 Activity on CourSys 3. Time: about 30 minutes ## Question? [8] Blank page. ## Summary [9] * COVID Protocol * What is CMPT 295? * What shall we learn in CMPT 295? * What should we already know? * Which resources do we have to help us learn all this? * Activity * Questions ## Next Lecture [10] * Data Representation * Representing information as bits * To get ready for our next lecture: * Optional: Read Chapter 1 of textbook * Not so optional: Read Section 2.1 of Chapter 2 * Download the partial lecture notes found under the column Lecture in the table on our course web site