No Slide Title

Download Report

Transcript No Slide Title

Chap 7: Runtime Organization
CSE
4100
Prof. Steven A. Demurjian
Computer Science & Engineering Department
The University of Connecticut
371 Fairfield Way, Unit 2155
Storrs, CT 06269-3155
[email protected]
http://www.engr.uconn.edu/~steve
(860) 486 - 4818
Material for course thanks to:
Laurent Michel
Aggelos Kiayias
Robert LeBarre
CH7.1
Overview
CSE
4100


Runtime Environment Focuses on the wayt hat a
Program is Managed/Controlled During its Execution
We’ll Focus on
 Basic Definitions and Concepts
 A First Look at Activation Records
 Memory Allocation Strategies
 Revisiting Activation Records
 Impact of Parameter Passing Mechanisms
 Data Layout and Scoping of Declarations
 Memory Manager and Compilation Process
 Concluding Remarks/Looking Ahead
CH7.2
Basic Definitions and Concepts
CSE
4100




Procedure Definition
 Declaration that has a Name and has a Body
 If Returns a value, then Function
Procedure Definition Contains a Sequence of
Identifiers Called the Formal Parameters
Procedure Call Contains a List of Arguments passed to
the Procedure or the Actual Parameters
Information in Program can be Characterized
 Environment: Maps Name to Storage Loc (l-value)
 Store: Maps Location to Value it Contains
(l-value to an r-value)
Compile
Time
Environment
Name
Storage
State
Run
Time
Value
CH7.3
Program Organization
CSE
4100


Purpose
 Define what constitutes a Program
 Review overall OS Structure
 Examine Process Structure
 Present and Understand Memory Management
issues
Remember, a Compiler Must:
 Target a Specific Operating System
 Interact within that Operating System
 Provide Access at Machine Level to Operating
System Components
CH7.4
The Basic Abstractions
CSE
4100



Processes
 Unit of Computation
 Program/Application Composed of One or More
Interacting Processes
 Processes Interact with and Utilize Resources
Files
 Unit of Information Storage
 Classic, Default Utilized to Support Programs
 Read, Write, and Transfer via Files
Other Resources
 CPU, Printer, Memory, etc.
 Network, Display, etc.
CH7.5
Program, Processes & Resources
CSE
4100
Resources
Processes
Operating System
Data
Program
CPU
Memory
Device
Device
Device
Device
Hardware
CH7.6
What are Executables?
CSE
4100

Executable
 File Containing Machine Code
 Examples
 A bash script, a perl script, a ‘compiled’ java program, a
compiled C program, ...
 Java Bytecode and JVM
CH7.7
Java Virtual Machine (JVM)
CSE
4100


JVM is a Platform Specific Program which Interprets
and Executes Java Code
JVM Interprets and Executes Bytecodes
CA FE BA BE 00 03 00 2D 00 3E
08 00 3B 08 00 01 08 00 20 08


JVM Targeted as Small/Efficient - Embeddable within
Consumer Electronics
JVM Stack Based Machine - Simulates Real Processor
CH7.8
Java Visualization
CSE
4100
CH7.9
What are Executables?
CSE
4100

Native Executable
 File Containing Machine Code that the CPU
understands without any intervening “layers” of
abstractions
 Examples
 A compiled C program
 A Java program compiled natively with Gnu Compiler
for Java
CH7.10
From Code to Loaded Program
CSE
4100
ORIGINAL SOURCE
RELOCATABLE OBJECT MODULE
static int gVar;
. . .
int proc_a (int arg){
. . .
gVar = 7;
put_record(gVar);
. . .
}
0000
. . .
0008
. . .
0036
. . .
0220
0224
0228
0232
. . .
0400
0404
. . .
0500
0540
0600
0799
. . .
entry
proc_a
[Space for gVar]
load
store
push
call
=7, R1
R1, 0036
0036
‘put_record’
External Reference Table
‘put_record’ 0232
External Definition Table
‘proc_a’
0008
(optional symbol table)
(last location in module)
CH7.11
From Code to Loaded Program
CSE
4100
THE ABSOLUTE PROGRAM
0000
. . .
1008
. . .
1036
. . .
1220
1224
1228
1232
1399
. . .
2334
. . .
2670
2999
(Other Modules)
PROGRAM AT LOCATION 4000
0000
4000
entry proc_a
. . .
5008
[Space for gVar]
. . .
5036
load
=7, R1
. . .
store R1, 1036
5220
push
1036
5224
call
2334
5228
(end of proc_a)
5232
(Other Modules)
5399
entry put_record
. . .
6334
(opt. symbol table)
. . .
(last loc. in module) 6670
6999
7000
(Other Processes)
(Other Modules)
entry
proc_a
[Space for gVar]
load
=7, R1
store R1, 5036
push
5036
call
6334
(end of proc_a)
(Other Modules)
entry put_record
(opt. symbol table)
(last loc. in module)
(Other Processes)
CH7.12
What is a Process?
CSE
4100



An Executable with its Execution Context and State
Consists of:
 Executable (.exe, a.out, etc.)
 Loaded into main memory
 All of the resources currently committed
 With the value of all the CPU registers
