- 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: wyrobić u czytelnika pewne intuicj
- 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 and 286:
LiteraturaWszystkich zainteresowany
- Page 287 and 288:
of California, Berkeley, Calif. 198
- Page 289 and 290:
[MaOO87] M. Maekawa, A. E. Oldehoef