UNIX, Linux powłoka (shell) - kurs

W tym post-cie, opiszę teoretycznie powłokę UNIX-a.
Jest to trzecia część na moim blogu dotycząca teorii systemów operacyjnych.
W kolejnych częściach opiszę: jądro UNIX-a oraz funkcje systemowe związane z procesami na bazie UNIX-a.
W części pierwszej opisałem: wstęp do UNIX-a.
W części drugiej opisałem: system plików 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.



Po zarejestrowaniu się użytkownik ma dostęp do sytemu poprzez interpretator poleceń nazwany powłoką (shell). Może uruchomić własne programy, aplikacje bądź ogólnie dostępne programy systemowe.

Użytkownik, powłoka a jądro systemu:

[Rysunek jest przerysowny osobiście prze zemnie, część oryginalna znajduje się w książce, pt.: "System operacyjny UNIX dla początkujących i zaawansowanych" - Autorzy: Zbyszko Królikowski i Michał Sajkowski - str 73.]

Powłoka w systemie UNIX zapewnia komunikację między użytkownikami a systemem. Jest ona w stosunku do jądra zwykłym programem aplikacyjnym, w związku z tym nie rezyduje na stałe w pamięci operacyjnej, a często bywa dopasowywana do potrzeb użytkowników. W systemie są zazwyczaj dostępne dwie wersje powłoki Bourne Shell oraz U.C. Berkeley C Shell. Powłoka jest inicjowana automatycznie po zarejestrowaniu się użytkownika w systemie. Skoro jest to zwykły program aplikacyjny, to jego nowy egzemplarz może uruchomić w dowolnej chwili poleceniem sh. Innymi słowy, polecenie sh uruchamia nowy proces interpretatora czytając dane z klawiatury. Wszystkie następne polecenia są kierowane do sytemu operacyjnego przez powłokę. Powłoka przejmuje polecenia od użytkownika, dekoduje je i przekazuje do jądra w celu wykonania.

Pracę powłoki można przedstawić algorytmicznie jako ciąg następujących czynności:
 - wysłanie znaku gotowości ($) na terminal,
 - przyjęcie polecenia od użytkownika,
 - zdekodowanie polecenia i odszukanie w katalogach odpowiedniego mu programu,
 - przekazanie polecenia do jądra w celu utworzenia odpowiedniego procesu (lub procesów) realizujące polecenie i oczekujące na jego zakończenie,
 - przyjęcie odpowiedzi od jądra i przekazanie tych wyników użytkownikowi,
 - powrót do punktu pierwszego.

Czynności te wykonuje się w pętli aż do napotkania przez powłokę znaku ctrl-d wprowadzonego z klawiatury. Powłoka zleca wówczas jądru zamknięcie sesji użytkownika.

Ponieważ powłoka traktuje nazwę polecenia jako nazwę programu, to jest ona wyszukiwana w katalogach, na ogół w następującej kolejności:
1) katalog bieżący użytkownika
2) katalog /bin
3) katalog /usr/bin.

Nazwa polecenia musi pojawić się w jednym z katalogów jako nazwa pliku zwykłego, w stosunku do którego użytkownik ma prawo wykonania. Dzięki temu można uniknąć podawania za każdym razem pełnej nazwy ścieżkowej pliku zapisanego w jednym z katalogów przeszukiwanych automatycznie. Powłoka systemu UNIX pozwala na szereg udogodnień w pracy użytkownika z systemem. Przeadresowywanie wejścia/wyjścia polega na zamianie standartowych urządzeń wprowadzania i wyprowadzania informacji na inne wygodne dla użytkownika. Każdemu procesowi w chwili uruchomienia przypisuje się automatyczne standardowy strumień wejściowy i wyjściowy. Normalnie są one dołączone odpowiednio do klawiatury i ekranu terminalu. Większość programów wypisujących informację wypisuje je do standardowego strumienia wejściowego. Użytkownik nie musi więc podawać, gdzie należy kierować wyniki.  Kierunki wprowadzania i wyprowadzania są oznaczone odpowiednio znakami "<" i ">". Przetwarzanie potokowe - powłoka umożliwia tworzenie łączy komunikacji między procesami i tworzy tzw. potok (pipeline). Łącza kierują wyniki jednego programu do wejścia drugiego. Dla jednego programu łącze stanowi plik wyjściowy, dla drugiego - plik wejściowy. Łącze przedstawia się jako "|". Tak więc przetwarzanie potokowe to bezpośrednie przekazanie danych z jednego programu usługowego do drugiego. Innymi słowy, łącze tworzy się wiążąc bezpośrednio standardowy strumień wyjściowy procesu ze standardowym strumieniem wejściowym następnego, bez żadnego fizycznego pliku pośredniego (np. who | lp - to żądanie wykonania potoku składa się z dwóch procesów, po zdefiniowaniu potoku jądro natychmiast uruchamia oba procesy. W tak skonstruowanym potoku wyniki programu who są przekazywane do programu lp od razu po ich pojawieniu się, bez czekania na zakończenie pracy pierwszego programu.). Wieloprogramowość - system operacyjny UNIX jest systemem wieloprogramowym, to znaczy takim, który pozwala użytkownikom na współbieżne wykonywanie w danej chwili wielu programów (właściwie należy mówić o współbieżnej pracy procesów wykonujących programy, bowiem w systemie UNIX odróżnia się proces, czyli obiekt dynamiczny tworzony przez system, od wykonywanego przez proces programu, czyli obiektu statycznego, zapisanego jako plik).