Concurrent Pascal

Concurrent Pascal

Concurrent Pascal (also known as PASCAL-FC) was designed by Per Brinch Hansen for writing concurrent computing programs such as operating systems and real-time monitoring systems on shared memory computers.

A separate language, Sequential Pascal, is used as the language for applications programs run by the operating systems written in Concurrent Pascal. Both languages are extensions of Niklaus Wirth's Pascal, and share a common threaded code interpreter. The following describes how Concurrent Pascal differs from Wirth's Pascal.

Language Description

Several constructs in Pascal were removed from Concurrent Pascal for simplicity and security:

These omissions make it possible to guarantee, by a combination of compile-time checks and minimal run-time checking in the threaded-code interpreter, that a program can not damage itself or another program by addressing outside its allotted space.

Concurrent Pascal includes class, monitor, and process data types. Instances of these types are declared as variables, and initialized in an init statement.

Classes and monitors are similar: both package private variables and procedures with public procedures (called procedure entries). A class instance can be used by only one process, whereas a monitor instance may be shared by processes. Monitors provide the only mechanism for interprocess communication in a Concurrent Pascal program.

Only one process can execute within a given monitor instance at a time. A built in data type, the queue, together with operations delay and continue, are used for scheduling within monitors. Each variable of type queue can hold a single process; if many processes are to be delayed in a monitor, multiple queue variables, usually organized as an array, must be provided. The single process queue variable gives a monitor complete control over medium-term scheduling, but the programmer is responsible for unblocking the correct process.

A process, like a class or monitor, has local variables, procedures, and an initial statement, but has no procedure entries. The initial statement ordinarily executes forever, calling local procedures, class procedures, and monitor procedures. Processes communicate through monitor procedures. Language rules prevent deadlock by imposing a hierarchy on monitors. But nothing can prevent a monitor from erroneously forgetting to unblock a delayed process (by not calling continue) so the system can still effectively hang up through programming errors.

The configuration of processes, monitors, and classes in a Concurrent Pascal program is normally established at the start of execution, and is not changed thereafter. The communication paths between these components are established by variables passed in the init statements, since class and monitor instance variables cannot be used as procedure parameters.

Example

The following example shows the declaration of a simple monitor, and its use by two communicating processes.

 type 
    buffer = 
       monitor                                     "bounded buffer monitor"
          var 
             saved: integer;                     "saved item is an integer"
             fullq, emptyq: queue;               "used by only two processes"
             full: boolean;                      "true if an item is saved:"
          procedure entry put (item: integer);        "puts item in buffer"
             begin
                if full 
                then delay(fullq);              "block if full"
                saved := item;                    "save the item"
                full := true;                    "mark as full"
                continue(emptyq)                 "unblock consumer"
             end;
          procedure entry get(var item: integer);  "gets item from the buffer"
             begin
                if not full 
                then delay(emptyq);             "block if empty"
                item := saved;                    "get the item"
                full := false;                           "mark as not full"
                continue(fullq)                  "unblock producer"
             end;
          begin                                    "initialize the monitor" 
             full := false 
          end;                                    
 
    producer = 
       process(pass: buffer);                      "producer uses a buffer"
          var item: integer;
          begin
             cycle                                 "execute in a loop forever"
                "produce an item"
                pass.put(item)                          "pass an item to the monitor"
             end
          end;
 
    consumer = 
       process(pass: buffer);                      "consumer uses a buffer"
          var item: integer;
          begin
             cycle                              
                pass.get(item);                         "get an item from the monitor"
                "consume the item"
             end
          end;
 
 "declare instances of the monitor, producer, and consumer"
 "give the producer and consumer access to the monitor"
 var 
    pass: buffer; 
    prod: producer; 
    cons: consumer;
 begin
    init pass,                                    "initialize the monitor"
         prod(pass),                            "start the producer process"
         cons(pass)                              "start the consumer process"
 end.

Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Look at other dictionaries:

  • Pascal (programming language) — Pascal Paradigm(s) imperative, structured Appeared in 1970 Designed by Niklaus Wirth Typing discipline static, strong, safe …   Wikipedia

  • PASCAL — PASCẠL 〈EDV〉 höhere Programmiersprache für strukturierte Programmierung, Weiterentwicklung von ALGOL * * * Pạs|cal [nach dem frz. Physiker u. Religionsphilosophen B. Pascal (1623–1662)], das; s, ; Einheitenzeichen: Pa: im SI die abgeleitẹte… …   Universal-Lexikon

  • Concurrent computing — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concurrent c …   Wikipedia

  • Pascal — Pas|cạl 〈n.; s, ; ; Phys.〉 Maßeinheit des Drucks, 1 Pa = 1 N/m2 [nach dem frz. Philosophen u. Mathematiker Blaise Pascal, 1623 1662] * * * Pạs|cal [nach dem frz. Physiker u. Religionsphilosophen B. Pascal (1623–1662)], das; s, ;… …   Universal-Lexikon

  • Pascal (langage) — Pour les articles homonymes, voir Pascal. Pascal Apparu en 1970 (évolution constante) Auteur …   Wikipédia en Français

  • Concurrent — Concurrence Pour les articles homonymes, voir Concurrence (homonymie). La concurrence économique en anglais competition in economics est une situation où plusieurs agents proposent des produits ou des services équivalents ou bien dont les… …   Wikipédia en Français

  • Comparison of Pascal and C — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations …   Wikipedia

  • UCSD Pascal — UCSD Pascal/p System Company / developer University of California, San Diego, SofTech, Pecan OS family p code operating systems Working state …   Wikipedia

  • Object Pascal — Paradigm(s) imperative, structured, object oriented, functional (Delphi dialect only) Appeared in 1986 (1986) Designed by Apple, Niklaus Wirth, Anders Hejlsberg …   Wikipedia

  • Comparison of Object Pascal and C — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”