Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of...

46
Type Safe Nondeterminism A Formal Semantics of Java Threads Andreas Lochbihler University of Passau Germany 01/13/2008 Funded by DFG grant Sn11/10-1 Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 1 / 17

Transcript of Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of...

Page 1: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Type Safe NondeterminismA Formal Semantics of Java Threads

Andreas Lochbihler

University of PassauGermany

01/13/2008

Funded by DFG grant Sn11/10-1

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 1 / 17

Page 2: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Overview

1 Motivation

2 Java threads

3 FormalisationThe Jinja and framework semanticsDeadlock vs. progressType safety for Jinja

4 Summary

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 2 / 17

Page 3: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Motivation

The goal

Our goal:

Formalise Java thread semantics

Show type safety

In a theorem prover

Benefits: Solid basis for formal verification problems

Language based security (LBS)

Proof carrying code (PCC)

Starting point: Jinja semantics (Nipkow, Klein, TOPLAS’06)

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 3 / 17

Page 4: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Motivation

Type safety

Type safety

Well-typed programs evaluate fully and

No untrapped errors can occur

Proof technique (Wright, Felleisen ’94):

Progress Semantics cannot get stuck(as long as some threads are not deadlocked yet)

Preservation Evaluating a well-typed statement results in anotherwell-typed statement with equal or smaller type

Challenge:Deadlock can break progress property

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 4 / 17

Page 5: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java thread features

Dual nature of threads:

Objects of class ThreadExecution contexts spawned by start()

Communication via shared memory

Synchronization via locking

Deadlocks to break progress

Synthesized methods in Object:

wait()notify()notifyAll()

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 5 / 17

Page 6: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by:

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 7: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on f

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by:

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 8: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 9: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Request lock on g

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 10: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I II

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 11: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on e

Objects e f gWait set: {} {} {}Locked by: I II

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 12: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: III I II

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 13: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on g

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: III I II

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 14: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on g

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Request lock on e

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: III I II

I II

III

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 15: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on g

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Request lock on e

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on f

Objects e f gWait set: {} {} {}Locked by: III I II

I II

III

Deadlock

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 6 / 17

Page 16: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by:

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 17: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on f

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by:

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 18: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 19: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Request lock on g

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 20: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 21: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

•••g.wait();···

}}

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {}Locked by: I I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 22: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {I}Locked by: I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 23: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on e

Objects e f gWait set: {} {} {I}Locked by: I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 24: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Objects e f gWait set: {} {} {I}Locked by: III I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 25: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on f

Objects e f gWait set: {} {} {I}Locked by: III I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 26: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Request lock on g

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on f

Objects e f gWait set: {} {} {I}Locked by: III I

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 27: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on f

Objects e f gWait set: {} {} {I}Locked by: III I II

I II

III

Z Z

Z

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 28: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Java threads

Java deadlock example with wait sets

Thread (I)

synchronized (f) {synchronized (g) {

···g.wait();···

}}

Wait on notify

Thread (II)

synchronized (g) {synchronized (e) {

···g.notify();···

}}

Request lock on e

Thread (III)

synchronized (e) {synchronized (f) {

·········

}}

Request lock on f

Objects e f gWait set: {} {} {I}Locked by: III I II

I II

III

Z Z

Z

Deadlock

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 7 / 17

Page 29: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation

The Jinja project (Nipkow, Klein, TOPLAS ’06)

Formal semantics for a Java subset in Isabelle/HOL:Program operations:

Object creation

Casts

Literal values

Binary operators

Variable access and assignment

Field access and assignment

Method call

Sequential composition

If-then-else, while

Blocks with local variables

Exception throwing and handling

Jinja source code:

Operational semantics

Equivalence for small-stepand big-step semantics

Type safety proof(progress and preservation)

Bytecode:

Jinja Virtual Machine

Bytecode verifier

Compiler from source tobytecode

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 8 / 17

Page 30: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation The Jinja and framework semantics

Framework semantics

Frameworksemantics

Jinja semantics+ synchronized

pick reduction

request thread actions

Management of

Locks

Threads

Wait sets

Select thread and one ofits reductions such thatthe thread actions arefeasible

Thread actions for

Locking and unlocking

Thread spawning

Wait and notify

Single-thread semantics

Reduction with listof thread actions

Type system

Modularity: Separation of thread issues fromlow-level Java details

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 9 / 17

Page 31: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation The Jinja and framework semantics

Syntax

Thread actions

Locking Lock a, Unlock a, UnlockFail a

Spawning NewThread t e h x, NewThreadFail

Wait sets Suspend a, Notify a, NotifyAll a

Reduction notation:

