Presentation is loading. Please wait.

Presentation is loading. Please wait.

SCOOPLI for .NET: a library for concurrent object-oriented programming

Similar presentations


Presentation on theme: "SCOOPLI for .NET: a library for concurrent object-oriented programming"— Presentation transcript:

1 SCOOPLI for .NET: a library for concurrent object-oriented programming
Volkan Arslan, Piotr Nienaltowski Chair of Software Engineering, ETH Zurich 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

2 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Overview Motivation The SCOOP model for concurrent OO programming SCOOPLI library Implementation for .NET Conclusions 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

3 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Motivation Extend a pure, strongly typed, object-oriented language with a simple, general and powerful concurrency and distribution model 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

4 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
The SCOOP model Simple Concurrent Object-Oriented Programming High-level concurrency mechanism Full use of inheritance and other object-oriented techniques (genericity, agents, …) Applicable to many physical setups: multiprocessing, multithreading, distributed execution, etc. Minimal extension of Eiffel one new keyword separate Based on Design by Contract™ new semantics for preconditions 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

5 Two-level implementation of SCOOP
SCOOP can be implemented in several environments Microsoft .NET is our reference platform SCOOP platform-independent .NET Compact Framework POSIX 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

6 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Asynchronous calls Fundamental scheme of the O-O computation: feature call x.f (a) Caller and callee handled by different processors Asynchronous semantics 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

7 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Processors Processor is an autonomous thread of control capable of supporting the sequential execution of instructions on one or more objects Principal new concept introduced by SCOOP Not to be confused with a physical CPU! It can be implemented as: piece of hardware (computer, CPU), process, thread, AppDomain, etc. 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

8 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Access control policy Target of a separate call must be a formal argument of the enclosing routine store (buffer: separate BUFFER; value: INTEGER) is -- Store value in buffer. do buffer.put (value) end ... buf: separate BUFFER create buf.make store (buf, 10) -- instead of buf.put (10) In order to obtain exclusive access to a separate object, use the attached entity as an argument of the corresponding call, as in store (buf, 10). 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

9 From preconditions to wait-conditions
Contracts in Eiffel store (buffer: BUFFER; value: INTEGER) is -- Store value in buffer. require buffer_not_full: not buffer.is_full do buffer.put (value) ensure buffer_not_empty: not buffer.is_empty end ... store (buf, 10) If buffer is separate, correctness condition buffer_not_full becomes wait condition 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

10 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Synchronization No special mechanism is required for a client to resynchronize with its supplier after a separate call. The client will wait if and only if it needs: x.f x.g (a) y.f ... value := x.some_query This mechanism is called wait by necessity. 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

11 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
SCOOPLI library The library relies on two concepts: separate client separate supplier Separate client is handled by a different processor than each of its separate suppliers. SCOOPLI uses multiple inheritance to provide separateness: SEPARATE_ SUPPLIER X SEPARATE_X 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

12 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (1/2) SCOOP SCOOPLI x: separate X x: X -- class X is separate x: SEPARATE_X -- SEPARATE_X inherits from X and -- SEPARATE_SUPPLIER r (x, y) -- x and y are separate r (x: separate X; y: separate Y) is require not x.is_empty y.count > 5 i > 0 -- i non-separate do ... end separate_execute ([x, y], agent r (x, y), agent r_precondition) r_precondition: BOOLEAN is Result := not x.is_empty and y.count > 5 -- separate_execute defined in class SEPARATE_CLIENT -- client class inherits from -- class SEPARATE_CLIENT 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

13 Feature separate_execute of SEPARATE_CLIENT
separate_execute (requested_objects: TUPLE [SEPARATE_SUPPLIER]; action: PROCEDURE [ANY, TUPLE]; wait_condition: FUNCTION [ANY, TUPLE, BOOLEAN]) Formal arguments: requested_objects Denotes the (tuple of) objects on which exclusive locks should be acquired before calling action. action Denotes the routine to be called on the separate client object; action corresponds to the routine that “wraps” separate calls wait_condition Denotes the boolean function representing the wait condition for the call 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

