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
- Pliki źródłowe Linuxa:
- linux/fs/ext2/balloc.c
- linux/include/linux/ext2_fs.h
- inode.h
- Projekt Linux
- Linux Kernel Hackers Guide
- Maurice J. Bach "Budowa systemu operacyjnego UNIX"
Autor: Maciej Zarzycki