64
CS33 Intro to Computer Systems I–1 Copyright © 2019 Thomas W. Doeppner. All rights reserved. CS 33 Introduction to Computer Systems

01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–1 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

CS 33Introduction to Computer Systems

Page 2: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome!• Prof: Tom Doeppner• HTAs: Ilan Bigio, Peter Cho, Kielan Donahue, Lisa

Phinisee• UTAs: Ariana Barzinpour, Chris Avalos, Casey Nelson,

Christine Wang, Conrad Zborowski, David Charatan, Delmy Garcia, Daphne Li-Chen, Daniel Park, David Promisel, Ethan Sattler, Evan Velasquez, Grace Bramley-Simmons, Gus Cantieni, Garret Kern, George Lee, Isa Milefchik, Jason Fischman, Jarrett Huddleston, Jason Ludmir, Symone Houston, Katherine Kwan, Raghu Nimmagadda, Mohammad Amoush, Moustafa Makhlouf, Nazem Aldroubi, Prithu Dasgupta, Rahul Dey, Rudra Srivastava, Rachel Wang, Shelley Jain, Star Su, Tim Park, William Adriance, William Jurayj, Zsozso Biegl

Page 3: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–3 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

What You’ll Learn

• Programming in C• Data representation• Programming in x86 assembler language• High-level computer architecture• Optimizing programs• Linking and libraries• Basic OS functionality• Memory management• Network programming (Sockets)• Multithreaded programming (POSIX threads)

Page 4: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–4 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Prerequisites:What You Need to Know

• Ability to program in an object-oriented or procedural language (e.g., Java)

– CS15 or CS18

Page 5: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–5 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

What You’ll Do

• Twelve 2-hour labs (done in pairs)• Nine one- to two-week programming

assignments– most will be doable on OSX as well as on SunLab

machines• No exams!• Top Hat for in-class quizzes

– not anonymous: a small portion of your grade– full credit (A) for each correct answer– partial credit (B) for each wrong answer– NC for not answering– one to three or so questions per class

Page 6: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–6 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Grad Students

• You’re welcome to take the class!• Weekly homeworks, just for you

– 10% of your grade– ugrads encouraged to try them, but we’ll grade only

those of grad students• Send me email if youʼd like to register

Page 7: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–7 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Gear-Up Sessions

• Optional weekly sessions– handle questions about the week’s assignment and

course material– generally Thursdays, 7-8pm

» the first will be Monday, September 9– in CIT 165 (Motorola)

Page 8: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–8 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Collaboration Policy• Learn by doing• You may:

– discuss the requirements with others– discuss the high-level approach with others

• Write your own code• Debug your own code• If you get stuck debugging

– others may help you debug– may not give you solutions or test cases

• Acknowledge (in README) those who assist you

• We run MOSS on all relevant assignments– your MOSS score will be supplied with your grade

Page 9: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–9 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Textbook

• Computer Systems: A Programmer’s Perspective, 3rd Edition, Bryant and O’Hallaron, Prentice Hall 2015

Page 10: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–10 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Page 11: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–11 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

If Programming Languages Were Cars …

• Java would be an SUV– automatic transmission– stay-in-lane technology– adaptive cruise control– predictive braking– gets you where you want to go

» safe» boring

• Pyret would be a Tesla– you drive it like an SUV

» definitely cooler» but limited range

Page 12: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–12 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

If Programming Languages Were Cars …

• C would be a sports car– manual everything– dangerous– fun– you really need to know what you’re doing!

Page 13: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–13 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

U-Turn Algorithm(Java and Pyret Version)

1. Switch on turn signal2. Slow down to less than 3 mph3. Check for oncoming traffic4. Press the accelerator lightly while turning the

steering wheel pretty far in the direction you want to turn

5. Lift your foot off the accelerator and coast through the turn; press accelerator lightly as needed

6. Enter your new lane and begin driving

Page 14: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–14 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

U-Turn Algorithm(C Version)

1. Enter turn at 30 mph in second gear2. Position left hand on steering wheel so you can

quickly turn it one full circle3. Ease off accelerator; fully depress clutch4. Quickly turn steering wheel either left or right as

