UNIX, Linux - kurs

W tym post-cie, opiszę teoretycznie system UNIX.
Jest to pierwsza część na moim blogu dotycząca teorii systemów operacyjnych.
W kolejnych częściach opiszę: system plików UNIX-a, powłokę UNIX-a, jądro UNIX-a oraz funkcje systemowe związane z procesami na bazie UNIX-a.

Uwaga - materiał pochodzi z mojej skarbnicy wiedzy zgromadzonej podczas studiów na UAM w Poznaniu na przełomie lata 1999-2002 i wtedy też był redagowany. Stanowi doskonałe teoretyczne uzupełnienie wiedzy dla studentów kierunku informatyka.

Proszę traktować tego posta, jako opis systemu operacyjnego UNIX bez podziału na wersje i rodzaje. Tam gdzie jest potrzeba wyraźnie zaznaczam jakiej wersji i jakiego rodzaju systemu operacyjnego UNIX-a dotyczy opis.


Materiał bazuje na książkach:
1. Podstawy systemów operacyjnych - wydawnictwo WNT, autorzy: Abraham Silberschatz i Peter B. Galvin
2. System operacyjny UNIX dla początkujących i zaawansowanych - wydawnictwo BUM, autorzy: Zbyszko Królikowski i Michał Sajkowski

Według mnie najlepsza książka dla osób rozpoczynajacych przygodę z systemem operacyjnym UNIX zarówno pod względem praktycznym jak i teoretycznym dla administratorów i programistów.



Twórcami systemu są Ken Thompson i Dennis Ritchie pracujący w Bell Laboratories.

Trzy główne wersje systemu:
 - UNIX System V Release 4,
 - 4.4 BSD (University of California w Berkeley),
 - Solaris (SunOs).

Charakterystyczne cechy systemu UNIX:
 - wielodostępność,
 - wieloprocesowość (wielozadaniowość),
 - hierarchiczny system plików, z jednolitym potraktowaniem plików zwykłych, katalogów i plików opisujących urządzenia zewnętrzne,
 - duża liczba programów narzędziowych,
 - duża liczba programów usługowych,
 - przenośność oprogramowania systemowego dzięki zapisowi w języku C,
 - wykonywanie operacji wejścia/wyjścia niezależnie od typu urządzeń zewnętrznych,
 - warstwowa budowa systemu.

Każdy system operacyjny ma wyodrębnioną część, która realizuje jego najbardziej podstawowe funkcję. Część tę nazywa się jądrem systemu (warstwą wewnętrzną). Zwykle warstwa zewnętrzna obejmuje procesy użytkowników. Każdej akcji wykonanej poza jądrem odpowiada pewien proces. Wśród procesów warstwy zewnętrznej specjalną rolę odgrywa tzw. powłoka (shell), Jest to proces odpowiadający za konwersację z użytkownikiem, tzn. interpretujący polecenia wprowadzane z klawiatury terminalu.

Przykładowa struktura systemu operacyjnego UNIX:

[Rysunek jest w całości mojego autorstwa, bazuje częściowo na rysunku z książki, pt.: "System operacyjny UNIX dla początkujących i zaawansowanych" - Autorzy: Zbyszko Królikowski i Michał Sajkowski - str 10.]

Najważniejsze funkcje jądra:
 - zarządzanie procesami (szeregowanie, synchronizacja),
 - zarządzanie pamięcią,
 - obsługa urządzeń I/O,
 - obsługa systemu plików,
 - obsługa przerwań,
 - przydział procesora,
 - rozdzielenie zasobów.

Najważniejsze usługi świadczone przez jądro:
 - zarządzanie procesami,
 - zarządzanie pamięcią,
 - zarządzanie plikami,
 - obsługa urządzeń I/O.

Proces składa się z:
 - wykonywanego programu,
 - danych,
 - stosu i wskaźnika stosu,
 - licznika rozkazów, i innych rejestrów oraz innych informacji niezbędnych do wykonywania programu.

Jeżeli system pracuje w trybie podziału czasu, to proces może być czasowo zawieszony, a później restartowany w tym samym stanie, jak przed zawieszeniem. W większości systemów operacyjnych wszystkie informację o każdym procesie są przechowywane w tablicy procesów. Tak więc proces składa się z przestrzeni adresowej (nazywanej często obrazem pamięci) oraz z zapisów w tablicy procesów (są to przede wszystkim zawartości rejestrów procesora). Procesem, który czyta zlecenia z terminalu, jest powłoka. Z procesami związane są sygnały (signal). Sygnały są programowym odpowiednikiem przerwań na poziomie sprzętu. Hierarchia procesów i plików jest zorganizowana w postaci drzewa (hierarchia procesów nie jest głęboka (do trzech poziomów) i zazwyczaj jest krótkotrwała). System operacyjny UNIX nie pozwala, aby ścieżka była poprzedzona nazwą lub numerem napędu dyskowego. Tak, więc aby móc wykorzystać w systemie katalog znajdujący się na dyskietce, należy najpierw przyłączyć go do katalogu korzenia, który zazwyczaj znajduje się na dysku twardym. Pliki i katalogi w systemie UNIX są chronione 9-bitowym katalogiem ochronnym. Jeśli dostęp do pliku jest dozwolony, system wysyła do procesu deskryptor pliku, wykorzystywany w kolejnych operacjach. W systemie UNIX wyróżniono tak zwane pliki specjalne. Pozwalają one na widzenie urządzeń I/O tak, jakby to były zwykłe pliki. W ten sposób operacje zapisu i odczytu z tych urządzeń mogą być wykonywane w wykorzystaniem tych samych wywołań systemowych, które dotyczą zapisu i odczytu plików.