Index Pod redakcjš Charlesa E. Skinnera Psychologia wychowawcza (13) Kurcz Ida Pamięć, uczenie się, język (13) George Orwell Folwark zwierzęcy (13) rok 2026 10 13 Gordon R. Dickson Smok i Jerzy 7 Smok i sekaty krol abc.com.pl 7 abc.com.pl 5 Issac Asimov Nemesis (7) Henryk Sienkiewicz Ogniem i mieczem Frankl Viktor E. Psychoterapia dla każdego (3) |
[ Pobierz całość w formacie PDF ] .Zadanie 13 - system plików.powrót do spisutreści tematu 6Lab-LinuxSystem PlikówZadanie praktyczne nr 131.WstępW systemie plików systemu Linux istnieje możliwość jednoczesnego korzystaniaz jednego pliku przez wiele procesów.Wspólne czytanie nie stwarza oczywiciewiększych problemów, a dla zapewnienia bezpieczeństwa przy wspólnym pisaniupodczas zapisu nakładana jest na i-węzeł pliku blokada uniemożliwiającajednoczesny zapis wielu procesom.Przy zwykłym korzystaniu z jednego pliku przez wiele procesów, znacznikibieżących pozycji w pliku są dla tych procesów niezależne od siebie; gdyjeden proces przesuwa swój znacznik to znaczniki należące do innych procesówpozostają niezmienione.Jest to niezwykle wygodne, znakomicie utrudniajednak wykonanie wielu interesujących operacji jak choćby zlecanie innemuprocesowi znalezienia czego w pliku, bez konieczności przekazywania następniebieżącej pozycji w tymże pliku metodami w rodzaju kolejki komunikatów lubpamięci dzielonej (metodami skądinąd niezwykle użytecznymi, jednakże, wydajesię, zbyt wyszukanymi na przekazanie kilku zaledwie bajtów danych).Istnieje wprawdzie możliwość dzielenia znacznika pozycji w pliku przezwiele procesów, co umożliwia np.wykonanie rzeczonych operacji, jest onajednak ograniczona do przypadku, gdy procesy te są ze sobą spokrewnionenp.jeden jest potomkiem drugiego.Jest to możliwe dzięki temu, że procespotomny dziedziczy od swego przodka tablicę deskryptorów.Umożliwienie współdzielenia znacznika bieżącej pozycji w pliku byłow istocie główną motywacją wprowadzenia trójstopniowoci w odwoływaniusię do fizycznego pliku.Nietrudno jednak zauważyć, że nie jest możliwe współdzielenie znacznikapozycji w pliku przez wiele procesów jeli nie są one spokrewnione - zadaniepolega na stworzeniu takiej możliwoci.2.SzczegółyNależy uzupełnić funkcję open() w ten sposób,by otwierała plik w sposób, jak to nazwałem, symultaniczny tzn.tak,, żewszystkie korzystające symultanicznie z danego pliku procesy współdzieląten sam znacznik pozycji w pliku.Procesy otwierające ten sam plik w sposóbtradycyjny 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 otwarciejednego pliku raz tradycyjnie, a raz symultanicznie.Również funkcja lseek() powinna zostać uzupełniona tak, byumozliwić 'przesuwanie' bądź 'prywatnego' znacznika pozycji w pliku, bądźznacznika 'symultanicznego' - wspólnego dla wszystkich procesów korzystającychz pliku symultanicznie.Przy czym samo wywołanie funkcji lseek()nie powinno się w żaden sposób zmienić - to funkcja ma rozstrzygnąć, czyplik jest symultaniczny, czy nie.Należy także odpowiednio uzupełnić inne funkcje systemowe, by wykorzystaniesymultaniczności było jak najpełniejsze.Bardzo ważną kwestią jest, przy rozwiązywaniu zadania, zachowanie bezpieczeństwawykonywanych działań, co w szczególnoci oznacza traktowanie fragmentówkodu, w których jest możliwość jednoczesnych zapisów, jako sekcji krytycznychi odpowiednie do tej sytuacji obchodzenie się z nimi.Należy także przygotować serię testów pokazujšcych skutecznoć dokonanychzmian w kodzie jądra.3.UwagiNie jest konieczne dodanie żadnych nowych funkcji systemowych ani nowychstruktur danych jądra - należy dokonać zmian (uzupełnień) w funkcjach istrukturach już istniejących.Należy pamiętać, że procesy 'nie wiedzące' o nowej możliwości otwarciapliku 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 niepowinno 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 - symultaniczneotwarcie pliku ma być możliwe wtedy i tylko wtedy gdy ten plik możnabyotworzyć tradycyjnie.Autor: Adam Kieżun [ Pobierz całość w formacie PDF ] |
||||
Wszelkie Prawa Zastrzeżone! Kawa była słaba i bez smaku. Nie miała treści, a jedynie formę. Design by SZABLONY.maniak.pl. | |||||