33
Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11

Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Discussion Week 1TA: Kyle Dewey

Sunday, September 25, 11

Page 2: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Project 0 Walkthrough

Sunday, September 25, 11

Page 3: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Makefiles

Sunday, September 25, 11

Page 4: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

What?• A programmable command that can

generate new files based on existing ones

• Only that which is needed is made

main.c

helpers.h

helpers.c

main.o

helpers.o

a.out

Sunday, September 25, 11

Page 5: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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

Sunday, September 25, 11

Page 6: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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

Sunday, September 25, 11

Page 7: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Basics

• Dependencies can be either rule names or file names

• The process recursively follows dependencies

Sunday, September 25, 11

Page 8: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Macros

• Macros can be used to define common strings and utilities

MACRO_NAME = definition

Sunday, September 25, 11

Page 9: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Example

Sunday, September 25, 11

Page 10: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Including

• Makefiles can reference other makefiles

• Common rules

• Common macros

include ../Makefile

Sunday, September 25, 11

Page 11: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

NACHOS Makefiles

Sunday, September 25, 11

Page 12: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

C++ as it applies to NACHOS

Sunday, September 25, 11

Page 13: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Recommendation

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

• A bit dated, but applicable to NACHOS

Sunday, September 25, 11

Page 14: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

What is Not Seen

• Templates

• Polymorphism

• Inheritance

• References

Sunday, September 25, 11

Page 15: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Header Files

#ifndef FILE_H

#define FILE_H

// code

/* more code

* some more code */

#endif

Sunday, September 25, 11

Page 16: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Class Definitionclass MyClass {

public:

MyClass();

int doSomething( int x );

private:

int privateFunction();

int privateVariable;

};Sunday, September 25, 11

Page 17: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Class Definition

• Generally, class definition should be done in header file

• The header file defines the interface to the class

Sunday, September 25, 11

Page 18: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Class Implementation

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

• NACHOS uses the “.cc” extension

Sunday, September 25, 11

Page 19: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Class Implementation Example

#include “MyClass.cc”

MyClass::MyClass() :

privateVariable( 5 ) {}

int MyClass::doSomething( int x ) {

return x + 1; }

int MyClass::privateFunction() {

return privateVariable * 2; }

Sunday, September 25, 11

Page 20: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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()”

Sunday, September 25, 11

Page 21: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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();

Sunday, September 25, 11

Page 22: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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

Sunday, September 25, 11

Page 23: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Instantiating an Array

• On the stack:

•int foo[ 5 ];

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

• On the heap:

•int* foo = new int[ 5 ];

Sunday, September 25, 11

Page 24: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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

Sunday, September 25, 11

Page 25: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

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;

Sunday, September 25, 11

Page 26: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

code/threads/list Example from

NACHOS

Sunday, September 25, 11

Page 27: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Assembly (Time Permitting)

Sunday, September 25, 11

Page 28: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Registers

• Programs need to use processor registers in order to execute

Sunday, September 25, 11

Page 29: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Registers

Process #100Process #100

Register Value

A 1

B 2

C 3

Process #101Process #101

Register Value

A 30

B 40

C 50

Sunday, September 25, 11

Page 30: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Swapping In

• State of registers is copied from memory to the registers

• Process resumes execution with the restored register values

Sunday, September 25, 11

Page 31: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Swapping Out

• The process’ execution is paused

• The values of the registers is saved to memory

Sunday, September 25, 11

Page 32: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

Unportable

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

• Assembly must be used

Sunday, September 25, 11

Page 33: Discussion Week 1 · Discussion Week 1 TA: Kyle Dewey Sunday, September 25, 11. Project 0 Walkthrough Sunday, September 25, 11. Makefiles ... B 2 C 3 Process #101 Register Value

switch.s

Sunday, September 25, 11