Exceptional Control Flow I - Computer Organization | CSCE 230, Study notes of Computer Architecture and Organization

Material Type: Notes; Class: Computer Organization; Subject: Computer Science and Engineering ; University: University of Nebraska - Lincoln; Term: Unknown 1989;

Typology: Study notes

Pre 2010

Uploaded on 08/30/2009

koofers-user-lkg
koofers-user-lkg 🇺🇸

5

(1)

9 documents

1 / 7

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Page 1
Exceptional Control Flow
Part I
CSCE 230J
Computer Organization
Dr. Steve Goddard
http://cse.unl.edu/~goddard/Courses/CSCE230J
2
Giving credit where credit is due
Most of slides for this lecture are based on
slides created by Drs. Bryant and
O’Hallaron, Carnegie Mellon University.
I have modified them and added new
slides.
3
Topics
Exceptions
Process context switches
Creating and destroying processes
4
Control Flow
<startup>
inst1
inst2
inst3
instn
<shutdown>
Computers do Only One Thing
From startup to shutdown, a CPU simply reads and executes
(interprets) a sequence of instructions, one at a time.
This sequence is the system’s physical control flow(or flow
of control).
Physical control flow
Time
5
Altering the Control Flow
Up to Now: two mechanisms for changing control flow:
Jumps and branches
Call and return using the stack discipline.
Both react to changes in program state.
Insufficient for a useful system
Difficult for the CPU to react to changes in system state.
data arrives from a disk or a network adapter.
Instruction divides by zero
User hits ctl-c at the keyboard
System timer expires
System needs mechanisms for “exceptional control
flow”
6
Exceptional Control Flow
Mechanisms for exceptional control flow exists at all levels of a
computer system.
Low level Mechanism
exceptions
change in control flow in response to a system event (i.e., change in
system state)
Combination of hardware and OS software
Higher Level Mechanisms
Process context switch
Signals
Nonlocal jumps (setjmp/longjmp)
Implemented by either:
OS software (context switch and signals).
C language runtime library: nonlocal jumps.
pf3
pf4
pf5

Partial preview of the text

Download Exceptional Control Flow I - Computer Organization | CSCE 230 and more Study notes Computer Architecture and Organization in PDF only on Docsity!

Exceptional Control Flow

Part I

CSCE 230J

Computer Organization

Dr. Steve Goddard

[email protected]

http://cse.unl.edu/~goddard/Courses/CSCE230J

2

Giving credit where credit is due

 Most of slides for this lecture are based on

slides created by Drs. Bryant and

O’Hallaron, Carnegie Mellon University.

 I have modified them and added new

slides.

3

Topics

Exceptions

Process context switches

Creating and destroying processes

4

Control Flow

inst 1 inst 2 inst 3 … instn

Computers do Only One Thing

 From startup to shutdown, a CPU simply reads and executes

(interprets) a sequence of instructions, one at a time.

 This sequence is the system’s physical control flow (or flow

of control ).

Physical control flow

Time

5

Altering the Control Flow

Up to Now: two mechanisms for changing control flow:

 Jumps and branches

 Call and return using the stack discipline.

 Both react to changes in program state.

Insufficient for a useful system

 Difficult for the CPU to react to changes in system state.

 data arrives from a disk or a network adapter.  Instruction divides by zero  User hits ctl-c at the keyboard  System timer expires

System needs mechanisms for “exceptional control

flow”

6

Exceptional Control Flow

 Mechanisms for exceptional control flow exists at all levels of a computer system.

Low level Mechanism

 exceptions  change in control flow in response to a system event (i.e., change in system state)  Combination of hardware and OS software

Higher Level Mechanisms

 Process context switch  Signals  Nonlocal jumps (setjmp/longjmp)  Implemented by either:  OS software (context switch and signals).  C language runtime library: nonlocal jumps.

7

System context for exceptions

Local/IO Bus

Memory

Network adapter

IDE disk controller

Video adapter

Display Network

Processor Interrupt controller

SCSI

controller

SCSI bus

Serial port controller

Parallel port controller

Keyboard controller

Keyboard Mouse Modem Printer

disk disk CDROM

8

Exceptions

An exception is a transfer of control to the OS in response to some event (i.e., change in processor state)

User Process OS

exception exception processing by exception handler

exception return (optional)

event current next

9

Interrupt Vectors

 Each type of event has a unique exception number k  Index into jump table (a.k.a., interrupt vector)  Jump table entry k points to a function (exception handler).  Handler k is called each time exception k occurs.

interrupt vector 0 1 2 ...

n-

code for exception handler 0

code for exception handler 1

code for exception handler 2

code for exception handler n-

...

Exception numbers

10

Asynchronous Exceptions (Interrupts)

Caused by events external to the processor

 Indicated by setting the processor’s interrupt pin

 handler returns to “next” instruction.

Examples:

 I/O interrupts

 hitting ctl-c at the keyboard  arrival of a packet from a network  arrival of a data sector from a disk

 Hard reset interrupt

 hitting the reset button

 Soft reset interrupt

 hitting ctl-alt-delete on a PC

11

Synchronous Exceptions

Caused by events that occur as a result of executing an instruction:

 Traps

 Intentional  Examples: system calls, breakpoint traps, special instructions  Returns control to “next” instruction

 Faults

 Unintentional but possibly recoverable  Examples: page faults (recoverable), protection faults (unrecoverable).  Either re-executes faulting (“current”) instruction or aborts.

 Aborts

 unintentional and unrecoverable  Examples: parity error, machine check.  Aborts current program

12

Trap Example

User Process OS