Computers can Run Multiple Processes at Same Time
CH7.13
What is a Process?
CSE
4100




Sequential Program for Execution
 Object Program (a.out) to Execute
 Data on Which Program will Execute
 Resources Required During Execution
 Status of the Process’ Execution (ps -aux)
Program is “Static Source Code/Executable
Statements” which Lacks Data Set
Process is “Dynamic Entity Executing on Actual Data
Set”
For Example, Multiple Unix Users Can Execute emacs,
Latex, vi, grep, at same Time
 Shared Program Executable emacs
 Dedicated Process for Each User of emacs
CH7.14
A Process
CSE
4100
Code
Data
Resources
Resources
Resources
Process Status
Abstract Machine Environment (OS)
CH7.15
UNIX Process
CSE
4100
Text
Resources
Resources
Data
Stack
Process Status
File
File
UNIX kernel
CH7.16
More on UNIX Processes
CSE
4100




USER
wangz
manish
marios
steve
root
Each Process Has its Own Address Space
 Subdivided into Text, Data, & Stack Segment
 a.Out File Describes the Address Space
OS Creates Descriptor to Manage Process
Process Identifier (PID) is Integer: User Handle for the
Process (Descriptor)
Try “ps” and “Ps aux” (Read Man Page)
PID %CPU %MEM
SZ RSS TT
25150 26.1 15.33048019308 pts/16
7590 25.1 0.821436 964 ?
29536 0.6 3.5 5156 4376 pts/6
29893 0.2 0.8 1080 980 pts/18
29905 0.2 0.7 1040 888 pts/18
S
START TIME COMMAND
O
Aug 05 6318:26 /apps/matlab/bin/s
O
Jul 22 24628:34 /apps/matlab/bin/s
S 13:22:23 0:24 mailtool
S 17:41:11 0:00 -csh
O 17:41:53 0:00 ps -aux
CH7.17
Multiprogramming
CSE
4100




Load and Execute Multiple Programs into SpaceMultiplexed Mem. while Time-Multiplexing CPU
Technique for Sharing the CPU Among Runnable
Processes
 Process May Be Blocked on I/O
 What is Deadlock and How can it Occur?
 Process May Be Blocked Waiting for Other
Resources to Complete
 What is Starvation and How is it Prevented?
While One Process is Blocked, Another Should Be
Able to Run
Multiprogramming OS Accomplishes CPU Sharing
“Automatically”
CH7.18
How Multiprogramming Works
Space-Multiplexed Memory
CSE
4100
Process 1
Process 2
CPU
Process 3
Time-Multiplexed
Process 4
CH7.19
Batch Processing
CSE
4100









Uses Multiprogramming
Job (File of OS Commands) Prepared Offline
Batch of Jobs Given to OS at One Time
OS Processes Jobs One-After-the-Other
No Human-Computer Interaction
OS Optimizes Resource Utilization
Batch Processing (as an Option) Still Used Today
Batch Files in DOS/Unix to Repetitively Execute Same
Set of Commands
ASIDE: Using Batch Processing
 1978/79 First Two Computer Courses at BC
 Keypunch IBM Cards
 Run Batch Job: Return 1-2hrs Later for Output
CH7.20
Timesharing
CSE
4100






Uses Multiprogramming
Support Interactive Computing Model (Illusion of
Multiple Consoles)
Different Scheduling & Memory Allocation Strategies
Than Batch
Tends to Propagate Processes
Considerable Attention to Resource Isolation (Security
& Protection)
Tend to Optimize Response Time
CH7.21
How Timesharing Works
CSE
4100




Timesharing Still
Pervasive in Computing
Engineering Network Still
Time-Shared in Some
Respects
 Access to User Files
 Email/Web Server
 Download Software
Terminals Replaced by
Unix Workstations and
PCs
Example of Network File
System/OS
Terminal Multiplexor
VM
VM
VM
Timesharing OS
CH7.22
Personal Computers
CSE
4100



CPU Sharing Among One Person’s Processes
Ability of Only One Active Process at One Time
 Early Apple/Mac: Only do 1 Action at Time
 Same for Win 3.1 and Win 95
 Improved with Win 98 and NT
 Today’s Apple and Windows MS – Multi-Process!
Increased Power of Computing for Personal Tasks
 Graphics - Two-D, Three-D, Real-Time
 Multimedia - CDs and DVDs
CH7.23
Process Control & Real-Time
CSE
4100





Computer is Dedicated to a Single Purpose
Classic Embedded System
Must Respond to External Stimuli in Fixed Time
Continuous Media Popularizing Real-time Techniques
An Area of Growing Interest
 Embedded Computing Estimated as one of Key
Technologies for 21st Century
 Pervasiveness: Consumer Products/Electronics
 Cars, Refrigerators, Phones, Microwaves, etc.
 Elevators, “Smart” Products and Buildings, etc.


