Systemy operacyjne
|
1. Prosty interpreter poleceń [10p]
Zaprojektuj i zaimplementuj prosty interpreter poleceń. Interpreter
pobiera ze standardowego wejścia pojedynczy wiersz. Nastepnie dokonuje
prostej analizy wiersza dzieląc go na słowa separowane spacjami.
Pierwsze słowo jest nazwą programu który należy uruchomić
(wykorzystując zmienną PATH), a pozostałe są argumentami. Shell
uruchamia program i standardowo czeka na zakończenie jego pracy, chyba
że ostatnim słowem jest znak & co powoduje uruchomienie programu w
tle, jak w normalnym shellu bash. Shell kończy pracę gdy otrzyma znak
końca pliku. Dzięki temu mozliwe jest przygotowanie prostych skryptów,
które można uruchamiać z wiersza poleceń bash-a, jeżeli pierwsza linia
skryptu ma postać #!/home/student/moj_shell (gdzie po ! podaje
się scieżkę do programu shella). Dodatkowe opcje to: a) [6p] możliwość przekierowania standardowego wyjścia polecenia przy pomocy >> b) [9p] możliwość tworzenia potoków o dowolnej długości przy pomocy znaku | c) [9p] historia poleceń - shell przechowuje (w zewnętrznym pliku w katalogu domowym użytkownika - tak że historia powinna "przetrwać" zakończenie shella) dokładną treść 20 poleceń, a wysłanie sygnału SIGBRK powoduje wyświetlenie historii na standardowym wyjściu - uwaga na niuanse związane z obsługą sygnałów !!! Uwaga: Jako minimum, oprócz części podstawowej, projekt powinien mieć zrealizowany jeden z punktów a)-c) |
2. [12p] Demon synchronizujący dwa
podkatalogi: Program który otrzymuje co najmniej dwa argumenty:
scieżkę źródłową scieżkę docelową . Jeżeli któraś ze ścieżek nie jest
katalogiem program powraca natychmiast z komunikatem błędu. W
przeciwnym wypadku staje się demonem. Demon wykonuje następujęce
czynności: śpi przez pięć minut (czas spania można zmieniać przy pomocy
dodatkowego opcjonalnego argumentu), po czym po obudzeniu się porównuje
katalog źródłowy z katalogiem docelowym. Pozycje które nie są zwykłymi
plikami są ignorowane (np. katalogi i dowiązania symboliczne). Jeżeli
demon (a) napotka na nowy plik w katalogu źródłowym, i tego pliku
brak w katalogu docelowym lub (b) plik w katalogu docelowym ma
późniejszą datę ostatniej modyfikacji demon wykonuje kopię pliku
z katalogu źródłowego do katalogu docelowego - ustawiając w
katalogu docelowym datę modyfikacji tak aby przy kolenym obudzeniu nie
trzeba było wykonać kopii (chyba ze plik w katalogu źródłowym
zostanie ponownie zmieniony). Jeżeli zaś odnajdzie plik w katalogu
docelowym, którego nie ma w katalogu źródłowym to usuwa ten plik z
katalogu docelowego. Możliwe jest również natychmiastowe obudzenie się
demona poprzez wysłanie mu sygnału SIGUSR1. Wyczerpująca informacja o
każdej akcji typu uśpienie/obudzenie się demona (naturalne lub w wyniku
sygnału), wykonanie kopii lub usunięcie pliku jest przesłana do logu
systemowego. Informacja ta powinna zawierać aktualną datę. a) [10p.] Dodatkowa opcja -R pozwalająca na rekurencyjną synchronizację katalogów (teraz pozycje będące katalogami nie są ignorowane). W szczególności jeżeli demon stwierdzi w katalogu docelowym podkatalog którego brak w katalogu źródłowym powinien usunąć go wraz z zawartością. b) [2p.] W zależności od rozmiaru plików dla małych plików wykonywane jest kopiowanie przy pomocy read/write a w przypadku dużych przy pomocy mmap/write (plik źródłowy) zostaje zamapowany w całości w pamięci. Próg dzielący pliki małe od dużych może być przekazywany jako opcjonalny argument. Uwagi: (a) Wszelkie operacje na plikach należy wykonywać przy pomocy API Linuksa a nie standardowej biblioteki języka C (b) kopiowanie za każdym obudzeniem całego drzewa katalgów zostanie potraktowane jako poważny błąd (c) podobnie jak przezucenie części zadań na shell systemowy (funkcja system). |
Uwagi:
2.) Odbiór projektu polega na dostarczeniu kodu źródłowego (płytka CD) + raportu na papierze (razem z płytką w koszulce foliowej) zawierającego: a)
Dane wykonawców i prowadzącego + treść zadania, d) Opis najważniejszych modułów (funkcji i zmiennych globalnych) 3.) Kary: za beznadziejny styl programowania max: -5p. za niekompletność punktów c) d) dokumentacji -4p. Na ostateczną liczbę punktów bardzo duży wpływ będzie miała rozmowa, która zostanie w późniejszym terminie przeprowadzona z zespołem realizującym projekt. |
Opracował:
Wojciech Kwedlo |