P ` 〈e, (h, x)〉 tasB 〈e ′, (h ′, x ′)〉 Jinja semantics

P ` 〈ls|es,h|ws〉 t:tasI 〈ls ′|es ′,h ′|ws ′〉 Framework semantics

P ` 〈ls|es,h|ws〉 ttasI? 〈ls ′|es ′,h ′|ws ′〉 Transitive, reflexive closure

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 10 / 17

Page 32: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation The Jinja and framework semantics

Example reduction rules in Jinja

Thread.start():h a = Obj C fs

P ` C �∗ Thread ta = NewThread t (Var this·run()) h [this 7→ Addr a]

P ` 〈addr a·start(),(h, x)〉 [ta]B 〈unit,(h, x)〉

Object.wait():h a = q

P ` 〈addr a·wait(),(h, x)〉 [Suspend a, Unlock a, Lock a]B 〈unit,(h, x)〉

Monitor locking:P ` 〈sync(addr a) e,s〉 [Lock a]

B 〈sync(locked(a)) e,s〉

Unlocking at calls to wait():

P ` 〈e,s〉 tas B 〈e ′,s ′〉 tas = Suspend a·tas ′

P ` 〈sync(locked(a)) e,s〉 tas @ [Unlock a]B 〈sync(addr a) e ′,s ′〉

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 11 / 17

Page 33: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock computation

Deadlock as a greatest fixpoint:

VI VII

II IVIII

VIIIV

I

ZZ

Z

Threads in deadlock: IV, VII, VIII

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 12 / 17

Page 34: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock computation

Deadlock as a greatest fixpoint:

VI VII

II IVIII

VIIIV

I

ZZ

Z

Threads in deadlock: IV, VII, VIII

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 12 / 17

Page 35: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock computation

Deadlock as a greatest fixpoint:

VI VII

II IVIII

VIIIV

I

ZZ

Z

Threads in deadlock: IV, VII, VIII

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 12 / 17

Page 36: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock computation

Deadlock as a greatest fixpoint:

VI VII

II IVIII

VIIIV

I

ZZ

Z

Threads in deadlock: IV, VII, VIII

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 12 / 17

Page 37: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock computation

Deadlock as a greatest fixpoint:

VI VII

II IVIII

VIIIV

I

ZZ

Z

Threads in deadlock: IV, VII, VIII

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 12 / 17

Page 38: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Deadlock formalisation

Coinductive definition in the framework:

Set of threads in deadlock = greatest set D of threads satisfying:For all threads t, t is in D iff t is

1 not in a wait set and

t can make progress on its own andin every possible reduction, t requests a lock which is held by anotherthread in D,

or2 in a wait set and all other threads

are in D orhave terminated,

Independent of type systems and language-specific constructs

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 13 / 17

Page 39: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Deadlock vs. progress

Progress in the multithreaded setting

Theorem (Progress): If

there is a thread not in deadlock and

all threads can make progress on their own and

locks are held only by non-final threads and

the semantics behaves well w.r.t. thread actions,

then the framework semantics can make progress.Formally:

es t = (e, x) ¬ final e t /∈ deadlocked P ls es ws cwf-progress P es c es `f ls

√ex-red P ls es c

∃ t ′ tas ′ es ′ ls ′ ws ′ c ′. P ` 〈ls|es,c|ws〉 t ′:tas ′I 〈ls ′|es ′,c ′|ws ′〉

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 14 / 17

Page 40: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Type safety for Jinja

Type safety for multithreaded Jinja

Type safety:For well-formed classes, during execution of a set of well-formed threads, everythread with expression type T either

gets fully evaluated with type T ′ ≤ T , or

raises a controlled exception, or

deadlocks with type T ′ ≤ T

wf-J-prog P es `i Es√

P,Es ` es,h ⇑√⇑ ⇑D⇑ es h

es `e ls√

` es ⇑√

&⇑ P ` 〈ls|es,h|ws〉 ttasI? 〈ls ′|es ′,h ′|ws ′〉

@ t tas es ′′ ls ′′ ws ′′ h ′′. P ` 〈ls ′|es ′,h ′|ws ′〉 t:tasI 〈ls ′′|es ′′,h ′′|ws ′′〉

Es ′ = Es [I ]P,· ` ·,·,·√ flatten (map snd tas)