Embedded Java
Microsoft CE
CH7.24
Evolution of Modern OS
CSE
4100
Timesharing
Batch
Memory Mgmt
Scheduling
Protection
Memory Mgmt
Protection
Scheduling
Files
Devices
Network OS
PC & Wkstation
System
Software
HumanComputer
Interface
Client-Server Model
Protocols
Real-Time
Scheduling
Modern OS
Java/JINI/JavaOS
CH7.25
Virtual Address Space
CSE
4100



An Abstraction provided by the Operating System
Essentially
 A sandbox for the process
Practically
 A Contiguous Memory area that





Starts at offset 0
Ends at offset 232-1
Entirely devoted to a single process
Is transparently managed by the O.S.
Has a layout imposed by the O.S.
CH7.26
Virtual Memory
CSE
4100



Components of Program (Identifiers, Labels, variables,
etc.) Define Name Space
Language Translation
 Converts Name Space Elements to Virtual
Addresses
 Binds Symbolic Names to Virtual Addresses
Virtual Memory System
 Dynamically Binds Virtual Addresses to Physical
Addresses
 Defers Binding Decision to During Program
Execution
 Perform Binding “As Needed”
CH7.27
Names, Virtual Addresses, Physical Addresses
CSE
4100
Distinguish Between
Symbolic Names vs. Virtual Addrs. vs. Physical Addrs.
Source
Program
Absolute
Module
Executable
Image
Name Space
Compile and
Link Tools
Virtual
Address Space
Physical
Address Space
Yt: Virtual Address Space  Physical Address Space  {}
CH7.28
Virtual Address Space

CSE
4100
Traditional Organization
 Code Area at the
bottom
 Static Data above
0xffffffff
 Constants
 Static strings
 Static variables

Heap
 Grows upward

Stack
 Grows downward

0x0
Lot’s of free VM in
between
CH7.29
OS Conventions
CSE
4100


Layout is dictated by the OS
 Specifically by the “Loader”
Loader
 The OS module responsible for
 Allocating a virtual address space
 Bringing the content of the executable file into the
address space
 Bringing any dependent shared library into the address
space
 Performing any required relocation
 Transferring control to the entry point of the program.
CH7.30
Zooming In.
CSE
4100

Close look on the code area
CH7.31
Loading
CSE
4100


Loader extracts the information from the executable
Executable holds a header with
 Offset and size of code (blue area)
 Offset of entry point (main) within blue box
 Offset and size of constant data (green area)
 List of needed shared library (optional)
Program
Executable:
CH7.32
Loading and Execution
CSE
4100


Loader
 Grabs file zones and move them in virtual memory
 Relocate the code as necessary
 Sets up the execution stack
 Transfer control to the entry point with a jump
Execution Stack
 A memory area at the top of the VM
 Grows downward
 Grows on demand (with OS collaboration)

Purpose
 Automatic storage for local variables
CH7.33
A First Look at Activation Records
CSE
4100

Storage Organization for
Program Execution

Code Referenced by PC
Code

Global/Local Variables
Static Data



Static Data Area
Stack Contains

Set of Activation
Records

All Active Procedures
and Functions
Heap for Dynamic Memory
Allocation
Stack
Heap
CH7.34
A General Activation Record
CSE
4100
Returned Value

To the Calling Procedure

Passed in to Procedure

To Act. Record of Caller

Referenced Non-Local Data
Optional Access Link

Needed to Restart Caller
Saved Machine Status

Local Variables for Scope
Local Data

Compiler Generated
Temporaries
Actual Parameters
Optional Control Link
CH7.35
An Activation Record in C
CSE
4100

Actual Parameters
Supplied by Caller
Etc.
Incoming Param 2
Incoming Param 1

Needed to Restart Caller
Saved State Info

Local Variables for Scope
Local Variables
Temporary Storage

If Callee Calls Another
Procedure/Function
Outgoing Parameters
CH7.36
Activation Records
CSE
4100


Procedure Activation Represents the Actions that Must
Occur when a Caller Invokes a Callee:
 Transfer of Actuals into Formals by the Language’s
Parameter Passing Mechanism
 Modification of Environment and State by Alloc of
Memory for Variables that are Local to Callee
 Identification of the Control Return Point of Caller
After Callee Complets
Every Procedure Activation has Lifetime which is the
Sequence of Steps (Code) of Procedure Body of
Callee
CH7.37
What are Possible Activations?
CSE
4100




Nested
 A calls B calls C
Non-Overlapping
 A calls B
 B calls C
Recursive
 A calls itself
Concurrent
 A calls B (spawns process)
 A calls C (spawns process)
 B, C: execute in parallel and compete for Resources
CH7.38
Activation Tree
CSE
4100

Graphical Representation of Activations over Time
CH7.39
How is Tree Interpreted?
CSE
4100






Each Node is a Specific Procedure Call
Root Node is Start of Program
Parent Node
 Flow from Parent to Child
 Caller to Callee
Sibling Node
 All Nodes to Left have Completed
Parent Comples when All Children Complete
Utilize Control Stack to Represent Current State of an
Activation
 s, q(1,9), q(1,3), q(2,3)
 Where is this on Prior Slide?
 Represents “state” at Point in Time