far as possible5. A split second after starting turn, pull hard on

handbrake, locking rear wheels6. As car (rapidly) rotates, restore steering wheel to

straight-ahead position7. When car has completed 180° turn, release

handbrake and clutch, fully depress accelerator

Page 15: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–15 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

History of C

• Early 1960s: CPL (Combined Programming Language)

– developed at Cambridge University and University of London

• 1966: BCPL (Basic CPL): simplified CPL– intended for systems programming

• 1969: B: simplified BCPL (stripped down so its compiler would run on minicomputer)

– used to implement earliest Unix• Early 1970s: C: expanded from B

– motivation: they wanted to play “Space Travel” on minicomputer

– used to implement all subsequent Unix OSes

Page 16: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–16 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

More History of C

• 1978: Textbook by Brian Kernighan and Dennis Ritchie (K&R), 1st edition, published

– de facto standard for the language• 1989: ANSI C specification (ANSI C)

– 1988: K&R, 2nd edition, published, based on draft of ANSI C

• 1990: ISO C specification (C90)– essentially ANSI C

• 1999: Revised ISO C specification (C99)• 2011: Further revised ISO C specification

(C11)– not widely used

Page 17: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–17 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

CS 33Introduction to C

Page 18: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–18 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

A C Program

int main( ) {printf("Hello world!\n");return 0;

}

Page 19: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–19 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Compiling and Running It$ ls

hello.c

$ gcc hello.c

$ ls

a.out hello.c

$ ./a.out

Hello world!

$ gcc -o hello hello.c

$ ls

a.out hello hello.c

$ ./hello

Hello world!

$

Page 20: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–20 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

What’s gcc?

• gnu C compiler– it’s actually a two-part script

» part one compiles files containing programs written in C (and certain other languages) into binary machine code (known as object code)

» part two takes the just-compiled object code and combines it with other object code from libraries to create an executable

• the executable can be loaded into memory and run by the computer

Page 21: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–21 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

gcc Flags

• gcc [-Wall] [-g] [-std=gnu99]• -Wall

» provide warnings about pretty much everything that might conceivably be objectionable

• -g» provide extra information in the object code, so that

gdb (gnu debugger) can provide more informative debugging info

• discussed in lab• -std=gnu99

» use the 1999 version of C syntax, rather than the 1990 version

Page 22: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–22 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Declarations in C

int main() {

int i;

float f;

char c;

return 0;

}

Types are promises– promises can be broken

Types specify memory sizes– cannot be broken

Page 23: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–23 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Declarations in C

int main() {

int i;

float f;

char c;

return 0;

}

Declarations reserve memory space– where?

Local variables can be uninitialized– junk– whatever was there before

Page 24: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–24 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Declarations in C

int main() {

int i;

float f;

char c;

return 0;

}

14350978156.1734e-23

þ

ifc

Page 25: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–25 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Using Variables

int main() {int i;float f;char c;i = 34;c = 'a';

}

346.1734e-23

a

ifc

Page 26: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–26 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

ifc $ ./a.out

3434 a

int main() {int i;float f;char c;i = 34;c = 'a';printf("%d\n",i);printf("%d\t%c\n",i,c);

}

Page 27: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–27 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

if

$ ./a.out34 a

int main() {…printf("%d\t%c\n",i,c);

}

Two parts• formatting instructions• arguments

Page 28: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–28 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

if

$ ./a.out34 a

int main() {…printf("%d\t%c\n",i,c);

}

Formatting instructions• Special characters

– \n : newline– \t : tab– \b : backspace– \" : double quote– \\ : backslash

Page 29: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–29 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

if

$ ./a.out34 a

int main() {…printf("%d\t%c",i,c);

}

Formatting instructions• Types of arguments

– %d: integers– %f: floating-point numbers– %c: characters

Page 30: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–30 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

if

$ ./a.out34 a

int main() {…printf("%6d%3c",i,c);

}

Formatting instructions• %6d: decimal integer at least 6 characters wide• %6f: floating point at least 6 characters wide• %6.2f: floating point at least 6 wide, 2 after the decimal point

Page 31: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–31 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

printf Again

if

