13. gyakorlat
1. feladat
Termelő-fogyasztó
\(A = (a: \Z^n, b: \Z^n)\)
\(B = (a': \Z^n)\)
\(Q = (a=a')\)
\(R = (a=a' \land b=a')\)
Segédváltozók: \(i, j: \N\), \(sor: Queue\)
sor (Queue):
buff: a belső puffere a sornak (\(\Z^*\))max: a sor kapacitása (\(\N\))- \(|buff| \leq max\)
init(): inicializálja a sort- `buff = <>``
full(sor): tele van-e a sor|buff| == max
empty(sor): a sor üres|buff| == 0
in(sor, e): hozzáad a sorhoz egy új elemetbuff = buff + <e>
out(sor): kivesz egy elemet a sorbólbuff, e = buff[2..], buff[1]
i, j, sor = 1, 1, init() # S_0
# Q'
parbegin:
# S_1
# Q_1
while i <= n: # P, t_1
await not full(sor) then # V_1
sor, i = in(sor, a[i]), i+1
ta
# R_1
||
# S_2
# Q_2
while j <= n: # P, t_2
await not empty(sor) then # V_2
(sor, b[j]), j = out(sor), j+1
ta
# R_2
parend
\(Q' = (a = a' \land i = 1 \land j = 1 \land sor.buff = <>)\)
\(Q_1 = Q_2 = P\)
\(R_1 = (P \land i = n+1)\)
\(R_2 = (P \land j = n+1)\)
\(P = (a=a' \land 1 \le j \le i \le n+1 \land b[1..j-1]=a[1..j-1] \land sor.buff = a'[j..i+1])\)
\(t_1 = n - i + 1\)
\(t_2 = n - j + 1\)
ST: \(Q \Rightarrow \text{lf}(S, R)\)
Ez egy szekvencia: SzLSz
SzLSz:
- \(Q \Rightarrow \text{lf}(S_0, Q')\)
- \(Q' \Rightarrow \text{lf}(PAR, R)\)
Párhuzamos blokk levezetési szabálya: PLSz
- be:
- ki:
- I. ág: CLSz: \(i, \dots, v (\leftarrow \text{VLSz})\)
- II. ág: CLSz: \(i, \dots, v (\leftarrow \text{VLSz})\)
IM.
- \(I. \leadsto II.\)
- A teljes várakozó utasítás kritikus utasítás, a részei nem (mivel atomi művelet)
- \(\{P, i \leq n\} \; V_1 \leadsto Q_2, R_2, P, t_2 \leq t_0\)
- \(Q_2 \land P \land i \leq n \Rightarrow \text{lf}(V_1, Q_2)\)
- VLSz: \(Q_2 \land P \land i \leq n \Rightarrow \chi_{D_{\lnot full(sor)}} = \text{igaz}\)
- \(Q_2 \land P \land i \leq n \land \lnot full(sor) \Rightarrow \text{lf}((sor, i = in(sor, a[i]), i+1), Q_2)\)
- \(\ldots\)
Holtpont mentesség (2 párhuzamos blokkban 2 várakozó utasítás van, ezért 3 lehetséges holtpont van)
- I. ág blokkolt, a II. ág vége
- \(full(sor) \land P \land i \leq n \land R_2\)
- \(full(sor) \land P \land i \leq n \land P \land j = n+1\)
- \(P\) miatt \(j \leq i \leq n+1\), de \(j=n+1\), tehát \(n+1 \leq i \leq n+1 \iff i = n+1\), viszont akkor \(n+1 \leq n\)-nek igaznak kéne lennie
- II. ág blokkolt és I. ág vége
- I.és II. ág is blokkol
- \(P \land i \leq n \land full(sor) \land P \land j \leq n \land empty(sor)\)
2. példa
Adatbázis író folyamat
- Írni egyszerre csak egy tudja
- Olvasni akár több is egyszerre
\(A = (w: \N, r: \N)\)
\(B = ()\)
# \underline w és \underline r a w_i és r_i-k tömbje
w, r, \underline w, \underline r = 0, 0, \underline 0, \underline 0
# Q'
parbegin:
R_1||R_2||...||R_n
W_1||W_2||...||W_n
parend
# R
A strukiban a várakozó feltétel alatti DOBOZ várakozik
ST: \(Q \Rightarrow \text{lf}(S, R)\)
NYEH SzLSz:
- \(Q \Rightarrow \text{lf}(w, r := 0,0, Q')\)
- \(Q' \Rightarrow \text{lf}(PAR, R)\)
\(w_i \in \{0, 1\} \sim w_i=1 \Rightarrow W_i \text{ folyamat éppen ír}\)
\(r_j \in \{0, 1\} \sim r_j=1 \Rightarrow R_j \text{ folyamat éppen olvas}\)
Iterferencia mentesség
- \(R_j \leadsto R_l, W_k\)
- \(W_i \leadsto W_k, R_l\)
\(R_j \leadsto R_l\)
await w=0 then r, r_j = r+1, 1 ta\(\leadsto P_{r_l}, Q_{r_l}\)r, r_j = r-1, 0\(\leadsto P_{r_l}, Q_{r_l}\)
\(\ldots\)
Holtpontmentesség
A helyes szám: 1 (akkor akad el, ha a várakozóutasításnál elakad)