CH7.40
Relationship to Environment and State
CSE
4100

Recall:
Compile
Time
Environment
Name
State
Storage
Run
Time
Value
Assignments Change State
 Declarations Change Environment
Differentiation also Possible from Static and Dynamic
Levels
Environment
State
Procedure Definition vs. Procedure Activation


Name Declaration
vs.
Scope of Declaration vs.
Name Binding
Lifetime of Binding
CH7.41
Issues Impacting Runtime Environment
CSE
4100









Are Procedure/Functions Recursive?
What happens to Values of Local names after the
Procedure Activation Completes?
Can a Procedure Refer to Non-Local Names?
What are Parameter Passing Mechanisms?
How are Results Returned from Functions?
Can Proc/Func be Returned as a Result? Passed as
Parameters?
Can Programmer Dynamically Allocate Storage?
How is Deallocation Handled?
These are:
 Rules of the Game
 What Every Software Engineer Should Know!
CH7.42
Memory Allocation Strategies
CSE
4100



Details the way that Memory
is Managed within OS
Crucial for Activation Records
Different Allocation Strategies
Used by Each Area
 Static – Compile Time
 Stack – Run Time
Code
Static
Stack (Automatic)
 Sizes of Data Known at
Compile Time
 Parameters during Calls

Heap – Run Time
 Allocate and Deallocate
Memory (malloc)
 Programmatic Needs
Heap (Dynamic)
CH7.43
Memory Pools
CSE
4100
Where does memory comes from ?
 Three pools
 Static
 Automatic (Stack)
Automatic (Stack)
 Dynamic

Dynamic
Static
CH7.44
Static Pool
CSE
4100

Content
 All the static “strings” that appear in the program
 All the static constants used in the program
 All the static variables declared in the program





static int
static arrays
static records
static ....
Allocation ?
 Well... it is static, i.e.,
 All the sizes are determined at compile time.
 Cannot grow or shrink
CH7.45
Static Allocation
CSE
4100



Binding Names to Storage Location at Compile Time
Program and Procedure/Function Variables
Consider C Program:
int xyz;
char c[20];
Global vars known at compile time
int abc ()
{
Static means to allocate at compile
static int x;
. . .
{
Data values persist over multiple
static int y;
calls to abc()
. . .
}
x, y: retain values in successive
. . .
calls to abc!
}
CH7.46
Static Allocation
CSE
4100



Static Allocation is Limited and Programming
Language Specific
 In Pascal, Global Program Variables Only
 In C, Global Variables and Specific Static
What are Implications to Compilation Process?
Are these two Programs Same? Why? Different?
How?
main()
{
int x[1000000];
. . .
}
main()
{
static int
. . .
}
x[1000000];
CH7.47
Automatic Pool (Stack Allocation)
CSE
4100




Content
 Local variables
 Actuals (arguments to
methods/functions/procedures)
Allocation
 Automatic when calling a
method/function/procedure
Deallocation
 Automatic when returning from a
method/function/procedure
Management policy
 Stack-like
CH7.48
Automatic Pool (Stack Allocation)
CSE
4100




Tightly Coupled with Procedure Activation
Parameters, Local Variables, Temporary Variables
 Allocated as Each Procedure/Function Called
 Stack Expands for Nested (and Recursive) Calls
Two Step Process
 Call Sequence: Allocation Activation Record and
Enter Data into its Fields
 Return Sequence: Restores State of Program to
Caller to Continue Execution
What Does Caller vs. Callee Do?
CH7.49
Caller and Callee
CSE
4100
CH7.50
Caller vs. Callee
CSE
4100


Call Sequence
 Caller Evaluates Actuals
 Caller Stores Return Address and “old” Value of
top_sp in Callee’s Activation Record
 Callee Saves Register Values and other Status Info.
 Callee Inits its Local data and Begins Execution
Return Sequence
 Callee Places a Return value Adjacent to Activation
Record of Caller
 Using Status Info, callee Restores top_sp and
Registers, and Jumps to Return Addres iN caller
 Caller Copies Return Value into its Own Activation
Record for Subsequent Usage
CH7.51
What are Possible Problems
CSE
4100

Passing Arrays by Value
int x [10000];
char c[20];
abc (t: -----)
{ . . .
zzz(t);
. . .
}
What Happens to Stack During
these multiple calls?
What’s the Problem Here?
What are two Possible Solutions?
xyz (a: -----)
{ . . .
abc(a);
. . .
}
xyz(x);
CH7.52
What are Possible Problems
CSE
4100

Dangling References
main()
{
int *p;
p = call_it();
}
int *call_it ()
{
int i = 23;
return &i
}
Is there a Problem?
What is it?
How is it Solved?
CH7.53
Heap (Dynamic) Allocation
CSE
4100


Allows for the Management of Dynamic Storage:
 Allow Local Names to Persist When Procedure
Activation Completes
 When a Called Activation Outlives Caller (Fork off
a Process )
Important Issues Include:
 How Does Allocation Occur?
 Is Garbage Collection Available for Programmer
Initiated Deallocation?
 Or, does Deallocation Occur Automatically?