int main() {int i;float celsius;for(i=30; i<34; i++) {celsius = (5.0/9.0)*(i-32.0);printf("%3d %6.1f\n", i, celsius);

}}

$ ./a.out30 -1.131 -0.632 0.033 0.6

Page 32: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–32 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

For Loops

if

int main() {int i;float celsius;for (i=30 ; i<34 ; i=i+1) {celsius = (5.0/9.0)*(i-32.0);printf("%3d %6.1f\n", i, celsius);

}}

before the loop

after each iteration

should loop continue?

Page 33: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–33 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Some Primitive Data Typeschar

– a single byte: interpreted as either an 8-bit integer or a charactershort

– integer: 16 bitsint

– integer: 16 bits or 32 bits (implementation dependent)long

– integer: either 32 bits or 64 bits, depending on the architecturelong long

– integer: 64 bitsfloat

– single-precision floating pointdouble

– double-precision floating point

Page 34: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–34 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

What is the size of my int?

if

int main() {int i;printf("%d\n", sizeof(i));

}

$ ./a.out4

sizeof– returns the size of a variable in bytes– very very very very very very important function in C

Page 35: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–35 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Arrays

int main() {int a[100];int i;

}

ia[0]a[1]a[2]

a[99]

.

.

.

Page 36: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–36 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Arrays

int main() {int a[100];int i;for(i=0;i<100;i++)a[i] = i;

}

1000

ia[0]

12

99

a[1]a[2]

a[99]

.

.

.

Page 37: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–37 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Array Bounds

int main() {int a[100];int i;for(i=0;i<=100;i++)a[i] = i;

}

.

.

.

1010

ia[0]

12

99

a[1]a[2]

a[99]100a[100]

Page 38: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–38 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Arrays in C

C Arrays = Storage + Indexing– no bounds checking– no initialization

WELCOME TO THE JUNGLE

Page 39: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–39 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

int main() {int j=8;int a[100];int i;for(i=0;i<=100;i++)a[i] = i;

printf("%d\n", j);}

$ ./a.out????

ia[0]a[1]a[2]

a[99]

.

.

.

8j

Page 40: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–40 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Quiz 1

• What is printed for the value of j when the program is run?a) 0b) 8c) 100d) indeterminate

Page 41: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–41 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

int main() {int j=8;int a[100];int i;for(i=0;i<=100;i++)a[i] = i;

printf("%d\n", j);}

$ ./a.out100

1010

ia[0]

12

99

a[1]a[2]

a[99]

.

.

.

100j

Page 42: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–42 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

int main() {int j;int a[100];int i;for(i=0;i<100;i++)a[i] = i;

printf("%d\n", j);}

$ ./a.out???

ia[0]a[1]a[2]

a[99]

.

.

.

j

Page 43: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–43 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Quiz 2

• What is printed for the value of j when the program is run?a) 0b) 8c) 100d) indeterminate

Page 44: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–44 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

int main() {int j;int a[100];int i;for(i=0;i<100;i++)a[i] = i;

printf("%d\n", j);}

$ ./a.out-1880816380

1000

ia[0]

12

99

a[1]a[2]

a[99]

.

.

.

-1880816380j

Page 45: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–45 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

int main() {int a[100];int i;a[-3] = 25;printf("%d\n", a[-3]);

}

$ ./a.out25

Page 46: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–46 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Welcome to the Jungle

if

int main() {int a[100];int i;a[-3] = 25;a[11111111] = 6;printf("%d\n", a[-3]);

} $ ./a.outSegmentation fault

What is a segmentation fault?• attempted access to an invalid memory location

Page 47: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–47 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Function Definitions

if

int main() {printf("%f\n", fact(5));return 0;

}

int fact(int i) {int k;int res;for(res=1,k=1; k<=i; k++)res = res * k;

return res;}

main• is just another

function• starts the program

All functions• have a return type

Page 48: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–48 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Compiling It

$ gcc –o fact fact.c$ ./fact120

Page 49: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–49 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Function Definitions

if

int main() {printf("%f\n", fact(5));return 0;

}float fact(int i) {int k;float res;for(res=1,k=1; k<=i; k++)res = res * k;

return res;}

