Zadanie na laboratorium Systemów Operacyjnych
Wstęp
W systemie plików istnieje
moduł zajmujący się i-ramkami, czyli i-węzłami w pamięci operacyjnej.
Istnieje ograniczona ilość i-ramek w pamięci, dlatego może się zdarzyć,
że proces żądający przydziału i-węzła zostanie uśpiony z powodu braku
wolnych i-ramek.
Sytuacja taka jest potencjalnie możliwa
tylko wtedy, kiedy proces żąda i-węzła, dla którego nie przydzielona została
jeszcze żadna i-ramka.
Sformułowanie zadania
Chcemy wprowadzić zmiany w algorytmach i (lub) strukturach danych modułu
zarządzającego i-węzłami w pamięci, tak, żeby dla określonej grupy specjalnych
użytkowników (SU) istniał (prawie) zawsze zapas wolnych i-ramek, tak,
żeby nie musieli być oni usypiani.
Pierwszy sposób: rozgrzewka
Pierwsze - łatwiejsze rozwiązanie polega na wprowadzeniu
dodatkowego górnego ograniczenia na ilość i-ramek dla procesów nie-SU,
powyżej którego nie ma możliwości przydziału nowej i-ramki. Jeżeli żądającym
jest proces nie-SU i żądanego przez niego i-węzła nie znajdziemy
w już istniejących i-ramkach, to przy występującej już nadwyżce (ponad
określone ograniczenie) zajętych i-ramek nie pozwolimy mu na wzięcie nowej
- zostanie uśpiony w kolejce procesów czekających na zwolnienie się i-ramki.
Drugi sposób: kompleksowy
W drugim rozwiązaniu zajmiemy się modyfikacją nie tylko
algorytmów działania modułu, ale także jego struktur danych.
Będziemy chcieli podzielić i-ramki na dwie grupy
:
-
specjalne
-
normalne
-
Ramki normalne są dostępne dla każdego.
-
Przydział procesowi i-ramki w razie braku i-ramki, zawierającej żądany
i-węzeł, odbywa się następująco:
1. jeżeli istnieje wolna i-ramka normalna - weź ją;
2. wpp - jeżeli można zwiększyć liczbę i-ramek normalnych
- utwórz nowe
3.
wpp - jeżeli nie jesteś SU - śpij.
4.
wpp - jeżeli istnieje wolna i-ramka
specjalna - weź ją;
5.
wpp - jeżeli można zwiększyć liczbę
i-ramek specjalnych - zwiększ ją;
6.
wpp - śpij.
-
Z opisanego wyżej algorytmu widać, że każdy SU najpierw próbuje wykorzystać
i-ramki normalne, a gdy tych nie ma - dopiero szuka specjalnych...
-
W sytuacji, gdy proces nie-SU żąda i-węzła, dla którego istnieje już i-ramka,
ale jest specjalna - należy mu ją udostępnić (nie możemy dopuścić do układu,
w którym jeden użytkownik ma i-węzeł, a drugi może go uzyskać dopiero po
zwolnieniu przez pierwszego - potencjalna blokada).
-
Przy zwalnianiu i-ramki specjalnej należy - pod warunkiem, że istnieją
wolne i-ramki normalne - postarać się o zamianę statusu jakiejś wolnej
i-ramki z normalnego na specjalny (przy niezmienionej liczbie i-ramek specjalnych
i normalnych), po to, żeby procesy nie-SU nie mogły przejąć kontroli nad
i-ramkami specjalnymi.
Uwagi
-
I-ramka jest pojęciem wprowadzonym dla odróżnienia rzeczy, którą jest i-węzeł
umieszczony w pamięci operacyjnej od zapisu i-węzła na dysku. (patrz
i-ramka w
Opisie ogólnym zarządzania i-węzłami w pamięci operacyjnej ).
-
Sposób ustalenia którzy użytkownicy są specjalni, zależy od rozwiązującego
zadanie. Sugeruję
- przy wersji pierwszej: niech
to będzie root
- przy wersji drugiej: wprowadzić
do modułu listę UID użytkowników specjalnych.
Bibliografia
LabLinux - moduł zarządzający
i-węzłami w pamięci
LabLinux
Autor: Grzegorz Gawron