exception Open file

return

int pop

Opening a File

 User calls open(filename, options)

 Function open executes system call instruction int

 OS must find or create file, get it ready for reading or writing

 Returns integer file descriptor

0804d070 <__libc_open>:

... 804d082: cd 80 int $0x 804d084: 5b pop %ebx ...

19

Context Switching

Processes are managed by a shared chunk of OS code

called the kernel

 Important: the kernel is not a separate process, but rather

runs as part of some user process

Control flow passes from one process to another via a

context switch.

Process A code

Process B code user code

kernel code user code

kernel code

user code

Time

context switch

context switch

20

Private Address Spaces

Each process has its own private address space.

kernel virtual memory (code, data, heap, stack)

memory mapped region for shared libraries

run-time heap (managed by malloc)

user stack (created at runtime)

0 unused

%esp (stack pointer)

memory invisible to user code

brk

0xc

0x

0x

read/write segment (.data, .bss) read-only segment (.init, .text, .rodata)

loaded from the executable file

0xffffffff

21

fork : Creating new processes

int fork(void)

 creates a new process (child process) that is identical to the

calling process (parent process)

 returns 0 to the child process

 returns child’s pid to the parent process

if (fork() == 0) { printf("hello from child\n"); } else { printf("hello from parent\n"); }

Fork is interesting (and often confusing) because it is called once but returns twice

22

Fork Example #

void fork1() { int x = 1; pid_t pid = fork(); if (pid == 0) { printf("Child has x = %d\n", ++x); } else { printf("Parent has x = %d\n", --x); } printf("Bye from process %d with x = %d\n", getpid(), x); }

Key Points

 Parent and child both run same code

 Distinguish parent from child by return value from fork

 Start with same state, but each has private copy

 Including shared output file descriptor  Relative ordering of their print statements undefined

23

Fork Example #

void fork2() { printf("L0\n"); fork(); printf("L1\n"); fork(); printf("Bye\n"); }

Key Points

 Both parent and child can continue forking

L0 L

L

Bye

Bye

Bye

Bye

24

Fork Example #

void fork3() { printf("L0\n"); fork(); printf("L1\n"); fork(); printf("L2\n"); fork(); printf("Bye\n"); }

Key Points

 Both parent and child can continue forking

L1 L

L

Bye

Bye

Bye

Bye

L1 L

L

Bye

Bye

Bye

Bye

L

25

Fork Example #

void fork4() { printf("L0\n"); if (fork() != 0) { printf("L1\n"); if (fork() != 0) { printf("L2\n"); fork(); } } printf("Bye\n"); }

Key Points

 Both parent and child can continue forking

L0 L

Bye

L

Bye

Bye

Bye

26

Fork Example #

void fork5() { printf("L0\n"); if (fork() == 0) { printf("L1\n"); if (fork() == 0) { printf("L2\n"); fork(); } } printf("Bye\n"); }

Key Points

 Both parent and child can continue forking

L0 Bye

L

Bye

Bye

Bye

L

27

exit : Destroying Process

void exit(int status)

 exits a process

 Normally return with status 0

 atexit() registers functions to be executed upon exit

void cleanup(void) { printf("cleaning up\n"); }

void fork6() { atexit(cleanup); fork(); exit(0); }

28

Zombies

Idea

 When process terminates, still consumes system resources

 Various tables maintained by OS

 Called a “zombie”

 Living corpse, half alive and half dead

Reaping

 Performed by parent on terminated child

 Parent is given exit status information

 Kernel discards process

What if Parent Doesn’t Reap?

 If any parent terminates without reaping a child, then child

will be reaped by init process

 Only need explicit reaping for long-running processes

 E.g., shells and servers

29

linux> ./forks 7 & [1] 6639 Running Parent, PID = 6639 Terminating Child, PID = 6640 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6639 ttyp9 00:00:03 forks 6640 ttyp9 00:00:00 forks 6641 ttyp9 00:00:00 ps linux> kill 6639 [1] Terminated linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6642 ttyp9 00:00:00 ps

Zombie

Example

 ps shows child

process as “defunct”

 Killing parent allows

child to be reaped

void fork7() { if (fork() == 0) { / Child / printf("Terminating Child, PID = %d\n", getpid()); exit(0); } else { printf("Running Parent, PID = %d\n", getpid()); while (1) ; / Infinite loop / } }

30

linux> ./forks 8 Terminating Parent, PID = 6675 Running Child, PID = 6676 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6676 ttyp9 00:00:06 forks 6677 ttyp9 00:00:00 ps linux> kill 6676 linux> ps PID TTY TIME CMD 6585 ttyp9 00:00:00 tcsh 6678 ttyp9 00:00:00 ps

Nonterminating

Child

Example

 Child process still active

even though parent has

terminated

 Must kill explicitly, or else

will keep running

indefinitely

void fork8() { if (fork() == 0) { / Child / printf("Running Child, PID = %d\n", getpid()); while (1) ; / Infinite loop / } else { printf("Terminating Parent, PID = %d\n", getpid()); exit(0); } }

37

Summarizing

Exceptions

 Events that require nonstandard control flow

 Generated externally (interrupts) or internally (traps and faults)

Processes

 At any given time, system has multiple active processes

 Only one can execute at a time, though

 Each process appears to have total control of processor + private

memory space

38

Summarizing (cont.)

Spawning Processes

 Call to fork

 One call, two returns

Terminating Processes

 Call exit

 One call, no return

Reaping Processes

 Call wait or waitpid

Replacing Program Executed by Process

 Call execl (or variant)

 One call, (normally) no return