Unix.doc

(2336 KB) Pobierz
Systemy informatyczne - seminarium

 

 

 

SYSTEMY INFORMATYCZNE

 

SEMINARIUM

 

             

 

 

 

System Unix – architektura, funkcje i zastosowania.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Przygotował:                                                                                                  Prowadzący:

Jakub Bernadowski                                                                                    Prof. Dr hab. Leszek Borzemski

III rok Informatyki (SiS)

Wydział Informatyki i Zarządzania

Spis Treści

1 • Historia              3

2 • Podstawy projektu              5

3 • Architektura systemu              7

4 • System plików              9

4.1 System plików od strony użytkownika              10

4.2 System plików od strony jądra              11

5 • System wejścia-wyjścia              13

6 • Zarządzanie procesami              15

6.1 Procesy interakcyjne              15

6.2 Procesy kolejkowane (batch processes)              15

6.3 Demony              16

7 • Planowanie przydziału procesora              16

8 • Interfejs użytkownika              17

8.1 Powłoki i polecenia              18

8.2 Standardowe wejście-wyjście              19

9 • Komunikacja międzyprocesowa              19

9.1 Potoki nienazwane              20

9.2 Potoki nazwane              20

9.3 Gniazda              21

9.4 Sygnały              21

10 • Krótki opis najpopularniejszych usług Unixa.              22

11 • Bezpieczeństwo w systemie Unix              23

12 • Przegląd powszechnie używanych systemów Unixowych              25


1 • Historia

Pierwsza wersja systemu UNIX została opracowana w 1969 r. przez Kena Thompsona z zespołu badawczego Bell Laboratories, aby spożytkować bez­czynną maszynę PDP-7. Do Thompsona dołączył wkrótce Dennis Ritchie. Thompson, Ritchie i inni członkowie tego zespołu opracowali wczesne wersje systemu UNIX.

Ritchie pracował uprzednio nad projektem MULTICS i ten właśnie pro­jekt wywarł silny wpływ na nowy system operacyjny. Nawet nazwa „UNIX" jest kalamburem określenia MULTICS. Podstawowa organizacja systemu plików, pomysł potraktowania interpretera poleceń (powłoki - ang. shell) jako procesu użytkownika, użycie oddzielnego procesu do każdego polecenia, oryginalne znaki redagowania wiersza (# do kasowania ostatniego znaku i @ do kasowania całego wiersza) oraz liczne inne cechy pochodzą wprost z sys­temu MULTICS. Wykorzystano również pomysły z różnych innych syste­mów operacyjnych, jak CTSS z MIT oraz XDS-940.

Ritchie i Thompson pracowali nad systemem UNIX bez rozgłosu przez wiele lat. Praca nad pierwszą wersją systemu pozwoliła im na zaimplementowanie go na komputer PDP-11/20 w postaci wersji drugiej. Trzecia wersja powstała w wyniku przepisania większości systemu operacyjnego na język programowania systemowego o nazwie C, użyty zamiast stosowanego do tej pory asemblera. Język C opracowano w Bell Laboratories w celu zaprogra­mowania systemu UNIX. UNIX został także przeniesiony na większe modele komputera PDP-1l, takie jak 11/45 i 11/70. Podczas przepisywania systemu UNIX na język C oraz w związku z przenoszeniem go na komputery, które oferowały sprzętowe wsparcie wieloprogramowości (takie jak PDP-1l/45), rozszerzono go o wieloprogramowość i inne ulepszenia. Liczba instalacji w Bell Laboratories urosła do około 25 oraz powołano Grupę Użytkowników Unixa (ang. Unix System Group), której zadaniem było wspieranie systemu wewnątrz firmy.

