Organizacja zapisu na dysku

Wyłączenie komputera w nieodpowiednim momencie, zawieszenie się programu lub inna sytuacja awaryjna podczas operacji dyskowych może prowadz­ić do powstania niespójności w zapisie dotyczącym sposobu rozmieszczenia plików na dysku.

Obszar dysku przeznaczony do zapisu widziany jest przez system ope­racyjny jako ciąg „komórek” o jednakowej pojemności. Komórka ta nazywana jest jednostką alokacyjną.

W przypadku dyskietki jednostką alokacyjną jest jeden sek­tor, czyli 512B. Dla dysku twardego jednostka alokacyjna składa się z kilku sek­torów – zależnie od pojemności napędu. Aby kontrolować, która z jednostek alokacyjnych jest wolna, a która zajęta, MS-DOS tworzy specjalną tablicę z pozyc­jami odpowiadającymi każdej sekcji na dysku. Tablica ta znana jest pod nazwą FAT. Dla dyskietki stosowana jest 12-bitowa tablica FAT. Oznacza to, że liczba pozycji w takiej tablicy nie może przekroczyć wartości 4096 (2 do potęgi 12).W przypadku dysków twardych stosuje się najczęściej większą tablicę 16-bitową. Tablica tego rodzaju wykorzystywana jest dla dysków od kilkudziesięciu do kilkuset MB. Aby obsłużyć dyski o większej pojemności, stosuje się odpowiednio większą jednostkę alokacyjną.

Wartość zero wpisana w element tablicy FAT wskazuje, że dana sekcja jest pusta. Wartość różna od zera informuje o wykorzystaniu sekcji lub jej uszko­dzeniu i zablokowaniu zapisu. Zapisywane na dysku pliki zajmują zwykle więcej miejsca niż długość jednej sekcji. Poszczególne pozycje tablicy FAT, odpo­wiadające konkretnemu plikowi, tworzą listę,

tj. strukturę, w której jeden element tablicy wskazuje następny. Zapis o pliku w katalogu posiada numer pierwszego elementu listy. Następne pozycje listy zapisane są już w tablicy FAT. Wskaźnikiem końca takiego łańcucha jest dla 16-bitowej tablicy FAT liczba FFFh (65536) zaś dla 12-bitowej FFFh.

W praktyce najczęściej występują dwa rodzaje przekłamań: zgubienie sekcji (ang. Lost allocation units) oraz kolizja list (ang. Cross-linked fites). W przypadku zgubienia sekcji, znacznik końca listy wpisany jest zbyt wcześnie. W ten sposób część sekcji, nie należąc do żadnego pliku, alokuje jednocześnie miejsce na dysku. Odwrotna sytuacja występuje w przypadku kolizji listy, gdy te same sekcje dysku wykorzystywane są przez dwa lub większą liczbę plików.

powiązane posty