CH7.54
Dynamic Pool
CSE
4100


Content
 Anything allocated by the program at runtime
Allocation
 Depends on the language
C
 C++/Java/C#
 ML/Lisp/Scheme

malloc
new
implicit
Deallocation
 Depends on the language
C
 C++
 Java/C#/ML/Lisp/Scheme
free
delete
Garbage collection
CH7.55
Revisiting Activation Records
CSE
4100




Focus on Execution Environment for Imperative
Language (C, C++, Java, Pascal, etc.)
Code Reference by Program
Code
Counter
Stack Contains Activation
Static Data
Records (Grows Down)
Stack
 Snapshot of Activations
 Status of Execution
Heap for Dynamic Memory
(Grows Up)
Heap
CH7.56
What Activation Record Contains?
CSE
4100
CH7.57
Recall Activation Record in C
CSE
4100

Actual Parameters
Supplied by Caller
Etc.
Incoming Param 2
Incoming Param 1

Needed to Restart Caller
Saved State Info

Local Variables for Scope
Local Variables
Temporary Storage

If Callee Calls Another
Procedure/Function
Outgoing Parameters
When Callee Invokes/Activates Another Procedure,
Outgoing Parameters of One Record are Incoming Parameters
of Another Activation Record
CH7.58
Activation Records
CSE
4100

Also known as “Frames”
 A record pushed on the execution stack
CH7.59
Creating the Frame
CSE
4100

Three actors
 The caller
 The CPU
 The callee
int foo(int x,int y) {
...
}
bar() {
...
x = foo(3,y);
...
}
CH7.60
Creating the Frame
CSE
4100

Three actors
 The caller
 The CPU
 The callee
int foo(int x,int y) {
...
}
bar() {
...
x = foo(3,y);
...
}
Actual Function Call
CH7.61
Creating the Frame
CSE
4100

Three actors
 The caller
 The CPU
 The callee
int foo(int x,int y) {
...
}
bar() {
...
x = foo(3,y);
...
}
CH7.62
Closeup on Management Data
CSE
4100
Links Allow Callee
to Refer to
Non-Local Scopes
CH7.63
Returning From a Call
CSE
4100

Easy
 The RET instruction
simply
Access MGMT Area from
FP
Restores SP
Restores FP
Transfer control to return
address
CH7.64
Returning From a Call
CSE
4100

Easy
 The RET instruction
simply
Access MGMT Area from
FP
Restores SP
Restores FP
Transfer control to return
address
CH7.65
Returning From a Call
CSE
4100

Easy
 The RET instruction
simply
Access MGMT Area from
FP
Restores SP
Restores FP
Transfer control to return
address
CH7.66
Returning From a Call
CSE
4100

Easy
 The RET instruction
simply
Access MGMT Area from
FP
Restores SP
Restores FP
Transfer control to return
address
CH7.67
Variations
CSE
4100

This is architecture dependent
 On Intel:
 The arguments are on the stack
 The return address is on the stack
 The return value is always in the accumulator (eax
register)

On PPC





The first 8 arguments are in registers
Remaining arguments are on the stack
Space is reserved for all arguments anyway
The return address is in the LINK register
The return value is left in R1 (register 1)
CH7.68
Impact of Parameter Passing Mechanisms
CSE
4100



Different Parameter Passing Mechanisms all have
Different Techniques for Handling Formal and Actual
Parameters
We’ll Consider Four Approaches
 Call By Value
 Call By Reference
 Copy Restore
 Call By Name
In Process…
 Consider Impact on Environment and State
 Identify Which Languages Use Each Approach
CH7.69
Call By Value
CSE
4100

Environment and State of Actual/Formals is Different
 Push on the stack a copy of the argument
 Size depends on argument type
 Any write operation overwrites the copy
 Copy automatically discarded on exit
swap (x, y: integer);
x
y
var temp: integer;
begin
temp := x;
x and y are in callee’s
x := y;
activation record (scope)
y := temp;
a and b are in caller’s
end;
activation record (scope)
. . .
int a, b;
. . .
a
b
swap (a, b)
Print(a, b)
Do a and b Change?
CH7.70
Call By Reference
CSE
4100


Actuals and Formals Refer to Same Storage Location
 Place the address of the actual on the stack
 A write operation simply follows the pointer
 Locations are Passed!
Advantages?
swap (var x, y: integer); a and b are in caller’s
activation record (scope)
var temp: integer;
begin
x
y
temp := x;
x := y;
y := temp;
end;
. . .
int a, b;
. . .
a
b
swap (a, b)
Print(a, b)
CH7.71
C is Call by Value ONLY!
CSE
4100


Swap Will NOT Change a
and b
Values are Unchanged!
main()
{
int x=5, y=10;
swap (x, y);
}
void swap (int x, y);
{
int temp;
temp := x;
x := y;
y := temp;
}

Fake “Call by Reference”
main()
{
int x=5, y=10;
swap (&x, &y);
}
void swap (int *px, *py);
{
int temp;
temp := *px;
*px := *py;
*py := temp;
}
What is Effect of Call?
CH7.72
Copy Restore
CSE
4100


