• Modula 3 [Nels91]• occam 2 [Burn88, Gall90, Inmo88, Jone87, PoMa87, BenA90]• Parallel C [Inmo90, Para91]• Pascal (jako środowisko dla różnych mechanizmów) np. [IgMM92]• PascaLC [Kurp87]• Pascal Plus [WeBu79, BuEW88]Wprowadzenie w problematykę programowania równoległego i obliczeń równoległychstanowią, książki [Axfo89, LeE192]. W artykule [BaST89] można znaleźć przegląd językówprogramowania rozproszonego, a w artykule [Andr91] przegląd technik programowaniarozproszonego.Niniejsza książka jest co prawda przeznaczona głównie dla studentów, ale może byćtakże przydatna dla nauczycieli prowadzących lekcje informatyki w szkołach średnich, jakoźródło interesujących problemów i ich rozwiązań. Przystępne wprowadzenie w problematykęprogramowania współbieżnego adresowane do nauczycieli i uczniów szkół średnich stanowicykl artykułów w czasopiśmie „Komputer w Szkole" [Weis90a, Weis90b, Weis91a, Weis91b,Weis91c, Weis91d].A oto pełny spis cytowanej literatury:[AhCG86] S. Ahuja, N. Carriero, D. Gelernter: Linda and friends. IEEE Computer, 1986, 19, 8,26-34.[ACGK88] S. Ahuja, N. Carriero, D. Geletnter, V. Krishnaswamy: Matching Language andHardware for Parallel Goinputation in the Linda Machine. IEEE Trans, on Computers, 1988,37, 8.[Andr91a] G. R. Andrews: Paradigms for Process Interaction in Distributed Programs.ACM Computing Surveys, 1991, 23, 1, 49-90.[Andr91b] G. R. Andrews: Concurrent Programming: Principles and Practice. Redwood CityCA, Benjamin/Cummings 1991.[AtMN88] C. Atkinson, T. Moreton, A. Natah: Ada for distributed systems. Cambridge,Cambridge University Press 1988.[ATfcT90a]ATfcT, UnixSystem VReleaseA -Programmer's Guide: NetworkingInterfaces.Englewood Cliffs, NJ, Prentice-Hall 1990.[ATfeT90b] ATfeT, Unix System V Release A - Programmer's Reference Manual. EnglewoodCliffs, NJ, Prentice Hall 1990.[Axfo89] T. Axford: Concurrent programming, fundamental techniques for real-time andparallel software design. Chichester, Wiley 1989.[Bacli86] M, J. Bach: The Design of the Unix Operating System. Englewood Cliffs, NJ,Prentice Hall 1986.[Baco93] J. Bacon: Concurrent systems. An integrated approach to operating systems,database and distributed systems. Wokingham, England, Addison-Wesley 1993.[BaST89] H. E. Bal, J. G. Steiner, A. S. Tanenbaum: Programming languages for distributedsystems. ACM Computing Surveys, 1989, 21, 3, 261-322.[Barii89] J. G. P. Barnes: Programming in Ada. Wyd. 3, Wokingham, England, AddisonWesley1989.[BenA89] M. Ben-Ari: Podstawy programowania współbieżnego. Warszawa, WNT 1989.[BenA90] M. Ben-Ari: Principles of concurrent and distributed programming. EnglewoodCliffs, NJ, Prentice-Hall 1990.[Berk86] Berkeley, Unix Programmer's Reference Manual (PRM), Ą.3 Berkeley SoftwareDistribution. Computer Systems Research Group, Computer Science Division, Univ.286
of California, Berkeley, Calif. 1986.[Bern80] A. J. Bernstein: Output guards and nondeterminism in CSP. ACM Tran$. Program.Lang. Syst., 1980, 2, 2, 234-238.[BeLe93] A. J. Bernstein, P. M. Lewis: Concurrency inprograrnming anddatabase systems.Boston, Jones and Barlett 1993.[BiSli88] L. Bic, A. C. Shaw: The. logical design of operating systems. Wyd. 2, EnglewoodCliffs, NJ, Prentice-Hall 1988.[Booc87] G. Booch: Software engineering with Ada. Wyd. 2, Menlo Park, California,Benjamin/Cummings 1987.[Brin75] P. Brinch Hansen: The programming language - Concurrent Pascal. IEEETrans, on Soft. Eny., 1975, SE-1, 2, 199-207, także w: Programming methodology,D. Gries (ed.), Berlin, Springer 1978.[Brin77] P. Brinch Hansen: The architecture of concurrent programs. Englewood Clifs,NJ, Prentice-Hall 1977.[Brin78] P. Brinch Hansen: Distributed processes: a concurrent programming concept.Communication ofthe ACM, 1978, 21, 11, 934-941.[Brin79] P. Brinch Hansen: Podstawy systemów operacyjnych. Warszawa, PWN 1979.[Brin83] P. Brinch Hansen: Programming a Personal Computer. Englewood Cliffs, NJ,Prentice-Hall 1983.[Brin86] P. Brinch Hansen: The Joyce language report. Computer Science Department,University of Copenhagen, Copenhagen 1986.[Burii88] A. Burns: Programming in occam 2. Reading, Mass., Addison-Wesley 1988.[BuEW88] D. Bustard, J. Elder, J. Welsh: Concurrent program structures. EnglewoodCliffs, NJ, Prentice-Hall 1988.[CaHa74] R. H. Campbell, A. N. Habermann: Thespecification ofprocess synchronizationby path expression, w: Lecture Notes in ConiputerScience, 16, Springer 1974, 89-102.[CaGL86] N. Carriero, D. Gelernter, J. Leichter: Distributed data structures"m Linda.13th ACM Symposinm on Principles of Programming Languages, ACM SIGPLANand SIGACT, (Wiiliamburg, Virginia, 1986), 236-242.[CaGe89] N. Carriero, D. Geletnter: How to write parallel programs: A guide to theperplexed. ACM Computing Survays, 1989.[CoDo88] G. F. Coulouris, J. Dollimore: Distributed systerns: concepts and design. Reading,Mass., Addison-Wesley 1988.[CoHP71] P. J. Courtois, F. Heymans, D. L. Parnas: Concurrent control with "readers"and "writers". Communication of the ACM, 1971, 14, 10, 667-668.[CzZi93] G. Czajkowski, K. Zielinski: Linda - środowisko do przetwarzania równoległegoi rozproszonego w sieciach stacji roboczych. Informatyka, 1993, 5.[Demi90] J. Deminet: System operacijjny MS-DOS. Warszawa, WNT 1990.[Dijk68] E. W. Dijkstra: Cooperating sequential processes, W: Programming Languages,A. Genuys (ed.), London, Academic Press 1968, 43-112.[Dijk71] E. W. Dijkstra: Hierarchical ordering ofsequential processes. Acta Inf., 1971, 1,115-138.[Dijk78] E. W. Dijkstra: Umiejętność programowania. Warszawa, WNT 1978.[DuWy90a] C. Dubnicki, W. Wyglądała: EDIP project - The Edip Language Report,version 1.0. Sprawozdania Instytutu Informatyki Uniwersytetu Warszawskiego, nr179, Warszawa 1990.[DuWy90b] C. Dubnicki, W. Wyglądała: Edip project - EDIP PC User's Guide, EDIPproject - EDIP PC Implementation Notes, version 1.0. Sprawozdania InstytutuInformatyki Uniwersytetu Warszawskiego, nr 180, Warszawa 1990.[Gall90] J. Galletly: Occam 2. London, Pitman Publishing 1990.287
- Page 5 and 6:
5.3.10 Obliczanie współczynników
- Page 7 and 8:
8.1.2 Jednoczesne operacje semaforo
- Page 9 and 10:
1. WstępProgramowanie - kiedyś wi
- Page 11 and 12:
wyrobić u czytelnika pewne intuicj
- Page 13 and 14:
2. Podstawowe pojęcia i problemy2.
- Page 15 and 16:
2.2.4 Program współbieżnyMożna
- Page 19 and 20:
Zjawisko blokady, zwane także zast
- Page 21 and 22:
pozwalające mu wejść. Pisarz, kt
- Page 23 and 24:
2.7.1 PrzerwaniaDo rozwiązania ka
- Page 25 and 26:
Potrzeba stosowania języków wysok
- Page 27 and 28:
mechanizmowi selektywnego wyboru um
- Page 29 and 30:
dostosować się do nadawcy, ale ni
- Page 31 and 32:
mechanizmy są szczególnie przydat
- Page 33 and 34:
definicji klasycznej przyjmuje się
- Page 35 and 36:
Semafor binarny nie jest szczególn
- Page 37 and 38:
Do synchronizacji procesów w rozwi
- Page 39 and 40:
VB(CHROŃ_J);V(PEŁNE)endend;proces
- Page 41 and 42:
process CZYTELNIK(i: 1..M);beginwhi
- Page 43 and 44:
ównież wykonywane pojedyncze oper
- Page 45 and 46:
PB(DOSTĘP);wartość := wartość
- Page 47 and 48:
l: integer := N; {wartość semafor
- Page 49 and 50:
owiem zdarzyć wiele, w szczególno
- Page 51 and 52:
eginif ls[i] > O then begines[i] :=
- Page 53 and 54:
Hub : integer := 0; {licznik związ
- Page 55 and 56:
endend;process S;var pl,p2,p3: porc
- Page 57 and 58:
VB(DOSTĘP)case i of {synchronizacj
- Page 59 and 60:
end else if chce_start > O then beg
- Page 61 and 62:
RYS. 4.1. Przejście procesu przez
- Page 63 and 64:
var z: integer;W: condition;export
- Page 65 and 66:
... W.Wait...end;procedure *P2;begi
- Page 67 and 68:
PROCEDURE Pl() =BEGINLOCK M DO...Th
- Page 69 and 70:
służąca do przechowywania warto
- Page 71 and 72:
Jeżeli w czytelni nie ma pisarza,
- Page 73 and 74:
eginif jest = 4 then wait(LOKAJ);je
- Page 75 and 76:
wstawienia/usunięcia rekordu. Znak
- Page 77 and 78:
jeszcze nie zaspokojone potrzeby pr
- Page 79 and 80:
Inicjację wykonania, przez dysk wy
- Page 81 and 82:
Jeśli odzyskany obszar o adresie a
- Page 83 and 84:
monitor), nie trzeba też liczyć w
- Page 85 and 86:
nie są tu wstrzymywani). Wskaźnik
- Page 87 and 88:
Baza danych może być w jednym z n
- Page 89 and 90:
if not empty(DO_W) then signal(DO_W
- Page 91 and 92:
monitor OBSŁUGA.DRUKAREK;const N =
- Page 93 and 94:
end; {ZWALNIAM}beginprzy_stole := O
- Page 95 and 96:
lokady, wszystkie żądania tych pr
- Page 97 and 98:
ile := lend; {PROCESY}4.4.13 Szereg
- Page 99 and 100:
Warto zwrócić uwagę na pewne sub
- Page 101 and 102:
export procedure CZEKAM_NA_WYKONANI
- Page 103 and 104:
eginramka := znajdź(żądanie);rep
- Page 105 and 106:
end;with s^ do beginpocz := rozmiar
- Page 107 and 108:
wstaw(k, a2);wolne := wolne + lende
- Page 109 and 110:
P(k:l..N):: jest skrótowym zapisem
- Page 111 and 112:
Instrukcja wejścia-wyjścia jest w
- Page 113 and 114:
Semafor ogólnyProcesy X(1..N) korz
- Page 115 and 116:
wejść, do sekcji krytycznej, zate
- Page 117 and 118:
*[(k:l..N) j = k -> POMOCNIKU) !CHC
- Page 119 and 120:
Przedstawimy tu rozwiązanie scentr
- Page 121 and 122:
]][](j:1..P) pisarz(j) ->(op, p, pi
- Page 123 and 124:
praktyczne uzasadnienie w sytuacji,
- Page 125 and 126:
otrzymuje od niego wartość najwi
- Page 127 and 128:
W systemie działa N nadawców, M o
- Page 129 and 130:
Wersja 2. Inny sposób przekazywani
- Page 131 and 132:
5.3.16 Tablica sortującaTablica so
- Page 133 and 134:
||BUFOR(i:0..N-l):: p: porcja;*[tru
- Page 135 and 136:
Rozwiązanie 2[]pisarz -> skip ][]S
- Page 137 and 138:
SPROC może usiiwać element ze zbi
- Page 139 and 140:
chciałby odebrać. Po drugie, w tr
- Page 141 and 142:
natomiast po otrzymaniu od procesu
- Page 143 and 144:
5.4.10 Obliczanie współczynników
- Page 145 and 146:
wcześniejsze procesy). Proces P(N)
- Page 147 and 148:
WYJŚCIE!2;i := 3; *[i SITO(l)!i;
- Page 149 and 150:
Algorytmy procesów U i P (i) są s
- Page 151 and 152:
CA i CB są tutaj nazwami kanałów
- Page 153 and 154:
Oto przykład:par (l = lista; l !=
- Page 155 and 156:
Procesy są tworzone i uruchamiane
- Page 157 and 158:
Instrukcja warunkowego rozgałęzie
- Page 159 and 160:
Deklaracja procesu, podobnie jak de
- Page 161 and 162:
]w Adzie można zapisać następuj
- Page 163 and 164:
Ponieważ na semaforze binarnym mo
- Page 165 and 166:
z := z + 1;end selectend loop;end B
- Page 167 and 168:
Zauważmy, że gdy ostatni z czekaj
- Page 169 and 170:
eginloopselectwhen wśrodku > 0 =>a
- Page 171 and 172:
ozmowy przez nadawcę. Proces CENTR
- Page 173 and 174:
end loop;end SEM_UNIX;Dostępna w s
- Page 175 and 176:
selectwhen wolneA > 0 =>accept PRZY
- Page 177 and 178:
6.4.6 Algorytm Ricarta i AgrawaliPr
- Page 179 and 180:
nadaj(k);CENTRALA.ZWALNIAM(k);end l
- Page 181 and 182:
Ponieważ, zgodnie z umową, SITO'i
- Page 183 and 184:
Po jej wykonaniu zmienne występuj
- Page 185 and 186:
istotna, należy każdą krotkę ro
- Page 187 and 188:
OUTPUT('lkons', j+l);konsumuj(p)end
- Page 189 and 190:
while true do blginwlasne_sprawy;IN
- Page 191 and 192:
dodatkowej krotki ('sprawdzanie') p
- Page 193 and 194:
7.3.9 Obliczanie całki oznaczonejN
- Page 195 and 196:
OUTPUT(j, p)endend;process GRUPA1;v
- Page 197 and 198:
algorytm procesu SEG o wczytanym nu
- Page 199 and 200:
M = ?; {liczba odbiorców}K = ?; {l
- Page 201 and 202:
7.4.7 Mnożenie macierzyDo obliczen
- Page 203 and 204:
wynikowych, a niestety nie ma w Lin
- Page 205 and 206:
WYKONAWCA zawiera kolejno: dolną g
- Page 207 and 208:
występują w postaci funkcji, któ
- Page 209 and 210:
Funkcje na semaforachNadanie semafo
- Page 211 and 212:
zapoznaniu się z mechanizmem pami
- Page 213 and 214:
eginwhile true do beginp := bufor[p
- Page 215 and 216:
}buf[i].sem_op = sem_op;buf[i].sem_
- Page 217 and 218:
procedure signal; {signal i wyjści
- Page 219 and 220:
8.3.2 Implementacja semafora typu O
- Page 221 and 222:
}buf[0].sem_flg = 0;buf[l].sem_num
- Page 223 and 224:
Jak widać, implementacja semafora
- Page 225 and 226:
8.4.5 Zasoby dwóch typówUżyjemy
- Page 227 and 228:
9 Komunikaty i kanały w systemie U
- Page 229 and 230:
Na kanałach można wykonywać dwie
- Page 231 and 232:
Parametr msqid jest identyfikatorem
- Page 233 and 234:
{}msgrcv (K, &komunikat, 1, 1, 0);i
- Page 235 and 236: }}msgrcv(K, &c, 0, 0, 0); /*wzięci
- Page 237 and 238: for j := 1 to k.cc do {wpuszczenie
- Page 239 and 240: 9.3.7 Komunikacja przez pośrednika
- Page 241 and 242: procedure signal(i: l..C);beginif k
- Page 243 and 244: var p: integer; {podkanal - nieisto
- Page 245 and 246: end; {koniec}process INICJATOR;var
- Page 247 and 248: 10 Zdalne wywołanie procedur w sys
- Page 249 and 250: programu, numerem wersji, numerem p
- Page 251 and 252: nazwą i ewentualnie indeksem. Nato
- Page 253 and 254: extern void korzystaj (tt *);int po
- Page 255 and 256: {}while (TRUE) {/* wlasne sprawy */
- Page 257 and 258: void wstaw (char *nazwa){ /* dołą
- Page 259 and 260: const N = ?;var WEJŚCIE: array[l..
- Page 261 and 262: #include #include "services.h"#defi
- Page 263 and 264: }if (licz == N - 2)V();elselicz++;r
- Page 265 and 266: otrzyma odpowiedź negatywną. Odmi
- Page 267 and 268: Jest to przykład, w którym proces
- Page 269 and 270: export procedure PROSZE(k: komunika
- Page 271 and 272: Rozwiązanie poprawneKomunikat opis
- Page 273 and 274: Po jej zakończenhi proces ma zapew
- Page 275 and 276: type komunikat = recorda: adres;jes
- Page 277 and 278: Liczba n będzie parametrem wczytyw
- Page 279 and 280: 11.4.1 Obliczanie histogramuW tym p
- Page 281 and 282: 11.4.3 Obliczanie wartości wielomi
- Page 283 and 284: ead(b);write(b){przesłanie element
- Page 285: LiteraturaWszystkich zainteresowany
- Page 289 and 290: [MaOO87] M. Maekawa, A. E. Oldehoef