Zadanie semestralne - Systemy operacyjne, rok 1997/1998 ======================================================= Distributed Shared Segments (DSS) ********************************* Zadanie polega na zaimplementowaniu pewnego modelu rozproszonej pamieci dzielonej w srodowisku zlozonym z wielu komputerow. Procesy dzialajace na tych komputerach moga komunikowac sie miedzy soba poprzez roznej wielkosci segmenty pamieci wspolnej. Dla kazdego takiego segmentu, w danej chwili tylko jeden proces jest jego wlascicielem i tylko on ma prawo pisania w nim. Pozostale procesy chcace korzystac z segmentu maja do dyspozycji wylacznie jego prywatna kopie, ktora nie musi byc automatycznie uaktualniana po kazdej operacji pisania przez wlasciciela. Posiadacze kopii moga z nich czytac i do nich pisac. Uaktualnianie odbywa sie co pewien czas i o jego przeprowadzeniu decyduje wlasciciel. Operacje takie jak fork, exec i exit sa oczywiscie niewidoczne dla serwerow obslugujacych DSS. Uzytkownik powinien dbac o to, by uzycie tych funkcji nie doprowadzilo do blednego dzialania systemu. Istnieje mozliwosc przekazania uprawnien wlasciciela innemu procesowi. Dla kazdego segmentu (nie kopii) odpowiedni demon utrzymuje liste wszystkich kopii segmentu oraz flage FOR_SALE, ktora jest ustawiana (ON), jesli wlasciciel jest sklonny zrezygnowac z prawa wlasnosci do segmentu. Jesli zglasza sie chetny do przejecia segmentu i flaga nie jest ustawiona (OFF), jego zlecenie konczy sie bledem. Przy fladze ustawionej (ON), w momencie pojawienia sie chetnego, wlasciciel uaktualnia lokalna kopie nowego wlasciciela oraz przesyla mu liste istniejacych kopii. Segment dotychczasowego wlasciciela staje sie kopia. Obsluga segmentow rozproszonej pamieci dzielonej realizowana jest przez zestaw funkcji bibliotecznych, ktorych naglowki i opisy znajduja sie w pliku `dss.h'. Umieszczona tam lista bledow moze oczywiscie, w razie potrzeby, zostac rozszerzona. Przedmiotem odbioru zadania sa - teksty zrodlowe wszystkich niezbednych plikow, - opis rozwiazania wraz z uzasadnieniem przyjetych rozwiazan, - opis i analiza przeprowadzonych testow i eksperymentow. --------------------------------------------------------------------------- Na ostatnim wykladzie odbyla sie dyskusja na temat zadania semestralnego. Zostaly podjete nastepujace ustalenia: 1. Na jednym komputerze procesy wspoldziela ten sam segment pamieci dzielonej, z tym ze prawo do pisania w nim (moralne, bo fizycznie nie jestesmy w stanie tego wyegzekwowac) ma tylko wlasciciel. 2. Tak wiec w obrebie komputera, na ktorym jest proces bedacy wlascicielem segmentu, inne procesy maja aktualizowany segment na biezaco, na innych zas komputerach dopiero poprzez dss_commit(). 3. Rozwazania co sie stanie jesli proces wykona fork(), exit() lub exec() nas nie interesuja - to jest sprawa korzystajacego z dss. 4. dss_init() ma w odpowiedni sposob zainicjowac dzialanie systemu serwerow na kazdym komputerze wchodzacym w sklad grupy. Do zdalnego uruchamiania procesow nalezy uzywac funkcji ssh. 5. dss_init moglby dzialac nastepujaco: (a) probuje utworzyc serwera lokalnie. Jesli ta operacja konczy sie bledem (port jest juz zajety przez lokalnego serwera), to funkcja konczy sie z bledem. (b) wpp uruchamia zdalne serwery. Po jakims czasie dowiaduje sie, na ktorych komputerach ta operacja sie powiodla, a na ktorych nie. Jesli gdzies operacja sie nie powiodla, to sa dopuszczalne dwie mozliwosci: - serwer usuwa z listy te komputery, na ktorych uruchomienie serwerow sie nie powiodlo i dziala dalej w ramach zmniejszonej grupy (co najmniej on bedzie do niej na pewno nalezal). - serwer wysyla do dzialajacych serwerow polecenie zakonczenia pracy i konczy sie z bledem. 6. Jesli ktos chce zastosowac inne rozwiazania i\lub zaczal juz wczesniej pisac program semestralny - to moze to zrobic pod warunkiem, ze nie upraszczaja one znacznie zadania i sa zdroworozsadkowe. 7. W dokumentacji nalezy przeprowadzic analize mozliwych rozwiazan - tego zrealizowanego i tych odrzuconych. -----------------------------------------------------------------------