Page 50: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–50 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Function Definitions

$ gcc –o fact fact.cmain.c:27: warning: type mismatch with previous implicit declarationmain.c:23: warning: previous implicit declaration of 'fact'main.c:27: warning: 'fact' was previously implicitly declared to return 'int'

$ ./fact1079902208

Page 51: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–51 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Function Declarations

if

float fact(int i);

int main() {printf("%f\n", fact(5));return 0;

}float fact(int i) {int k;float res;for(res=0,k=1; k<=i; k++)res = res * k;

return res;}

Declares the function

$ ./fact120.000000

Page 52: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–52 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Methods

• C has functions• Java has methods

– methods implicitly refer to objects– C doesn’t have objects

• Don’t use the “M” word– itʼs just wrong

?

Page 53: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–53 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Function Declarations

#include "fact.h"int main() {printf("%f\n", fact(5));return 0;

}float fact(int i) {int k; float res;for(res=1,k=1; k<=i; k++)res = res * k;

return res;}

float fact(int i);

fact.h fact.c

Page 54: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–54 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

The Preprocessor

#include

• calls the preprocessor to include a fileWhat do you include?• your own header file:#include "fact.h"– look in the current directory

• standard header file:#include <assert.h>#include <stdio.h>– look in a standard place

Contains declaration of printf (and other things)

Page 55: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–55 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

#define

#define SIZE 100int main() {

int i;int a[SIZE];

}

#define

• defines a substitution• applied to the program by the preprocessor

Page 56: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–56 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

#define

#define forever for(;;)int main() {

int i;forever {printf("hello world\n");

}}

Page 57: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–57 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

assert

if

#include <assert.h>float fact(int i) {int k; float res;assert(i >= 0);for(res=1,k=1; k<=i; k++)res = res * k;

return res;} int main() {printf("%f\n", fact(-1));return 0;

}

assert• verify that the

assertion holds• abort if not

$ ./factmain.c:4: failed assertion 'i >= 0'Abort

Page 58: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–58 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Parameter passingPassing arrays to a function

int average(int a[], int size) {int i; int sum;for(i=0,sum=0; i<size; i++)sum += a[i];

return sum/s;}int main() {

int a[100];…printf("%d\n",average(a,100));

}

• Note that I need to pass the size of the array

• This array has no idea how big it is

Page 59: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–59 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Swapping

Write a function to swap two entries of an array

void swap(int a[], int i, int j) {int tmp;tmp = a[j];a[j] = a[i];a[i] = tmp;

}

Page 60: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–60 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Selection Sort

void selectsort(int array[], int length){int i, j, min;for (i = 0; i < length; ++i){

/* find the index of the smallest item from i onward */min = i;for (j = i; j < length; ++j)

if (array[j] < array[min])min = j;

/* swap the smallest item with the i-th item */swap(array, i, min);

}/* at the end of each iteration, the first i slots have the i

smallest items */}

Page 61: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–61 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Swapping

Write a function to swap two ints

void swap(int i, int j) {

}int main() {

int a = 4;int b = 8;swap(a, b);printf("a:%d b:%d", a, b);

}

Parameters are passed by value

Page 62: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–62 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Swapping

Write a function to swap two ints

void swap(int i, int j) {int tmp;tmp = j; j = i; i = tmp;

}int main() {

int a = 4;int b = 8;swap(a, b);printf("a:%d b:%d", a, b);

}

$ ./a.outa:4 b:8

Darn!

Page 63: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–63 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

CS Town Hall Meeting!

• CIT 3rd-floor atrium• 4pm Thursday (tomorrow)• Hear about:

–new faculty–new courses–research opportunities–and more!

Page 64: 01IntroCS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter Cho

CS33 Intro to Computer Systems I–64 Copyright © 2019 Thomas W. Doeppner. All rights reserved.

Industry Partners Program (IPP)

• Find and apply for job and internship postings in CS• Learn about IPP employer tech talks & challenges• Attend resumé reviews with industry professionals

• cs.brown.edu/about/partners

• To sign up for notifications about upcoming events:– http://bit.ly/brownipp

• Questions? Contact [email protected]