250 likes | 389 Views
SCOOPLI for .NET : a library for concurrent object-oriented programming. Volkan Arslan, Piotr Nienaltowski Chair of Software Engineering, ETH Zurich. Overview. Motivation The SCOOP model for concurrent OO programming SCOOPLI library Implementation for .NET Conclusions. Motivation.
E N D
SCOOPLI for .NET:a library for concurrentobject-oriented programming Volkan Arslan, Piotr Nienaltowski Chair of Software Engineering, ETH Zurich 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
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
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
SCOOP platform-independent .NET Compact Framework .NET POSIX … Two-level implementation of SCOOP • SCOOP can be implemented in several environments • Microsoft .NET is our reference platform 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
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
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
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
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
X SEPARATE_ SUPPLIER SEPARATE_X 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: 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (1/2) 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
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_objectsDenotes the (tuple of) objects on which exclusive locks should be acquired before calling action. • actionDenotes the routine to be called on the separate client object; action corresponds to the routine that “wraps” separate calls • wait_conditionDenotes the boolean function representing the wait condition for the call 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (1/2) 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Feature separate_routine of SEPARATE_CLIENT separate_routine (supplier: SEPARATE_SUPPLIER; procedure: PROCEDURE [ANY, TUPLE]) Formal arguments: • supplierDenotes the separate supplier object on which the separate call to procedure is made • procedureDenotes the routine to be called on the separate supplier object 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Feature separate_value of SEPARATE_CLIENT separate_value (supplier: SEPARATE_SUPPLIER; function: FUNCTION [ANY, TUPLE, ANY]): ANY Formal arguments: • SupplierDenotes the separate supplier object on which the separate call to function is made. • FunctionDenotes the function to be evaluated. Return value is of type ANY 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003
Use of SCOOPLI (2/2) 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
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
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
Conclusions • SCOOP model is simple yet powerful • Full concurrency • Full use of object-oriented techniques • One keywordseparate • 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
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
Questions ? Thank you! 2nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003