• ' i
n n p l É É »
•
.
'WßwmWä - ■•-. ' " . • •
mmmmm
’' \ v v ■'■
^
i^ ífp K ^ ÍK Í ! X'-Xitíï; *h: Vv ui* oÿi«ï v^í'.ÆSâ3*fts»í&gí
■., : ; . - ; - -;-- g p l /
§ » £ n « S f ^ : <'i.-'&v; -K/
& h $ & Ê Ë È ^ Æ É é è ■ M i lk li
V: - S lili
M Mm . f f e * ï
I f s s
¿ S l É
V * V-
informatyka
N r 2-3
M iesięcznik Rok X X I
Luty-M arzec 1986
O rgan K o m itetu In fo rm a tyk i M N S Z W iT oraz K o m itetu Naukowo-Technicznego N O T ds. In fo rm a tyk i
K O L E G IU M R E D A K C Y J N E :
D r inż. W a c ła w IS Z K O W S K I, mgr Teresa JA B Ł O Ń S K A (sekretarz redakcji), W ła dysław K L E P A C Z (redaktor naczelny), d r iuż. Jan u sz Z A L E W S K I (zastępca red.
naczelnego)
S T A L E W S P Ó Ł P R A C U J Ą ;
M gr inż. W ito ld A B R A M O W IC Z (S z w a j
c aria ), m gr inż. Teresa W I L C Z E K
P R Z E W O D N IC Z Ą C Y R A D Y P R O G R A M O W E J: J
P ro f. dr hab. Ju liu sz Le ćh K U L I K O W S K I r
M ateriałó w n ic zam ówionych redakcja
n ie zwraca
.
-ł \■.
R e d a k cja : 00-041 W arszaw a, ul. Ja sn a 14716, pok. 243 1 244, teł. 27-71-40 lub 2G-S2-G1 w . 184
Z a k ł. G ra f. „T a m k a ” . Zam . 0187-1300/8G.
Obj. 4,0 iirk. druk. N ak ład 7200 egz. P-68.
IS S N 0542-9851, IN D E K S 3G124
Cena egzemplarza 120 zł Pren u m erata roczna 1200 zł
00-950 Warszawa skrytka pocztowi 1004
uL Biała 4
W N U M E R Z E : Stro n a
Zasady wieloprogram owości i ich im plem entacja w Moduli-2 N iklau s W irth
Z m ia n y i uzupełnienia w Moduli-2 Oprać. JZ
Modula-2 lista im plem entacji i program w zorcow y Oprać. J Z
Ję z y k program owania Icon Je rz y K arczm arczuk
Zaaw ansow ane konstrukcje języka C J a n B ie le c k i
Operacje zmiennoprzecinkowe w języku Fo rth Zbigniew Szkaradnik
A b strakcje w program owaniu (2) Je rz y Z a k ręck i
M o n ito r jak o narzędzie stru k tu ralizacji program ów współbieżnych (1) Leszek K o tu lsk i
K o m p u tery osobiste w zastosowaniach profesjonalnych (1) M ich a ł K le ib er, M a cie j Leśny, Rom uald Szuniewicz
A b rah am Ste rn — pierwszy polski konstruktor maszyn liczących Jan u sz Stokłosa -. ...
i; M o d yfikacja procesu kompiląfcji P a scala/M T + M ariusz’: Postoi
D w ie uogólnione, zmiermoprzfecinkówe reprezentacje liczb
Oprać. M ariusz Kuę< : ;
i Z K R A J l f i , ! !
; • i i. ■ ;
{ Zastpsowańie m ikrokom puterów szansą uspraw nienia zarządzania
. gospodarką » ; ; !
‘ Dolnośląski Oddział Polskiego T o w arzystw a Inform atycznego Pra co w n ie kom puterowe S E P i „H oryzontó w T e ch n ik i”
Działalność K o m itetu ds. System u C A M A C
1
3
9
11
14
17
22 24
27 ł 3V
32!
i 34;
33
Z E Ś W I A T A
Przetw arzan ie współbieżne w Moduli-2 39
O chrona program ów przed kopiowaniem w kom puterach osobistych 41 M etastabilność system ów V M E i M U L T I B U S I I 42 N o w a generacja 32-bitowych system ów w ieloprocesorowych
z w ykorzystaniem m agistrali M U L T I B U S 44
Zm ierzch m ikroprocesorów 8-bitowych 44
T E R M IN O L O G IA
T e rm in y związane z pam ięciam i dyskow ym i 45
W N A S T Ę P N Y C H N U M E R A C H :
• B r ia n A . W ich m a n a i J . G . J . M eijerinlc o k o n w ersji oprogram owania na ję z y k Ada S Rom an Fab er i M ich a ł O strowski o u n iw e rsa ln ym ’ procesorze do redagowania
tekstów dla M E R Y 400
• An-.rzej Ja n cz u ra o rozw iązyw aniu pasm owych rów nań lin io w ych na m ikrokom pu
terach
® Z b ig n iew Sz k arad n ik o re k u re n cjl w języku F o rth
• P a w e ł Grzegorzewicz o m echanizm ie półautom atycznego generowania poleceń dla systemu operacyjnego RSX-11M
• P io tr Zaskórski i E w a K a sp rzyk o technologii w ytw a rza n ia oprogram owania ze wspomaganiem kom puterow ym
• Krzysztof P e ry c z o m inikom p uterow ym system ie o p eracyjn ym S I
• A ndrzej M acioł i A d am S ta w o w y o środkach przetwarzania tekstów
• P io tr Cofta o norm ie I E E E
NIK LAUS WIRTH Institut fur Informatik
Eidgenössische Technische H ochschule Zurych
Zasady wieloprogramowości
i ich implementacja w Moduli-2
W ieloprogram owością nazyw am y określenie w programie kilku (być może w ielu) procesów sekw encyjnych, które są w ykon yw an e współbieżnie. Celem, wieloprogram owości jest osiągnięoie i zagw arantow anie zharm onizowanej w spółpra
cy między procesami. W ym aga to podania zasad i określe
nia operacji elem entarnych do synchronizacji czynności współbieżnych i kom unikacji między nim i. W literaturze proponowano w iele koncepcji rozwiązania tego zagadnienia, a k ilk a z nich zrealizowano w różnych językach programo
wania. Ostatnio — w pracach [1, 8, 9] — opublikowano k il
ka dokładnych porównań i ocen tych metod.
W spólną cechą tych propozycji jest uznanie in d yw id u a l
nych procesów za ciągi działań w yk o n yw a n ych z dowolną szybkością. Dlatego nie w ystępu je w nich pojęcie czasu, z w yjątk iem sytuacji, w k tó rych operacje synchronizacji um ożliw iają opóźnienie określonego procesu, aż do spełnienia pewnego w aru n k u przez inne procesy. Tego rodzaju synchro
nizacja w ystępu je dość rzadko. W ta k ich przypadkach m ów i się o procesach słabo powiązanych, w przeciwieństwie do tablic procesów w yk o n yw a n ych „ w m iarow ych taktach ” .
Procesy muszą być synchronizowane, gdy p lan u je się ich współpracę. W procesach obliczeniowych w spó łpraca jest równoznaczna z kom unikacją. K o m u n ik a cja oznacza w y m ia nę inform acji, tj. danych. W tym a rtyku le rozróżnia się dw a rodzaje kom unikacji, tj. kom unikację przez współdzielenie zmiennych (ang. sharing variables) i przekazyw anie kom u
nikatów (ang. passing messages). O dzw ierciedlają one nie-
P ro f. N IK L A U S W I R T H uzyskał dok
torat na U n iw e rsytecie K a lifo rn ijs k im w B e rk e le y w ro ku 1963. Do ro ku 1967 p raco w ał jak o Assistant P ro fe s
sor na U n iw e rsytecie w Stanford (stan K a lifo rn ia ). Od ro ku 1968 Jest profesorem w In stytu cie In fo rm a ty k i P o lite c h n ik i F ed eraln ej w Z u rych u (E T H ), którego d yrekto rem b y ł w la tach 1982—1984. N ajb ard ziej znane są Jego osiągnięcia w dziedzinie Języków program owania, a szczególnie opra
cow anie Język ó w : E u le r, Algol-W , P a scal, M odula i Modula-2.
Im p lem en tacji tego ostatniego Ję z y ka dokonał na opracow anym przez siebie kom puterze osobistym L illth . N ik la u s W lr th o trzym ał w ro k u 1984 nagrodę im. A lan a T u rlng a, przyzna
w an ą przez am erykań skie sto w arzy
szenie Association fo r Com puting M a chin ery. W c h w ili oddawania num eru do d ru k u N . W lr th p rzeb yw ał w X e rox P a lo A lto Research C enter w K a lifo r n ii.
A r ty k u ł Jest tłum aczeniem — doko
nanym za zgodą A uto ra — raportu opublikowanego w czerwcu 1984 roku, pt. „Sch em es for M ultiprogram m ing and T h e ir Im plem entation in M odu
la-2" (E T H In stitu t fttr In fo rm a tik , No. 59).
jaw n e założenie co do m echanizmu w yk o n yw a n ia procesów, który przy pom inięciu inn ych szczegółów jest różny dla pro
cesorów dzielących wspólną pam ięć (tg. połączonych przez wspólną m agistralę o dużej przepustowości) i procesorów rzeczywiście rozłożonych, kom unikujących się za pomocą przewodów. Choć można zrealizować każdy z tych rodza
jó w k o m u n ik a cji przy użyciu drugiego, to nie jest celowe zbytnie ro zw ijan ie abstrakcji, gdyż jej koszt spowodowany brakiem efektyw ności może okazać się za duży. Zasada prze
kazyw an ia kom uniktów jest stosowana dopiero od niedaw na, ponieważ rozwój technologii spowodował, że tw orzenie sy
stemów o większej liczbie procesorów rozłożonych stało się ekonomicznie uzasadnione. Z tego względu nie należy się dziwić, że dotychczasowe języki program owania m ają kon
strukcje ukierunkow ane głównie n a kom unikację przez zmienne współdzielone (np. C oncurrent Pascal, M odula, Ada).
Przesunięcie .zainteresowań na kom unikację opartą n a prze
kazyw aniu kom unikatów jest widoczne w języku Occam [5], Choć im plem entacja obu zasad n a pojedynczym proceso
rze jest bardzo podobna, należy pamiętać, że istotą przeka
zyw an ia kom unikatów jest transm isja in fo rm a cji przez w a r tość i brak zm iennych współdzielonych. System , w któ rym tzw. kom unikaty są w skaźnikam i, tj. w skazują segmenty współdzielonego bufora, nie może być zaliczony do syste
m ów przekazyw ania kom unikatów. Sam fa k t tran sm isji in fo rm acji przez w artość czyni tę zasadę pojęciowo prostą i dlatego atrakcyjną.
Szczególnym przypadkiem synchronizacji, k tó ry w y n ik a z zasady k o m u n ik acji przez zm ienne współdzielone, jest w y kluczanie wzajem ne. U m o ż liw ia ono przyznanie procesowi wyłącznego dostępu do pew nych zm iennych, tj. w ykluczenie dostępu in n ych procesów, aż do zrezygnow ania procesu z te
go przyw ileju . W yklu czan ie w zajem ne jest koniecznością praktyczną. Choć można je zaprogram ować u żyw ając ele
m entarnych o peracji synchronizacyjnych, celowe jest prze
znaczenie specjalnej k o n stru kcji językow ej do w yrażenia w ykluczania wzajemnego. T a k a konstrukcja n azyw a się mo
nitorem [3]. System y przekazyw ania kom unikatów n ie w y m agają w yklu czan ia wzajemnego.
In n ym podstaw ow ym i w ażnym pojęciem jest rzeczyw ista współbieżność procesów, któ ra oznacza, że każdy proces jest w yk o n yw a n y przeiz in d yw id u a ln y procesor. W praktyce, dzię
k i założeniu, że nie uw zględnia się szybkości obliczeń, pro
cesor może być użyty do w y k o n yw a n ia k ilk u procesów częś
ciam i. Dlatego należy odróżniać logiczne procesy od fizycz
nych procesorów, pam iętając że to rozróżnienie jest k w estią zastosowanej techniki im plem entacji. Je ż e li procesy są re
prezentowane przez poszczególnych użytko w n ikó w kom pu
tera, to m ów i się o system ie z podziałem czasu (ang. time- -sharing system), jeżeli zaś procesy w y ra ż a ją różne czynności współbieżne tego samego użytkow nika, to m ów i się raczej o wieloprocesowości. Oba pojęcia w yra ż a ją jednak tę sam ą m yśl w ykorzystania jednego procesora przez k ilk a proce
sów. Z am iast m ówić o rzeczywistej współbieżnośd, m ów i się w tedy o ąuasiwspółbieżności. W ażn ą sp raw ą jest takie rozum ienie procesów, aby nie było istotne czy do ich w yk o nania używ a się w ie lu procesorów, czy jednego, pracującego z podziałem czasu. Dzięki temu program ista uzyskuje swo
bodę w op tym alnym w ykorzystaniu zasobów, a program jest niezależny od aktualnej k o n fig u racji systemu. T en rodzaj abstrahow ania od rzeczywistej k o n fig u racji procesorów jest istotą wieloprogram owości.
W y n ik a stąd, że fu n kcje zarządzania zasobami mogą być w yw o ływ a n e tylk o w tedy, gdy proces zażąda w ykonania operacji synchronizacji lub kom unikacji, które —■*, ja k stw ier
dzono — są ze sobą ściśle związane._ W sku tek tego, przydział zasobów, tzn. czynność przełączania procesora, może być u k ryta za in stru kcjam i synchronizacji i kom unikacji. Te pierwsze im plem entuje się w m odułach niskiego poziomu, a same instrukcje stanowią w yw o ła n ia procedur tych mo
dułów. K lu czow ą spraw ą jest rozdzielenie pojęciowe tych poziomów, co stanowi nieodzowny w aru n e k zdolności adap
ta cyjn ej procedur zarządzania zasobami do różnych konfigu
ra c ji procesorów.
Poniżej zaproponowano k ilk a zasad wieloprogramowości.
Każdej z nich odpowiada zbiór operacji elem entarnych do synchronizacji i kom unikacji, stanowiący zbiór procedur. Są one wyrażone przy użyciu m odułów defin icyjn ych Moduli-2 [11]. K ró tk ie przykłady zastosowań przedstawiono w postaci klientów tych m odułów definicyjnych. Omówiono także od
powiednie m oduły im plem entacyjne, reprezentujące zarzą
dzanie zasobami n a niskim poziomie. Im plem entacje oparto na zestawie jednoprocesorowym, przy czym cechy szczególne użytego kom putera w ystępu ją w nich dość sporadycznie.
W S P Ó ł.P R O G R A M Y
Podstaw o w ym narzędziem wszystkfch systemów, które um ożliwia przełączenie procesora z w yk o n yw a n ia jednego procesu na drugi, jest współprogram . Proces im plem entuje się jako współprogram . D la program isty jest oczywiste, że procesy są w yk o n yw an e na przemian, a w program ie poda
je się ja w n ie miejsca, w których musi nastąpić przełączenie.
Elem en tarn ą in stru kcją przełączania w spólprogram u p na współprogram q jest in stru kcja T ran sfer (p, q). W spółpro
gram odbiorczy q, kontynu ow any po w yko n an iu in stru k cji Transfer, zastaje obliczenia dokładnie w tym sam ym stanie, w jak im pozostawił je współprogram nadawczy p przed w y konaniem tej instrukcji. T a k więc, in stru kcja T ran sfer nie jest niczym w ięcej ja k jaw n ym operatorem szeregowania
procesów.
W spółprogram składa się z segmentu programu określa
jącego czynności i na ogół ze zbioru zm iennych lokalnych.
W Moduli-2 współprogram jest w yrażony za pomocą proce
du ry i tzw. przestrzeni roboczej, służącej do przechow yw ania danych lokalnych podczas w y w o ły w a n ia procedury. W spó ł
program powołuje się za pomocą procedury elem entarnej InitCoroutine. J e j param etram i są: procedura P , k tó ra tw o rz y program, adres przestrzeni roboczej wsp i jej rozm iar.
W yw o ła n ie procedury InitC oroutine nie u a k tyw n ia współ- programu, tzn. nie powoduje przełączenia procesora. J e j działanie polega na zainicjow aniu deskryptora umieszczo
nego w przestrzeni roboczej, ta k aby późniejsza in stru kcja Tran sfer spowodowała rozpoczęcie w yk o n yw a n ia nowego współprogramu od pierwszej in stru kcji procedury P. Adres przestrzeni roboczej jest param etrem in stru kcji Transfer.
Użycie typu A D D R E S S świadczy o tym , że współprogram jest obiektem niskiego poziomu. D w ie procedury elem entar
ne, T ran sfer i IntiCoroutine, zdefiniowano w poniższym mo
dule defin icyjn ym :
0EFINIT10M K0CW.E Coroutine*: **
TRCM SYSTEM IMPORT ADORJSS:
PROCEDURE Tran$fer(VAR fro*, to: ATORESS);
PROCEDURE In«tCoroat»n«(f: PROC: wsp: ACORESS: *1lo: CARDINAL);
EtfO Coroutines.
W y d ru k 1
Im plem entacja tego modułu jest specyficzna dla m ik ro kom putera L ilith [12]. D la in n ych kom puterów zazwyczaj pisze się ją w kodzie asem blerowym , ponieważ ciała rze
czyw istych procedur składają się zaledw ie z k ilku instrukcji.
T yp Coroutine definiuje strukturę deskryptora współprogra- mu umieszczonego w nagłów ku przestrzeni roboczej, i rep re
zentuje stan współprogram u w c h w ili jego zawieszenia.
Zm ienne G, L , P C , M , S i I I oznaczają re jestry procesora (w yd ru k 2).
N a ogół nie zaleca się używ ania w spółprogram ów w tak bezpośredni sposób. Nie pozostawia on system owi możliwości na zarządzanie w łasn ym i zasobami i obciąża program szcze
gółami przydziału procesora, co ma ujem ny w p ły w n a w y konanie w łaściw ego zadania. Je d n a k w przypadkach, gdy strategia zarządzania jest prosta i oczywista, a ponadto pod
staw ow e znaczenie m a efektywność, użycie udogodnienia tak niskiego poziomu jest uzasadnione. T a k im przypadkiem jest
obsługa w spółpracy koprocesorów lub inn ych urządzeń k o m unikujących się za pomocą przerwań.
IMPLEMENTATION KQOUIE Coroutines;
(•«aplcmcntatlon for Lilith syste«») f r o m siSTEN i m p o r ta o w e s s. a o«:
TYPE CorPtr • POINTER TO Coroutine;
Coroutine • RECORD
C: ACORESS;
L: ADDRESS:
PC: ADORESS:
N: BIT Si T;
S: ADORESS:
M: ACORESS;
err: CARD!HAL;
trapMask; BITSET;
start: PROC; («start of ■orksp.’rc») sent: CARDINAL
END :
PROCEDURE G1obaTBase(): ACORESS:
CODE 24B; 0 (»EGA 0») ENO GlobalBase;
PROCEDURE CALL;
CODE 3i/B («call procedure variable*) END CALL;
PROCEDURE TRA(VAR fro*, to: ACORESS):
CCOE 2SE.B: 0 (»transfer*}
END TRA;
PROCEDURE Tr«n*f«r(VAR fro«, to: ACORESS):
BEGIN IR>(frui. to) ENO Transfer;
PROCEDURE In1tCorout1*e(P: PROC; wsp»: ADDRESS; » 1 « : CARDINAL);
VAR cor: CorPtr;
PROCEDURE SetPC:
PROCEDURE pc(): CARDINAL;
COOC <00: 2 (»LLW 2») E W pc:
BEGIN cor».PC :> pc() * 1 END SelPC;
BEf.lN cor :• «spa:
WITH cor» 00
G :• GlotialBeseQ: L 0:
H {); S :• AOR(scnt)*!:
H :• aspa ♦ sl/e; err :• 0;
trapMask :■ ():
Start :- P; *Cnt :• 0 ENO :
Sot PC:
RETURN;
CALL: MALT ENO InilCoroutlne;
END Coroutines.
W y d r u k 2
Uznajem y takie urządzenie (np. drukarkę) za procesor. P o nieważ zazwyczaj z procesem drukow ania związane są pew ne czynności, ja k obsługa buforów lub sprawdzanie stanu, niezależnie od możliwości urządzenia, to cały proces dzieli się na dw ie części. Pierw sz a część dotyczy nieprogram ow al
nych czynności urządzenia, takich ja k rzeczyw iste druko
w anie, a druga — program owalnych, w ym agających użycia procesora. Z tego względu konieczne jest przełączanie pro
cesora. G d y zakończone zostanie w yk o n yw a n ie części pro
g ram owalnej, związanej z uaktyw nieniem urządzenia, w ted y procesor jest przełączany jaw n ą in stru k cją T ra n sfer na inną czynność w ym agającą k o n ty n u a c ji G d y urządzenie zakoń
czy w yk o n yw an ie swojej części, w yk az u je ten fak t sygna
łem przerwania. Następuje w tedy n ie jaw n e przekazanie ste
row ania, powodujące przełączenie procesora z powrotem do punktu kontynu acji, określonego przez jaw n ą instrukcję Transfer. Zasadę tę zilustrowano w poniższym przykładzie d ru k ark i laserowej. Część program owalną n azyw a się z w y
k le podprogramem obsługi przerwań. Część w yk o n yw a n a przez d ru karkę jest reprezentowana jaw n ą in stru kcją T ra n sfer. U w aż a się, że kluczow ą spraw ą jest traktow an ie pod
program u obsługi przerw ań ja k części całego cyklicznego procesu, a sam ych przerwań — ja k nieuszeregowanego prze
kazyw an ia sterowania współprogramu. T akie podejście znacznie u ła tw ia zrozumienie mechanizmu w spółpracy. P o lega ono na przeniesieniu koncepcji przerwań z poziomu m aszyny do języka strukturalnego i um ożliw ia ich im p le m entację bez poświęcenia efektywności, co ma w tym w y
padku istotne znaczenie.
M O D U L E P rin te r D riv e r ;
IM P O R T A D D R E S S , W O R D , A D R , In itC o ro u tin e, Transfer;
E X P O R T out;
C O N S T size = 100;
V A R printer, m ain: A D D R E S S ; (*w skaźniki współprogram ów*) b u ffe r: ...
wsp: A R R A Y [0..slze-l] O F W O R D ; P R O C E D U R E P ;
B E G IN L O O P
(♦jeżeli bufor jest niepusty, pobierz z niego dane, w y ś lij je do rejestru d ru k a rk i i u a k ty w n ij ją * )
T ran sfer(p rin ter, m ain) E N D
E N D P ;
P R O C E D U R E out(data: Typ e);
R E G IN (łw p isz dane do b u fo ra*)
I F „d r u k a rk a w o lna” T H E N T ran sfer(m ain, p rinter) E N D E N D out;
B E G IN (^ inicjow anie bufora*)
In itC o ro u tiiie (P , wsp, size); p rin ter :=■ A D R (w sp ) E N D P rin te r D riv e r.
S Y G N A Ł Y
Je ż e li trzeba d efin ityw n ie abstrahować od obsługi proce
sorów fizycznych i przyjąć, że każdy proces jest w y k o n y w a ny przez indywidualnego pośrednika, 4o pojęcie współpro
gramu staje się bezużyteczne. Istotą przejścia n a wyższy po
ziom abstrakcji jest wprowadzenie anonimowości procesów, polegającej n a tym , że nie określają one jaw n ie wzajemnego zawieszenia a n i dokończenia. Ich synchronizację uzyskuje się stosując inne operacje elem entarne. Do odpowiednich konstrukcji należą sem afory [2] i w a ru n k i [3]. Poniżej omó
wiono sygnały, które są równoważne w arunkom [10].
Syg n a ł deklaru je się ja k zmienną, choć nie m a on w a r
tości i dlatego nie można m u niczego przypisyw ać ani go ko
piować. M ożna go jedynie w ysy ła ć lub odbierać. W ysyła n ie sygnału s oznacza, że spełniony został pew ien w aru n e k P s (nałożony na zmienne). Dlatego proces, k tó ry odebrał sygnał s, może kontynu ow ać działanie' przy założeniu, że ten w a ru nek jest spełniony. W a ru n ek P s jest w aru n kiem w stępnym (ang. precondition) operacji Send(s) i w aru n kiem końcow ym (ang. postcondition) operacji R cceivc(s). Sygnał s jest kom u
nikatem oznaczającym spełnienie tego w arunku. Operacje są zdefiniowane w module d e fin icyjn ym Signals, z aw iera
jącym rów nież procedurę S tartPro cess(P) i fu n kcję logicz
ną Expected(s). Bezparam etro w a procedura P tw arzy pro
gram procesu, a w artość T R U E fu n k c ji Expected(s) oznacza, że przynajm niej jeden proces oczekujć na odbiór sygnału s.
D E F IN IT IO N M O D U L E Signals;
T Y P E Signal;
P R O C E D U R E StartP ro c e ss (P : P R O C );
(♦rozpoczęcie program u współbieżnego przez program P * ) P R O C E D U R E S e n d (V A R s: Signal);
(♦dokończenie procesu oczekującego na sygnał s*) P R O C E D U R E R e c e iv e (V A R s: Signal);
(♦oczekiwanie na odbiór sygnału s*) P R O C E D U R E Expectcd(s: Sig n a l): B O O L E A N ; P R O C E D U R E In tiS ig n a l(V A R s: Signal);
E N D Signals.
U życie sygnałów zilustrowano dobrze znanym przykładem pary procesów w spółpracujących jako producent i konsu
ment danych w ym ien ian ych przez bufor. B u fo r i skojarzone z n im zmienne, tj. liczba elem entów n oraz indeksy ozna
czające następne w olne m iejsce i następny pobierany ele
ment, tw orzą łącznie sprzężenie (ang. interface) m iędzy oby
dwom a procesami. To sprzężenie jest zdefiniow ane jako lo
k a ln y m oduł i stanowi m onitor bufora. Z a w ie ra on sygnały:
nonempty, dla w aru n k u n> 0, i nonfull, dla w aru n k u n < N . Sprzężenie (m onitor) zaw iera zazwyczaj również te zm ien
ne lokalne, które są współdzielone przez procesy. Poniew aż sygnały są z n a tu ry współdzielone, powinny w ystępow ać t y l
ko w sprzężeniach. Reguła deklarow ania obiektów współ
dzielonych obowiązkowo w ew nątrz sprzężeń stanowi w ażną zasadę wieloprogram owości, postulowaną przez H o are’a i B rin c h Hansena.
Zm ienne współdzielone pow inny być chronione przez w y kluczanie wzajem ne. Oznacza to, że w ew n ątrz sprzężenia stosuje się z w yk le regu ły program owania sekwencyjnego, ponieważ działania w sprzężeniu nie mogą być w y k o n y w a ne przez dw a procesy jednocześnie. W poniższym przykładzie pominięto specyfikację w yklu czan ia wzajemnego. Można tak postąpić przy założeniach, że program jest w yk o n yw a n y ■ na pojedynczym (współdzielonym ) procesorze, i że przełączenie procesora następuje tylko w celu nadania lub odebrania sy
gnału.
Należy podkreślić, że w tym przykładzie jest oczywiste, który proces odbiera nadany sygnał, ponieważ istn ieją tylko dw a procesy. N ie jest to jednak przypadek ogólny. Odbioru może dokonać dowolny z procesów, oczekujących n a określo
ny sygnał. Jednakże, pojedyncza operacja nadania sygnału powoduje w yk o n an ie co n ajw yże j jednej operacji odbioru, tzn. nie m a rozgłaszania (ang. broadcast) — w y d ru k 3.
W e ry fik a c ja poprawności modułu jest m ożliwa bez roz
ważenia kolejności współdziałania procesów. Należy' ją za
cząć od ustalenia niezm iennika, sprzężenia, co w tym w y padku polega n a stwierdzeniu, że bufor nie może. być b ar
dziej pusty od pustego i pełniejszy ód pełniejszego, tzn.
0 < n < N. Z " w a ru n k ó w końcowych R cceive(ń onfułl), tzn.
n < N , i Receive(nonem pty), tzn. n> 0, w yn ik a, że elem ent
jest pobierany tylk o wtedy, gdy i umieszczany w buforze, gdy 0 5 jn < N . Zauw ażm y, że rozważania dotyczące w e ry fik a c ji można w ykonać dla sprzężenia dlatego, iż odno
szą się one ty lk o do obiektów lokalnych.
HOOUtE ProdCo«s: ,
F&CM Terminal IMPORT Head, W r it« : FROM S ig n als IMPORT
S ig n a l, S ta rtP ro c e s t, Send, ReCOl»*, In U S Ig n a l;
MCOUIC In te r fa c e :
IMPORT S ig n a l. S te rtP r o c e is . Send. Receive, Jn 1 t5 1 g "il;
EXPCftT get, put;
CCNST N « 8;
VAR n , In . out: CAROINAL;
n o n fu ll, none«pty: S ig n a l:
bur: ARRAY [0 . . M -l] Of CHAR;
PROCEDURE put(ch: CHAR);
BEGIN
I f n • N THEN Rsce1ve(ncnfu11) ENO : n :- n * l; buf[1n] ch; In :• ( I n M ) HCO N;
Sond(nonespty) ENO put;
PROCEDURE got(VAR ch: CHAR);
BEGIN
IF n - 0 THEN Rece1ve(none*pty) ENO : n :• n-1; ch :* b u f[o u t}; out :■ (o u t * !) KCO Scnd(nonfuU)
EliO get;
BEGIN n :• 0: In 0: out :• 0;
ln lt S lg n a l( n o n f u lI) ; InttSlgnol(nonem pty) ENO In te rfa c e ;
PROCEDURE Producer:
VAR I: CARDINAL; ch: CHAR;
ten t: ARRAY [ 0 . . W ] OF CHAR;
BEGIN W r l t e f C ) ;
I :• 0: tex t :• “ ABCDEfGHIJXlMNOPCRSTUWXYZ“ : WHILE t e * t [ I ] > 0C DO
v r i t c ( - r ) : w n t e ( i e x t [ l ] ) ; p u t ( t e » t [ l ] ) ; 1 M ENO :
W r l t c l ' l ” ) ; W r1 te (")“ ) : put(OC) ENO Producer;
PROCEDURE Consumer;
VAII Ch: CHAR;
UIGIN W r it c ( l’[ “ ) ; Wrlto(“7"); Qdt(cli):
VW11E ch > 0C IX)
W r lte (c h ); W r lt e (“ i “ ) ; g et(ch )
INO ;
til GIN
S tiirtPro ce ss(Pro d yce r); Coniiancr; Wr l t e ( “ t * ) ; Wrlte(36C) [NO ProdCons.
W y d ru k 3
J a k zauważył D ijk stra, to klasyczne rozwiązanie m a jedną wadę — sygnały są w ysyłan e ozęściej niż .potrzeba. P rz y k ła dowo, sygnał nonem pty jest w ysy ła n y zawsze w tedy, gdy producent um ieścił k o lejn y element, choć w y w ie ra skutek tylko w tedy, gdy konsument go oczekiwał. M ożna temu za
radzić poddając operację send(nonempty) w aru n k o w i zw a
nemu dozorem (ang. guard) Expected(s). D ijk stra zapropono
w a ł uwzględnienie tej in fo rm a cji w liczniku n i nazw ał to rozwiązanie „śpiącym golarzem” . W arto ści n> 0 oznaczają liczbę elem entów w buforze (klientów w poczekalni), a w a r tości n< 0 — liczbę oczekujących konsum entów (w olnych golarzy). J a k w idać, metodę rozszerza się łatw o n a w ypadek k ilk u , konsum entów i producentów, nie w p ły w a ją c na ro
zum owanie konieczne do zachowania poprawności. Poniżej przedstawiono kod sprzężenia zmodyfikowanego w celu uw zględnienia „śpiącego golarza” (w yd ru k 4).
HOOtli In te rfa c e :
INPOłU s ig n a l. S la r iP r o c e s i. Send. R e c e d e . In lt S łg n a l;
EXPOfil got. put:
C0NSI N - ft;
VAR n: INTEGER; In . out: CARDINAL;
n o n fu ll, nonempty: S ig n al;
bur: AKRAY [0 .. N -J] 0F CHAR;
PWOCEOtM put{ch: CHAR);
BEGIN n :• m l ;
IF n > N ImŁN Rece1«o(nonfuU) ENO ; :• ch; In :• ( I n M ) M00 N;
IF ii • 0 THEN Send(n6«c«t>ty) ENO EW) p u l:
PROCEDURE gol (VAR ch: CHAR);
BEGIN n :• « • !:
IF n < 0 IHŁN Recvlve(nonc«pt]r) END : ch :• b u ffo u l]; out :* (o u lM ) «00 N;
I f n - N I»ILN Send (non full) END END g «t:
BEGIN n ;• 0; In :• 0; out :- 0:
In lt S łg n a l(n c iifu l1); ln1tSlyna)(co<icaply) END In terfa ce
W y d ru k 4
I M P L E M E N T A C J A S Y G N A Ł Ó W
M ożna podejrzewać, że im plem entacja m echanizm u sygna
lizacji i związane z tym zarządzanie procesorami mogą być dość złożone, a zatem nieeiektyw ne. W rzeczywistości, po
w ody do takich podejrzeń daje większość dostępnych w ie lozadaniowych system ów operacyjnych. N a szczęście, w tym w ypadku im plem entacja może być bezpośrednia i efektyw na, co wykazano poniższym rozwiązaniem .
Oparto je na założeniu, że -każdy generowany proces jest reprezentow any przez deskryptor. W szystkie deskryptory są połączone w strukturę pierścieniową. A k tu aln ie w ykonyw a-
n y proces jest oznaczony zmienną w skaźnikow ą cp. W w y padku systemu wieloprocesorowego każdy procesor m a swój p ryw a tn y w skaźnik cp. N o w y deskryptor (typu RingNode) jest przydzielany przez procedurę StartPro cess(P) i w łączan y do pierścienia. T a sam a procedura przydziela procesowi przestrzeń roboczą i in ic ju je jego deskryptor. Szozegóły in i
cjo w an ia przestrzeni roboczej są ta k ie same, ja k w module Coroutines, co świadczy o tym , że zasady u żyw an ia sygna
łó w oparto o technikę współprogram ów.
Szczególnie godna u w agi jest reprezentacja sygnałów. P ro cesy nie określają sygnału, na k tó ry oczekują, lecz to sygnał określa procesy oczekujące n a w ysłan ie go przez in n y p ro ces. Dlatego sygnał jest w skaźnikiem nagłów ka listy (ko lej
k i) oczekujących procesów. Procedura Send(s) powoduje przekazanie sterowania procesowi z listy s i usunięcie z niej odpowiedniego deskryptora. Ł a tw o można zagw arantow ać równorzędność szeregowania procesów, ponieważ procesy są zawsze dołączane do tytu łu listy i usuw ane z jej nagłówka.
Procedura Receive(s) jest nieco bardziej skom plikowana. P o przebiegnięciu listy i dołączeniu do niej deskrypto ra bieżą
cego procesu, następuje przeszukiwanie pierścienia, w celu znalezienia procesu zdolnego do zakończenia (gotowego). J e żeli nie m a takiego procesu, to system procesów w pada w
zakleszczenie (ang. deadlock).
Bardziej złożone rozwiązanie może polegać n a usunięciu oczekujących procesów z pierścienia, tzn. n a faktycznym przesunięciu ich z pierścienia do listy sygnałów. W ym aga to ich przesunięcia z powrotem do pierścienia, po odebraniu nadanego sygnału. W y d a je się, że takie zwiększenie efek
tywności, w porównaniu z metodą przeszukiwania pierście
nia, nie kom pensuje dodatkowej złożoności operowania w skaźnikam i, chyba że liczba procesów oczekujących prze
kracza znacznie liczbę procesów gotowych (w yd ru k 5).
Je ż e li proces osiąga koniec procedury tworzącej jego cia
ło, to jego w yk o n yw a n ie można uznać za zakończone. W te d y sterowanie pow raca do m iejsca za in stru k cją w yw o łan ia, k tóra zainicjow ała proces. K o le jn e in stru kcje przełączają procesor na inn y gotowy proces z k o le jk i i z w racają prze
strzeń roboczą zakończonego procesu, dołączając ją do listy w skazyw anej przez zmienną w skaźnikow ą free. T a k więc, przedstawiona im plem entacja uwzględnia rów nież elem en
tarne zarządzanie przydziałem i zw racaniem przestrzeni ro boczej. Zazw yczaj, utworzenie i zakończenie procesu zdarza się znacznie rzadziej niż n adaw anie sygnału, tj. przełączanie procesora. Ze względu na efektyw ność należy w ię c bardzo starannie zaprojektować procedury Send i Receive.
B lisk o związane z sygnałam i są także sem afory propono
w an e przez Dijkstrę. Sem afo r składa się z liczhika i ze sko
jarzonego z n im sygnału. O peracja P powoduje zmniejszenie zawartości licznika i — w w yp ad ku otrzym ania w artości ujem nej — oczekiwanie na odbiór sygnału. O peracja V po
w oduje zwiększenie zawartości licz n ik a i — w przypadku dotatniego w yn ik u — nadanie sygnału. U jem n a zawartość licznika wskazuje, ile procesów oczekuje w kolejce n a syg
nał.
K A N A Ł Y
Je ż e li system w ieloprocesorowy składa się naprawdę z roz
łożonych procesorów połączonych kan ałam i danych, a nie z procesorów m ających tylk o dostęp do wspólnej pamięci, to kom u n ikacji nie można wyrażać u żyw ając zm iennych współdzielonych. W te d y zaleca się metodę C S P zapropono
w an ą przez H o are’a [4] i zrealizowaną w języku Occam [5], Do podstawowych ko nstrukcji tego języka należą:
• in stru kcja P A R określająca, że procesy S 0, Si,...,Sn-i są w yk o n yw a n e współbieżnie, np.:
P A R S 0, S[, ..., Sn-i
• deklaracja C H A N cli powodująca w prowadzenie kanału kom unikacyjnego
• instrukcja „ ? ” określająca odbiór w arto ści z kanału ch i przypisanie jej zmiennej x, np.:
ch ? x
• instrukcja określająca obliczenie w artości w yrażenia x i w ysłan ie jej do kanału ch, np.:
cli ! x
W y d ru k 5
W y d r u k 6
l*PLEN£NTATIOa M0QU.C StgosW:
ffcCH SYSTEM INP08T ACORESS, «*5>, A£*. T£)Z{:
f r c m Neap JNPQAT Allocate;
CCKST WorkspaceSlio - 2001;
TYPE 5lgaal - POINTER TO RIogNode;
Corftr • POINTER TO CprogtlM:
R1ng*ode - RECORD
«e*t. pr*v: Signal; (.ring.)
outu«: Signal: («gu»ue ®f t|1tlrg prgtestes«)
tor: CorPtr;
ready: BOOLEAN EMO :
G: AS&AfSS:
l : AtCRESS;
PC: AOORESS:
H: 81TSET:
S : ACMESS;
H: ACORESS:
rrr: CARDINAL:
trapMssk: B I I S E I ;
s t a r l i PROC; (« s t a r t ef •orkspace«) S t a l: CARDINAL;
• ip : AARAY [9 . . W erkfpaceSU e-l] Of YMD E*0 ;
VAR cp: S ig n a l: (« c u rre at process«) a«»: S ig n a l;
Trę*: S ig n a l; («ch ała of tree pracats tfser1pt»rs*) PROCEDURE TRA*SFER(VA* fr a a , *•: C o rP tr);
COCE *56«: 0 fbO TRAftSUR;
PROCIOWIE 3 ta rtP ro c a ss (P : PROC):
PROCEDURE G lo » a lla s a (): AD0fl{SS;
CCCi i i # ; 9 («LGA 9«) ENO G lo b a llase:
PHOCIOJUE CALI;
COCE 35?« (*C F*) ERO CALI;
PROCEDURE SetPCandTraasfer;
PROCEDURE p c () : CARDINAL;
CODE 4«B: Z («LIW 2«) E W pc;
BE»1H c o t.c o rt.P C :• p c () ♦ I ; TRANS/LR (a»
E W SeiPCaodTransfer;
fctcIR aut :• cp:
(«allocate a Rtc<jh«de and a «orkspace contiguously*) IF fraa • U L Tul»
AMocalr(cp, TSI2E(ftlAgM«de)): Allecata(cpr.cor, T3IZE(Cereutfee)) ELS£ cp :• fraa; frea :■ freet.aeat
E W ; WITH cpt DO
nait :• auat.neat; prev :• auł; queue :• KIL; raady :- TRUĆ LSD ;
auit.nest :• cp: cpt.neitt.prev :• cp;
WITH cpt.cart DO G :• Giabal8asa(): L :• 9:
* :• (): S ADR(-sp):
M :■ W R ( a i p ) ♦ WorkspacesW e ; err :■ 9: trapHask :■ {};
start :• P; seat :■ 9 ERO ;
SetPCandTraAsfer;
RETURN;
*•)
CALL; («activate precesi iu> ;• cp: cp :• auat.neat;
cpr.prcv ;• auit.prev; auxt.prevt.eeat :• cp:
auxf .n e m :• free: free :• aua; aux :• cp;
W11ILE NOT cpt.ready & (cp 0 aua) DO c# :• cpt.nest EhO ; IF cpt.ready THEN IRANSF£R(freer.cor, cpt.cor) E W ; WALT («deadlock«)
E*aO StartProcess; „ PROCEDURE Sa a d ( V M s: Signal):
VAR this I Signal;
IE6IN this :• cp;
IF s 0 NIL THEN cp s;
S :* cpt.queue; cpt.ready :• TRUE ELSE («release«)
REPEAT cp :« cpt.aeit UNTIL cpt.ready E W ;
IF cp 0 this THE» TAARJf£R(tMsr.cer. cpt.cer) EhO ENO Send;
PROCEDURE R«c»1»e(VAR s: Signal):
VAR tbls: Signal:
BEGIN («Insert cp at end of queue s«) IF s • NIL THEN s :• cp ELSE this :• s;
W I L E thlst.queue 0 NIL DO this :• th 1st.queue EhO ; thIst.queue :• cp
E W ;
this :• cp; thtsr.quNe :■ NIL;
REPEAT cp :• cp t . s e n UNTIL cpt.ready;
mist.ready :• FALSE;
IF cp • this THEM («deadlock«) HALT ENO ; TRANSFER(thlst.{or, cpt.cor) END Receive:
PROCEJXRE E«pected(s: Slonal): BOOLEAN;
BEGIN REIUIUl s 0 NIL ENO Eapectqd;
PROCEDURE InltSlgn»1(VM s: S1fl«»l);
BEGIN s :• NIL ENO InUSIgnal;
BEGIN free :« NIL: A11ocate(cp. TSIZE(RlngN«de));
WITH cpt CO
neat cp; prev :« cp; ready :• 7 RUE END
E W Signals.
DEFINITION K00ULE Channels:
tYPE Ntssage • INTEGER;
Process:
C«enn«i • RECORD prod, cess: Process E»0 ; PROCEDURE Nre11el(P.Q: PROC):
PROCEDURE Sand(VAR ch: Chennel; aisg: Ntisage):
PROCEDURE Rece1ve(VAR ch: Channel; VAR «sg: Nesiaj*);
PROCIOURE Se«derWa1llng(V*R ch: C»annel): BOOLEAN;
PROCEDURE RecelverWaiIt«g(VAR ch: Ch*nn»l): B'JOLEAN;
PROCEDURE InltCha«ntl(VAR ch: Channel):
EW Channels.
N a jp ie rw przekształcim y zwięzły zapis języka Occam na równoważną mu postać w Moduli-2, a następnie przedstawi- j m y im plem entację tych konstruikcji. Oczywiście, wszystkie w ym ienione konstrukcje należy zdefiniow ać w module de- •
fin ic yjn ym (w yd ru k 6). ŚS P A R P Q
W celu podkreślenia ich związku z metodą sygnałów, ope
rację w yprow ad zania „1" przekształcono n a procedurę Send, a operację w prow adzania — na procedurę Receive. S y gnał, który można uważać za pusty kom unikat, zastąpiono kom unikatem p rzyb ierającym wartość. In stru k cję Occamu:
przekształcono n a instrukcję:
P a ra lle l (P'. Q')
gdzie P i Q są bezparam etrowym i proceduram i reprezentu
jącym i in stru kcje P i Q w Occamie. In stru kcję:
P A R P Q R w yraża się jako P a ra lle l (P ,Q R )
gdzie Q R jest procedurą m ającą ciało procedury P a ra lle l (Q,R).
Procedury fu n k cyjn e Sen d erW aitin g i R c c e lv c rW a itin g m ają znaczenie analogiczne ja k Expected(s).
W łaściw ości k an ałó w są następujące:
1. Je ż e li nadaw ca w y s y ła kom unikat do kanału, to jest on opóźniany aż odbiorca po drugiej stronie kanału odbierze ten k o m u n ik a t Może to być natychm iast, jeżeli odbiorca oczekuje już w tym kanale.
2. Odbiorca oczekujący n a kom unikat z k an ału doznaje opóźnienia aż nadaw ca w yśle ten kom unikat do kanału. M o że to być natychm iast, jeżeli nadaw ca już oczekiwał na ode
branie kom unikatu.
W y n ik a stąd, że kan ał działa automatycznie jako elem ent synchronizacyjny — synchronizacja i kom unikacja n ie róż
nią się. Ponadto, k an ał jest z w y k ły m „przewodem ” i nie m a możliwości buforowania. Dlatego n adaw ca i odbiorca biorą udział w spotkaniu (ang. rendezvous). Sam kan ał nie jest skrzynką pocztową, lecz tylko m iejscem spotkania.
G łó w n a zasada Occamu polega n a tym , że program re prezentuje system procesów połączonych kanałam i, które są ustalone. Dlatego można założyć, że każdy k an ał łączy jed
nego nadaw cę i jednego odbiorcę.
W poniższym przykładzie przedstawiono prosty, lecz typ o
w y system u żyw ający kanału. Proces P odczytuje ciąg liczb z nośnika wejściowego 1 k ie ru je je do kanału. Co czwarta liczba stanowi sumę kontrolną i nie jest nadaw ana. Proces Q odbiera liczby z kanału, oblicza sumę kontrolną po każ
dych siedm iu liczbach i kieru je je na nośnik w yjścio w y (w y druk 7).
KOOULE S e q Jt*c » ł:
FROU O l * » « U IMP0AT Cfc**n«l. I r UChanna!, P a r a li * ! , S i l i , M C W I S F«0N I*Out IMPORT R eadlet. W rlte ln t;
PROCEOURE h
VAI t: CARDINAL; *. i w : INTEGER;
BEGIN Readlnt(x);
WMILC * • 0 00 i ;• 3;
WHILE 1 > 8 00
Se*d(ch,* x ) ; su« :• sue * x ; t :• 1-1; R aadln t(x ) E W : ‘
«ua m m i'll (*ek*ck tui ■ 0*) Reatflnt(x) E W ;
S«*d(ck. •) ETO P;
PROCEDURE Q:
V « li CARDINAL: *. *«•: 1NTEGE*:
IfBII Bat»łra(cfc. x);
tMTLE i M M
1 :• S: tvm ;• 8;
«tfllfc l > 0 CO
»ftil't(i.i); * w ;• t « • s; t :• M ; *«c*1v»(ch, i>
ETO : Wr|t*Int{»wi. 6) W O F*> Q;
*E<n* I.iu>e*aei(ch); rar«ll*1(ptQ) ETO Saqvanett.
W y d ru k 7
I M P L E M E N T A C J A K A N A Ł Ó W
Im plem entacja k an ałó w przypom ina w dużym stopniu im plem entację sygnałów. Procesy są połączone w pierścień, którego każdy elem ent (węzeł) zaw iera w skaźnik do prze
strzeni roboczej współprogram u. N a k o lejn ym polu przecho
w u je się adres przekazywanego kom unikatu. Konieczne jest przechow yw anie adresu, a nie samego kom unikatu, aby n a daw ca mógł um ieścić kom unikat w zm iennej oznaczonej przez p aram etr w trybie V A R oczekującego odbiorcy.
T yp danych Channel przyjm uje rolę typu Signal. Z a w ie r a on dw a pola rekordu, jedno dla oczekującego odbiorcy a drugie dla oczekującego nadaw cy. A lte rn a tyw n e ro zw ią
zanie z jednym polem dla procesu i dyskrym inatorem m ię
dzy n adaw cą i odbiorcą odrzucono, ponieważ w ym aga b a r
dziej złożonego programu.
W y d ru k 8
!H PL {« H U T IC * UOOUIE Cknuials:
*RCM SYSTEM IRPM T ADDRESS. WOAO, ADR, T S tlE : FROM H o p IHPORT A llo c ate;
CONST VorktpaceStza - 200S;
łY PE
Prociss « POINTER łO ftlńgWode;
Procem State - (ready, « a lt ln g , t e r łl f ia l łd ) : C orPtr - POINTER TO Coroutine:
HlngłJode • HECORD
* # X t, pr«»
partner;
»tan:
«igAdr;
C W ; C o ro u tl M -
RECORD
P r o c e » : (* r* * 8 * ) Procexi;
C o rPir;
P ro c a s iS ta tC POINTER TOKesitge
H:
M OatSS:
a d d r es s: ACCSESS:
BITSET;
ADDRESS:
ACCRESS:
a r r : CARDINAL:
trapMaik: «1TSEI;
a l a r t : PR0C; (» » t a r t of aorkipace*) s en t: CARDINAL;
vsp: ARRAY [0 . . VorktpacaSlia-»} OP iW D END ;
VAR cp: P r o e e it: (* c u rra » t p ro cat!*)
fr a » : Pro e e it; (»chain of fraa procesi d e te rlp to ri«) aux: Pro e eit:
PROCEDURE TRANSfERlVAR front, to: C o rP tr):
CCOE Z56B; 0 END TRANSfER;
PROCEDURE Para11at(P.O: WOC);
VAR Pro e att; (« p ro c a if to ba eraatad*) PROCEDURE G1oba1Base(): ADDRESS;
CODE 256: 0 (»LGA 0«) END GlobalBate;
PROCEDURE CALL;
CODE 35TB END CALL;
(*CF*)
PROCEDURE SatPCA«rfCa11:
PROCEDURE p c (): CARDINAL;
CCOE 408: 2 ( * I W 2*) EN0 pe:
BEGIN n eet.corf.PC :• p c {) ♦ 1;
9:kWUE n an*.stale 0 te m in ita d DO (• ra la a te * ) aux :• cp:
REPEAT cp :• cpt.next UNTIL C p t.ita te • fa s iy : IF cp • aux THEN HALT (»deadlock*) END ; r jx t .s t a t e :• terminated; TRA*SFER(auxi.cor, c p t . w r ) CNO ;
END SetPCandCall;
BEGIN
(•allocate a RtnflNoda and a «orktpac* ccKllgvoutly*) IF fraa • NIL THE*
AMocat«(«ia*. TSlZE(RtngVode)):
A llo c a te {« a » t.c o r, T SUE(C orouttfle)) ELSE i»ew :• frea; fraa :• free*.next END ;
WITH nawt 00
fiaxt cpf.MKt: ffair :■ ep; partner :• cj; Stltf :• rirty END :
WITH newt.corf ¿0 C :• ClobalBate{); I :> 0:
M {}: S :• A0R(np)i H :> ADR(*sp) * VarktpacaSIz«; , mrr :• 0; trapMaik *.* {); r a t a r t :• Q; le n t ;• 0 tKD :
S#tPCandCal1;
WUM:
CALL( •<)•):
aui : cp:
I P c p f .p a r t m r f ,i l a t f • tarwlaatad THIH cp :■ cp t.p artna r; c p r.s ta ta !• raady ELSE
REPEAT cp cpt.next UNTIL c p f.s ta t« • r n i y ; I F cp • P Í» THEM KALT (»diadlock») ETO E«D :
• ux t.stata :■ tin a la a ta d ; TTłASSEW(rJxr.cbP, c p f.c o f) END P a ra M a l;
PROCEDURE Sa*d(VAH eH; Cha«n»1{ « f j : K attag a];
VAR t h is : Pre eatt;
BEGIN th la :• cp:
I F eh.coni 0 NIL THEk (tłr a lf irp consmMr») ep :» cN.cont: cN.eon* :* MIL:
c p t.s ta te :• raady; cpt.r.igAdrf ;• a*tj E ISE ( 'v a l t fo r contUHtar*)
I F ch.prod # R I l THE« HALT E»0 : ch.prod :« cp; cpt.*sgAdr :• ADR(«sg);
REPEAT cp :• cpr.naxt UNTIL c p f .it a t * - t h l s t . t t a t a :• w aiting;
I F cp • t ill» then KALT (»daidlpck») D Q END :
T RANSFER(tM lt.Cor, c p f .w r )
*ÍD Sand;
PROCEDURE Rftal«a(VAR chiO iannal: VAA usg: « a m j í J ; VAR t h is : precatt;
BEGIN thta : • c p:
I F cfi.prod 0 NIL THEN i»*»ka up CW SU**r*)
<rp :* cN.prod; ch.pred ;• NIL:
c p t.a ta te :• ready; bj*j :« cpt.ntgAdrT ELSE ( * » a l t fo r producer*)
I F ch.prixJ 0 MIL THE« HALT END I ch.com :• cp; cpt.angAdr :• ACR(rag);
REPEAT cp :« cpt.next IW TIL c p t.a ta te • fa ld jfi ih la r .a t a t * :• * a ttl« g :
I F cp • th i* THE« HALT («deadlock») E&D CM) :
T RA «f£R{ih1tT.cor, e p f.co r)
£KD Race W e:
M0CEDURE SanderWa1tlB9(VAd ch i Ci»aflflf>): fiUCŁE«;
BEGIN RETURN Ch.prod # « t . END SenderWaltfng;
PROCEOJRE Rece<verWa1t1ng(VAA cbł t t a a s a ll: IQOllAX:
EEGIM REIURX ch.co«t 0 Hit * *
CTO AecalxerWaftlng;
PROCEDURE InltChanne1(VAA ch; Chann*]);
BEGIN ch.prod :• « IL ; ch.cona :« NIL ENO InttChannal;
¿Ó BIL* TSIZEiAlng-rad.,);
^ « e x t cp; prav :« cp; » tat« :« raady END C h in e*]j.
Z e względu na w yb ran ą metodę tw orzenia procesów w y stępują one zawsze param i. K a ż d y deskryptor procesu ma pole oznaczające partnera. O ile w w ypad ku sygnałów za
kończenie procesu nie w yw o łało in n ych skutków, to w tym w ypad ku powoduje n ie jaw n ą synchronizację. Proces m acie
rzysty jest kontynu ow any dopiero po zakończeniu obu pro
cesów potomnych. W ym a g a to poznania tożsamości partne
ra. W rzeczywistości, w przedstawionej im plem entacji in- in stru k cja P a ra lle l (P,Q ) nie tw o rzy dwóch now ych proce
sów, lecz tylko jeden. D ru gi jest identyczny z procesem ge
nerującym . Je s t to konieczność praktyczna, ponieważ w przeciw nym w yp a d k u połow a w ym aganej przestrzeni robo
czej byłaby stracona dla procesów oczekujących zakończe
nia obu swoich procesów potom nych (w yd ru k 8).
Stopień złożoności im plem entacji modułu Channels jest nieco większy niż modułu Signals. W y n ik a to głów nie z syn
chronizacji po zakończeniu procesu. Ponadto, ta metoda jest m niej elastyczna, gdyż każdy k a n a ł może być skojarzony w określonej c h w ili tylk o z jed n ym nadaw cą i jednym odbior
cą, natom iast sygnał może być w tej samej c h w ili oczekiw a
ny przez w iele procesów. Jednakże w w ielu w ypadkach jest to odbiciem n aturalnej sytuacji. Z ły m w yjściem byłoby z pewnością utworzenie — do elem entarnych operacji ko
m u n ikacyjn ych —• superkanału, do którego można by dołą
czać jednocześnie w ie lu nadaw ców i odbiorców. N iełatw o byłoby opisać charakterystykę takiego superkanału, nie m ó
w ią c o jego im plem entacji. W y d a je saę, że rozwiązanie o par
te na sygnałach powinno być lepsze od opartego na kan a
łach, w przypadku systemu złożonego ze współdzielonych procesorów i wspólnej, dzielonej pamięci.
S Y M U L A C J A
Ję z y k u m o żliw iający w yrażen ie procesów współbieżnych i jego im plem entacja, o n ie w ie lk im narzucie w yn ik a jącym z przełączania procesów, są szczególnie dogodne do sym u la
c ji system ów zdarzeń dyskretnych. Przedstawione m oduły w ym agają jedynie n iew ielk ich rozszerzeń, w celu uwzględ
nienia w ym agań sym u lacji zdarzeń. Poniżej przedstawiono rozwiązanie oparte na koncepcji m ającej swe źródła w j ę zyku S im u la i propozycjach H o are’a [6],
W rzeczywistości, jed yn ym koniecznym rozszerzeniem jest w prowadzenie pojęcia czasu. W sym u lacji zdarzeń dyskret
nych, każdy obiekt a k ty w n y należy do określonej kategorii (klasy, typ u ) procesów (ja k na przykład: klienci, kasjerzy, obsługa domu towarowego) d dlatego jego zachowanie jest scharakteryzowane przez ustalony program sekw encyjny.
Każde określone działanie, trw ające w rzeczywistości przez czas t, jest w program ie sym u lacyjn ym w yrażone odpowied
nią in stru kcją i w yw o ła n ie m Hold(t). T a druga in stru kcja zawiesza proces, aż czas wzrośnie o odcinek t.
D E F IN IT IO N M O D U L E Sim u latio n ; T Y P E Slng al;
Proccss - P R O C E D U R E (C A R D IN A L );
V A R Tim e: C A R D IN A L ; (* ty lk o odczyt*)
P R O C E D U R E S ta rtP ro c cs s(P : Process; n : C A R D IN A L );
(♦rozpoczęcie procesu współbieżnego program u P (n )* ) P R O C E D U R E S e n d (V A R S: Sig nal);
(♦ kontynuacja procesu oczekującego na odbiór sygnału s+) P R O C E D U R E R e c e iv e (V A R s: Sig n al);
(♦oczekiwanie aż do odbioru sygnału s*) P R O C E D U R E H old (t: C A R D IN A L );
(♦wstrzymanie procesu na t sekunda) P R O C E D U R E In itS ig n a l(V A R s: Sig nal);
(♦obowiązkowe in icjo w a n ie*) E N D S im u latio n
Poniżej przedstawiono przykład zastosowania tych pros
tych m echanizm ów do opisu systemu zdarzeń dyskretnych.
D aw no temu cesarz chiński w y d a ł rozkaz, aby zmierzono najkrótsze odległości wszystkich w iosek jego cesarstwa od stolicy. Zastosowano przy tym swoistą metodę pomiaru. D u że grupy m ierniczych przem ierzały k ra j ze stałą prędkością i w e w szystkich kierunkach, tzn. po każdej istniejącej dro
dze. G d y grupa docierała do kolejnej wioski, w ted y dzieliła się na podgrupy wychodząc z w io ski in n ym i drogami. Jed en członek grupy w racał, aby zameldować czas dojścia do w ioski, a in n y pozostawał, aby inform ow ać grupy przybyłe
po n i m.
W rozwiązaniu przedstawiono każdą w ioskę za pomocą re kordu określającego jej nazwę (numer), liczbę w ychodzących z n ie j dróg, ich kieru n ek (przeznaczenie) i długość. T en sam rekord służy do zarejestrow ania in form acji, czy wioskę od
w iedził już in n y m ierniczy (w y d ru k 9).
<♦3X1E Army:
FR(N InCut IHPORT Pone.
Open Input. Rce.'Card. W rite . W rlte ln . WrlteCard. Closelnpyt;
racn s in u la tlo i IKPOflT Tim«. StartPro cass. Hold;
COIST HinNofVIl • 32: MsxKofPaths • 8:
iv pE v i l l a j * ’ • ' RECORD norp: CfPDlNAL:
v is it e d : BOOLEAN: ' path: AiV-AV [O..Ka*NorPaths-1] CF
RECORD destinatio n, distance: CA.TOIHAI END E!CO :
VAR 1: CAKDINU:
v i l : (H m v [ 0 . .H a*NofVU-J] 0« V illa g e : PROCtfXP; Scou*.(*: CARDINAL):
(•* • cu rre ntV IIlag e • * d ire c tio n » ) h ere, d ir : CARDINAL;
BEGIN W r i t e r * ') ; hero :• * OIV HaiNofPnths; d ir :• * MCO MaxNoTPaths;
LOOP Mo’ d (v ll[h e r e ].p a th [d lr ].d is ta n c e ):
here :» v ll[h e r e j.p a th [d lr ].d e s tin a tio n ; IF v l ljh e r c ] .v is it e d THEN EXIT END : VrltcCard(.i>-re. <»); Wr lteCard(Tt»c. 6 ): W rltcLn;
v ll[h c r c ].» « s it e d T3UE: d ir :• * ll[h e r e ].n o fp - 1;
WHILE d ir > 0 DO
StertPrccess{Sco<Jt. hor* • Ma*NofPaths ♦ d i r ) ; d ir :• dlr-1 EM) .
. ■
E KO : - V r t t e C - " ) END Scout:
PROCEDURE ReadData:
VAR A. 0. d. 1: CARDINAL;
BEGIN OpenlnputrNI)«“ )'; ReadCard(A);
F o a .l :• 0 10 KaiNofVH-1 DO
v l l ( l ] . n o f p 0: v l l [ t j . v i s i t e d :- FALSE
END ; • . : , . ■
WHILE Done 00 ReadCard'B): RradCard(d):
WITH ¥ ll[ A ] DO
p ain[n ofp].d estin ation :• B; path[nof,i].distance :■ d:
nofp :• nofp ♦ I
END : . . .
WIIH v11[B] 00 '
pa th [norp].d estination :• A; path[ncrp],distance :• d;
norp :• rofp ♦ 1
END ; f -
ReadCard(A) END ; Closelnput END ReaiData;
BEGIN Rea'flOata: v l1 [0 J.v ls U e d :• TRUE:
FOR 1 :• 0 TO vl1[0 ].n orp - 1 DO StertProcessfScou t, 1) EN0 ; H old(M 9 9 ); W r U e ( * l” ) ; WrlteLn
. END Am /. •
W y d ru k 9
I M P L E M E N T A C J A M O D U Ł U S Y M U L A C Y J N E G O
Bezpośrednia im plem entacja polega n a utw orzeniu kolejki opóźnianych procesów w postaci listy odpowiadającej w e wnętrznem u sygnałow i TQ , nadaw anem u w ch w ili, gdy ża
den proces n ie jest gotowy. W przeciwieństwie do zasady zastosowanej w module Signals w tej kolejce n ie u ż yw a się metody F I F O (ang. first-in first-out), lecz porządkuje się pro cesy zgodnie z ich czasem przebudzenia. Po stwierdzeniu, że żaden proces nie jest gotowy, co może nastąpić po in stru k cji R eceivc lub Hołd, zamiast w y k ry c ia zakleszczenia następuje dokończenie pierwszego procesu w kolejce T Q i zwiększenie czasu systemowego (zmienna Tim e) do w artości określonej jako czas przebudzenia. T a metoda w ym aga użycia dodat
kowego pola w deskryptorze procesu, a włączenie >procesu do ko lejki, po jego w strzym aniu, m usi być poprzedzone po
szukiwaniem w łaściw ego m iejsca w kolejce. W rzeczywistoś
ci, sygnał T Q m a niski priorytet, gdyż opóźnione procesy mogą być dokończone (tzn. czas system owy może b yć zw ięk
szony) tylk o w ted y, gdy w c h w ili bieżącej, hie m a inn ych gotowych procesów (w yd ru k 10).
P O D S U M O W A N IE
T rz y zasady współpracy procesów, za porpocą współpro- grainów, sygnałów i przekazyw ania kom unikatów porównano przy użyciu tnzech program ów testowych CortTest, SigTest i C hanTest . przedstawionych na w yd ru k u 11. K ażdy z nich składa się z dwóch procesów, między k tó rym i następuje po
w tarzalne przełączanie procesora. D la 30 000 przełączeń za
notowano następujące czasy w yk o n yw an ia:
CorTest — 1,8 s SigTest — 5,0 s ChanTest — 5,5 s
Przedstaw ione na w yd ru k u 11 zasady w ieloprogram owości oparto na różnych zbiorach o peracji elem entarnych do syn chronizacji i kom unikacji. W czasie im plem entacji okazało się, że pom im o różnic pojęciow ych są one ściśle związane.
N a podstawie przykłado w ych program ów, można oszacować złożoność operacji elem entarnych i powodowany przez nie narzut.
W szystkie im plem entacje wyrażono całkow icie w Modtili-2, co świadczy o przydatności tego języka jako narzędzia pro
gram ow ania systemowego. N aw et szczegóły dotyczące użycia konkretnego kom putera (L ilith ) można w yrazić za pomocą niskopoziomowych konstrukcji .języka, a ich zakres jest b ar
dzo m a ły (p. moduł d efin icyjn y Coroutines).
W y d a je się, że celowe może być odejście od w łączania do języka ko nstrukcji dotyczących wieloprogram owości, chylpa