CPSC213 Syllabus

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

CPSC 213 101/102 Introduction to Computer Systems

Jump to Today
Instructor: Jonatan Schroeder
Course Pre-requisites

CPSC 210
CPSC 121

Overview

The primary goal of 213 is to help you develop a model of computation that is rooted in what really
happens when a program executes.

In the first half of the course you will implement a simple instruction set in a hardware simulator and
then examine how features of C are implemented in this instruction set. We will refer back to Java
when considering memory management and polymorphism and to Dr Racket when considering
functions as parameters. You will also develop an ability to read and understand small assembly-
language programs.

In the second half of the course, I/O devices and asynchronous programming are introduced.
Asynchrony is used to motivate threads and threads to motivate synchronization. You will see both how
these abstractions are implemented and how they are used. You will see the connection between thread
switch and procedure call. You will be introduced to the notion of atomicity and see why atomic
memory-exchange operations are needed to implement synchronization. You will also examine the
difference between busy and blocking waiting and solve a set of problems using monitors and
condition variables and semaphores in C.
Overall Learning Goals

In this course you should aim to:

Be a better programmer:
have a deeper understanding of the features of a programming language;
understand in detail how your programs are executed;
be able to more easily learn new programming languages;
be able to evaluate design tradeoffs in considering languages most appropriate for solving a given
problem.
Appreciate that system design is a complex set of tradeoffs: a system will not have exactly one
optimal answer, there are often many sub-optional answers.
Experience with tradeoffs prepares you to deal with tradeoffs in design in real world programming
scenarios.
Develop distinctions between static and dynamic components of programs and systems and be able
to describe their implications.
Utilize synchronization primitives to control interaction in various situations including among
processes, threads, and networked communication.
In summary: Understand how computing systems work.
Topics

The course will explore topics concerning:

Numbers and Memory


Static Scalars and Arrays
Instance Variables and Dynamic Allocation
Static Control Flow
Procedures and Stack
Dynamic Control Flow
I/O Devices and Asynchronous Programming
Virtual Processors (Threads)
Synchronization

Textbook

See the Textbook and References page.


Statement of Academic Integrity

The academic enterprise is founded on honesty, civility, and integrity. As members of this enterprise, all
students are expected to know, understand, and follow the codes of conduct regarding academic
integrity. At the most basic level, this means submitting only original work done by you and
acknowledging all sources of information or ideas and attributing them to others as required. This also
means you should not cheat, copy, or mislead others about what is your work. Violations of academic
integrity (i.e, misconduct) lead to the breakdown of the academic enterprise, and therefore serious
consequences arise and harsh sanctions are imposed. For example, incidences of plagiarism or cheating
may result in a mark of zero on the assignment or exam and more serious consequences may apply if
the matter is referred to the President’s Advisory Committee on Student Discipline. Careful records are
kept in order to monitor and prevent recurrences.

You might also like