Call by Value Result in Ada Programming Language
Three Types of Parameters in Ada:
 In: Corresponding to Value Parameters
 Out: Corresponding to Copy-Out Phase
(Final r-value of Formals Copied out to Actuals)
 Inout: Either
 Call by Reference
 True Call by Value Result (Compiler Dependent)

How Does this work?
CH7.73
Copy Restore
CSE
4100


Key Interpretation
 If an Actual has Just an r-value - Call By Value
 If an Actual has a l-value then Copy Out Formal to
Actual – Storage not Shared!
What Does Following Code do:
program copyout (input, output);
var a: integer;
procedure unsafe (var x: integer);
begin
x := 2; a := 0;
end;
begin
a := 1;
unsafe(a);
writeln(a);
end.
x
a
CH7.74
Call By Name
CSE
4100


Two Views of this Process
 Macro Expansion in C where a Substitution of
Procedure Code (the Callee) Occurs to Replace a
Call (in Caller)
 Substitution of the Actual Parameters (from Caller)
into the Procedure Itself (into Callee)
What are Implications of each Approach?
CH7.75
Version 1: Macro Expansion
CSE
4100
int x = MAXBUF + 1;
int m = 0;
void p(void) {m=(m+1)%x;}
int out (void)
{
int x;
x = buf[m];
p();
return x;
}
int x = MAXBUF + 1;
int m = 0;
void p(void) {m=(m+1)%x;}
int out (void)
{
int x;
x = buf[m];
{ m = (m+1) % x; }
return x;
}
What Happens when { m = (m+1) % x; }
is substituted for p()?
How Does Resulting Code Work?
CH7.76
Version 2: Actual Substitution
CSE
4100
Procedure Definition
Procedure Call
void q(int y)
{
int i;
i = 5;
y = y + 1;
}
main()
{
int i;
int A[10];
i = 6;
q (A[i]);
}
What is a result of this Call by Substitution
A[i] (actual) into y (formal)?
{
int i;
i = 5;
A[i]) = A[i]) + 1;
}
CH7.77
Parameter Passing - Synopsis
CSE
4100


Call by Value
 Environment and Store of Actuals and Formals are
Distinct
 Environment maps to Separate l-values and Store
Maps to Separate r-values
Call by Reference
 Formals and Actual MAY have Different Variable
Names
 However, Environment Maps those Different
Names to the Same l-Values
 NY City vs. Big Apple
 Boston vs. Beantown

CH7.78
Parameter Passing - Synopsis
CSE
4100

Call by Value Result
 Copy in Phase
 Formals have Separate l-values and contain r-values of
Actuals
 l-values of Actuals are Saved
Copy Out Phase: Copy Final values of Formals to
Saved l-values of Actuals
Call by Name: Textual Substitution
 Procedure Body of Code Replaces Call
 Actuals for Formals


 Formals Don’t have Own Environment and Store
 Locals have Own Environment and Store
 Environment and Store of Actuals are Used
CH7.79
Data Typing and Layout
CSE
4100



Basic and Advanced Data Types Play a Role in
Procedure Activation
Basic Types
 Compute Map, Relative Address, and Offsets at
Compile Time for Local Data in Act. Record
Two Important Concepts
 Alignment: Data Place at specific Positions in
Memory (Ints at Addresses Divisible by 4)
 Padding: Extra Space to Arrive at a Boundary
(Char(5) may allocate 6 or even 8 bytes)
CH7.80
Consider an Example in C
CSE
4100

What is a Possible Memory Layout?
main()
{
int i1;
. . .
for . . .
{int c;
if. . .
{int i2;
. . .
}
. . .
while
{int i3;
. . .
}
}
Need own l-value since
global scope
i1
c,i3
i2
Share l-value since
independent scopes
Need own l-value since
nested scope
CH7.81
Advanced Data Types
CSE
4100





Arrays, Records, Variable Records, Classes, etc. all
Have Sizes that are Known at Compile Time
Dynamic Types (Lists, Sets, etc.) have Fixed
Component Sizes (Size of List Element), but are
Allocated at Runtime
For Static Types
 Runt Time We must Compute Addresses of
Variable References
 Anticipate this Need at Compile Time to Simplify
and Speed Access
For Dynamic Types
 Consider their Definition and Usage
We’ll Briefly Review Arrays …
CH7.82
One Dimensional Arrays
CSE
4100

Data Stored in Consecutive Locations
A[0] A[1] A[2] A[3]




Slots each have Same Width w
1st Slot Begins at Location Base
Slots are:
 base, base + w, base +2w, etc.
 i*w + (base –low*w) where i is the index and low
is the lower bound of the array
Compiler Computes:
 c=(base – low*w)
 Runtime calculation is: i*w + c
CH7.83
Two Dimensional Arrays
CSE
4100

Stored in Row Major Order (row by row)
M[1,1] M[1,2] M[2,1] M[2,2] M[3,1] M[3,2]


Compute M[i,j] = i*r + j*e + (base – lowr*r – lowe*e)
where
 r and e are widths of rows and elements
 lowr and lowe are lower bounds of row and
element of a row
Simplify to d = (base – lowr*r – lowe*e)
with runtime calculation of:
 i*r + j*e + d
CH7.84
Scope of Declarations
CSE
4100




Recall Languages have Scoping Rules
Two variations
 Everything Declared up-front
 Scoped declarations
Pascal
 Local Scope within Procedure or Function
 Non-Local to Parent, Grandparent, etc.
 Proc/Func can be Defined within other Proc/Func
in Order to “Hide” their Existence (Scope)
C
 Local Scope within {}
 When Hit }, the Lifetime of the Identifiers End
 Non-Local within “File”
 Visibility within Blocks
