«« ( Date ) »» // «« ( Thread ) »» // nastava - 2003

Re: Baze - TS algoritam

by Nikola Novakovic
četvrtak, 27. februar 2003 - 01:55.

Evo ti Bojovicev algoritam pa uporedjuj:

Begin Protokol Vremenskog Markiranja

1.Svaka transacija Tik pre startovanja dobija vremensku marku TS(Tik) cija vrednost odgovara poziciji transakcije
u ustanovljenom serijskom redosledu.

2. Case (operacija) of
a) Read(X):
if TS(T) < WTS(X) then
Reject ( Read (X) );
Rollback (X);
TS(T) := nova vrednost, veca od svih postojecih;
Restart; // restartuj je sa novom vremenskom markom
else
Read(X);
RTS(X) := Max ( RTS(X), TS(T) );
end_if
b) Write (X):
if TS(T) < RTS(X) then
Reject ( Write (X) );
Rollback (T);
TS(T) := nova vrednost, veca od svih postojecih;
Restart (T);
else if TS(T) < WTS(X) then
Ignore ( Write (X) ); // ignorisi sa izvrsavanjem Write(X)
Continue_T; // nastavi sa izvrsavanjem transakcije T
else
Write (X);
WTS(X) := Max ( WTS(X), TS(T) );
end_if
c) Commit(T):
if ( TS(T) ima takvu vrednost, da je zadovoljen unapred utvrdjeni serijski redosled tr. ) then
if ( TS(T) = minimalnoj vrednosti TS svih nepotvrdjenih transakcija) then
Commit (T);
else
Set_Commit_flag (T); // inace postavi commit fleg transakcije T
end_if
else
Reject ( Commit (T) );
Rollback (T);
TS(T) := nova vrednost, veca od svih postojecih;
Restart (T);
for each Ti | Commit_flag (Ti) and TS(Ti) > TS(T) do // za sve transakcije Ti koje imaju postavljen commit fleg i imale suvremensku marku vecu od transakcije T u pocetnom, uvrdjenom serijskom redosledu
Reset_Commit_flag (Ti); // resetuj njihov commit fleg
Rollback (Ti); // ponisti ih
TS(Ti) := nova, vrednost, veca od svih postojecih; // dodeljuj im redom nove, najvece vremenske marke
Restart (Ti); // i restartuj ih
end_for
end_if

End Protokol Vremenskog Markiranja


Vecina stavki ima i Bojoviceve komentare, ali, kao sto rekoh, sve zajedno staje na 4 strane A4 formata, ako ti ovo nije dovoljno, moraces da kopiras

Ipak, nadam se da sam ti pomogao

Pozdrav,
Nikola