Monday, November 28, 2016

Week 12 Network Programming

This week we will wrap up our coverage of the memory hierarhy with virtual memory. We will then transition into discussing how processes communicate over a network. In particular, we will focus on the general structure of a network-based program and look at how to implement programs in C that communicate across the network.


Tuesday, November 15, 2016

Week 11 Memory Hierarchy, Caches, & Virtual Memory

This week we will look at the memory hierarchy and caches at the hardware level. In particular, we will see how caches leverage spatial and temporal locality to improve the performance of data access.







Tuesday, November 8, 2016

Week 10 Processes

This week we will begin to look at how programs are represented by the operating system when they are executing. We will also explore ways in which we can manipulate processes programmatically in C.




Monday, October 31, 2016

Week 09 Machine-Level Representation of Programs & Processes

This week we will begin to look at how programs are represented by the operating system when they are executing. In addition, we will begin to look at some ways in which we can manipulate processes programmatically in C. Before we get to processes, however, we still have some additional work to complete for our coverage on the representation of programs as the assembly level.





Monday, October 24, 2016

Week 08 Machine-Level Representation of Programs

This week we will focus on how C is compiled into x86 assembly and how programs are represented at the machine-level. In particular, we will look at specific parts of an x86 processor that become available to us at the assembly level (registers and memory).  We will see how immediates, registers, and memory are accessed through a variety of addressing modes.  We will explore a few instructions that let us move data to and from different memories as well as a list of arithmetic instructions that are available in the machine.  We will see how functions are implemented in x86 using the call and ret instructions and how to manage the stack. We will also explore how functions are represented at the assembly level and look at a number of examples of C programs and how they are compiled to x86 assembly.

Sunday, October 16, 2016

Week 07 Loading, Linking, and Machine Organization

This week we will be looking at how C programs (and programs in general) are loaded and linked into your machine's memory.  In particular, we will follow on from C libraries to discuss how they are statically or dynamically linked.  We will take a a deeper look into the compilation system: the preprocessor (cpp), the compiler (cc1), assembler (as), and linker (ld).

We will also begin our exploration of the processor architecture, instructions, assembly, machine code, and the fetch-decode-execute cycle. This will prepare us for how C is compiled into x86 assembly and how programs are represented at the machine-level. In particular, we will look at specific parts of an x86 processor that become available to us at the assembly level (registers and memory). We will see how immediates, registers, and memory are accessed through a variety of addressing modes. We will explore a few instructions that let us move data to and from different memories as well as a list of arithmetic instructions that are available in the machine. We will see how functions are implemented in x86 using the call and ret instructions and how to manage the stack.

Wednesday, October 12, 2016

Week 06 Midterm Exam

This week we have the midterm exam in class on Thursday. Please bring a pencil or dark pen to fill out a bubble sheet of your responses. The exam contains 30 multiple choice and true/false style questions and 3 open response questions. Make sure you are prompt in getting to class. The exam will be handed out at the beginning of class and you will have exactly 75 minutes to complete and hand in the exam.