CH7.85
Declarations Ahead
CSE
4100

Convention used by C
 Simplify the compiler
 After reading the declaration we know exactly the
frame size.
int foo(int x,int y) {
int a, i;
int* d;
float b;
bool c,e, g;
while (x < 100) {
d = alloca(sizeof(int)*y);
if (y > 0) {
...;
}
}
for(i=0;i<x;i++) {
g = ...;
}
}
CH7.86
Declarations in Scopes
CSE
4100


Convention used by C++/Java/....
 Get the declaration “close” to the code that uses it.
 Easier to read/track
Downside
 Look at entire code to know the frame size.
int foo(int x,int y) {
int a;
float b;
while (x < 100) {
bool c;
int* d = alloca(sizeof(int)*y);
if (y > 0) {
bool e = ....;
}
}
for(int i=0;i<x;i++) {
bool g = ...;
}
}
CH7.87
Layout of Locals
CSE
4100


Problem
 Place locals in the frame
Objective
 Minimize frame size
 Satisfy alignment constraints








int
float
pointer/ref
bool
short
double
long long
4 bytes
4 bytes
4 bytes
1 byte
2 bytes
8 bytes
8 bytes
Can we improve ?
CH7.88
Further Improvements?
CSE
4100

Exploit the nested declarations!
int foo(int x,int y) {
int a;
float b;
while (x < 100) {
bool c;
int* d = alloca(sizeof(int)*y);
if (y > 0) {
bool e = ....;
}
}
for(int i=0;i<x;i++) {
bool g = ...;
}
}
Overlay the storage for names whose scopes are disjoint
i and d share the same “area” of the frame
c and g as well
CH7.89
Fixed-sized Local Arrays
CSE
4100

Fixed-sized means
 Size known at compile time
 e.g.int a[10];

Questions
 Is this a problem ?
 Storage comes from ?
 Size ?
CH7.90
What happens with nested procedures ?
CSE
4100

Name in nested scopes must be visible (& accessible)
program sort(input,output);
var a: array[0..10] of integer;
x: integer;
procedure readarray;
var i : integer
begin .... end
procedure exchange(i,j : integer)
begin
x := a[i];a[i] := a[j];a[j] := x;
end
procedure quickSort(m,n : integer)
var k,v : integer;
function partition(y,z : integer) : integer
var i,j : integer;
begin
... a ...
(* access the array a *)
... v ...
(* use the pivoting element *)
... exchange(i,j); ...
end
begin
end
begin .... end
CH7.91
Difficulty
CSE
4100

Names come from
 Frames of different functions/procedures
 The reference is based on lexical scoping.
 Name refers to definition in deepest nested scope that
contains the scope the reference comes from

Solution
 In each Frame
 Add a reference to the frame of the parent scope

Note
 Book uses the terms
 Access link to refer to link to parent scope
 Control link to refer to link to previous frame along
invocations
CH7.92
Solving Nested Scopes
CSE
4100
CH7.93
Example
CSE
4100
program sort(input,output);
var a: array[0..10] of integer;
x: integer;
procedure readarray;
var i : integer
begin .... end
procedure exchange(i,j : integer)
begin
x := a[i];a[i] := a[j];a[j] := x;
end
procedure quickSort(m,n : integer)
var k,v : integer;
function partition(y,z : integer) : integer
var i,j : integer;
begin
... a ...
(* access the array a *)
... v ...
(* use the pivoting element *)
... exchange(i,j); ...
end
begin
end
begin .... end
CH7.94
Access Link & Frames
CSE
4100
program sort(input,output);
var a: array[0..10] of integer;
x: integer;
procedure readarray;
var i : integer
begin .... end
procedure exchange(i,j : integer)
begin
x := a[i];a[i] := a[j];a[j] := x;
end
procedure quickSort(m,n : integer)
var k,v : integer;
function partition(y,z : integer) : integer
var i,j : integer;
begin
... a ...
(* access the array a *)
... v ...
(* use the pivoting element *)
... exchange(i,j); ...
end
begin
end
begin .... end
To access a name
Find out the lexical distance
If distance is k, jump over k access links.
CH7.95
Memory Manager – Compilation View
CSE
4100

Management of Primary and Secondary Memory
 Automatic Movement Between Two
 From Secondary to Primary to Start or Restart
 From Primary to Secondary to Suspend
