Semantyka spójności i synchronizacja współbieżnego dostępu do pliku

Semantyka spójności staje się istotna w przypadku współbieżnego dostępu do pliku wielu procesów, przy czym skutkiem dostępu są modyfikacje pliku. Semantyka spójności określa więc, w jaki sposób takie zmiany wpływają na obraz pliku w innych procesach.

Zgodnie z semantyką spójności systemu UNIX wszelkie zmiany są natychmiast dostępne dla następnych operacji odczytu, niezależnie od procesu. Wszystkie procesu korzystają po prostu z tej samej podręcznej pamięci buforowej.

Semantyka sesji oznacza, że wraz z otwarciem pliku tworzona jest sesja dostępu i wszelkie zmiany pliku w sesji staną się dostępne dopiero po jej zamknięciu. Jeśli zatem proces w czasie otwarcia sesji przez inny proces, otworzy swoją sesję, uzyska lokalną wersję pliku, która nie będzie uwzględniać dokonanych zmian w sesji współbieżnej. Dopiero otwarcie sesji po jej zamknięciu przez inny proces umożliwia dostęp do zmian.

Semantyka stałych plików dzielonych oznacza uniknięcie problemu, raczej niż jego rozwiązanie.

  • Semantyka spójności określa sposób postrzegania zmian zawartości pliku, dokonywanych przez współbieżnie działające procesy.
  • Przykłady semantyki spójności:
    • semantyka spójności systemu UNIX — wynik operacji zapisu jest natychmiast widoczny dla innych procesów,
    • semantyka sesji —zmiany w pliku stają się widoczne tylko dla procesów, otwierających ten plik po zamknięciu sesji, w której był zapis,
    • semantyka stałych plików dzielonych — współdzielony plik może być tylko czytany.

Synchronizacja dostępu do plików


Zachowanie poprawnej struktury pliku przy współbieżnym realizowaniu operacji wymaga często koordynacji działań procesów, które mają dostęp do tego pliku. Koordynację taką w najprostszym przypadku można uzyskać poprzez wyłączność dostępu do pliku na czas wykonywania operacji. Blokada wyłączna jest często nadmiarowa, podobnie jak blokowanie całego pliku.

Wyróżnia się zatem blokadę

  • współdzieloną, zakładaną na czas odczytu i dopuszczająca inne blokady współdzielone,
  • wyłączną, zakładaną na czas modyfikacji i wykluczającą jakiekolwiek inne blokady.

Inną kwestią jest ziarnistość blokad. Bardzo często wystarczy zablokować tylko modyfikowany lub czytany fragment pliku.

Więcej szczegółów związanych z synchronizacją znajduje się w następnych modułach.

  • Współbieżny dostęp do zawartości pliku można synchronizować na poziomie całego pliku lub poszczególnych jego fragmentów (zajmowanie rekordów).
  • Najczęściej dopuszcza się dwa rodzaje blokad
    • blokada współdzielona (shared lock, read lock)
    • blokada wyłączna (exclusive lock, write lock)

Synchronizacja dostępu do plików — zgodność blokad


Tabela pokazuje, które rodzaje blokad mogą współistnieć, a które się wykluczają. Jak już wcześniej wspomniano, blokada do odczytu może współistnieć z inna blokadą do odczytu — współbieżny odczyt jest dopuszczalny. Żeby natomiast uniknąć odczytu danych częściowo tylko zmodyfikowanych lub nie dopuścić do hazardu w przypadku współbieżnych modyfikacji (patrz następny moduł) blokada wyłączna wyklucza inne blokady.

slajd 33