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.


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

  1. Pliki źródłowe Linuxa:

  2. Projekt LabLinux


Autor: Maciej Zarzycki