Souběžný Pascal - Concurrent Pascal - Wikipedia
Paradigmata | Rozkazovací způsob, strukturovaný, souběžně |
---|---|
Rodina | Wirth Pascal |
Navrhl | Per Brinch Hansen |
Poprvé se objevil | Duben 1974 |
Psací disciplína | Statické a dynamické, silný, bezpečný |
Plošina | DEC PDP 11 |
Ovlivněno | |
ALGOL 60, Simula 67, Pascal |
Souběžný Pascal je programovací jazyk navrhl Per Brinch Hansen pro psaní souběžné výpočty programy jako operační systémy a výpočet v reálném čase monitorovací systémy zapnuty sdílená paměť počítače.[1]
Samostatný jazyk, Sekvenční Pascal, se používá jako jazyk pro aplikační programy spouštěné operačními systémy napsanými v Concurrent Pascal. Oba jazyky jsou příponou Niklaus Wirth je Pascal a sdílejte společný podprocesový kód tlumočník.[2] Následující text popisuje, jak se Concurrent Pascal liší od Wirthova Pascal.
Popis jazyka
Několik konstrukcí v Pascalu bylo odstraněno z Concurrent Pascal pro jednoduchost a bezpečnost:[2]
- Varianty záznamů
- Jít do prohlášení a štítky
- Postupy jako parametry
- Zabalená pole
- Typy ukazatelů
- Typy souborů a související standard vstup výstup postupy
Tato opomenutí umožňují zaručit kombinací kontrol v době kompilace a minimální kontroly za běhu v interpretovi podprocesového kódu, že program nemůže poškodit sebe nebo jiný program adresováním mimo svůj přidělený prostor.
Souběžný Pascal zahrnuje datové typy třídy, monitoru a zpracování. Instance těchto typů jsou deklarovány jako proměnné a inicializovány v inic
prohlášení.
Třídy a monitory jsou podobné: oba balíčky soukromých proměnných a procedury s veřejnými procedurami (nazývané záznamy procedur). Instanci třídy lze použít pouze jedním procesem, zatímco instanci monitoru mohou procesy sdílet. Monitory poskytují jediný mechanismus pro meziprocesovou komunikaci v programu Concurrent Pascal.
V dané instanci monitoru lze současně spustit pouze jeden proces. Integrovaný datový typ, fronta, spolu s operacemi zpoždění
a pokračovat
, se používají pro plánování v rámci monitorů. Každá proměnná fronty typů může obsahovat jeden proces. Pokud má být na monitoru zpožděno mnoho procesů, musí být poskytnuto více proměnných fronty, obvykle uspořádaných jako pole. Proměnná fronta jednoho procesu dává monitoru plnou kontrolu nad střednědobým plánováním, ale za odblokování správného procesu je zodpovědný programátor.
Proces, stejně jako třída nebo monitor, má místní proměnné, procedury a počáteční příkaz, ale nemá žádné záznamy procedur. Počáteční příkaz se obvykle provádí navždy, volá místní procedury, procedury třídy a monitoruje procedury. Procesy komunikují prostřednictvím monitorovacích postupů. Pravidla jazyka zabraňují zablokování zavedením hierarchie na monitory. Ale nic nemůže zabránit tomu, aby monitor chybně zapomněl odblokovat zpožděný proces (nevytočením pokračování), takže systém může stále efektivně zavěsit kvůli programovacím chybám.
Konfigurace procesů, monitorů a tříd v programu Concurrent Pascal se obvykle vytvoří na začátku provádění a poté se nezmění. Komunikační cesty mezi těmito komponentami jsou stanoveny proměnnými předávanými v inic
příkazy, protože proměnné instance třídy a monitoru nelze použít jako parametry procedury.
Příklad
Následující příklad ukazuje deklaraci jednoduchého monitoru a jeho použití dvěma komunikačními procesy.
typ "Monitor ohraničené vyrovnávací paměti" nárazník = Monitor var uložené : Celé číslo; "uložená položka je celé číslo" plný, emptyq : Fronta; "používá pouze dva procesy" úplný : Booleovský; "true, pokud je položka uložena:" "Vloží položku do vyrovnávací paměti" postup vstup dát(položka : Celé číslo); začít -li úplný pak zpoždění(fullq); „blokovat, pokud je plný“ uložené := položka; "uložit položku" úplný := skutečný; „označit jako plné“ pokračovat(emptyq) „odblokovat spotřebitele“ konec; "Získá položku z vyrovnávací paměti" postup vstup dostat(var položka : Celé číslo); začít -li ne úplný pak zpoždění(emptyq); „blokovat, pokud je prázdné“ položka := uložené; "získat položku" úplný := Nepravdivé; "označit jako ne plné" pokračovat(fullq) „odblokovat výrobce“ konec; "Inicializovat monitor" začít úplný := Nepravdivé konec; „Producent uses a buffer“ výrobce = proces(složit : Buffer); var položka : Celé číslo; začít cyklus "vykonat ve smyčce navždy" "vyrobit položku" složit.dát(položka) "předat položku na monitor" konec konec; „Spotřebitel používá vyrovnávací paměť“ spotřebitel = proces(složit : Buffer); var položka : Celé číslo; začít cyklus složit.dostat(položka); "získat položku z monitoru" "spotřebovat položku" konec konec;"deklarovat instance monitoru, výrobce a spotřebitele"„poskytnout výrobci a spotřebiteli přístup k monitoru“var složit : Buffer; prod : Výrobce; nevýhody : Spotřebitel;začít inic složit, "inicializovat monitor" prod(složit), "spustit proces výrobce" nevýhody(složit) "zahájit spotřebitelský proces"konec.
Reference
- ^ Brinch Hansen, Per (červen 1975). "Programovací jazyk Concurrent Pascal" (PDF). Transakce IEEE v softwarovém inženýrství (2): 199–207. doi:10.1109 / tse.1975.6312840.
- ^ A b Brinch Hansen, Per (1977). Architektura souběžných programů. Prentice Hall. ISBN 978-0-13-044628-2.