Skip to content

sgaczol/FP-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Projekt - Serwer informacji o zakończonych procesach

Należy rozbudować system Minix o serwer, który będzie się zajmował dostarczaniem informacji o zakończonych procesach.

  1. Pierwszy z interfejsów, dostępny dla procesów systemowych obejmuje:
  • int watch_exit(endpoint_t ep) - deklaracja zainteresowania zdarzeniem zakończenia procesu o numerze ep (taki proces będziemy nazywać obserwowanym),

  • int cancel_watch_exit(endpoint_t ep) - odwołanie powyższego zainteresowania,

  • w sytuacji gdy kończy się obserwowany proces, każdy z obserwujących go procesów powinien otrzymać od serwera wiadomość notify,

  • int query_exit(endpoint_t *epp) - funkcja zwracająca numer któregoś z obserwowanych przez nadawcę procesów który się zakończył oraz bieżącą liczbę procesów obserwowanych przez proces wywołujący, które się zakończyły, a nie zostały jeszcze zwrócone poprzez tą funkcję. Każdy z zakończonych procesów powinien być zwrócony w tym trybie co najwyżej jeden raz.

    Implementacje opisanych powyżej funkcji powinny zostać dodane do biblioteki systemowej dla procesów systemowych (np. w lib\libsys\).

  1. Drugim interfejsem, tym razem dostępnym dla wszystkich procesów, jest:
  • int wait_exit(pid_t p) - wywołanie blokujące, które zwraca sukces po zakończeniu procesu o identyfikatorze p. W przypadku braku takiego procesu lub przerwania za pomocą sygnału zwraca -1 oraz ustawia errno odpowiednio na ESRCH i EINTR.

    Implementacja opisanej powyżej funkcji powinna zostać dodana do biblioteki systemowej (np. w lib\libc\sys-minix\).

Sygnały

Sygnały przychodzące do zablokowanych na wait_exit procesach powinny być natychmiast obsługiwane zgodnie z zarejestrowanymi przez proces procedurami obsługi. Funkcja wait_exit powinna zostać przerwana i zwrócić wartość -1 oraz EINTR w errno.

Opcjonalna funkcjonalność -- procfs

Jeśli proces mający pid $k jest zablokowany w oczekiwaniu na zakończenie procesu w to w katalogu \proc\$k powinien się znaleźć plik waiting_for wewnątrz którego powinna się znaleźć dziesiętna reprezentacja pid'u procesu w. W pozostałych przypadkach plik powinien być pusty lub nie istnieć.

Implementacja tej funkcjonalności jest nieobowiązkowa i będzie traktowana jako trzecie małe zadanie.

Testy

Rozwiązanie będzie testowane w systemie MINIX 3.2.1. Katalog 'src/tst/' zawiera implementację serwera oferującego schowek na liczbę:

  • operacje 'store' i 'retrieve' domyślnie są blokujące,
  • nieblokujące odpowiedniki to 'store_nb' oraz 'retrieve_nb',
  • liczba przechowywana w schowku jest automatycznie usuwana jeśli proces który ją tam złożył kończy działanie (m.in. do tego używany jest testowany server),

Katalog 'Tests/' zawiera kilka testów do uruchamiania z poziomu użytkownika:

  • testy korzystają z serwera 'tst'
  • implementacja automatycznych testów znajduje się w 'tsrc',
  • dla uproszczenia instalacji funkcje dostępu do serwera 'tst' są zaimplementowane w nagłówku 'inc/tst_lib.h',
  • do uruchamiania testów służy skrypt 'test.sh',
    • można mu podać jeden argument który zostanie użyty jako nazwa serwera 'tst' (w 'minix_rs_lookup'),
    • gdy brak argumentu, domyślna nazwa to "tst",
  • warto uruchomić kilka serwerów (opcja '-label' dla 'service') i uruchamiać testy równocześnie na kilku instancjach (nie za wielu bo może braknąć procesów),
  • katalog 'utils' zawiera programy wykonujące pojedyncze operacje (do testowania z konsoli).

Struktura repozytorium

  • src/ odzwierciedla fragment struktury katalogów źródeł systemu MINIX. Fragment ten zawiera niektóre katalogi w których, mogą się znaleźć części implementacji. W celu przetestowania należy skopiować zawartość katalogu src z repozytorium do katalogu /usr/src w MINIX'e. Wskutek tego część plików oryginalnych źródeł zostanie nadpisana. Następnie należy zainstalować include'y, przekompilować i zainstalować odpowiednie biblioteki, nowy serwer oraz dostarczony serwer tst. Aby umożliwić zmiany w podstawowych serwerach systemowych (np. w PM) przed testowaniem zostanie również przekompilowany i zainstalowany obraz systemu. Po restarcie systemu, nowa funkcjonalność powinna działać po uruchomieniu serwera.
  • Tests/ zawiera źródła testów do wywoływania jako użytkownik.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors