Do spisu tresci
Projekt zadania laboratoryjnego SO.
Temat: Modyfikacja funkcji przydziału bloków dyskowych
Algorytm przydziału bloków dyskowych jest zrealizowany w Linuxie poprzez
funkcję ext2_new_block , którą można znaleźć w pliku
linux/fs/ext2/balloc.c.
int ext2_new_block ( const struct inode *inode, unsigned long goal, u32 *prealloc_count, u32 *prealloc_block, int err )
Jak to dokładnie opisał mój kolega, w projekcie LabLinux, funkcja ta alokuje blok dyskowy dla pliku,
którego i-węzeł wskazywany jest przez parametr inode. Funkcja zwraca numer
zaalokowanego bloku. Najpierw próbujemy zaalokować blok o numerze goal,
który jest parametrem funkcji. Jeśli się nam to nie uda, szukamy wolnych
bloków w grupie, do której należy i-węzeł inode.
Problem zaczyna się, gdy w tej grupie nie ma wolnych bloków. Taka sytuacja
będzie przedmiotem zadania. W oryginalnej funkcji szukana jest grupa z wolnymi
blokami (sprawdzamy licznik wolnych bloków w deskryptorze grupy). Grupa taka
wyszukiwana jest liniowo. Strategia taka może spowodować, że jeśli mamy kolejno
wiele grup z wolnymi blokami, ale w każdej z nich jest niewiele wolnych bloków,
to bloki dużych plików zostaną rozrzucone po wielu grupach. Pożądane było by
natomiast jak najbardziej spójne przechowywanie plików.
Modyfikacja ma polegać na wyszukaniu grupy, która ma więcej wolnych bloków
niż średnia z liczby wolnych bloków ze wszystkich grup.
Uwaga:
Podobnie realizowane jest wyszukiwanie grupy podczas przydziału i-węzła
dla nowego katalogu (patrz ext2_new_inode).
Oczywiście po wykonaniu modyfikacji funkcji przydziału bloków,
należałoby napisać jeszcze, krótki program uwidaczniający
wprowadzone zmiany. W tym celu wystarczy napisać program
odczytujący z i-węzła pliku tablicę z numerami bloków z danymi
(pobierając oczywiście również numery bloków podwójnie i potrójnie
pośrednich). Na tej podstawie będzie można określić do jakich
grup należą bloki danego pliku.
Na podstawie obserwacji, należy wywnioskować w jakich sytuacjach
modyfikacja funkcji przydziału bloków przyniesi korzyści, a w jakich
być może straty.
Bibliografia
- Pliki źródłowe Linuxa:
- linux/fs/ext2/balloc.c
- linux/fs/ext2/ialloc.c
- Projekt LabLinux
Autor: Maciej Zarzycki