1
Systemy operacyjne i sieci
komputerowe
Prowadzący:
mgr inż. Łukasz
Tabała
Semestr III
2
System komputerowy
SYSTEMEM KOMPUTEROWYM –
nazywamy połączenie komputera z
systemem operacyjnym. System
taki ma budowę warstwową i
składa się z:
a) użytkowników
b) aplikacji
c) systemu operacyjnego
d) sterowników
e) sprzętu komputerowego
f) dodatkowo mikroprocesora,
napędów i pamięci masowych,
urządzeń peryferyjnych, karty
rozszerzeń oraz pamięci
operacyjnej.
3
System operacyjny
SYSTEM OPERACYJNY jest programem, który działa
jako pośrednik między użytkownikiem komputera a
sprzętem komputerowym. Zadaniem systemu
operacyjnego jest tworzenie środowiska, w którym
użytkownik może wykonywać programy. Podstawowym
celem systemu operacyjnego jest zatem
spowodowanie,
aby system komputerowy był ‘wygodny’ w użyciu.
Drugi
cel stanowi wydajna eksploatacja sprzętu
komputerowego.
4
System operacyjny c.d.
System operacyjny nadzoruje i koordynuje posługiwanie się sprzętem przez
różne programy użytkowe, które pracują na zlecenie różnych użytkowników.
Częściami składowymi systemu komputerowego są: sprzęt, oprogramowanie
i dane. System operacyjny dostarcza środków do prawidłowego użycia tych
zasobów w działającym systemie komputerowym. System operacyjny tworzy
środowisko, w którym inne programy mogą wykonywać pożyteczne prace.
Możemy uważać system operacyjny za dystrybutora zasobów. System
operacyjny pełni rolę zarządcy pozostałymi elementami systemu
komputerowego i przydziela je poszczególnym programom i użytkownikom
wówczas, gdy są one nieodzowne do wykonywania ich zadań. Ponieważ
często może dochodzić do konfliktowych zamówień na zasoby, system
operacyjny musi decydować o przydziale zasobów poszczególnym
zamawiającym, mając na względzie wydajne i harmonijne działanie całego
systemu komputerowego. System operacyjny jest programem sterującym.
Program sterujący nadzoruje działanie programów użytkownika,
przeciwdziała błędom i zapobiega niewłaściwemu użyciu komputera. Zajmuje
się zwłaszcza obsługiwaniem i kontrolowaniem pracy urządzeń we-wy.
Najważniejszym celem systemu operacyjnego jest wygoda użytkownika.
Drugim celem jest efektywne działanie systemu komputerowego. Ten cel jest
szczególnie ważny w rozbudowanych, wielodostępnych systemach z
podziałem czasu. Systemy tego rodzaju są zazwyczaj bardzo kosztowne,
toteż jest pożądane, aby były maksymalnie wydajne.
5
Wielodostępność
W klasycznym przetwarzaniu danych komputer centralny
(ang.mainframe) wykonuje żądane zadania. Łącza szeregowe
dołączają do tego komputera terminale tekstowe (proste tekstowe
konsole z klawiaturami). Wielu użytkownikom, korzystającym z
jednego komputera centralnego, jest potrzebny system kontroli i
dostępu, aby osiągnąć sprawiedliwy podział wspólnych zasobów.
Nazwy użytkowników, znane także jako identyfikatory
użytkowników, tworzą podstawę takiego systemu. Każdy
użytkownik ma przypisany identyfikator, który musi podać
systemowi wraz ze związanym z nim hasłem (ang. Password),
zgodnie z procedurą zwaną rejestrowaniem się (logowaniem) w
systemie. Na podstawie identyfikatorów użytkowników i
związanych z nimi praw dostępu (ang. Access privileges) lub
uprawnień (ang. Permissions) system zarządza dostępem do
plików i innych zasobów. System, który zapewnia taki sposób
zarządzania wieloma użytkownikami, nazywa się systemem
wielodostępnym.
6
Wielodostępność c.d.
Unix/Linux jest typowym systemem wielodostępnym, w którym
każdemu użytkownikowi jest przydzielany identyfikator oraz jeden
lub więcej identyfikatorów grup. Użytkownik może jednocześnie
należeć do wielu grup. Jest to praktyczne, jeśli angażuje się on w
wiele projektów albo musi mieć dostęp do danych z wielu dziedzin.
Każdy system wielodostępny ma jednego uprzywilejowanego
użytkownika, który administruje system. Użytkownik ten nazywa się
administratorem lub nadzorcą systemu (ang. Superuser). W
systemie Unix/Linux ten uprzywilejowany użytkownik ma nazwę
root i numeryczny identyfikator 0. Administrator może tworzyć
nowych użytkowników oraz nadawać uprawnienia. Obecnie zamiast
komputera centralnego z wieloma terminalami i użytkownikami
pojawia się sytuacja gdzie, pojedynczy użytkownik intensywnie
wykorzystuje jeden lub więcej komputerów. Komputery te są
połączone między sobą oraz z innymi komputerami i serwerami
siecią, co pozwala na łatwą wymianę danych. Tendencje do
wykorzystywania wielu komputerów w tym samym czasie przez
jednego użytkownika w celu umożliwienia jednoczesnego dostępu
do różnych programów i danych prowadzi do korzystania z
terminali wirtualnych (ang. Virtual terminals). Pozwalają one
użytkownikowi logować się w tym samym komputerze wielokrotnie,
mimo iż fizycznie ma dostępny tylko jeden monitor.
7
Wielozadaniowość
Pod pojęciem wielozadaniowości (multitasking)
rozumieć należy quasi-równoległe wykonywanie
więcej niż jednej aplikacji . Ponieważ jednak procesor
w rzeczywistości nie jest w stanie wykonywać
równocześnie wielu zadań , w bardzo krótkich
odstępach czasu wykonuje on kolejno po fragmencie
każdego z uruchomionych właśnie programów.
Najmniejsza jednostka, która może być obsługiwana
równolegle w takim systemie, jest nazywana
procesem ( ang. Process) bądź zadaniem (ang.
Task). W systemie Unix/Linux, który jest
jednocześnie systemem wielodostępnym i
wielozadaniowym, mówimy ogólnie o procesach.
Procesy wykonujące się równolegle w tym systemie
mogą być programami różnych użytkowników albo
programami zawsze działającymi w tle (demonami).
8
Zarządzanie procesami
Pod pojęciem zarządzania procesami rozumiemy
tworzenie, usuwanie, wstrzymywanie i wznawianie
procesów. System operacyjny dostarczać również musi
mechanizmy umożliwiające komunikację pomiędzy
poszczególnymi procesami, jak również obsługę
zakleszczeń (blokad).
Definicja procesu.
Proces – program w trakcie wykonywania.
Proces jest pojęciem aktywnym (w trakcie działania),
natomiast program jest pojęciem pasywnym (zapis
pewnych rozkazów na nośniku danych).
Wykonywanie procesu musi przebiegać sekwencyjnie,
co oznacza, że w danym momencie na zamówienie
procesu może być wykonany tylko jeden rozkaz kodu
programu.
9
Zarządzanie procesami cd.
Proces może znajdować się w jednym z pięciu stanów działania:
- nowy - to taki który został właśnie utworzony,
- aktywny - to ten którego instrukcje są aktualnie przetwarzanie przez procesor,
- oczekiwanie - proces oczekuje na wystąpienie jakiegoś zdarzenia np. ukończenie
operacji wejścia-wyjścia (wpisanie danych z klawiatury, zakończenie odczytu pliku z
dysku, zakończenie wydruku), lub oczekuje pewnych danych, które będą dostępne
po zakończeniu działania innego procesu np. wynik obliczeń,
- gotowy - proces który oczekuje na przydział czasu procesora,
- zakończony - to taki którego działanie zakończyło się.
Ważne jest, aby pamiętać, że systemie jednoprocesorowym tylko jeden proces może
być aktywny, natomiast wiele procesów może być w stanie oczekiwania lub gotowy.
W systemie jednoprocesorowym mechanizm wielozadaniowości (podział czasu
procesora) uzyskuje się dzięki przełączaniu wykonywania procesów przez procesor.
Przełączanie to następuje tak często, że użytkownik ma złudzenie pracy z kilkoma
programami jednocześnie.
Aby maksymalnie wykorzystać czas pracy procesora, system operacyjny stara się
tak zarządzać pracą procesów, aby w momencie kiedy aktywny proces (który może
być tylko jeden w systemie jednoprocesorowym) musi oczekiwać na jakieś zdarzenie
(np. operacje wyjścia-wejścia), przełącza się go w stan „oczekiwanie”, a aktywuje
się inny proces z kolejki procesów oczekujących na przydział pracy procesora. W ten
sposób nie marnuje się czasu pracy jednostki centralnej. Mechanizm ten jest
podstawą wielozadaniowości i zwany jest wieloprogramowaniem.
10
Zarządzanie pamięcią
operacyjną
Pamięć odgrywa główną rolę w działaniu współczesnych systemów
komputerowych. Pamięć operacyjne jest tablicą słów lub bajtów, z
których każdy ma przypisany konkretny adres. Pamięć operacyjne jest
jedynym typem pamięci, który może być adresowany przez system
bezpośrednio, wszystkie inne operacje (jak np. czytanie, czy zapis na
dysk, wykonywanie rozkazów procesu) przebiegają z wykorzystaniem
pamięci operacyjnej. Aby program był wykonany musi on zostać
pobrany z dysku i zapisany do pamięci operacyjnej, dopiero wtedy
możliwe jest uruchomienie i wykonanie rozkazów programu (procesu).
Główne zadania systemu operacyjnego dotyczące zarządzania
pamięcią operacyjną to:
- ewidencja zajętych obszarów pamięci, wraz z informacją który
proces jest w posiadaniu tych obszarów,
- decydowanie które procesy czy dane mają być załadowany do
wolnych obszarów pamięci,
- przydzielanie i zwalnianie obszarów pamięci stosownie do
aktualnych potrzeb systemu komputerowego.
11
Zarządzanie pamięcią
zewnętrzną
Pamięć zewnętrzna jest głównym źródłem magazynowania
danych dla współczesnych systemów komputerowych.
Ponieważ pamięć operacyjna jest z reguły bardzo ograniczona
(pojemnościowo), dlatego do składowania danych używa się
pamięci zewnętrznych. Są one z reguły dużo wolniejsze niż
pamięć operacyjna, jednakże mają tę zaletę, że w przeciwności
do pamięci operacyjnej dane w niej zapisane nie „giną” po
wyłączeniu/zaniku napięcia.
Główne zadania systemu operacyjnego odnośnie zarządzania
pamięcią zewnętrzną to:
- utrzymywanie informacja na temat obszarów wolnych w
dostępnej pamięci zewnętrznej,
- przydzielanie i zwalnianie obszarów tej pamięci,
- kontrola stanu funkcjonowania pamięci zewnętrznej (błędy
zapisu/odczytu).
12
Zarządzanie plikami
Dla wygody użytkownika, system operacyjny realizuje abstrakcyjny model
plików, tworząc, niezależnie od typu pamięci zewnętrznej, jednolity
systemów plików i katalogów do przechowywanie danych. Każdy z nośników
posiada specyficzne cechy (niektóre również różną strukturę), więc
bezpośredni dostęp do tych urządzeń byłby utrudniony. Dlatego system
operacyjny przejmuje nad nimi kontrolę i komunikuje się z tymi
urządzeniami przy pomocy sterowników – z jednej strony, z drugiej
udostępniając użytkownikom strukturę plików i katalogów. SYSTEM
PLIKÓW – tworzy organizację danych i pozwala z nich korzystać w sposób
wygodny dla użytkownika.
Najważniejsze zadania systemu operacyjnego w związku z zarządzaniem
plikami to:
- tworzenie i usuwanie plików i katalogów,
- umożliwianie wykonywania podstawowych operacji na plikach i katalogach
(edycja, kopiowanie, usuwanie, tworzenie, archiwizacja, pakowanie),
- odwzorowywanie plików na obszarze pamięci zewnętrznej,
- składowanie (zapis) plików na nośnikach pamięci zewnętrznej.
13
Urządzenia
Każdy system komputerowy korzysta z różnorodnych urządzeń zewnętrznych,
które generalnie można podzielić na trzy grupy:
- urządzenia pamięci - dyski, taśmy, cd-romy, dyskietki itp.,
- urządzenia interfejsu - monitor, klawiatura, myszka itp.,
- urządzenia przesyłania danych - modem, karta sieciowa itp.
Większość współczesnych systemów operacyjnych tworzy w jądrze podsystem
wejścia-wyjścia, które oddziela to złożone zagadnienie od reszty systemu
operacyjnego. Ze względy na różnorodność sprzętowych modułów wejścia
wyjścia, zaobserwować można podejście wykorzystania modułów sterujących
przygotowanych przez producentów sprzętu dla konkretnego systemu
operacyjnego (drivery, sterowniki, device controllers), które odpowiadają za
komunikację systemu operacyjnego z urządzeniami wejścia-wyjścia.
Udostępniają one na potrzeby systemu operacje możliwe do przeprowadzenia
na konkretnym urządzeniu, np. dla drukarek mogą to być: wysunięcie papieru,
przewinięcie strony papieru (dla papieru składanki), pozycjonowanie głowicy,
druk w kolorach itp.
Podstawowe elementy sprzętowe, które również zaliczamy do urządzeń
wejścia-wyjścia, a które występują w każdym systemie komputerowych do
porty i szyny danych.
.
14
Ochrona zasobów
Jeżeli system operacyjny jest przewidziany do pracy z
wieloma użytkownikami (system sieciowy), wtedy
zachodzi konieczność by chronił on poszczególne
elementy pracy jednego użytkownika, przed skutkami
pracy innych. W skład takiej ochrony oprócz oczywistej
ochrony i nadzorowania dostępu do plików i katalogów
(danych), wchodzi również zagadnienie ochrony
procesów uruchomionych przez poszczególnych
użytkowników systemu. System chroni również dostęp
do pamięci operacyjnej, w której przechowywane są
dane wielu użytkowników systemu.
Ogólnie mówiąc ochrona jest mechanizmem
nadzorowania dostępu programów, procesów i
użytkowników do zasobów zdefiniowanych przez system
komputerowy.
15
Interpretatory poleceń
System interpretacji poleceń jest jednym z
najważniejszych modułów z jakich składa się system
operacyjny. W systemach UNIX/Linux interpreter
poleceń określany jest również jako powłoka (ang.
shell), która jest używana m. in. w trakcie rejestracji
użytkownika w systemie. Nazwa wywodzi się stąd,
że program ten pełni rolę warstwy pośredniczącej
między użytkownikiem a systemem operacyjnym.
Pozwala na pełną, interakcyjną pracę z systemem, i
jest zarówno środowiskiem roboczym, jak i
interfejsem, za pomocą którego użytkownik
porozumiewa się z komputerem. Powłoka systemu
służy nie tylko do uruchamiania poleceń i
programów. Jest ona również potężnym,
skryptowym językiem programowania, dającym
użytkownikowi powłoki ogromne możliwości.
16
Przegląd interpretatorów
poleceń
Pierwszym interpreterem napisanym dla systemu UNIX był sh, czyli
powłoka Bourne'a (ang. Bourne shell). Program ten odznacza się
dużą szybkością działania i z tego względu jest wciąż powszechnie
wykorzystywany do uruchamiania skryptów. Jego funkcjonalność jest
niestety mocno ograniczona podczas pracy interaktywnej ze względu
na brak licznych udogodnień, które oferują nowocześniejsze powłoki.
Znacznie wygodniejszy jest drugi klasyczny interpreter csh (ang. C
shell). Program csh oferuje m.in. historię poleceń, aliasy, i sterowanie
pracami. Składnia złożonych poleceń jest bardzo zbliżona do języka
C (w którym został napisany) i różni się znacząco od składni
stosowanej w sh.
Trzecim klasycznym interpreterem jest ksh (ang. Korn shell),
stanowiący rozszerzenie programu sh o wiele nowych funkcji. Z
założenia, ksh przeznaczony był dla administratorów i raczej nie
zdobył uznania zwykłych użytkowników ze względu na
skomplikowaną składnię.
Obecnie największą popularność cieszą się nowoczesne interpretery
łączące duże możliwości z łatwością obsługi. Należy tu wymienić
powłoki zsh i bash (ang. Bourne Again shell), powstałe z rozwinięcia
sh, oraz powłokę tcsh. Powłoka zsh staje się powoli standardem
systemu UNIX, zaś bash jest od samego początku podstawowym i
domyślnym interpreterem Linuxa.
17
Praca w tle
Pracując z powłoką systemu Linux można uruchamiać wiele
zadań (procesów) działających równolegle. Zadania można
podzielić na:
pierwszoplanowe - zadania pobierające dane ze
standardowego wejścia i wysyłające rezultaty na standardowe
wyjście
drugoplanowe (pracujące w tle) – pozostałe zadania
Powłoka systemu przypisuje do każdego takiego procesu
unikalny numer zadania, którego można użyć jako argument
dla poleceń obsługujących zadania.
Nowe zadania domyślnie pracują jako pierwszoplanowe. Aby
dane zadanie uruchomić jako zadanie pracujące w tle należy
użyć na końcu wiersza polecenia znak & (ang. ampersand).
Jest to szczególnie użyteczne do uruchamiania programów,
które nie wymagają interakcji z użytkownikiem, a
jednocześnie przetwarzają duże ilości danych.
18
Praca w tle cd.
Demony
Demony, inaczej usługi, są pewnym rodzajem programów, które są uruchamiane
zazwyczaj przy starcie systemu, i działają potem cały czas w tle, zużywając
minimalne zasoby. W każdej chwili mogą przyjąć od innego programu polecenie
(żądanie), i je w jakiś sposób wykonać. Demonem jest np. serwer http, który cały
czas jest uruchomiony w tle, a w momencie gdy przychodzi żądanie od
przeglądarki wysyła odpowiedni plik, lub wykonuje jakąś akcję. Demon może
również obsługiwać programy działające na tym samym komputerze.
Kolejną cechą charakterystyczną demonów, jest to że po zamknięciu ich w
zwykły sposób, są automatycznie ponownie uruchamiane, np. jeżeli w serwerze
wystąpi błąd, to zostanie on znowu uruchomiony, i dzięki temu będzie dalej
możliwe łączenie się z daną usługą. Do zatrzymania działania demona służą
specjalne skrypty, które znajdują się zazwyczaj w katalogu:
/etc/init.d/
Skrypty te mogą być uruchamiane z następującymi opcjami:
- start - uruchamia demona
- stop - zatrzymuje demona
- restart - zatrzymuje, i ponownie uruchamia demona; przydatne np. w
przypadku gdy zmieniona została konfiguracja danego demona
Niektóre mogą przyjmować również inne opcje, jednak te trzy są standardowe.
19
Licencja GNU
Powszechna Licencja Publiczna GNU (GNU General Public License) jest jedną z
licencji wolnego oprogramowania, która została sformułowana w 1988 przez
Richarda Stallmana i Ebena Moglena na potrzeby Projektu GNU, na podstawie
wcześniejszej Emacs General Public License. Wersja 2 licencji GNU GPL została
wydana w roku 1991.
Celem tej licencji jest przekazanie użytkownikom praw do uruchamiania programu w
dowolnym celu, analizowania działania programu i dostosowywania go do swoich
potrzeb, kopiowania oraz udoskonalania i publikowania własnych poprawek
programów i kodu źródłowego tych programów, których programiści postanowili
wydać je w oparciu o tę licencję.
Większość licencji na oprogramowanie pomyślana jest po to, aby odebrać
użytkownikowi możliwość swobodnego udostępniania innym i zmieniania danego
software'u. Natomiast w wypadku GNU GPL celem jest zagwarantowanie
użytkownikowi swobody udostępniania i zmieniania tego wolnego oprogramowania,
a więc danie pewności, iż oprogramowanie jest wolno dostępne dla wszystkich
użytkowników.
Licencja ma zapewniać użytkownikom programów komputerowych prawo do:
- korzystania z programu w dowolnym celu
- badania, w jaki sposób program działa i modyfikowania go
- prawo do dystrybucji kopii
- prawo do ulepszania programu i obowiązek upubliczniania tych poprawek
Tekst licencji znajduje się na stronie
http://www.gnu.org.pl/text/licencja-gnu.html
20
Konsole wirtualne i zdalne
Wirtualne terminale (Virtual Terminals) pozwalają
użytkownikowi na logowanie się w tym samym
komputerze wielokrotnie, mimo iż fizycznie ma
dostępny tylko jeden monitor. Inaczej mówiąc konsola
wirtualna emuluje monitor i klawiaturę. W systemach
Linuxowych standardowo występuje 7 wirtualnych
konsol, lecz można rozszerzyć ich liczbę do 64. Konsole
5 lub 7 ( w zależności od dystrybucji) są
wykorzystywane dla środowiska X Windows.
Zdalne terminale pozwalają na logowanie się z odległym
komputerem poprzez sieć za pomocą odpowiedniego
oprogramowania (telnet, ssh). Sesja ssh, w odróznieniu
do telnet, jest w 100% zaszyfrowana zachowując przy
tym bezpieczeństwo haseł. Komputer stojący po drugiej
stronie jest serwerem tych aplikacji.
21
Użytkownicy i grupy
W systemie Linux każdy plik musi posiadać właściciela. Każdy
użytkownik posiada niepowtarzalny numer identyfikacyjny UID.
Użytkownik jest czlonkiem co najmniej jednej grupy tzw. grupy
logowania. Nazwa tej grupy jest identyczna z nazwą konta danego
użytkownika. Grupa jest to zespół użytkowników współpracujących
ze sobą i wzajemnie udostępniających sobie pliki. Każda grupa
musi mieć unikalną nazwę i numer identyfikacyjny grupy GID.
Dostępność danego programu lub pliku jest ustalona w oparciu o
numer UID i GID. Uprawnienia użytkowników są różne w zależności
od tego czy jest to zwykły użytkownik, czy administrator (root).
Zwykły użytkownik ma dostęp do plików, których jest właścicielem
lub posiada odpowiednie uprawnienia. Użytkownik należy do
grupy, która jest właścicielem pliku lub też plik jest dostępny dla
wszystkich użytkowników. Operator systemu (root) ma dostęp do
wszystkich plików i może uruchamiać wszystki9e programy w
systemie, niezależnie od tego, czy jest on właścicielem pliku czy
też nie. Tylko root może tworzyć nowe grupy i przydzielać do nich
nowych użytkowników
22
Użytkownicy i grupy cd.
Aby konto użytkownika działało poprawnie należy ustawić kilka rzeczy:
Katalogi domowe – zawierają wszystkie pliki konfiguracyjne
uzytkownika oraz jego prywatne dokumenty. Użytkownik pracuje w
swoim spersonalizowanym środowisku. Katalogi te są tworzone w
katalogu /home, a ich nazwa zazwyczaj odpowiada nazwie konta
użytkowników (login name). Katalog domowy uzytkownika root jest
tradycyjnie w /root. Katalogi domowe nie muszą być umieszczone
bezpośrednio w katalogu /home.
Hasła – Każde konto musi posiadać hasło, które powinno być na tyle
skomplikowane, aby zwiększyć bezpieczeństwo systemu.
Powłoki (shells) – Pierwszy program z którym użytkownik się zetknie
jest nazwany powłoką. Linux zawiera wiele powłok, z których możemy
sobie wybrać najbardziej nam odpowiadającą – większość z nich jest
opisana w pliku /etc/shells
Skrypty uruchomieniowe – Każdy użytkownik może posiadać swoje
własne pliki konfiguracyjne. System powinien zapewniać
użytkownikowi dowolne skonfigurowanie swojego środowiska, nawet
wtedy, kiedy inni są zalogowani do systemu. Plik konfiguracyjny jest
częścią skryptu powłoki – serii komend, które są wykonywane podczas
logowania do systemu. W przypadku powłoki bash jest to plik .bashrc
(autoexec.bat w DOS-ie)
Poczta – Uruchomienie możliwości wysyłania i odbierania wiadomości
e-mail. Skrzynki pocztowe są przechowywane w katalogu
/var/spoool/mail. Każdy użytkownik posiada skrzynkę pocztową, która
bazuje na jego nazwie użytkownika.
23
Logowanie
Podczas logowania do systemu użytkownicy wpisywali hasło
ich wpis był zaszyfrowany np. algorytmem DES (Data
Encryption Standard). Zaszyfrowana wartość była następnie
porównywana z wpisem hasła użytkownika. Jeżeli obie
zaszyfrowane wartości były identyczne, użytkownik mógł
wejść do systemu. Szybkie komputery sprawiły, że dość
szybko można było złamać takie hasło. Doprowadziło to do
konieczności zmienienia natury haseł: wprowadzono więc
hasła ukryte. Mechanizm haseł ukrytych polega na usunięciu
wpisów zaszyfrowanych haseł z pliku haseł (passwd) i
umieszczeniu ich w osobnym pliku o nazwie shadow. Właściwy
plik hasła nadal może być odczytany przez dowolnego
użytkownika systemu, a wpis zaszyfrowanego hasła tylko
przez użytkownika root. Innym rozwiązaniem było
udoskonalenie algorytmu do szyfrowania haseł i
wykorzystywano schemat MD5. Doprowadziło to do
zwiększenia trudności złamania haseł, które w połączeniu z
hasłami ukrytymi sprawdzały się całkiem nieźle.
24
Uwierzytelnianie
25
Podstawowe usługi
init
Jedna z najważniejszych usług w systemie Unix oferowana jest przez
program init. init jest pierwszym uruchomionym przez jądro procesem,
ostatnim stadium bootowania jądra. init po uruchomieniu dokańcza
proces bootowania poprzez wykonanie odpowiednich skryptów (np.
zawierających sprawdzenie i zamontowanie systemów plików,
uruchomienie demonów).
Dokładna lista czynności wykonywanych przez init różni się zależnie od
systemu. init zazwyczaj udostępnia tryb jednego użytkownika, w którym
nikt nie może się zalogować, a root korzysta z powłoki na konsoli;
normalnie system pracuje w trybie wielu użytkowników. W niektórych
systemach istnieje podział na poziomy pracy; tryb jednego użytkownika i
wielu użytkowników to dwa poziomy pracy, mogą istnieć również
dodatkowe, np. tryb, w którym X jest domyślnie uruchamiane.
Podczas normalnego działania init sprawdza czy działa getty (aby
umożliwić użytkownikom zalogowanie), adoptuje osierocone procesy
(których rodzic umarł; w Uniksie wszystkie procesy muszą tworzyć
pojedyncze drzewo - sieroty muszą być adoptowane).
Podczas zamykania systemu init jest odpowiedzialny za zabicie
wszystkich procesów, oraz inne skonfigurowane rzeczy.
26
Podstawowe usługi cd
Logowanie z terminala
Logowanie z terminala (via łącza szeregowe) oraz konsolę (jeżeli X nie
działa) obsługiwane jest przez program getty. init dla każdego z
terminali uruchamia osobny proces getty. getty odczytuje nazwę
użytkownika po czym uruchamia program login, który odczytuje hasło.
Jeżeli nazwa użytkownika i hasło są poprawne, login uruchomi powłokę.
Po zakończeniu pracy powłoki (wylogowaniu się użytkownika), lub w
przypadku niezgadzającego się hasła init uruchomi nowy proces getty.
Jądro nie wie co to "logowanie się", jest to zależne od programów
systemowych.
Syslog
Jądro oraz programy systemowe produkują błędy, ostrzeżenia i inne
wiadomości. Czasami wymaga się aby była możliwość późniejszego
przeglądu tych wiadomości, więc powinny być zapisywane do pliku.
Troszczy się o to syslog. Można go skonfigurować do sortowania
wiadomości, odrzucania, lub zapisywania wymaganych, zapisywania
wiadomości do kilku plików ze względu na ważność, itp. Np. wiadomości
wysyłane przez jądro są najczęściej zapisywane do osobnego pliku,
ponieważ są one często ważniejsze i powinny być regularnie czytane, by
dostrzec kłopoty.
27
Podstawowe usługi cd
Okresowe wykonywanie poleceń: cron i at
Użytkownicy i administratorzy systemu często muszą wykonywać
polecenia co pewien okres. Dla przykładu: administrator mógłby
chcieć czyścić co określony czas katalogi zawierające pliki
tymczasowe (/tmp i /var/tmp). Zapobiega to przepełnieniu dysku,
gdyż nie wszystkie programy poprawnie sprzątają po sobie.
W tym celu powstał program cron. Każdy użytkownik posiada
swój plik crontab, w którym można zapisywać instrukcje
uruchamiania okresowego. Demon cron troszczy się o to aby
wykonać dane polecenie o wskazanym czasie.
Polecenie at jest podobne do programu cron, różni się tym, że
polecenie jest uruchamiane tylko raz, w zadanym terminie; nie
jest powtarzane.
Inne usługi
X Window System, usługi sieciowe (DNS, DHCP, Samba), poczta,
drukowanie, zdalne logowanie (telnet, ssh, rlogin), sieciowe
systemy plików (NFS) itp.
28
Poziomy uruchomienia
(runlevels)
W systemie GNU/Linuks jest kilka tzw. poziomów uruchamiania,
np.
1.
poziom 0 - wyłączenie systemu
2.
poziom 1 - tryb jednego użytkownika (inaczej tryb
administratora - używany do rozwiązywania poważnych
problemów z systemem)
3.
poziom 6 - restart systemu (ponowne uruchomienie)
Poziomy od 2 do 5 są używane do zwykłej pracy; w niektórych
dystrybucjach mają one przypisane różne znaczenie (np. tryb
pracy lokalny, bez możliwości logowania zdalnego, tryb
wieloużytkownikowy ale bez środowiska graficznego itp.), zaś w
innych nie mają przypisanego żadnego domyślnego znaczenia,
jak w Debianie, gdzie domyślnym poziomem uruchomienia jest 2,
a 3, 4 i 5 każdy może dowolnie ustawić.
Każdy runlevel ma przypisane demony, które będą uruchamiane,
albo zatrzymywane przy przechodzeniu do tego poziomu
uruchomienia. Dla przykładu, przy zamykaniu systemu (runlevel
0), wszystkie demony będą zatrzymywane, a na samym końcu
zostanie uruchomione polecenie halt. Ponadto jest określona
kolejność, w jakiej demony są uruchamiane.
29
Jądro systemu
Jądro systemu - inaczej kernel, jest to właśnie Linux. Jest to ta część
oprogramowania, która
odpowiada za:
komunikację systemu z urządzeniami (sterowniki, które w Linuxie
nazywane są modułami)
uruchamianie i komunikację pomiędzy programami
obsługę systemów plików - ma bezpośredni dostęp do dysków, i plików
stworzenie środowiska uruchomieniowego dla programów (np. gdy
program rezerwuje potrzebną ilość pamięci, to właśnie kernel przyznaje
mu taki rejon, który nie jest przez żadne inne programy używany).
Proces init
Podczas uruchamiania systemu, najpierw uruchamia się jądro, inicjując
proces init. Init jest podstawowym procesem, który pełni funkcję
procesu macierzystego wszystkich innych procesów. Z tego też powodu
proces init nie może zostać zakończony wcześniej niż wszystkie inne
programy (co w praktyce oznacza działanie od uruchomienia systemu
operacyjnego do zakończenia jego działania). Proces init ma także inną,
ważną funkcję. W systemach z rodziny UNIX inicjuje on wykonywanie
skryptów startowych, w których zapisane są wszystkie czynności, jakie
wykonać ma komputer przed umożliwieniem użytkownikowi
zalogowania się w systemie.
30
Ważne części jądra
Jądro Linuxa zawiera kilka podstawowych części: zarządzanie procesami, pamięcią,
sterowniki urządzeń, obsługa systemu plików, zarządzanie siecią i wiele innych.
31
Ważne częći jądra - opis
Najprawdopodobniej najważniejszymi częściami jądra (bez nich nie działa nic)
są moduły zarządzania pamięcią i procesami. Zarządzanie pamięcią polega
na przypisywaniu obszarów pamięci fizycznej i swapu procesom, częściom
jądra, oraz cache'owi urządzeń blokowych. Zarządzanie procesami polega na
ich tworzeniu i implementacji wielozadaniowości poprzez zmianę aktywnie
wykonywanego.
Na najniższym poziomie jądro zawiera sterowniki obsługiwanych urządzeń.
Ponieważ świat jest pełny różnorakiego sprzętu jest ich wiele. Istnieje wiele
podobnych do siebie urządzeń różniących się w warstwie programowej. Te
podobieństwo pozwala pogrupować sterowniki; w ten sposób członek danej
klasy ma ustalony interfejs programowy, różni się natomiast wewnętrzną
komunikacją między sprzętem a jądrem. Np. wszystkie sterowniki dysków
posiadają funkcje do: inicjalizacji, odczytania, lub zapisania podanego
sektora.
Niektóre usługi oferowane przez jądro mają podobne właściwości, dzięki temu
mogą zostać podzielone w abstrakcyjne klasy. Dla przykładu, różne protokoły
sieciowe zostały połączone w jednym interfejsie programistycznym,
bibliotece gniazd BSD. Innym przykładem jest wirtualny system plików (VFS),
który obsługuje operacje plikowe niezależnie od systemu plików. Jeżeli jakiś
proces chce skorzystać z systemu plików wszelkie żądania kierowane są do
VFS, który następnie przekierowuje je do odpowiedniego sterownika.
32
Moduły ładowalne,
obsługa urządzeń
W jądrze Linux sterowniki do urządzeń mogą zarówno być wbudowane w samo jądro (wkompilowane moduły), albo
też w osobnym pliku, i wtedy są one ładowane do pamięci komputera i uruchamiane w razie potrzeby, lub przy
starcie systemu.
Zalety modułowej budowy
Kernel Linux jest makrokernelem, tzn. zajmuje się nie tylko komunikacją pomiędzy poszczególnymi procesami, ale
także zarządzaniem pamięcią, obsługą urządzeń czy obsługą systemów plików. Dla porównania, w architekturze
mikrokernela, sam kernel zajmuje się tylko zapewnieniem komunikacji pomiędzy procesami, natomiast do obsługi
poszczególnych urządzeń, czy systemów plików, zajmują się osobne wykonywalne programy.
Jednak Linux ma modułową budowę, co oznacza że części kodu odpowiadające za obsługę poszczególnych
urządzeń, systemów plików czy protokołów, mogą zostać od niego oddzielone - i dzięki temu zyskuje największe
zalety mikrokerneli, czyli:
1.
obsługę poszczególnych urządzeń czy protokołów można rozwijać niezależnie od samego kernela (nie
wymaga to zmian w innych częściach kernela)
2.
podział prac nad jądrem na grupy zajmujące się poszczególnymi częściami znacznie ułatwia i przyspiesza
rozwój
3.
możliwość zmniejszenia wielkości kernela, poprzez wykasowanie z pamięci operacyjnej nieużywanych
modułów
4.
możliwość tworzenia zamkniętych, binarnych sterowników
Przy tym budowa jako makrokernel, i możliwość wbudowania modułów w strukturę samego kernela, przyspiesza
działanie, ponieważ nie ma konieczności wielokrotnego powtarzania przełączania procesów, przy komunikacji
pomiędzy poszczególnymi modułami.
Do czego służą moduły
Moduły, odpowiadają sterownikom w terminologii DOS/Windows. Mogą one obsługiwać nie tylko urządzenia - lista
możliwych zadań modułów jest szersza:
bezpośrednia komunikacja z urządzeniem (standardowe, systemowe polecenia tłumaczy na kod rozumiany przez
konkretny model urządzenia)
bezpośredni odczyt/zapis w systemie plików (dzięki temu system widzi pliki, katalogi i ich właściwości, natomiast
sam moduł dba o przetłumaczenie tego na kombinację bajtów w określonych miejscach na dysku)
obsługa protokołów (np. protokołów sieciowych).
Najogólniej, moduły kernela służą do komunikacji niskopoziomowej - zajmują się tłumaczeniem standardowych
poleceń na kod odpowiadający im w danym przypadku.
33
Urządzenia
Dostęp na najniższym, bezpośrednim poziomie do urządzeń w Linuxie
jest w dość ciekawy sposób - mianowicie są one widziane jako pliki w
katalogu
/dev np.: /dev/hda jest to plik dysku podłączonego jako Primary Master.
Są to tzw. pliki urządzeń - tak naprawdę te pliki nie istnieją nigdzie na
dysku, czy w pamięci procesora, ale jest to konwencja, że do wszystkich
podstawowych części systemu można dostać się z jednego drzewa
katalogów. Może to się wydawać na pozór dziwaczne rozwiązanie, ale tak
naprawdę umożliwia to łatwe znalezienie, i dostęp do urządzeń, bez
konieczności uczenia się nowych wymyślnych narzędzi (poleceń).
Takiego pliku urządzenia nie można otworzyć tak jak zwykłych plików, ale
można z niego czytać, i zapisywać do niego. Inaczej po prostu wysyłać
do niego strumień danych (wtedy urządzenie odbiera te dane), albo
odbierać z niego strumień danych.
W przypadku pliku urządzenia dysku, czytając z niego bezpośrednio,
odczytujemy kolejne bajty, tak jak one są fizycznie zapisane na dysku;
nie odczytamy w ten sposób plików znajdujących się na nośniku, lecz
jego obraz. Stąd wniosek, że w Linuxie w bardzo prosty sposób, używając
najbardziej podstawowych poleceń, możemy zrobić obraz dysku/CD-
ROMu/dyskietki.
34
Systemy plików linuxa
Dla potrzeb systemu GNU/Linux został opracowany specjalny system
plików - Extended Filesystem (extfs).
Istnieje kilka systemów plików używanych w GNU/Linuksie jako główny
system:
ext2 (wersja 2 extfs)
ext3 (ext2 tylko z dodanym tzw. plikiem dziennika - narzędziem
umożliwiającym łatwe odzyskanie danych w przypadku awarii systemu
plików)
ReiserFS
XFS
JFS
Atrybuty plików
Każdy plik (i katalog) ma dodatkowe atrybuty - prawa dostępu.
Określają one kto jest właścicielem danego pliku, i kto ma możliwość
odczytu, zapisu oraz uruchamiania danego pliku.
Nie mają natomiast osobnego atrybutu "ukryty" - jest to rozwiązane w
ten sposób, że pliki których nazwa zaczyna się od kropki, są
traktowane jako pliki ukryte.
35
ext2
ext2 (ang. second extended filesystem) - drugi rozszerzony
system plików dla systemu Linux. Ext2 rozwinął się z
rozszerzonego systemu plików ext. Rozpoznanie uszkodzenia
systemu plików (np. po załamaniu się systemu) nastepuje przy
starcie systemu, co pozwala na automatyczne naprawianie
szkód za pomocą oddzielnego programu (e2fsck), uszkodzone
pliki zapisywane są w katalogu lost+found.
System plików ext2 zawiera mechanizm zapobiegający
znacznej fragmentacji dysku.
Ext2 przy domyślnym rozmiarze bloku (4 kB) obsługuje
partycje o wielkości do 16384 GB i pliki o wielkości do 2048
GB. Nazwy plików mogą mieć 255 znaków długości.
Ważnym elementem systemu ext2 są wolne pola w
strukturach danych - to dzięki nim między innymi możliwa jest
konwersja "w locie" do systemu ext3 - wykorzystuje on po
prostu część z nich do przechowywania swoich danych.
36
ext3
ext3 (od ang. third extended filesystem) to nowoczesny system plików oparty
na ext2. Jest to domyślny system plików w większości dystrybucji systemu
GNU/Linux opartych na jądrze 2.4 oraz nowszych. System ten jest rozszerzeniem
ext2 i poza dodanym księgowaniem nie różni się od niego prawie niczym.
W odróżnieniu od większości innych systemów z księgowaniem ext3 daje do
wyboru trzy tryby księgowania:
1.
w trybie najbezpieczniejszym księgowane są zarówno metadane jak i zwykłe dane
2.
w trybie domyślnym księgowane są tylko metadane
3.
istnieje jeszcze jeden tryb, w którym księgowane są również tylko metadane, ale jest
mniej bezpieczny, bo pozwala na modyfikacje danych objętych metadanymi nie
zapisanymi jeszcze na dysk
Ext3 dodaje dokładny zapis zmian na dysku co w razie nagłego wyłączenia
systemu umożliwia szybsze przywrócenie spójności systemu plików niż ext2.
Inną zaletą tego systemu plików oprócz dużego bezpieczeństwa danych jest to,
że bardzo łatwo przekonwertować do niego system plików ext2.
Prawidłowo odmontowany system plików może być zarówno przekształcony z
Ext2 w Ext3 jak i z powrotem. Nie jest konieczne tworzenie kopii zapasowej całej
partycji by przekonwertować istniejące systemy na Ext3, gdyż polega ona tylko
na dodaniu pliku dziennika do systemu plików. Poza tym istnieje możliwość
używania tego systemu plików przez programy obsługujące tylko Ext2 (np.
GRUB) - ext3 jest w pełni kompatybilny wstecz.
Ze względu na sposób działania, nie jest możliwe odzyskanie skasowanych
plików (w przeciwieństwie do ext2).
37
ReiserFS
ReiserFS zwany także Reiser3 to system plików zaprojektowany i
zaimplementowany przez grupę kierowaną przez Hansa Reisera.
ReiserFS jest obecnie obsługiwany przez Linuksa i może być w
przyszłości włączony do innych systemów operacyjnych. ReiserFS to
jeden z pierwszych systemów plików z księgowaniem dla Linuksa.
Księgowanie (journaling) zapewnia atomowość operacji na systemie
plików. W odróżnieniu od ext2 ten może trwać godzinami. Za
zwiększenie bezpieczeństwa danych płacimy szybkością (trzeba
uaktualniać kronikę) i przestrzenią dyskową (kronika zajmuje miejsce).
ReiserFS wykonuje operacje na metadanych systemu plików, które są
atomowe.
ReiserFS do przechowywania obiektów używa b-drzew, znany jest ze
swojej szybkości i efektywnego przechowywania i dostępu do dużej
ilości małych plików (szczególnie w jednym katalogu). Obecnie
Namesys ukończył prace nad nowym systemem plików o nazwie
Reiser4.
ReiserFS bardzo wydajnie obsługuje katalogi zawierające ogromne
ilości małych plików. Jest to między innymi korzystne przy obsłudze
kolejek wiadomości w grupach dyskusyjnych.
38
XFS
XFS - 64-bitowy system plików zaprojektowany przez firmę Silicon Graphics Inc. z przeznaczeniem do użycia go w systemie
operacyjnym IRIX (wersja UNIX-a firmy SGI). Aktualnie jest dostępna również jego implementacja dla systemu Linux rozwijana
przez SGI jako projekt na licencji wolnego oprogramowania.
XFS pozwala na obsługę dużych dysków twardych. Maksymalny rozmiar woluminu jest ograniczony do 18 milionów TB.
Natomiast rozmiar pojedynczego pliku może wynosić maksymalnie 2^63 bajtów czyli ponad 8 milionów TB (dokładnie 8 388 608
TB). Rozmiar jednostki alokacji może wynosić od 512 bajtów (wielkość fizycznej jednostki alokacji) do 1 MB.
XFS posiada szereg cech zaawansowanego systemu plików do zastosowań serwerowych oraz dla wydajnych stacji roboczych.
Najciekawszym z nich jest realtime subvolume - udostępnienie procesowi możliwości zarezerwowania dla siebie pasma dostępu
do podanego pliku, o podanej szerokości (w bajtach na sekundę). Znajduje to zastosowanie na przykład przy obróbce m.in.
plików multimedialnych, gdzie proces musi mieć stały szybki dostęp do plików, aby umożliwić edycję ich na bieżąco.
Drugie rozwiązanie aktualnie szeroko już stosowane to księgowanie metadanych, dzięki któremu sprawdzenie i naprawienie
błędów w strukturze systemu plików zajmuje ułamki sekund. Dane nie są jednak, ze względów wydajnościowych księgowane, co
powoduje niekiedy utratę zawartości pliku podczas awarii (jest to możliwe tylko wtedy, gdy metadane zostały zmienione, a dane
nie zostały jeszcze zapisane na dysku).
Innym interesującym rozwiązaniem jest możliwość defragmentacji systemu plików XFS zamontowanego i posiadającego otwarte
pliki (pliki otwarte w trybie do zapisu nie są defragmentowane). Stworzenie, usunięcie czy modyfikacja pliku, który nie jest
aktualnie optymalizowany nie powoduje przerwania tego procesu.
System ten obsługuje również inne technologie takie jak:
1.
pliki rzadkie (ang. sparse files)
2.
rozszerzone atrybuty plików (ang. extended attributes)
3.
listy dostępu (ang. POSIX Access Control Lists - ACLs)
4.
etykiety bezpieczeństwa (ang. security labels)
5.
limitowane przydziały (ang. quota)
System plików XFS jest wewnętrznie podzielony na następujące subwoluminy:
1.
data subvolume - przechowuje dane (pliki)
2.
naming subvolume - przechowuje metadane
3.
log subvolume - przechowuje metadane, które zostały zmodyfikowane ale odpowiadające im zmiany w data subvolume
nie zostały jeszcze wprowadzone
4.
realtime subvolume - przechowuje dane do których może być wymagany dostęp z rezerwacja pasma
Z powodu różnic architektonicznych między IRIX-em a Linuksem, przy przenoszeniu XFS-a na Linuksa, wprowadzono dodatkową
warstwę logiczną pomiędzy XFS-em a wirtualnym systemem plików Linuksa, tłumaczącą odwołania do VFS-a IRIX-a na odwołania
do VFS-a Linuksa.
39
JFS
JFS (ang. Journaled File System) - 64-bitowy system
plików z księgowaniem, opracowany przez firmę IBM.
Przy użyciu księgowania dane nie są od razu
zapisywane na dysk, tylko zapisywane w swoistym
dzienniku/kronice (ang. journal). Dzięki takiemu
mechanizmowi działania zmniejsza się
prawdopodobieństwo utraty danych: jeśli utrata
zasilania nastąpiła w trakcie zapisu - zapis zostanie
dokończony po przywróceniu zasilania, jeśli przed -
stracimy tylko ostatnio naniesione poprawki, a
oryginalny plik pozostanie nietknięty. Specjalnym
przypadkiem systemu plików z księgowaniem jest
księgowanie metadanych - nie księguje się w tym
wypadku właściwego zapisu danych pliku.