Zadanie 13 - system plików
..powrót do spisu
treści tematu 6
Lab-Linux
System Plików
Zadanie praktyczne nr 13
1. Wstęp
W systemie plików systemu Linux istnieje możliwośść jednoczesnego korzystania
z jednego pliku przez wiele procesów. Wspólne czytanie nie stwarza oczywiście
większych problemów, a dla zapewnienia bezpieczeństwa przy wspólnym pisaniu
podczas zapisu nakładana jest na i-węzeł pliku blokada uniemożliwiająca
jednoczesny zapis wielu procesom.
Przy zwykłym korzystaniu z jednego pliku przez wiele procesów, znaczniki
bieżących pozycji w pliku są dla tych procesów niezależne od siebie; gdy
jeden proces przesuwa swój znacznik to znaczniki należące do innych procesów
pozostają niezmienione. Jest to niezwykle wygodne, znakomicie utrudnia
jednak wykonanie wielu interesujących operacji jak choćby zlecanie innemu
procesowi znalezienia czegoś w pliku, bez koniecznośści przekazywania następnie
bieżącej pozycji w tymże pliku metodami w rodzaju kolejki komunikatów lub
pamięci dzielonej (metodami skądinąd niezwykle użytecznymi, jednakże, wydaje
się, zbyt wyszukanymi na przekazanie kilku zaledwie bajtów danych).
Istnieje wprawdzie możliwośść dzielenia znacznika pozycji w pliku przez
wiele procesów, co umożliwia np. wykonanie rzeczonych operacji, jest ona
jednak ograniczona do przypadku, gdy procesy te są ze sobą spokrewnione
np. jeden jest potomkiem drugiego. Jest to możliwe dzięki temu, że proces
potomny dziedziczy od swego przodka tablicę deskryptorów.
Umożliwienie współdzielenia znacznika bieżącej pozycji w pliku było
w istocie główną motywacją wprowadzenia trójstopniowości w odwoływaniu
się do fizycznego pliku.
Nietrudno jednak zauważyć, że nie jest możliwe współdzielenie znacznika
pozycji w pliku przez wiele procesów jeśli nie są one spokrewnione - zadanie
polega na stworzeniu takiej możliwości.
2. Szczegóły
Należy uzupełnić funkcję open() w ten sposób,
by otwierała plik w sposób, jak to nazwałem, symultaniczny tzn. tak,, że
wszystkie korzystające symultanicznie z danego pliku procesy współdzielą
ten sam znacznik pozycji w pliku. Procesy otwierające ten sam plik w sposób
tradycyjny korzystają z własnych znaczników pozycji i fakt, że plik został
otwarty symultanicznie przez inne procesy nie ma wpływu na ich działanie.
Oczywiśście również w ramach tego samego procesu możliwe jest otwarcie
jednego pliku raz tradycyjnie, a raz symultanicznie.
Również funkcja lseek() powinna zostać uzupełniona tak, by
umozliwić 'przesuwanie' bądź 'prywatnego' znacznika pozycji w pliku, bądźź
znacznika 'symultanicznego' - wspólnego dla wszystkich procesów korzystających
z pliku symultanicznie. Przy czym samo wywołanie funkcji lseek()
nie powinno się w żaden sposób zmienić - to funkcja ma rozstrzygnąć, czy
plik jest symultaniczny, czy nie.
Należy także odpowiednio uzupełnić inne funkcje systemowe, by wykorzystanie
symultanicznośści było jak najpełniejsze.
Bardzo ważną kwestią jest, przy rozwiązywaniu zadania, zachowanie bezpieczeństwa
wykonywanych działań, co w szczególności oznacza traktowanie fragmentów
kodu, w których jest możliwośść jednoczesnych zapisów, jako sekcji krytycznych
i odpowiednie do tej sytuacji obchodzenie się z nimi.
Należy także przygotować serię testów pokazujących skuteczność dokonanych
zmian w kodzie jądra.
3. Uwagi
Nie jest konieczne dodanie żadnych nowych funkcji systemowych ani nowych
struktur danych jądra - należy dokonać zmian (uzupełnień) w funkcjach i
strukturach już istniejących.
Należy pamiętać, że procesy 'nie wiedzące' o nowej możliwośści otwarcia
pliku mają dokonanej w kodzie jądra zmiany nie zauważać i działać tak,
jak przedtem.
Nowy sposób wywołania powinien dotyczyć tylko funkcji open(),
tzn. wywołanie innych, modyfikowanych i niemodyfikowanych, funkcji nie
powinno ulec zmianie.
Wywołanie funkcji dup() powinno duplikować deskryptor tak,
że symultanicznośść pliku lub jego 'niesymultanicznośść' jest zachowana.
Dotyczy to również dziedziczenia deskryptorów przez proces potomny - symultanicznośść
lub 'nie' musi być zachowana dla plików potomka.
Można przyjąć, jeżeli takowe założenie okaże się niezbędne, że symultanicznośść
pliku pociąga za sobą jego synchronicznośść.
Należy pamiętać o kontroli praw dostępu do otwieranego pliku - symultaniczne
otwarcie pliku ma być możliwe wtedy i tylko wtedy gdy ten plik możnaby
otworzyć tradycyjnie.
Autor: Adam Kieżun
Wyszukiwarka
Podobne podstrony:
ZADANIE (13)ZADANIE (13)ZADANIE (13)ZADANIE (13)ZADANIE (13)ZADANIE (13)zadanie 13 New Text Documentang 3 etap gim 13 zadaniazadania od 13 do 16zadania logiczne (13)(1)Zadania Problemowe 21 05 13więcej podobnych podstron