Do spisu tresci



6.3.5 Zwalnianie bloków dyskowych.



Spis treści


Postaramy się teraz opisać procedurę ext2_free_blocks zwalniającą bloki dyskowe, która jest zaimplementowana w pliku linux/fs/ext2/balloc.c Jak to opisaliśmy w poprzedniej części referatu dotyczącej systemu plików na dysku pierwsze bloki dyskowe zawierają informacje o całym systemie plików. Oczywiście całkowita liczba bloków w systemie plików jest ograniczona. Zatem jasne jest, że nie wszystkie bloki mamy prawo zwalniać (np. bloków systemowych ). Poniższa procedura najpierw więc będzie sprawdzać poprawność argumentów wywołania, a dopiero na samym końcu „zwolni" bloki dyskowe. Informacja o blokach w grupach zapisana jest w bloku identyfikacyjnym, deskryptorze i bitmapie zajętości bloków oraz w i-węźle. Zatem „zwolnienie" bloków polegać będzie na zaktualizowaniu tych czterech struktur danych w pamięci i zaznaczeniu, że uległy one modyfikacji.

Procedura zwalnia spójny ciąg bloków dyskowych.
Na początku zakładamy blokadę na blok identyfikacyjny, aby zapewnić sobie wyłączność dostępu do niego. W fazie wstępnej sprawdzamy poprawność argumentów: czy bloki do zwolnienia leżą w strefie bloków z danymi i czy leżą w obrębie jednej grupy. Następnie wczytujemy bitmapę owej grupy i jej deskryptor. Jeśli struktur tych nie ma w pamięci, to wczytywane są one z dysku.
Po tych wszystkich przygotowaniach przystępujemy do właściwego zwalniania bloków. Odbywa się to przez wyczyszczenie (odpowiadającego zwalnianemu blokowi) bitu w bitmapie zajętości bloków, oraz uaktualnienie danych w i-węźle i zwiększenie liczników wolnych bloków w deskryptorze grupy i bloku identyfikacyjnym.
W końcowej fazie zaznaczamy, że modyfikowano bufory zawierające blok identyfikacyjny oraz bitmapę zajętości bloków. Instrukcją kończącą procedurę jest zdjęcie blokady z bloku identyfikacyjnego.


Powyższy opis można skonfrontować z oryginalnym kodem procedury ext2_free_blocks opatrzonym komentarzami.


Bibliografia

  1. Pliki źródłowe Linuxa:
  2. Projekt Linux
  3. Linux Kernel Hackers Guide
  4. Maurice J. Bach "Budowa systemu operacyjnego UNIX"


Autor: Maciej Zarzycki