Capturing the “Executable” State to Secondary
Memory for Ease of Restart
 Strategies for Determining “When” Movement Will
Occur
Involves Management of
 Memory Hierarchy of Hardware
 Creation of Address Space for “Process”
 Mapping “Process” During Allocation


CH7.96
Memory Manager
CSE
4100

Requirements
 Minimize Primary Memory Access Time
 Registers vs. Cache vs. Primary Memory

Maximize Primary Memory Size
 Virtual Memory “Appearance” of Larger Memory

Primary Memory Must Be Cost-Effective
 Doubling of Capacity has Had Greatest Impact

Today’s Memory Manager:
 Allocates Primary Memory to Processes
 Maps Process Address Space to Primary Memory
 Minimizes Access Time Using Cost-effective
Memory Configuration
CH7.97
Address Space vs. Primary Memory
CSE
4100
Process Address Space
Primary Memory
Mapped to object
other than memory
CH7.98
Building the Address Space
CSE
4100
Source
Code
Library
code
Other
Objects
Adjust Addresses
Translation Time
Load Time
Secondary
Memory
Translation
Compose
Elements
Executable
Memory
Process
Address
Space
Loader
Allocate Executable
Memory Space
Process
Address
Space
CH7.99
Unix Style Memory Layout for Process
CSE
4100







Storage Organization for a
Process
“Code” Referenced by PC
Global/Local Variables
Other Variables
Heap for Dynamic Memory
Allocation
For Activation Records
Text Segment
Initialized Data
Segment
Un-initialized
Data Segment
Heap Storage
Stack Segment
Still Other Variables
Environment
Variables, etc.
CH7.100
Recall Key Compilation Concepts
CSE
4100


Compile: Produce Relocatable Object Module
 Static Variables Allocated at Compile
 Non-Static Variables via Run Time Stack
 Dynamic Variables via Heap
 Recall Activation Record in C (next slide)
Link Time: Produce Absolute (or Load) Module
 Collect and Combine Individual Relocatable
Modules
 Linkage Editor: Internal Organization of Processes
Address Space
 Absolute Module at Location 0000
 All Addresses w.r.t. Base Location
CH7.101
Recall: An Activation Record in C
CSE
4100

Actual Parameters
Supplied by Caller
Etc.
Incoming Param 2
Incoming Param 1

Needed to Restart Caller
Saved State Info

Local Variables for Scope
Local Variables
Temporary Storage

If Callee Calls Another
Procedure/Function
Outgoing Parameters
CH7.102
Recall Key Compilation Concepts
CSE
4100

Loader: Produce Executable Image for Primary
Memory
 Readjust Addresses for Execution
 Offset from Location 0000 Must be Changed
 Once Partition for Process Execution has Been
Chosen
 Bind Addresses to Physical Memory Locations
 Referencing Both Instructions and Data

Dynamic Memory for Data Structures
 Each Address Space of Process Contains “Unused”
Memory
 User Programs Utilize for Dynamic Memory
Allocation (e.g., malloc and new)
CH7.103
From Code to Loaded Program
CSE
4100
ORIGINAL SOURCE
RELOCATABLE OBJECT MODULE
static int gVar;
. . .
int proc_a (int arg){
. . .
gVar = 7;
put_record(gVar);
. . .
}
0000
. . .
0008
. . .
0036
. . .
0220
0224
0228
0232
. . .
0400
0404
. . .
0500
0540
0600
0799
. . .
entry
proc_a
[Space for gVar]
load
store
push
call
=7, R1
R1, 0036
0036
‘put_record’
External Reference Table
‘put_record’ 0232
External Definition Table
‘proc_a’
0008
(optional symbol table)
(last location in module)
CH7.104
From Code to Loaded Program
CSE
4100
THE ABSOLUTE PROGRAM
0000
. . .
1008
. . .
1036
. . .
1220
1224
1228
1232
1399
. . .
2334
. . .
2670
2999
(Other Modules)
PROGRAM AT LOCATION 4000
0000
4000
entry proc_a
. . .
5008
[Space for gVar]
. . .
5036
load
=7, R1
. . .
store R1, 1036
5220
push
1036
5224
call
2334
5228
(end of proc_a)
5232
(Other Modules)
5399
entry put_record
. . .
6334
(opt. symbol table)
. . .
(last loc. in module) 6670
6999
7000
(Other Processes)
(Other Modules)
entry
proc_a
[Space for gVar]
load
=7, R1
store R1, 5036
push
5036
call
6334
(end of proc_a)
(Other Modules)
entry put_record
(opt. symbol table)
(last loc. in module)
(Other Processes)
CH7.105
Concluding Remarks/Looking Ahead
CSE
4100






Runtime Environment is Complex and Complicated
Part of Compilation Process
Software Engineers Need Solid Understanding
Key Issue are Questions from Slide 7.XX
Once Answer Questions, know Assumptions and
Available Techniques to Solve Problems
Other Issues of Note:
 Activation, Scoping, Memory Allocation
 Parameter Passing, Layout, etc.
Looking Ahead:
 Intermediate and Machine Code Generation
 Optimization
CH7.106