discussion week 1 · discussion week 1 ta: kyle dewey sunday, september 25, 11. project 0...
TRANSCRIPT
![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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071219/60589a0b7907e439c30b4885/html5/thumbnails/33.jpg)
switch.s
Sunday, September 25, 11