H. System UNIX
System plików: Podobieństwa i różnice w budowie systemu plików systemów UNIX i MS DOS (oraz pochodnych). Warstwowa struktura systemu UNIX; rola jądra i powłoki.
Powłoka: Filtry, potoki i trójniki. Ogólne cechy języka powłoki typu sh, struktury sterowania przebiegiem wykonywania poleceń. Skrypty powłoki, klasyfikacja zmiennych, reagowanie na błędy wykonania poleceń.
Procesy: Rola i przykłady sygnałów w systemie UNIX. Wywoływanie sygnałów z poziomu powłoki. Zadania pierwszo- i drugoplanowe. Przegląd zarządzania procesami w systemach UNIX.
Bezpieczeństwo systemu UNIX: Zagrożenia systemu, przedmiot i sposoby ochrony. Zasady postępowania w przypadku stwierdzenia włamania do systemu komputerowego. Ochrona kont użytkowników, danych i oprogramowania, ochrona systemu plików, łączy teleinformatycznych i usług sieciowych.
Cechy charakterystyczne sytemu UNIX:
wielodostępność - liczba użytkowników zależy głównie od mocy obliczeniowej
sprzętu,
wielozadaniowość (wieloprocesowość) - jednostkami aktywnymi w systemie są
pracujące współbieżnie procesy,
hierarchiczny, drzewiasty system plików, z jednolitym potraktowaniem wszystkich
typów plików,
wykonywanie operacji wej / wyj niezależnie od typu urządzenia zewnętrznego,
duża liczba programów narzędziowych, tj. kompilatorów języków programowania,
duża liczba programów usługowych,
przenaszalność oprogramowania dzięki zapisowi w C.
Budowa systemu Unix
System Unix ma budowę warstwową. Centralnym elementem systemu jest sprzęt komputerowy (hardware). Bezpośrednio ze sprzętem komunikuje się jądro systemu (kernel), które pośredniczy pomiędzy urządzeniami komputerowymi a programami. Nad jądrem znajduje się powłoka (shell). Dopiero w shellu możemy uruchamiać programy i skrypty. System Unix umożliwia wykorzystywanie różnych shelli, które różnią się możliwościami, ilością komend, składnią. Najpopularniejsze to standardowy Bourne, rozszerzony Korn, C shell o składni języka C oraz rozpowszechniany z Linuxem shell Bash.
Hardware - sprzęt komputerowy
Kernel - jądro systemu obsługujące:
sprzęt komputerowy (procesor, pamięć, urządzenia zewnętrzne)
procesy wykonywane w systemie (deamons)
hierarchiczny system plików (file system)
Shell - powłoka systemu pośrednicząca pomiędzy użytkownikiem i jądrem, interpretująca polecenia użytkownika:
Bourne Shell
Korn Shell
C Shell
Bash Shell
W jądrze systemu implementuje się wszystkie funkcje, które muszą być traktowane w sposób uprzywilejowany. Jądro odpowiada m.in. za: obsługę przerwań, przydział procesora, operacje wej/wyj. Ponadto w jądrze systemu są implementowane mechanizmy, które tworzą wspomnianą już maszynę wirtualną.
Warstwa zewnętrzna obejmuje procesy użytkowników (można przyjąć, że są to po prostu programy) i moduły systemu operacyjnego nie należące do jądra systemu. Jednym z procesów warstwy zewnętrznej jest POWŁOKA (ang. shell). Powłoka jest jedyną widoczną częścią maszyny wirtualnej.
Funkcje systemowe (ang. system calls) stanowią maszynę wirtualną, ich wywołania są poleceniami dla jądra systemu, np. zainicjowanie nowego procesu, otwarcie pliku. Funkcje systemowe dzielą się na: funkcje systemowe dotyczące procesów i funkcje systemowe dotyczące sytemu plików. Zwykłe polecenia użytkowników są poleceniami dla programu powłoki.
System plików UNIX'a składa się z katalogów o strukturze drzewiastej montowanych na partycjach dyskowych. Do pracy systemu niezbędne są dwie partycje: główna / (korzeń struktury) i tzw. swap (pliki wymiany stanowiące pamięć wirtualną systemu). Standardowe katalogi to:
/bin - narzędzia systemowe
/boot - jądro, loader systemu, mapy pamięci
/dev - pliki urządzeń (dysków, napędów)
/home - katalogi użytkowników
/mnt - tymczasowo montowane systemy plików takie jak /mnt/cdrom
/opt - opcjonalnie zainstalowane oprogramowanie
/root - kartoteka domowa użytkownika specjalnego root
/sbin - standardowe pliki administracyjne systemu
/usr - dodatkowe oprogramowane systemowe i narzędzia administracyjne
/var - pliki dzienników i drukarek
/etc - pliki administracyjne i konfiguracyjne
Model warstwowy systemu Unix
W modelu tym dzieli się system na 4 warstwy:
jądro,
biblioteki,
powłoka
programy.
Jądro
zawiera m.in. program szeregujący oraz sterowniki urządzeń
zarządza pamięcią operacyjną
w nowszych systemach sterowniki rzadziej występujących urządzeń dostepne są w postaci zewnętrznych modułów, które można wybiórczo załadować do jądra -- dzięki temu jego rozmiary są mniejsze
jadro ma bezpośredni dostęp do wszystkich zasobów komputera
Biblioteki
zawierają zestawy podprogramów (zwykle napisanych w języku C), wykonujących różne, często stosowane, operacje (mogą to być np. zestawy funkcji matematycznych, procedury, umożliwiające obsługę monitora czy też operacje na dysku)
biblioteki te są zwykle dołączane do programów na etapie ich konsolidacji (program, np. w języku C, przed uruchomieniem zostaje poddany kompilacji, a następnie konsolidacji)
taka statyczna konsolidacja powoduje, że dana biblioteka jest dołączana do każdego z korzystających z niej programów -- nawet wtedy, gdy uruchamiane są one jednocześnie w systemie; powoduje to znaczną zajętość pamięci operacyjnej
biblioteki współdzielone (ang. shared libraries) składają się z 2 części:
małej, zawierającej jedynie odwołania do biblioteki;
zasadniczej biblioteki, umieszczonej w innym miejscu na dysku, niż korzystający z niej program i wczytywanej do pamięci operacyjnej dopiero w chwili startu samego programu
biblioteki współdzielone umożliwiaja wielu programom korzystanie ze znajdujących się w nich procedur, co wydatnie oszczędza pamięć
inną zaletą bibliotek współdzielonych jest możliwość wymiany starszej wersji biblioteki na nowszą, bez konieczności rekonsolidacji korzystających z niej programów (których może być bardzo dużo)
Powłoka
nazwa pochodzi stąd, że warstwa ta oddziela wewnętrzna część systemu operacyjnego od użytkownika
powłoka zawiera iterpreter poleceń, który umożliwia komunikację z użytkownikiem (jest to odpowiednik programu command.com z DOS'a)
interpreter poleceń uruchamia polecenia systemu operacyjnego oraz programy użytkowe
Programy
procesy uruchamiane przez użytkownika
zarządzane przez program szeregujący jądra
moga być przerwane w dowolnym momencie, np. komendą kill
każdy ma przydzielony odpowiedni obszar pamięci i priorytet
jeśli proces użytkownika próbuje dostać sie do cudzego obszaru pamięci, zostaje przerwany, a system wyświetla komunikat:
segmentation fault
bieżąca zawartość pamięci procesu może zastać zapisana na dysku w pliku o nazwie core (nazwa od słów core dump, czyli zrzut pamięci)
analiza zawartości tego pliku może pomóc programiście w wykryciu przyczyny wystąpienia błędu
Procesy: Rola i przykłady sygnałów w systemie UNIX. Wywoływanie sygnałów z poziomu powłoki. Zadania pierwszo- i drugoplanowe. Przegląd zarządzania procesami w systemach UNIX.
Sygnały są formą komunikacji między procesami w systemie Unix, służącą do obsługi asynchronicznych zdarzeń (tzn. mogących wystąpić w dowolnym czasie działania procesu). Gdy proces otrzymuje sygnał zazwyczaj znaczy to, że nastąpiło zdarzenie, które wymaga od niego natychmiastowej reakcji. Może to być np. zakończenie pracy procesu potomnego lub naciśnięcie przez użytkownika klawisza przerwania.
Mówimy, że sygnał został wygenerowany wtedy, gdy nastąpiło zdarzenie, którego następstwem jest pojawienie się sygnału. Sygnał jest dostarczany do procesu wtedy, gdy proces podejmuje akcję obsługi sygnału. W czasie pomiędzy wygenerowaniem a dostarczeniem, sygnał oczekuje na dostarczenie.
Sygnał może być wygenerowany przez przerwanie z klawiatury, błąd w procesie (w rodzaju złego odniesienia do pamięci) lub za pomocą pewnej liczby zdarzeń asynchronicznych (np. sygnały od czasomierzy lub sygnały sterujące zadaniem pochodzące z powłoki). Prawie każdy sygnał może być też wytworzony za pomocą funkcji systemowej kill.
Rodzaje sygnałów
SIGINT |
|
|
Jest to sygnał przerwania (interrupt). Generowany jest zwykle, kiedy użytkownik naciśnie klawisz przerwania na terminalu. |
SIGQUIT |
|
|
Sygnał generowany zazwyczaj, kiedy użytkownik naciśnie na terminalu klawisz zakończenia pracy. Sygnał SIGQUIT jest podobny do sygnału SIGINT, ale dodatkowo generuje obraz pamięci. |
SIGKILL |
|
|
Wysłanie tego sygnału jest jedynym pewnym sposobem zakończenia procesu, ponieważ proces odbierający ten sygnał nie może go ani zignorować, ani przechwycić. |
SIGTSTP |
|
|
Charakterystyczny dla wersji UNIX-a systemu 4.3BSD. Sygnał wysyłany do procesu po naciśnieciu klawisza zawieszenia (na ogół CRTL+Z) lub klawisza zawieszenia z opóźnieniem (CTRL+Y). Proces zawieszony (zatrzymany), można wznowić sygnałem SIGCONT. |
SIGILL |
|
|
Sygnał ten jest generowany po wystąpieniu wykrywanej sprzętowo sytuacji wyjątkowej, spowodowanej przez niewłaściwą implementację systemu. |
SIGSTOP |
|
|
Charakterystyczny dla wersji UNIX-a systemu 4.3BSD. Sygnał ten zatrzymuje proces. Podobnie jak sygnał SIGKILL nie może zostać zignorowany lub przechwycony. Działanie zatrzymanego procesu można wznowić sygnałem SIGCONT. |
SIGSEGV |
|
|
Sygnał generowany po wystąpieniu błędu sprzętowego spowodowanego przez niewłaściwą implementację systemu. Sygnał naruszenia segmentacji pojawia się na ogół wtedy, kiedy proces odnosi się do takiego adresu w pamięci, do którego nie ma dostępu. |
SIGHUP |
|
|
Kiedy terminal jest zamykany, wtedy do wszystkich procesów, dla których jest on terminalem sterującym, jest wysyłany sygnał zawieszenia (hangup). Sygnał ten jest również wysyłany do wszystkich procesów w grupie procesów wtedy, kiedy zakończy się proces przywódcy grupy. |
SIGALARM |
|
|
Proces może nastawić budzik (alarm clock), wywołując funkcję systemową alarm: |
SIGCHLD |
|
|
Sygnał wysyłany do procesu, kiedy jego potomny proces się skończył. |
SIGUSR1 SIGUSR2 |
|
|
Sygnały SIGUSR1 i SIGUSR2 są dwoma sygnałami definiowanymi przez użytkownika, których można używać do komunikacji między procesami. Jeżeli sygnał służy do komunikacji między procesami, to jedyną informacją dostarczaną procesowi odbierającemu jest rodzaj tego sygnału - proces odbierający nie może otrzymać identyfikatora procesu wysyłającego sygnał. Sygnał nie przenosi żadnej informacji oprócz tej, że się pojawił. Z tego powodu niezbyt często używa się sygnałów do komunikacji między procesami. |
SIGTERM |
|
|
Domyślny sygnał wysyłany przez komendę kill. Wymusza zawieszenie procesu. |