stacks and heapscs-502 fall 20071 a short digression stacks and heaps cs-502, operating systems fall...

21
Stacks and Heaps CS-502 Fall 2007 1 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System Concepts, 7 th ed., by Silbershatz, Galvin, & Gagne and from Modern Operating Systems, 2 nd ed., by Tanenbaum)

Upload: brice-rich

Post on 21-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 1

A Short DigressionStacks and Heaps

CS-502, Operating SystemsFall 2007

(Slides include materials from Operating System Concepts, 7th ed., by Silbershatz, Galvin, & Gagne and from Modern Operating Systems, 2nd ed., by Tanenbaum)

Page 2: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 2

Digression: the “Stack”

• Imagine the following program:–int factorial(int n){

if (n <= 1)

return (1);

else

int y = factorial(n-1);

return (y * n);

}

• Imagine also the caller:–int x = factorial(100);

• What does compiled code look like?

Page 3: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 3

Compiled code: the caller

int x = factorial(100);

• Put the value “100” somewhere that factorial can find

• Put the current program counter somewhere so that factorial can return to the right place in caller

• Provide a place to put the result, so that caller can find it

Page 4: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 4

Compiled code: factorial function

• Save the caller’s registers somewhere• Get the argument n from the agreed-upon place• Set aside some memory for local variables and

intermediate results – i.e., y, n - 1

• Do whatever it was programmed to do

• Put the result where the caller can find it• Restore the caller’s registers• Transfer back to the program counter saved by the

caller

Page 5: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 5

Question: Where is “somewhere”?

• So that caller can provide as many arguments as needed (within reason)?

• So that called routine can decide at run-time how much temporary space is needed?

• So that called routine can call any other routine, potentially recursively?

Page 6: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 6

Answer: a “Stack”

• Stack – a linear data structure in which items are added and removed in last-in, first-out order.

• Calling program• Push arguments & return address onto stack

• After return, pop result off stack

Page 7: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 7

“Stack” (continued)

• Called routine• Push registers and return address onto stack

• Push temporary storage space onto stack

• Do work of the routine

• Pop registers and temporary storage off stack

• Leave result on stack

• Return to address left by calling routine

Page 8: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 8

Stack (continued)

• Definition: context – the region of the stack that provides the execution environment of a particular call to a function

• Implementation• Usually, a linear piece of memory and a stack

pointer contained in a (fixed) register• Occasionally, a linked list

• Recursion• Stack discipline allows multiple contexts for the

same function in the stack at the same time

Page 9: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 9

Stacks in Modern Systems

• All modern programming languages require a stack

• Fortran and Cobol did not (non-recursive)

• All modern processors provide a designated stack pointer register

• All modern process address spaces provide room for a stack

• Able to grow to a large size

• May grow upward or downward

Page 10: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 10

Process Address Space (Typical)

0x00000000

0xFFFFFFFF

Virtual

address space

program code(text)

static data

heap(dynamically allocated)

stack(dynamically allocated)

PC

SP

See also Silbershatz, figure 3.1

Page 11: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 11

Stacks in Multi-threaded Environments

• Every thread requires its own stack• Separate from all other stacks

• Each stack may grow separately

• Address space must be big enough to accommodate stacks for all threads

Page 12: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 12

Stacks in Multi-threaded Address Space

0x00000000

0xFFFFFFFF

Virtual

address space

code(text)

static data

heap

thread 1 stack

PC (T2)

SP (T2)thread 2 stack

thread 3 stack

SP (T1)

SP (T3)

PC (T1)

PC (T3)

SP

PC

Page 13: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 13

Stacks in Multi-threaded Environments

• Every thread requires its own stack• Separate from all other stacks

• Each stack may grow separately

• Address space must be big enough to accommodate stacks for all threads

• Some small or RT operating systems are equivalent to multi-threaded environments

Page 14: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 14

Heap

• A place for allocating memory that is not part of last-in, first-out discipline

• I.e., dynamically allocated data structures that survive function calls

• E.g., strings in C• new objects in C++, Java, etc.

Page 15: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 15

Process Address Space (Typical)

0x00000000

0xFFFFFFFF

Virtual

address space

program code(text)

static data

heap(dynamically allocated)

stack(dynamically allocated)

PC

SP

See also Silbershatz, figure 3.1

Page 16: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 16

Dynamically Allocating from Heap

• malloc() – POSIX standard function• Allocates a chunk of memory of desired size

• Remembers size

• Returns pointer

• free () – POSIX standard function• Returns previously allocated chunk to heap for

reallocation

• Assumes that pointer is correct!

Page 17: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 17

Dynamically Allocating from Heap

• malloc() – POSIX standard function• Allocates a chunk of memory of desired size

• Remembers size

• Returns pointer

• free () – POSIX standard function• Returns previously allocated chunk to heap for

reallocation

• Assumes that pointer is correct!

• Storage leak – failure to free something

Page 18: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 18

Heaps in Modern Systems

• Many modern programming languages require a heap

• C++, Java, etc.• NOT Fortran

• Typical process environment• Grows toward stack

• Multi-threaded environments• All threads share the same heap• Data structures may be passed from one thread to

another.

Page 19: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 19

Heap in Multi-threaded Address Space

0x00000000

0xFFFFFFFF

Virtual

address space

code(text)

static data

heap

thread 1 stack

PC (T2)

SP (T2)thread 2 stack

thread 3 stack

SP (T1)

SP (T3)

PC (T1)

PC (T3)

SP

PC

Heap

Page 20: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 20

Stacks in Multi-threaded Address Space

0x00000000

0xFFFFFFFF

Virtual

address space

code(text)

static data

heap

thread 1 stack

PC (T2)

SP (T2)thread 2 stack

thread 3 stack

SP (T1)

SP (T3)

PC (T1)

PC (T3)

SP

PC

What’s this?

Page 21: Stacks and HeapsCS-502 Fall 20071 A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System

Stacks and HeapsCS-502 Fall 2007 21

Questions?