W tym czasie AT&T nie mogło wypuszczać na rynek produktów komputerowych ze względu na podpisanie z rządem federalnym odpowiedniego dekretu w 1956 roku, lecz przekazało Unix uniwersytetom, które potrzebowały systemy do celów dydaktycznych. AT&T nie reklamowało, nie sprzedawało ani nie wspierało systemu w zgodzie z warunkami dekretu. Mimo to jego popularność systematycznie rosła. W 1974 roku Thompson i Ritchie opublikowali w Communications of the ACM artykuł opisujący Unixa, co przysporzyło mu kolejną rzeszę użytkowników. Do 1977 roku liczba instalacji Unixa urosła do około 500, z czego 125 na uniwersytetach. System zyskał popularność w firmach telefonicznych, jako że zapewniał dobre środowisko konstrukcji oprogramowania, usługi realizujące transakcje sieciowe oraz obsługę w czasie rzeczywistym. Licencje Unixa dostarczano zarówno instytucjom komercyjnym, jak i uniwersytetom. W 1977 roku firma Interactive Systems Corporation jako pierwsza zaczęła handlować Unixem rozszerzonym o udogodnienia do automatyzacji prac biurowych. W tym samym roku po raz pierwszy przeniesiono system na komputer inny niż PDP (tzn. zainstalowano go na innym komputerze dokonując tylko niewielu zmian – lub żadnych). Był to Interdata 8/32.

Coraz bardziej rosła popularność mikroprocesorów i coraz więcej firm przenosiło Unix na nowe komputery, a jego prostota i przejrzystość stanowiły pokusę dla implementatorów, którzy usprawniali system na swój sposób, co zaowocowało kilkoma wariantami systemu podstawowego. W okresie od 1977 do 1982 roku Bell Laboratories połączyło kilka wersji pochodzących z AT&T w jeden system, znany komercyjnie jako Unix System III. Nieco później w Bell Laboratories dodano do Systemu III kilka nowych udogodnień, nazwano nowy produkt Unix System V i w styczniu 1983 roku AT&T ogłosiło, że będzie oficjalnie wspierać Unix System V. Tymczasem jedna pracownicy Uniwersytetu Kalifornijskiego w Berkley dodali do Unixa kilka nowych interesujących udogodnień i zaimplementowali nową wersję systemu, której najnowszy wariant dla komputerów VAX nosi nazwę 4.3 BSD.



Historię Unixa przedstawia rysunek 1.

Rysunek 1. Historia Unixa.

 

Do początku 1984 roku na świecie było około 100000 instalacji Unixa, na komputerach o bardzo różnych możliwościach obliczeniowych, od mikroprocesorów do dużych maszyn, i na komputerach reprezentujących najróżniejszych producentów. Żaden inny system nie może się tym poszczycić. Można podać kilka powodów tej popularności i powodzenia systemu Unix Oto one:

·        Jest napisany w języku wysokiego poziomu, dzięki czemu jest zrozumiały, łatwo się go czyta, modyfikuje i przenosi na inne komputery. Ritchie ocenia, że pierwszy system w C był od 20 do 40 procent większy i wolniejszy z tego względu, że nie był napisany w asemblerze, lecz korzyści z zastosowania języka wysokiego poziomu znacznie przeważyły te wady.

·        Ma prosty interfejs, który umożliwia dostarczenie takich usług, jakich potrzebuje użytkownik.

·        Zapewnia narzędzia, które pozwalają na budowanie złożonych programów z prostszych.

·        Korzysta z hierarchicznego systemu plików, który ułatwia pielęgnację i efektywną implementację.

·        Używa spójnego formatu plików, widzianych jako strumienie bajtów, dzięki czemu upraszcza pisanie programów użytkowych.

·        Zapewnia prosty i spójny interfejs z urządzeniami peryferyjnymi.

·        Jest systemem wielodostępnym i wieloprocesowym – każdy użytkownik może wykonywać równocześnie kilka procesów.

·        Zasłania przed użytkownikiem architekturę komputera, dzięki czemu ułatwia pisanie programów, które są wykonywane w różnych środowiskach sprzętowych.

Filozofia prostoty i spójności leży u podstaw Unixa i to właśnie ona jest źródłem wielu z wymienionych cech.

Chociaż system operacyjny i wiele programów realizujących polecenia systemowe są napisane w C, systemy unixowe wspierają także inne języki, w tym Fortran, Basic, Pascal, Adę, Cobol, Lisp i Prolog. Unix może wspierać każdy język, dla którego istnieje kompilator lub interpretator i interfejs systemowy odwzorowujący żądania użytkowników dotyczące usług systemu operacyjnego w standardowy zbiór żądań dostępnych w systemach unixowych.

 

2 • Podstawy projektu

