Az Euclid nyelvben egyáltalán nincs nyelvi eszköz a párhuzamosság támogatására. Erre fejlesztették ki azonban a Concurrent Euclid -ot.
A Concurrent Euclid (ConEuc) "párhuzamos" leszármazottja a James Cordy és Rick Holt által a Toronto Egyetemen 1980-ban kifejlesztett Euclid programozási nyelvnek. A ConEucot párhuzamos, nagy teljesítményű, magas szinten megbízható rendszerprogramok írására tervezték, mint pl. operációs rendszerek, fordítóprogramok, és beágyazott processzor-rendszerek. A TUNIS operációs rendszert, egy UNIX-variánst teljesen ConEuc nyelven implementáltak. A Toronto UNIversity System a kora-80-as években a torontói egyetemen fejlesztett, UNIX -hoz hasonló operációs rendszer. Legközelebb a UnixV7-hez áll, de teljesen újratervezett kernellel. A ConEuc az Euclid egy(az alapokat egybefoglaló) "mag-részét" terjeszti ki processekkel, monitorokkal (C.A.R. Hoare specifikációja szerint), valamint rendszerprogramozási nyelvi konstrukciókkal, mint pl.elkülöníthető fordítás, abszolút című változók, típuskonverziók, long-integer típus(ok), stb.
A ConEuc -t egy kicsi(50k bytes), gyors, hordozható fordítóval implementálták, ami önfordító, cserélhető kódgenerátorokkal. Számos számítógép-architektúrához fejlesztettek magas színvonalú kódgenerátorokat úgymint PDP-11, VAX-11, Motorola 68000 és Motorola 6809, amelyek a legjobb C fordítókhoz hasonlítható kódokat produkáltak. Concurrent Euclid programok futtathatóak magán a számítógépen is (egy apró assembly - kernellel támogatva), vagy szimulációs/szimulált módban, egy operációs rendszer egyszerű processeként.
A Turing programozási nyelv közvetlen leszármazottja ConEuc -nak; végül is a legtöbb alkalmazásban ennek Turing Plus dialektusa helyettesíti a ConEuc -ot. TTV editor: komplett ConEuc IDE eszköz.(A Toronto egyetemen :( ) - Turing 4.1.1: ingyenesen letölthető.
ConEuc | |
Paradigma: multi-paradigmás: | struktuált, imperatív, funkcionális |
"Nyilvánosságra hozták": | 1980-ban |
Tervezők: | James Cordy & Ric Holt |
Fejlesztők: | James Cordy & Ric Holt |
Típusrendszer: | erősen típusos, statikus |
"Tervezésére hatott": | Euclid, Communicating Sequential Processes |
"Tervezése hatott": | Turing Plus |
"Operációs rendszer:" | Több platformon működik : PDP-11, VAX-11, Motorola 68000, Motorola 6809 |
Következzen egy tömör leírás a ConEuc párhuzamosságot leíró nyelvi elemeiről. A párhuzamos végrehajtás specifikálására és irányítására a ConEuc folyamatokat, monitorokat, (őr)feltétel-változókat, wait -és signal-utasításokat, és prioritási feltételeket alkalmaz. Egy folyamat vázlatos leírása látható az első ábrán.
A ConEuc a szinkronizációt (őr)feltétel-változókkal és a wait, signal műveletek hívásával oldja meg. (Őr)feltétel-változókat monitoron belül deklarálhatunk. A wait és a signal (ezeken a) feltétel-változókon végez műveleteket. Wait és signal kizárólag monitor belsejéből hívható. A feltétel-változókat folyamatok soraként is vehetjük (mint a monitor egy várakozási sora). Egy wait(c) hívás a (monitor egy műveletét) hívó folyamatot berakja c várakozási sorba. Azután a hívó folyamatot kiléptetik a monitorból. A signal(c) eltávolít a c -ből egy várakozó folyamatot. Azután a signal-t hívó folyamatot kiléptetik a monitorból, és visszakerülhet és folytatódhat abban az esetben, ha már nincs több folyamat a monitorban. Ha egy signal(c) hívásakor nincs folyamat a c várakozási sorban, a (signal-t) hívó folytatódhat megszakítás nélkül. A folyamatok határozatlan sorrendben "törlődnek" egy (őr)feltétel-változó-várakozási-sorból. Ezért nem várhatjuk el, hogy a sorrend FIFO legyen. Ebben a környezetben lazán értelmezzük a sor fogalmát, nem szükséges, hogy igazi sorként kezeljük. A signal és wait -hoz kiegészítésképpen a ConEuc egy empty műveletet is megvalósít. Az empty egy Boolean függvény, ami feltétel-változókon operál és igazzal tér vissza ha van éppen a feltétel várakozási sorában folyamat; különben hamissal tér vissza.
Elnézést, a cikkben ez áll angolul (meglehet nézni), de a példaprogramoknál látott kódokkal éppenhogy fordítva lenne konzisztens.
A ConEuc prioritásos feltételeket is biztosít. Amikor a wait -et prioritásos feltételre hívjuk, a wait-nek megadunk egy nem-negatív prioritás értéket is, pl.: wait(c,3). Amikor pedig egy prioritásos feltételhez egy signal keletkezik, a legkisebb prioritású folyamat lesz felélesztve a várakozási sorból. Ezzel zárjuk ezt az ismertetőt. Bár tömör, de a példakódok értelmezéséhez elég kell legyen. A ConEuc párhuzamossággal kapcsolatos tulajdonságainak és használatuknak részletesebb leírása elérhető(a Toronto Egyetemen :( ) az alábbi hivatkozás(ok) használatával:
"Concurrent Euclid, the UNIX system, and Tunis" Holt. (R. C. Holt)
A Toronto University -n így fordítanak:
A ConEuc compiler kétféleképp használható. Az egyik, hogy egy kézhezálló szövegszerkesztővel megírjuk a forrásfájlt. Mentsük el ".e" kiterjesztéssel. Azután hívjuk a compilert "cec filename.e" formában. A hibák(ha vannak) listája a filename.lst fájlban lesz megtalálható. A másik módszer a beépített fejlesztő környezet, a TTV(Toronto Teaching enVironment) használata. A "TTV" paranccsal hívható. A TTV szerkesztő a programírásra éppúgy alkalmas, mint a lefordítására vagy futtatására, az editor elhagyása nélkül (IDE eszköz :) ). Az op. rendszer promptjára írt "HOW"-al elérhető a compiler súgója. A cec parancssori opciók megtekintéséhez gépelje be:
"cec-h".
A TUNIS-t (Toronto UNIversity System) "hordozható, magas színvonalú, gyönyörűen felépített" operációs rendszernek szánták a készítői, bevallásuk szerint 1981-ben még éppen tesztelés alatt állt. Noha igen nagy mértékben kompatibilis a UNIX v7 -al, a kernelje teljesen máshogy épül fel. Magas szinten struktúrált, rétegeinek építőkövei ConEuc modulok. Minden modul az absztrakció egy újabb szintjét támogatja,méghozzá az import/export (láthatósági) szabályokkal. Példának vegyük a "memóriakezelő" modult: a felhasználói folyamatoknak futási területet biztosító memória-részeket valósítja meg (pl. "memória-rész" -típussal). A "memóriakezelő" szintjén kívül lényegtelen hogy cserével vagy lapozással kezelik ezeket a memória-részeket.
Általános célú operációs rendszer, azon felül 16 bites mikroprpocesszorral dolgozó önálló munkaállomásokra is szánták a tervezők, támogatásként mikroprocesszor-fejlesztő rendszerekhez,stb. Az apró assembly magon kívül mindent ConEucban írtak. Az itt használt ConEuc -compiler önfordító, kis méretű(50k), négymenetes fordító.