Es E Es ′∧(∀ t e ′. ∃ x ′. es ′ t = (e ′, x ′) −→

(∃ v. e ′ = Val v ∧ (∃E T. Es ′ t = (E, T) ∧ P,h ′ ` v :≤ T)) ∨(∃ a. e ′ = Throw a ∧ a ∈ dom h ′) ∨(t ∈ deadlocked P ls ′ es ′ ws ′ h ′ ∧ (∃E T. Es ′ t = (E, T) ∧ P,E,h ′ ` e ′ ≤: T))

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 15 / 17

Page 41: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Formalisation Type safety for Jinja

Type safety for multithreaded Jinja

Type safety:For well-formed classes, during execution of a set of well-formed threads, everythread with expression type T either

gets fully evaluated with type T ′ ≤ T , or

raises a controlled exception, or

deadlocks with type T ′ ≤ T

wf-J-prog P es `i Es√

P,Es ` es,h ⇑√⇑ ⇑D⇑ es h

es `e ls√

` es ⇑√

&⇑ P ` 〈ls|es,h|ws〉 ttasI? 〈ls ′|es ′,h ′|ws ′〉

@ t tas es ′′ ls ′′ ws ′′ h ′′. P ` 〈ls ′|es ′,h ′|ws ′〉 t:tasI 〈ls ′′|es ′′,h ′′|ws ′′〉

Es ′ = Es [I ]P,· ` ·,·,·√ flatten (map snd tas)

Es E Es ′∧(∀ t e ′. ∃ x ′. es ′ t = (e ′, x ′) −→

(∃ v. e ′ = Val v ∧ (∃E T. Es ′ t = (E, T) ∧ P,h ′ ` v :≤ T)) ∨(∃ a. e ′ = Throw a ∧ a ∈ dom h ′) ∨(t ∈ deadlocked P ls ′ es ′ ws ′ h ′ ∧ (∃E T. Es ′ t = (E, T) ∧ P,E,h ′ ` e ′ ≤: T))

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 15 / 17

Page 42: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Summary

The “Quis Custodiet” project

Quis Custodiet Ipsos Custodes?Who’s watching the guards?

⇒ Reach a new level of reliability in Language Based Security

⇒ Integrate semantics, theorem provers and program analysis with LBS

CoreC++ (Wasserrab et al., OOPSLA’06)Multiple inheritance in C++ is type-safe

JinjaThreads in the Archive of Formal Proofs (afp.sourceforge.net):

Framework formalisation: 5k lines (approx. 250 lemmata)

Jinja source code add-ons: 5k lines

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 16 / 17

Page 43: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Summary

The “Quis Custodiet” project

Quis Custodiet Ipsos Custodes?Who’s watching the guards?

⇒ Reach a new level of reliability in Language Based Security

⇒ Integrate semantics, theorem provers and program analysis with LBS

CoreC++ (Wasserrab et al., OOPSLA’06)Multiple inheritance in C++ is type-safe

JinjaThreads in the Archive of Formal Proofs (afp.sourceforge.net):

Framework formalisation: 5k lines (approx. 250 lemmata)

Jinja source code add-ons: 5k lines

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 16 / 17

Page 44: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Summary

The “Quis Custodiet” project

Quis Custodiet Ipsos Custodes?Who’s watching the guards?

⇒ Reach a new level of reliability in Language Based Security

⇒ Integrate semantics, theorem provers and program analysis with LBS

CoreC++ (Wasserrab et al., OOPSLA’06)Multiple inheritance in C++ is type-safe

JinjaThreads in the Archive of Formal Proofs (afp.sourceforge.net):

Framework formalisation: 5k lines (approx. 250 lemmata)

Jinja source code add-ons: 5k lines

Andreas Lochbihler Type Safe Nondeterminism FOOL ’08 16 / 17

Page 45: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Summary

Summary

Formal semantics for multithreaded Java (subset) and type safety

Features the most important thread primitives

Proofs are machine-checked

Generic framework for lifting single-thread semantics

Deadlock formalisation and progress theorem

Starting point for:

Language based security

Proof carrying codes

Future work:

Multithreaded byte code in Jinja

Integrate duality of Java threads fully

Include the Java Memory ModelAndreas Lochbihler Type Safe Nondeterminism FOOL ’08 17 / 17

Page 46: Type Safe Nondeterminism A Formal Semantics of Java Threads · Java thread features Dual nature of threads: Objects of class Thread Execution contexts spawned by start() Communication

Summary

Summary

Formal semantics for multithreaded Java (subset) and type safety

Features the most important thread primitives

Proofs are machine-checked

Generic framework for lifting single-thread semantics

Deadlock formalisation and progress theorem

Starting point for:

Language based security

Proof carrying codes

Future work:

Multithreaded byte code in Jinja

Integrate duality of Java threads fully

Include the Java Memory ModelAndreas Lochbihler Type Safe Nondeterminism FOOL ’08 17 / 17