UNIX zaprojektowano jako system z podziałem czasu. Standardowy interfejs użytkownika (powłoka) jest prosty i może być zastąpiony przez inny, stosow­nie do potrzeb. System plików jest wielopoziomowym drzewem, w którym użytkownicy mają prawo tworzyć własne podkatalogi. Pliki danych każdego użytkownika są po prostu ciągami bajtów.

Pliki dyskowe i urządzenia wejścia-wyjścia są traktowane możliwie jed­nolicie. Toteż osobliwości i szczegóły związane z urządzeniami są tak dalece, jak tylko jest to możliwe, zawarte w jądrze systemu, przy czym nawet w ją­drze większość z nich zamknięto w modułach obsługi urządzeń.

UNIX umożliwia wieloprocesowość. Proces może łatwo tworzyć nowe procesy. Planowanie przydziału procesora jest prostym algorytmem prioryte­towym. W systemie 4.3BSD zastosowano stronicowanie na żądanie jako me­chanizm wspierający zarządzanie pamięcią i podejmowanie decyzji o przy­dziale procesora. Jeśli systemowi zaczyna doskwierać nadmierne zastępowa­nie stron, to stosuje się algorytm wymiany.

Ponieważ system UNIX na początku miał służyć wygodzie jednego pro­gramisty, Kena Thompsona, do którego dołączył potem drugi - Dennis Ritchie, więc jest to system wystarczająco mały, aby można go było zrozumieć. W doborze większości algorytmów kierowano się prostotą, a nie szybkością lub wyrafinowaniem. Zamiar polegał na uzyskaniu jądra i bibliotek dających mały zbiór właściwości, lecz wystarczająco mocny, aby zainteresowani mogli zbudować na tej podstawie bardziej złożony system, gdyby powstała taka konieczność. Przejrzysty projekt systemu UNIX zaowocował wieloma naśladownictwami i modyfikacjami.

Chociaż projektanci systemu UNIX mieli sporą wiedzę o innych syste­mach operacyjnych, jego implementacji nie poprzedziło opracowanie staran­nie wyartykułowanego projektu. Ta elastyczność okazała się jednym z klu­czowych czynników w rozwoju systemu. Przyjęto jednak pewne założenia projektowe, chociaż nie zostały one wypowiedziane na początku.

UNIX został zaprojektowany przez programistów dla programistów. W związku z tym od początku był systemem interakcyjnym. Udogodnieniom do opracowywania programów nadawano zawsze wysoką rangę. Do udogod­nień takich należy np. program make (można go używać do sprawdzania, które pliki ze zbioru plików źródłowych programu należy skompilować, a następnie do powodowania ich kompilacji).

Większość kodu systemu operacyjnego UNIX jest napisana w języku C, który opracowano specjalnie w tym celu, ponieważ ani Thompson, ani Ritchie nie lubili programować w asemblerze. Unikanie asemblera było rów­nież konieczne ze względu na niepewność co do maszyny lub maszyn, na których UNIX miał pracować. Ułatwiło to wielce problem przenoszenia opro­gramowania UNIX z jednego systemu sprzętowego na inne.

Opracowywane systemy UNIX od samego początku były dostępne bez­pośrednio w postaci źródłowej, a ich twórcy mieli za podstawę działania systemy nie całkiem ukończone. Ten schemat postępowania znacznie uła­twiał tropienie i usuwanie niedociągnięć, jak również odkrywanie nowych możliwości i ich implementowanie. Doprowadziło to także do istniejącego obecnie nadmiaru wariantów systemu UNIX. Jednak zalety przeważyły wady: jeśli coś było nie w porządku, to można było to naprawić na lokal­nym stanowisku, bez konieczności czekania na następne wydanie systemu. Poprawki takie, a także nowe udogodnienia można było włączyć do później upowszechnianych wersji.

Ograniczone możliwości komputera PDP-11 (i wcześniejszych kompute­rów używanych przez UNIX) wymusiły pewną elegancję. Podczas gdy inne systemy mają wyszukane algorytmy postępowania w warunkach patologicz­nych, system UNIX wykonuje po prostu kontrolowane załamanie, zwane paniką (ang. panic). Zamiast usiłować naprawiać takie sytuacje, UNIX pró­buje im zapobiegać. Tam gdzie w innych systemach zastosowano brutalne metody lub rozwijanie makrowywołań, w systemie UNIX musiano postąpić znacznie subtelniej lub przynajmniej prościej.