14 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (1/2) SCOOP SCOOPLI x: separate X x: X -- class X is separate x: SEPARATE_X -- SEPARATE_X inherits from X and -- SEPARATE_SUPPLIER r (x, y) -- x and y are separate r (x: separate X; y: separate Y) is require not x.is_empty y.count > 5 i > 0 -- i non-separate do ... end separate_execute ([x, y], agent r (x, y), agent r_precondition) r_precondition: BOOLEAN is Result := not x.is_empty and y.count > 5 -- separate_execute defined in class SEPARATE_CLIENT -- client class inherits from -- class SEPARATE_CLIENT 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

15 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) SCOOP SCOOPLI x.f (a) -- a is expanded separate_routine (x, agent x.f (a)) res := x.g (a) -- g is function and returns -- reference value -- res is non-separate res ?= separate_value (x, agent x.g (a)) i := x.h (a) -- h is function and returns -- expanded value i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_value if x.count > 0 then ... if separate_integer_value (x, agent x.g (a)) > 0 then ... 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

16 Feature separate_routine of SEPARATE_CLIENT
separate_routine (supplier: SEPARATE_SUPPLIER; procedure: PROCEDURE [ANY, TUPLE]) Formal arguments: supplier Denotes the separate supplier object on which the separate call to procedure is made procedure Denotes the routine to be called on the separate supplier object 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

17 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) SCOOP SCOOPLI x.f (a) -- a is expanded separate_routine (x, agent x.f (a)) res := x.g (a) -- g is function and returns -- reference value -- res is non-separate res ?= separate_value (x, agent x.g (a)) i := x.h (a) -- h is function and returns -- expanded value i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_value if x.count > 0 then ... if separate_integer_value (x, agent x.g (a)) > 0 then ... 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

18 Feature separate_value of SEPARATE_CLIENT
separate_value (supplier: SEPARATE_SUPPLIER; function: FUNCTION [ANY, TUPLE, ANY]): ANY Formal arguments: Supplier Denotes the separate supplier object on which the separate call to function is made. Function Denotes the function to be evaluated. Return value is of type ANY 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

19 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) SCOOP SCOOPLI x.f (a) -- a is expanded separate_routine (x, agent x.f (a)) res := x.g (a) -- g is function and returns -- reference value -- res is non-separate res ?= separate_value (x, agent x.g (a)) i := x.h (a) -- h is function and returns -- expanded value i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_value if x.count > 0 then ... if separate_integer_value (x, agent x.count) > 0 then ... 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

20 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
SCOOPLI for .NET Mapping of SCOOP concepts to .NET constructs Processors  AppDomains Namespace System.Runtime.Remoting Use of multithreading Single feature calls on separate objects, thus one thread per AppDomain Namespace System.Threading ThreadPool 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

21 Distributed execution
Processors (AppDomains) located on different machines .NET takes care of the “dirty work” Marshalling Minimal cost of inter-AppDomain calls Computer1 Computer3 AppDomain1 o1.g AppDomain3 o1 o2 o4 o5 o4.f Computer2 AppDomain4 o8.g o9.f o6.f(o3) AppDomain2 o6 o7 o8 o3 o9 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

22 CCF – Concurrency Control File
Location of processors does not need to be specified at compile time On-the-fly specification with CCF creation local_nodes: system "susi" (1): "c:\prog\appl1\appl1.exe" "ruth" (1): "c:\prog\appl2\appl2.dll" "schlemmer" (2): "c:\prog\appl3\appl3.dll" end 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

23 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Conclusions SCOOP model is simple yet powerful Full concurrency Full use of object-oriented techniques One keyword separate Based on Design by Contract™ Several platforms SCOOPLI library SCOOP-based syntax Separate clients, separate suppliers .NET as reference platform Processors mapped to AppDomains Distributed execution with .NET Remoting 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

24 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Future research Extension of access control policy multiple locking of separate objects based on the concept of pure functions SCOOP for real-time systems specifying timing constraints adding priorities to the duel mechanism Implementation Use of agents and delegates Porting of SCOOPLI to .NET CF using threads 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003

25 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Questions ? Thank you ! 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003


Download ppt "SCOOPLI for .NET: a library for concurrent object-oriented programming"

Similar presentations


Ads by Google