Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

33
Discussion Week 1 TA: Kyle Dewey

Transcript of Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Page 1: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Discussion Week 1TA: Kyle Dewey

Page 2: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Project 0 Walkthrough

Page 3: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Makefiles

Page 4: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

What?•A programmable command that can

generate new files based on existing ones

•Only that which is needed is made

main.cmain.c

helpers.hhelpers.h

helpers.chelpers.c

main.omain.o

helpers.ohelpers.o

a.outa.out

Page 5: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Why?

•The standard “gcc *.c” or “javac *.java” scales poorly

•Everything recompiled

•Cannot handle directory hierarchy

•Arbitrary builds may need an arbitrary sequence of commands

Page 6: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Basics

•Makefiles consist of a series of rules

•Each rule has optional dependencies

•The first rule is the default

rule_name: target1 target2

how to build output

Page 7: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Basics

•Dependencies can be either rule names or file names

•The process recursively follows dependencies

Page 8: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Macros

•Macros can be used to define common strings and utilities

MACRO_NAME = definition

Page 9: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Example

Page 10: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Including•Makefiles can reference other

makefiles

•Common rules

•Common macros

include ../Makefile

Page 11: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

NACHOS Makefiles

Page 12: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

C++ as it applies to NACHOS

Page 13: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Recommendation

•c++.pdf in the c++example directory is an excellent tutorial

•A bit dated, but applicable to NACHOS

Page 14: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

What is Not Seen

•Templates

•Polymorphism

•Inheritance

•References

Page 15: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Header Files

#ifndef FILE_H

#define FILE_H

// code

/* more code

* some more code */

#endif

Page 16: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Class Definitionclass MyClass {

public:

MyClass();

int doSomething( int x );

private:

int privateFunction();

int privateVariable;

};

Page 17: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Class Definition

•Generally, class definition should be done in header file

•The header file defines the interface to the class

Page 18: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Class Implementation

•Classes should generally be implemented in C++ code files (.cpp, .c++, .cc...)

•NACHOS uses the “.cc” extension

Page 19: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Class Implementation

Example#include “MyClass.cc”

MyClass::MyClass() :

privateVariable( 5 ) {}

int MyClass::doSomething( int x ) {

return x + 1; }

int MyClass::privateFunction() {

return privateVariable * 2; }

Page 20: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Memory Management

•C++ lacks a garbage collector

•Classes have user-defined destructors that specify how to perform such cleanup

•Destructor for “MyClass” has the method signature“~MyClass()”

Page 21: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Instantiating a Class

•On the stack:

•MyClass foo( 5 );

•On the stack (no-arg constructor):

•MyClass foo;

•On the heap:

•MyClass* foo = new MyClass( 5 );

•MyClass* foo = new MyClass();

Page 22: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Destructing an Instance

•On the stack, once a class goes out of scope, the destructor is automatically called

•On the heap:

•delete foo;

•“foo” is a pointer to the class instance

Page 23: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Instantiating an Array

•On the stack:

•int foo[ 5 ];

•int foo[] = { 0, 1, 2, 3, 4 };

•On the heap:

•int* foo = new int[ 5 ];

Page 24: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Destructing an Array

•Performed automatically for once out of scope for arrays on the stack

•On the heap:

•delete[] myArray;

•“myArray” is a pointer to the array

Page 25: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Destructing an Array•There is only a single dimensional

“delete[]” operator

•For a two dimensional array “myArray” of size “size”:

for( int x = 0; x < size; x++ ) {

delete[] myArray[ x ];

}

delete[] myArray;

Page 26: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

code/threads/list Example from

NACHOS

Page 27: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Assembly (Time Permitting)

Page 28: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Registers

•Programs need to use processor registers in order to execute

Page 29: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Registers

Process #100

Register Value

A 1

B 2

C 3

Process #101

Register Value

A 30

B 40

C 50

Page 30: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Swapping In

•State of registers is copied from memory to the registers

•Process resumes execution with the restored register values

Page 31: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Swapping Out

•The process’ execution is paused

•The values of the registers is saved to memory

Page 32: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

Unportable

•The need to deal directly with registers prevents the usage of portable, high-level language code

•Assembly must be used

Page 33: Discussion Week 1 TA: Kyle Dewey. Project 0 Walkthrough.

switch.s