Te wczesne zalety systemu UNIX przysporzyły mu popularności, która z kolei - rodząc nowe zapotrzebowania - wystawiła zalety te na próby. UNIX używano do zadań takich, jak organizacja pracy w sieciach, grafika i operacje w czasie rzeczywistym. Zastosowania te nie zawsze pasowały do oryginalne­go, ukierunkowanego tekstowo modelu systemu UNIX. Wykonano więc ko­lejne zmiany pewnych właściwości wewnętrznych i pododawano nowe inter­fejsy programowe. Te nowe udogodnienia i inne interfejsy - zwłaszcza do pracy w systemie okien - wymagały wielkich ilości kodu, co radykalnie zwiększyło rozmiary systemu. Na przykład zarówno praca sieciowa, jak i systemy okien podwoiły rozmiar systemu. Z kolei ta sytuacja ukazała nie­ustającą siłę systemu UNIX. Gdy tylko w przemyśle pojawiało się nowe roz­wiązanie, system UNIX z reguły wchłaniał je, wciąż pozostając sobą.

 

 

3 • Architektura systemu

Podobnie jak większość systemów operacyjnych, UNIX składa się z dwu oddzielnych części: jądra i programów systemowych. Większość programów sys­temowych napisano w języku C, a dokumentacja pt. UNIX Programmer's Manual zawiera wszystkie funkcje systemowe w postaci funkcji języka C. Program systemowy napisany w języku C dla wersji 4.3BSD na komputerze VAX może być na ogół przeniesiony do innego systemu 4.3BSD i po prostu skompilowany, nawet jeśli te dwa systemy różnią się zasadniczo między sobą. Szczegóły odwołań do systemu są znane tylko kompilatorowi. Ta właściwość jest podstawowym źródłem przenośności programów systemu UNIX.

Na system operacyjny UNIX można patrzeć jak na system złożony z warstw, jak na rys. 2. Wszystko to, co znajduje się poniżej interfejsu funkcji systemowych i powy­żej sprzętu fizycznego, tworzy jądro. W jądrze jest zrealizowany system pli­ków, planowanie przydziału procesora, zarządzanie pamięcią i inne funkcje systemu operacyjnego, do których dostęp odbywa się za pomocą wywołań systemowych. W realizacji swoich działań, takich jak kompi­lowanie lub manipulowanie plikami, programy systemowe wspierają się od­wołaniami do procedur jądra.

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rysunek 2. Diagram blokowy systemu Unix.

 

Wywołania systemowe określają interfejs programisty systemu UNIX. Zbiór ogólnie dostępnych programów systemowych definiuje interfejs użyt­kownika. Oba interfejsy definiują kontekst realizowany przez jądro. Jądro wykonuje różne operacje podstawowe w imieniu procesów użytkownika, wspierając w ten sposób interfejs użytkownika. Oto zestaw usług dostarczanych przez jądro:

·        Sterowanie wykonaniem procesów, przez umożliwienie ich tworzenia, kończenia, zawieszania i komunikowania się.

·        Sprawiedliwe szeregowanie procesów ubiegających się o czas centralnego procesora. Procesy korzystają z CPU na zasadzie podziału czasu – CPU wykonuje proces, jądro zawiesza go po upływie kwantu czasu i wybiera do wykonania inny, później wznawia wykonanie zawieszonego procesu.

·        Przydzielanie wykonywanemu procesowi pamięci głównej. Jądro pod pewnymi warunkami umożliwia procesom współdzielenie części ich przestrzeni adresowej, lecz chroni prywatną część przestrzeni adresowej procesu przed niepowołanym dostępem z zewnątrz. Kiedy systemowi zaczyna brakować pamięci, jądro zwalnia pamięć przepisując proces czasowo do pamięci pomocniczej, zwanej urządzeniem do realizacji wymiany (ang. swap device). Jeśli jądro wysyła całe procesy na urządzenie pomocnicze to implementację Unixa nazywa się systemem z wymianą   (ang. swapping system) Jeśli zaś zapisuje strony pamięci, to nazywa się ją systemem stronicującym.

·        Przydzielanie pamięci pomocniczej na efektywne przechowywanie i odczytywanie danych użytkowych. Ta usługa obejmuje system plików. Jądro przydziela pamięć...

Zgłoś jeśli naruszono regulamin