podstawy systemow operacyjnych VK2TVKRYMJ4ICHUTQ4HPW4LTK43QGI4Q4K2ZSDI


Praca semestralna

Podstawy systemów operacyjnych

Spis treści

  1. Wprowadzenie

    1. Architektura współczesnych komputerów - maszyna von Neumanna

    2. Definicja systemu operacyjnego

    3. Struktura systemu operacyjnego

  2. Zarządzanie czasem procesora

    1. Definicje procesu, wieloprocesowości, wielodostępu i wywłaszcania procesora

    2. Graf stanów procesu

    3. Kolejki i priorytety

    4. Wątki

    5. Kontekst procesu

    6. Procesy interakcyjne i wsadowe

  3. Zarządzanie pamięcią

    1. Do czego procesowi pamięć

    2. Gospodarka pamięcią w systemach bez mechanizmu pamięci wirualnej

    3. Mechanizm pamięci wirtualnej

  4. Zarządzanie wejściem-wyjściem

    1. Ogólna architektura podsystemu wejśia/wyjścia

    2. Zasoby urządzeń fizycznych

    3. Sterowniki i urządzenia logiczne

    4. Urządzzenia dyskowe

    5. Systemy plików

  5. Zagadnienia bezpieczeństwa

    1. Autentykacja na przykładzie haseł wielokrotnych

    2. Autoryzaja czyli o uprawnieniach

    3. Audyt

    4. Kopie bezpieczeństwa

    5. Kryptografia

    6. Inne zagadnienia

Literatura

Literatura podstawowa (dla zainteresowanych)

  1. Zbigniew Weiss "Komputery jak ludzie", WNT, Warszawa 1996;

  2. Abracham Silberschatz, James L. Peterson, Peter B. Gavin "Podstawy systemów operacyjnych", WNT, Warszawa 1993;

  3. Maurice J. Bach "Budowa systemu operacyjnego Unix", WNT, Warszawa 1995;

  4. Simson Garfinkel, Gene Spafford "Bezpieczeństwo w unixie i internecie", Wydawnictwo RM, Warszawa 1997;

  5. Helen Custer "Inside Windows NT", Microsoft Press 1992;

  6. Paul Tyler "Windows NT server - czarna księga administratora", Helion, Gliwice 1997;

Podręczniki dla początkujących użytkowników komputerów

  1. T. Kołodziejczak "Podstawy Informatyki", Prószyński i S-ka, Warszawa 1992;

  2. Witold Wrotek "PC i ty, pierwszy krok", PLJ, Warszawa 1995;

  3. Stanisław Jachimek "Informatyka dla szkół", Helion, Gliwice 1996/97;

  4. Anna Kurzydłowska et al "Kompendium Obsługi Komputera", Mikom, Warszawa 1997;

  5. Zdzisław Dec, Robert Konieczny "Abc komputera", Edition 2000, Kraków 1998;

  6. Shelly O'Hara "Komputer od A do Z", Read Me, Warszawa 1998;

  7. Dan Gookin "Komputer dla opornych", Read Me, Warszawa 1997;

Literatura pomocnicza

  1. Don Sellers "Nie daj się, czyli jak komputer może cię wykończyć", Helion, Gliwice 1996.

Rozdział 1: Wprowadzenie

Architektura współczesnych komputerów - maszyna von Neumanna

W drugiej połowie lat 40. John von Neumann zaproponował schemat blokowy elektronicznej maszyny liczącej (rys. 1.1).
0x01 graphic

Schemat ten aż do dzisiaj z niewielkimi modyfikacjami jest podstawą budowy komputerów.
Gdzie:

Pod względem funkcjonalnym komputer von Neumanna składa się z uwidocznionego na rys. 1.1 sprzętu i oprogramowania zawartego w pamięci (nieuwidocznionego).  Przez system komputerowy (informatyczny) rozumie się komputer (sprzęt + oprogramowanie) i osoby związane z jego działaniem.
Wśród osób związanych z działaniem komputera wyodrębnia się następujące typy:

Definicja systemu operacyjnego

Definicje

Oprogramowanie komputera daje się podzielić na oprogramowanie wykonujące użyteczne dla użytkownika obliczenia i oprogramowanie dbające o poprawną pracę systemu komputerowego jako całości, jednakże nie zawsze ten podział jest oczywisty i precyzyjny. Oprogramowanie tworzone z przeznaczeniem do wykonywania użytecznych obliczeń nazywamy aplikacjami. Oprogramowania tworzone z przeznaczeniem do zapewniania poprawnej pracy systemowi informatycznemu nazywamy oprogramowaniem systemowym.
Rdzeniem oprogramowania systemowego jest system operacyjny. Z powodu trudności w precyzyjnym zdefiniowaniu tego co jest, a co nie jest systemem operacyjnym, niektórzy autorzy definiują system operacyjny jako wszystko to opragramowanie, które producent wkłada do pudełka z taką nazwą.
Silberschatz et al w [2] podają następujące definicje systemu operacyjnego:
System operacyjny jest dystrybutorem zasobów komputera.
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ń wejścia/wyjścia.
Nie ma [...] w pełni adekwatnej definicji systemu operacyjnego. Istnienie systemów operacyjnych jest uzasadnione tym, że pozwalają one w rozsądny sposób rozwiązać problem kreowania użytecznego środowiska pracy.
Przez zasoby rozumie się wszystkie te elementy komputera, którymi daje się dysponować jako odrębnymi obiektami, np: procesor (w sensie przydziału jego czasu pracy), obszary pamięci, obszary dyskowe, drukarki itp.
Na potrzeby niniejszego wykładu system operacyjny zostanie zdefiniowany jako zbiór programów i podprogramów wywoływanych przez inne programy lub użytkownika, które mają zapewnić użytkownikowi i jego aplikacjom niezawodne, zestandaryzowane, wygodne i wydajne środowisko pracy.
Można w związku z powyższym przyjąć, że oprogramowanie rozdziela się na dwie warstwy, system operacyjny jest tą warstwą, która separuje warstwę aplikacji od sprzętu, a przez to je od niego uniezależnia (rys. 1.2).
0x01 graphic

Dla użytku aplikacji system operacyjny tworzy pewne abstrakcje zasobów sprzętowych, zrealizowane w postaci pewnych struktur danych i podprogramów, w dalszej części wykładu również zwane zasobami. Separację aplikacji od sprzętu należy rozumieć w ten sposób, że aplikacje nie sterują bezpośrednio sprzętem, a jedynie posługują się strukturami danych dostarczonymi przez system operacyjny (abstrakcjami zasobów sprzętowych) i wywołują systemowe podprogramy.

Zalety istnienia w komputerze systemu operacyjnego

Struktura systemu operacyjnego

Jądro systemu

Aby zabezpieczyć się przed możliwością bezpośredniego sterowania sprzętem przez aplikacje, konstruktorzy procesorów podzielili
zbiór instrukcji procesora na dwie części (niekiedy na więcej, ale pominiemy te przypadki). Jeden zbiór instrukcji, zawierający jedynie instrukcje nie sterujące bezpośrednio sprzętem i odwołujące się do wydzielonych obszarów pamięci, dopuszczono do użytku przez aplikacje (i oczywiście system operacyjny). Drugi zbiór, zawierający instrukcje sterujące sprzętem, lub odwołujące się do dowlnych miejsc w pamięci dopuszczono do użytku tylko przez system operacyjny.
Aby w praktyce zorganizować właściwe użycie tych instrukcji wprowadzono także dwa tryby pracy procesora: tryb użytkownika i tryb jądra. W trybie użytkownika dopuszczone są tylko instrukcje nie sterujące sprzętem i o ograniczonym dostępie do pamięci, jest on przeznaczony dla aplikacji. W trybie jądra dopuszczone są wszystkie instrukcje, jest on przeznaczony dla systemu operacyjnego.
Nie cały system operacyjnym musi się wykonywać w trybie jądra, wobec czego wyodrębnia się z systemu operacyjnego zbiór podprogramów o żywotnym znaczeniu. Zbiór ten nosi nazwę jądra systemu operacyjnego.
Wywołanie podprogramu jądra przez aplikację (w celu dostępu do zasobów) powoduje natychmiastowe przełączenie się procesora w tryb jądra, w trybie tym wykonuje się wielokrotnie sprawdzony podprogram jądra, który tuż przed powrotem do aplikacji przełącza się z powrotem do trybu użytkownika.
Twórcy nowoczesnych systemów operacyjnych nadają jądru modułową budowę, co między innymi pozwala wydzielić grupy podprogramów zwane sterownikami programowymi we/wy (ang. driver) obsługujących konkretne urządzenia i włączać je do jądra zależnie od potrzeb.

Programy

Użytkownik nie może wywoływać bezpośrednio podprogramów jądra systemu operacyjnego. Oprogramowanie, które może być wywoływane bezpośrednio przez użytkownika nazywamy programami. Zgodnie z tym, co zostało powiedziane wcześniej programami są aplikacje i część systemu operacyjnego przeznaczona do bezpośredniego wywoływania przez użytkownika tj. powłoki i programy narzędziowe.
0x01 graphic

Podstawową rzeczą jaką system operacyjny musi udostępnić użytkownikowi jest możliwość wywoływania aplikacji i innych programów. Do tego służą powłoki.
Powłoka jest to program przeznaczony do bezpośredniej konwersacji z użytkownikiem, przyjmowania od niego zleceń i wywoływania na jego polecenie innych programów.
Zadaniem programów narzędziowych jest wsparcie administratorów w pielęgnacji komputera.
Zadaniem programów usługowych (zwanych serwerami lub demonami) jest wspieranie jądra w tych czynnościach, których samo nie może z różnych względów wykonać (np. wymiatanie pamięci podręcnej) lub zarządzanie abstrakcyjnymi zasobami (np. kolejki wydruków, silniki baz danych, serwery stron www).

Start komputera

W czasie startu komputera (ang. boot) pierwsze ładowane jest jądro (np. w MS-DOS są to pliki IO.SYS i MSDOS.SYS), następnie jądro ładuje wymagane sterowniki (w MS-DOS następuje to w trakcie interpretacji pliku CONFIG.SYS), startuje programy usługowe i uruchamia powłokę (COMMAND.COM w MS-DOS).
Jeśli system przewiduje kontrolę dostępu, przed uruchomieniem powłoki autentykuje użytkownika.
Po starcie powłoki użytkownik może podjąć pracę, jao że powłoka daje mu możliwość uruchamiania własnych aplikacji. Często startująca powłoka wykonuje skrypt startowy aby skonfigurować środowisko użytkownika i uruchamia przy tym odpowiednie aplikacje (w MS-DOS skryptem startowym jest AUTOEXEC.BAT).

0x01 graphic

Rozdział 2: Zarządzanie czasem procesora

Definicje procesu, wieloprocesowości, wielodostępu i wywłaszcania procesora

Pierwsze systemy operacyjne pozwalały na wykonanie jednego programu na raz. W raz z rozwojem informatyki w szczególności pojawieniem się interakcyjnych wielodostępnych systemów operacyjnych, a później wprowadzeniem graficznych interfejsów użytkownika wystąpiła opotrzeba jednoczesnego uruchamiania na tym samym procesorze wielu programów w taki sposób by zminimalizować możliwości wzajemnych zakłóceń między procesami.
System operacyjny nazyway wielodostępnym, jeżeli wielu użytkowników może jednocześnie z nim pracować, każdy z nich ma wrażenie ciągłej pracy systemu na jego rzecz.
Podobną drogę przeszły mikrokomputery od systemu CP/M i MS-DOS do dzisiejszych MAC-OSa i MS Windows NT.
W nowoczesnym systemie operacyjnym dany program może być wykonywany przez wielu użytkowników jednocześnie, w związku z tym wprowadza się pojęcie procesu. Silberschatz et al w [2] definiują proces jako program, który jest wykonywany. Sprecyzować należy, że każdy załadowany do pamięci operacyjnej celem wykonania egzemplaż programu razem z danymi na których operuje stanowi oddzielny proces.
System operacyjny nazywamy wieloprocesowym jeżeli dopuszcza jednoczesne istnienie w nim wielu procesów. Takim systemem jest np. MS-DOS, przy czym w tym wypadku proces raz uruchomiony blokuje innym procesom dostęp do procesora aż do swego zatrzymania, dopiero wówczas może na nowo podjąć swe wykonanie jego proces macierzysty. Takim systemem nie jest np. CP/M, w którym może istnieć tylko jeden proces.
Jak to już stwierdzono w MS-DOSie po uruchomieniu procesu potomnego dany proces był zamrażany i faktycznie nie mógł się wykonywać aż do zakończenia potomka. Jeżeli oczekujemy od komputera z jednym procesorem aby był wielodostępny, musimy zadbać o to by dzielić czas procesora między różne procesy, niezależnie od tego, czy aktualnie wykonujący się proces ma ochotę zwolnić procesor, czy nie. Takim mechanizmem jest wywałaszczanie procesora.
Każdy proces w systemie wieloprocesowym z wywłaszczaniem w chwili uzyskania procesoraotrzymuje też kwant czasu. Po wyczerpaniu swego kwantu czasu proces jest przerywany, a na jego miejsce wykonywany jest inny proces. Wywłaszczony proces trafia na koniec kolejki procesów ubiegających się o procesor. Przykładami takich systemów są Unix, Windows NT i Windows 95.

Graf stanów procesu

Współbieżna praca więcej niż jednego procesu niesie z sobą mozliwość konfliktów przy dostępie do zasobów. W takich warunkach ujawnia się rola systemu operacyjnego jako dystrybutora zasobów. System operacyjny (a w zasadzie jego jądro) rozstrzyga konflikty o zasoby przydzielając je jednym ubiegająceym się o nie procesom a innne procesy powstrzymując do czasu zwolnienia zasobów przez dotychczasowych zwycięzców.
Proces, który zażądał dostępu do zasobu (w szczególności wykonania operacji we/wy) i go nie otrzymał nie może być dalej wykonywany aż do chwili uzyskania zasobu (zakończenia operacji we/wy). O takim procesie mówi się że jest w stanie uśpionym. Zwalnia on procesor pozwalając innym procesom na wykonywanie się.
W systemach z wywłaszczaniem procesora wyróżnia się pewien specjalny stan - oczekiwanie na przydział procesora. Mamy z nim do czynienia gdy proces posiada wszystkie niezbędne mu zasoby, nie wykonuje operacji wejścia wyjścia a czeka jedynie na przydzielenie mu [czasu] procesora. O takim procesie mówimy, że jest w stanie gotowy do wykonania.
Różne systemy operacyjne wyróżniają różny zestaw stanów, przez które przechodzi proces w trakcie życia, ale w każdym systemie wieloprocesowym z wywłaszczaniem można wyróżnić następujące stany:

0x01 graphic

 

Kolejki i priorytety

Procesy oczekujące na zwolnienie procesora mogą mieć różną ważność. Przykładowo, może to być proces dokonujący pomiaru w toczącym się eksperymencie, edytor teksu, proces systemowy uruchomiony celem zrobinia okresowych porządków i zadanie symulacji numerycznej pewnego układu fizycznego wykonywane długi czas w tle. Pierwsze dwa procesy mają to do siebie, że większość czasu oczekują na zajście operacji wejścia wyjścia, a gdy już to nastąpi, powinny natychmiast reagować, z kolei dwa ostatnie wykorzystują głównie czas procesora, ale nie są na tyle pilne, by nie mogły ustępować w razie potrzeby innym.
W zależności od pilności zadania i jego dotychczasowego przebiegu, system operacyjny nadaje procesowi priorytet. Generalnie, czym mniejszą liczbą jest wyrażony, tym lepiej z punktu widzenia procesu - ma więksy dostęp do procesora. Dla każdego priorytetu tworzona jest osobna kolejka procesów gotowych do wykonania. Dopóki w kolejce o priorytecie wyrażonym mniejszą liczbą czekają procesy, prcesy z kolejki większego priorytetu nie będą wykonywane.
Najmniejsze priorytety są zarezerwowane dla użytku systemu operacyjnego, są one do tego stopnia uprzywilejowane, że procesy wykonujące się z tymi priorytetami nie są wywłaszczane. Stąd też są używane jedynie w wyjątkowych okolicznościach przez krótkie procedury systemowe.
Użytkownik ma zwykle możliwość wyboru priorytetu dla uruchamianego procesu, jednakże jest w swym wyborze ograniczony "z dołu". System operacyjny rezewuje sobie możliwość zmiany priorytetu w trakcie działania procesu, celem wyrównania szans różnych procesów.

Wątki

Niektóre systemy operacyjne dopuszczają współbieżność w ramach jednego procesu. Określa się wówczas wątek jako jednostkę wykonania. Każdy wykonujący się proces ma przynajmniej jeden wątek, każdy wątek wykonuje się w ramach jednego procesu.
Wątki konkurują ze sobą o czas procesora. Pozostałe zasoby przydzielane są na rzecz procesu. System operacyjny zostawia programiście aplikacji wolną rękę w rozstrzyganiu konfliktów pomiędzy wątkami o dostęp do zasobów przydzielonych procesowi.
System operacyjny nazywamy wielowątkowym, jeżeli dopuszcza istnienie wielu wątków wykonania w ramach jednego procesu. Przykładami systemów wielowątkowych są Windows NT, Windows 95 i niektóre odmiany Uniksa.
W systemach nie będących wielowątkowymi pojęcie wątku i prcesu utożsamia się.
Przedstawiony na rys. 2.1 graf stanów procesu oraz kolejkowanie w systemie wielowątkowym dotyczy oczywiście wątków. Proces nie posiada stanów, jest kończony w momencie gdy skończy się jego ostatni wątek.
Jeżeli nie będzie to wyraźnie zaznaaczone, w dalszej części wykładu procesy i wątki będą ze sobą utożsamiane.

Kontekst procesu

Aby proces/wątek mógł być wznowiony od miejsca w którym przerwane zostało jego wykonanie, należy zachować pewne informacje o stanie procesora w chwili przerywania działania procesu. Zbiór wszystkich informacji niezbędnych do podjęcia prez proces działania z miejsca, w którym się znajduje nazywamy kontekstem procesu. Zdarzenie zapamiętania kontekstu aktualnego procesu i wprowadzenia do procesora wcześniej zachowanego kontekstu innego procesu celem rozpoczęcia jego wykonania nazywamy przełączeniem kontekstu.
Kontekst procesu składa się z zawartości rejestrów procesora, w szczególności wskaźnika instrukcji, rejestru flag stanu i wskaźnika stosu. W przypadku systemów z pamięcią wirtualną w skład kontekstu wchodzą tablice stron.

Procesy interakcyjne, wsadowe i demony

Nie wszystkie procesy wymagają ciągłej współpracy użytkownika w trakcie działania. Te które wymagają - nazywamy interakcyjnymi. Są to m.in. edytory tekstu, programy do odbierania poczty itp. Programy interakcyjne mają zawsze przypisany jakiś zasób umożliwiający konwersację z użytkownikiem. W przypadku Uniksa jest to terminal znakowy. W przypadku programu z graficznym interfejsem użytkownika jest to okienko graficzne na ekranie komputera.
Procesy nie wymagające uwagi użytkownika dzielą się na dwie kategorie:

System operacyjny dostarcza administratorowi narzędzi do uruchamiania i nadzorowania procesów pierwszego typu, a pozostałym użytkownikom drugiego typu.

0x01 graphic

Rozdział 3: Zarządzanie pamięcią

Do czego procesowi pamięć

Każdy prces działający w komputerze wymaga pamięci operacyjnej do przechowywania kodu swego prograamu i danych które przetwarza.
Dane, które przetwarza proces reprezentowane są przez zmienne programu. Przez zmienną programu rozumie się obszar pamięci o ustalonym adresie początkowym i długości, do którego można odwoływać się z programu poprzez symbol zwany nazwą zmiennej.  Każda zmienna posiada swój typ, definiowany jako zbiór, którego elementy mogą być kodowane przez wartości zmiennej, np. typ char języka C koduje znaki zbioru ASCII lub liczby z przedziału -128 do 127.  Typ decyduje o długości obszaru przeznaczonego na zmienną. Ważnymi typami zmiennych są zmienne wskaźnikowe. Przechowują one adresy (adresy początku obszaru) innych zmiennych.
Z punktu widzenia zarządzania pamięcią wyróżnia się trzy klasy zmiennych:

Wyróżnia się trzy zasadnicze grupy obszarów pamięci, z których korzysta proces:

Powyższe obszary pamięci bywają często nazywane segmentami odpowiednio kodu, danych i stosu.
Można wyróżnić dodatkowe obszary pamięci dostępnej procesowi:

Rozważmy prosty program w C

#include <stdio.h>

#include <string.h>

char napis[] = "Hello world!";

void main()

{

  char *tymczasowa;

  tymczasowa=strdup(napis);

  printf("%s\n",tymczasowa);

  free (tymczasowa);

}

Rys. 3.1 Przykładowy program w C używający różnych klas zmiennych

W trakcie działania powyższego programu tworzone są (a potem usuwane) następujące zmienne:

Przy starcie procesu wykonującego powyższy program w obszarze kodu programu znajdzie się skompilowana funkcja ``main'' oraz skompilowane niezbędne funkcje biblioteczne w tym funkcje ``printf'', ``strdup'' i ``free''. W obszarze danych statycznych utworzone będą zmienne ``napis'', bezimienna zmienna zawierająca łańcuch "%s\n" oraz niesprecyzowane tutaj bliżej zmienne tworzone dla potrzeb bibliotek.
Po zainicjowaniu pamięci proces zaczyna wykonywać swój kod poczynając od funkcji ``main''. W trakcie prologu tej funkcji rezerwowane jest na stosie miejsce na zmienną ``tymczasowa''. W trakcie wykonania (druga linijka) tworzona jest zmienna dynamiczna będąca duplikatem zmiennej ``napis'' a jej adres wstawiany jest do zmiennej ``tymczasowa''. Przy końcu programu zmienna dynamiczna (której adres wciąż przechowuje zmienna ``tymczasowa'') jest niszczona. Epilog funkcji ``main'' niszczy zmienną lokalną ``tymczasowa''. Zakończenie się tej funkcji kończy jednocześnie proces. W trakcie usuwania zakończonego procesu niszczone są pozostałe zmienne.

Gospodarka pamięcią w systemach bez mechanizmu pamięci wirtualnej

CP/M

Najprostszą gospodarkę pamięcią prezentuje system operacyjny CP/M. Ponieważ w systemie tym może istnieć tylko jeden proces, dostaje on całą pamięć w swoje władanie. System operacyjny iinformuje go jedynie, gdzie znajdują się jego obszary pamięci. Poza tym ostrzeżeniem, system operacyjny nie chroni swej pamięci przed procesem.

Systemy wieloprocesowe

W wieloprocesowych systemach operacyjnych należy stworzyć mechanizmy przydzielania pamięci wielu procesom oraz ochrony pamięci przydzielonej poszczególnym procesom i pamięci zajmowanej przez kod i dane jądra przed innymi procesami.
W pierwszych sysemach wieloprocesowych z ochroną pamięci uruchamiany proces otrzymywał sztywną pulę pamięci wyznaczną przez adresy graniczne. Proces musiał zmieścić swój kod i dane w zadanym obszarze. Użycie zmiennych dynamicznych było w związku z tym ograniczone. W przypadku odwołania się do adresów spoza wyznaczonych granic proces wpadał w pułapkę i był kończony.

MS-DOS

W systemie operacyjnym MS-DOS proces przy starcie może zarezerwować pewną ilość tzw. segmentów pamięci operacyjnej położonej poniżej adresu 655360. W trakcie życia może zarezerwować dodatkowe segmenty lub zwolnić je. Może też rezerwować i zwalniać pamięć powyżej 1MB. Nowy proces będzie uruchomiony pod warunkiem, że jest dość segmentów dla niego w obszarze pierwsych 640kB pamięci. MS-DOS nie zapewnia ochrony pamięci.

MS-Windows 3.x

Windows 3.x są nakładką na MS-DOS częściowo modyfikującą jego zachowanie, m in. zarządzanie pamięcią. Przede wszystkim znika ograniczenie wielkości pamięci procesu do 640kB. MS-Windows również nie zapewniają pamięci.
Obszary pamięci można rezerwować jako:

MS-Windows zapewnia dwa mechanizmy gospodarowania pamięcią:

  1. Konsolidacja. W przypadku gdy dla nowotworzonego procesu, lub procesu, który zarządał pamięci brak miejsca, odblokowane obszary klasy discardable są niszczone, a odblokowane obszary klasy movable przesuwane tak by utworzyć spójny obszar mogący zaspokoić żądanie.
    0x01 graphic

  2. Wymiana. Jeżeli powyższe operacje nie pozwalają uzyskać spójnego obszaru pamięci odpowiedniej wielkości, jeden lub więcej z obszarów klasy fixed, lub zablokowanych obszarów klas movable i discardable należących do innych procesów trafia na dysk do pliku wymiany. Zmiana kontekstu (uzyskanie procesora przez inny proces) powoduje że obszary pamięci danego procesu umieszczone w pliku wymiany są sprowadzane do pamięci operacyjnej, a obszary należące do innych procesów, pokrywające się w pamięci operacyjnej z nimi są konsolidowane lub trafają do pliku wymiany.

Jak widać na rysunku 3.2 pomimo zastosowania konsolidacji pamięci, jest ona wciąż pofragmentowana, choć największy spójny obszar znacząco wzrósł. Fragmentacja pamięci powoduje, że żądania przydziału pamięci, domagające się mniej pamięci niż jest w sumie wolne, ale więcej niż zawiera największy spójny obszar mogą nie zostać spełnione.
Z pomocą przychodzi wymiana (mechanizm zapewniany przez system operacyjny) i nakładkowanie (mechanizm zapewniany przez programistę lub jego kompilator). Polegają one na czasowym usuwaniu pewnych obszarów pamięci na dysk do specjalnie utworzonego pliku wymiany. Mechanizmem nakładkowania nie będziemy się tu zajmować, jest on zbliżony do mechanizmu wymiany, a dotyczy głównie wymiany zestawów podprogramów.
Wadą mechanizmu wymiany jest to, że pamięć jest usuwana na dysk wielkimi blokami, a w razie przełączenia kontekstu cała pamięć procesu musi być przeniesiona od razu z pliku wymiany do pamięci operacyjnej. Nie można również zarezerwować obszaru większego niż dostępna pamięć operacyjna.

Mechanizm pamięci wirtualnej

Zalety i wady

Mechanizm pamięci wirtualnej nie posiada wad przedstawionych w poprzednim paragrafie. Jego cechy to:

Wadami mechanizmu pamięci wirtualnej są

Zasada działania

Najistotniejszym elementem mechanzmu jest rozróżnienie między adresem logicznym a fizycznym komórki pamięci i sposób odwzorowania adresu logicznego na fizyczny.
Adresem fizycznym komórki nazywamy adres, jaki wysyła na magistralę adresową procesor, aby odwołać się do tej komórki. Każda komórka pamięci operacyjnej ma swój niezmienny adres fizyczny. Każdy adres fizyczny odnosi się zawsze do tej samej komórki pamięci lub jest zawsze błędny.
Adresem logicznym (lub wirtualnym) nazywamy adres jakim posługuje się program, aby odwołać się do zmiennej lub instrukcji. Adres logiczny może odnosić się zarówno do komórki pamięci operacyjnej jak i słowa maszynowego zapisanego na dysku. Przypisanie adresu logicznego do konkretnej komórki pamięci, czy konkretnego miejsca na dysku jest inne dla każdego procesu i może się zmieniać w trakcie jego życia.
Pamięć operacyjna dzielona jest na ramki, to jest spójne obszary o stałym romiarze zwanym wielkością ramki. Przestrzeń adresów wirtualnych dzielona jest na strony, to jest spójne obszary o stałym rozmiarze zwnym wielkością strony. Wielkość strony równa się wielkości ramki i jest wielokrotnością rozmiaru sektora dyskowego. Wielkość strony jest rzędu 1kB, i tak, w systemie VMS wynosi ona 512B, w Linuksie - 1kB a w Windows NT - 4kB.
Analogicznie do pamięci operacyjnej, można przyjąć, że plik wymiany dzieli się również na ramki. Strona pamięci wirtualnej może znajdować się w jednej z ramek pamięci operacyjnej, jednej z ramek pliku wymiany lub być stroną niezarezerwowaną (błędną). Odwzorowania stron pamięci wirtualnej w ramki pamięci operacyjnej lub ramki pliku wymiany dokonuje procesor za każdym razem, gdy oblicza adres fizyczny z adresu wirtualnego (celem pobrania instrukcji, lub odwołania się do zmiennej). Do odwzorowywania stron w ramki służą mu tablice stron wirtualnych.  Szczegóły tłumaczenia adresu logicznego na fizyczny w prypadku, gdy strona znajduje się w pewnej ramce pamięci operacyjnej ilustruje rys. 3.3.
0x01 graphic

Adres logiczny składa się z dwóch cęści: numery strony i przesunięcia na stronie. Numer strony służy jako indeks do tablicy stron wirtualnych. W tablicy tej odnajdywana jaest pozycja odpowiadająca dnej stronie. Na podstawie atrybutów procesor ustala, czy strona znajduje się w pamięci operacyjnej i jeśli tak, pobiera numer ramki po czym łączy go z przesunięciem na stronie otrzymując adres fizyczny, który może być wysłany na magistralę adresową.
Jeżeli atrybut dostępności strony wskazuje, że znajduje się ona w pamięci wymiany, następuje tzw. ``page fault'' - wyjątek pamięci wirtualnej. Procesor przerywa proces (wątek), który odwołał się do nieobecnej strony i przenosi go w stan uśpiony. Jednocześnie podejmowane są działania mające na celu sprowadzenie strony do pamięci t.j. wyszukiwana jest wolna ramka. Jeśli wolnej ramki brak, jedna z ramek zajętych zapisywana jest na dysk i zwalniana. Uzyskana ramka pamięci operacyjnej zapełniana jest zawartością przywracanej strony przechowywaną w pliku wymiany.
Tablice stron mogą rezydować tak jak to pokazano na rysunku w specjalnych obszarach pamięci, które są znane procesorowi przez ich adres fizyczny (a nie logiczny) lub też mogą być częściowo przechowywane w podręcznej pamięci asocjacyjnej procesora. Wiele systemów operacyjnych dopuszcza by część tabeli stron mogła być przenoszona do pliku wymiany.
Duża część mechanizmu pamięci wirtualnej musi być realizowana sprzętowo przez procesor. System operacyjny dochodzi do głosu gdy następuje page fault i trzeba sprowadzić stronę do pamięci, usuwając być może inną stronę oraz dokonać przełączenia kontekstu. Mechanizm ten może zatem działać jedynie w systemach operacyjnych działających na procesorach wspierających go, takich jak np. Intel i386 i nowsze procesory Intela, procesory Alpha, nowsze procesory Motorolli itd.

Izolacja procesów i ochrona pamięci.

Aby zapewnić każdemu procesowi prywatną przestrzeń adresową, dostaje on własną tablicę stron wirtualnych. W związku z tym tablica ta jest elementem kontekstu procesu. Przełączenie kontekstu wymaga wczytania do procesora tablicy stron nowego procesu (a przynajmniej jej części).
Atrybutem strony może być uprawnienie procesu do posługiwania się tą stroną:

Niektóre systemy operacyjne wyróżniają bardziej złożony system uprawnień np. copy on write i execute only, pod warunkiem, że procesor wspiera takie upranienia.
Proces, diałając w trybie użytkownika, nie ma możliwości bezpośredniej zmiany zawartości tablicy stron. Może on zlecić systemowi operacyjnemu rezerwację nowych stron (np. na zmienne dynamiczne) lub zwolnienie tych które przestał używać. Odbywa się to przez wywołanie odpowiednich podprogramów jądra (działających w trybie jądra).

0x01 graphic

Rozdział 4: Zarządzanie wejściem-wyjściem

Ogólna architektura podsystemu wejśia/wyjścia

Ogólną architekturę wejścia/wyjścia przedstawiono na rys. 4.1.
0x01 graphic

Na sprzęt (patrz rozdział 1 i rys. 1.1) składa się pewna ilość urządzeń wejścia wyjścia zwanych dalej urządzeniami fizycznymi (ang. phisical device), każde z tych urządzeń sterowane jest przez sterownik sprzętowy (ang. hardware controller).
Do komunikacji z urządzeniami fizycznymi wykorzystuje się zasoby urządzeń t.j. rejestry we/wy, przerwania, adresowalną pamięć urządzeń i kanały DMA.
Jądro systemu operacyjego zawiera pewną ilość modułów zwanych stertownikami programowymi urządzeń (ang. device driver), które potrafią sterować urządzeniami. Jeden sterownik może obsługiwać wiele urządzeń podobnego typu (np. sterownik dysków) lub uzupełniających się typów (np. sterownik terminala obsługuje klawiaturę i kartę graficzną wraz z monitorem).
Sterowniki programowe tworzą dla wyższych warstw oprogramowania urządzenia logiczne (ang. logical device). Urządzenie logiczne jest obiektem będącym abstrakcją urządzenia fizycznego. Na urządzeniu logicznym można dokonywać operacji zapisu i odczytu poprzez podprogramy dostarczane przez sterownik. Wyższe warstwy oprogramowania nie muszą znać szczegółów sterowania danym urządzeniem.
Wsród urządzeń logicznych można wyodrębnić następujące typy:

Modyły jądra odpowiedzialne za wyższe funkcje to moduły systemów plików, protokołów sieciowych, interfejsu użytkownika itp.
Systemy plików mogą być zakładane na urządzeniach blokowych. System plików umożliwia przechowywanie na tym  samym urządzeniu różnych informacji w sposób pozwalający wyszukać potrzebne zbiory danych oraz zabezpieczyć dane przed niepowołanym dostępem.
Wyższe funkcje we/wy dostępne są przez tzw. API (application programmer's interface - interfejs programisty aplikacji) czyli zbiory podprogramów dostępnych do wywołania przez aplikacje.
Istnieją pewne złożone operacje, które nie powinny lub nie muszą być wykonywane w jądrze systemu operacyjnego ze względu np. na wydajność systemu, dążenie do zmniejszenia stopnia komplikacji jądra czy bezpieczeństwo. Do wykonania tych operacji uruchamia się przy starcie systemu programy usługowe zwane też demonami (ang. daemon). Przykłady zastosowań: zarządzanie kolejkami wydruków, implementacja części usług sieciowych czy wymiatanie buforów dyskowych.
Programy usługowe i aplikacje mogą się odwoływać bezpośrednio do urządzeń logicznych, jeżeli konfiguracja systemu na to pozwala lub do odpowiednich API. Żadna warstwa oprogramowania z wyjątkiem sterowników programowych nie odwołuje się bezpośrednio do sprzętu.

Zasoby urządzeń fizycznych

Zasoby urządzeń fizycznych umożliwiają procesorowi i wykonywanemu się na nim oprogramowaniu komunikować się z urządzeniami fizycznymi. Wyróżnia się cztery klasy zasobów urządzeń fizycznych:

Rejestry we/wy

Rejestry we/wy to rejestry sterowników sprzętowych, do których procesor może wpisywać (lub odczytywać) dane podane na magistralę danych, podając na magistralę adresową adres rejestru. Wiele procesorów informuje o operacjach na rejestrach we/wy podając sygnał na specjalną ścieżkę w magistrali sterującej, co pozwala oddzielić przestrzeń adresową pamięci fizycznej od przestrzeni adresowej rejestrów we/wy. Rozwiącanie to zastosowano w procesorach Intela. Istnieją procesory, które nie rozróżniają pamięci operacyjnej i rejestrów we/wy, jak np. Motorolla 6502. Komplikuje to pracę projektantom magistral.
Funkcje rejestrów we/wy mogą być różne. Zapis do pewnego rejestru może być komendą dla sterownika sprzętowego urządzenia. Inne rejestry służą jako bufory wejścia wyjścia - należy do nich wpisyswać dane wysyłane do urządzenia a odczytywać dane przychodzące z urządzenia. Jeszcze inne rejestry pozwalają odczytać status urządzenia lub ostatnio wykonanej operacji.
Adresy rejestrów we/wy danego sterownika sprzętowego często mogą być modyfikowane. Nadaje się je ustawiając zworki na karcie sterownika (np. dawne modele kart sieciowych zgodnych z NE2000), konfigurując programem SETUP (np. adresy portów szeregowych) lub programem dostarczonym przez producenta urządzenia (np. karty sieciowe ISA 3Com) lub poprzez fakt włączenie karty w konkretne gniazdo magistrali (np. karty PCI).
O ustawieniu adresów we/wy na sterowniku sprzętowym należy poinformować sterownik programowy (ang. driver), aby mógł się poprawnie odwoływać do danego urządzenia. Nowsze sterowniki programowe potrafią same wykryć adresy we/wy swoich sterowników fizycznych.
Adresy we/wy nie muszą tworzyć spójnej przestrzeni adresowej jak to było z pamięcią fizyczną. Jeżeli adresy we/wy dwóch sterowników pokrywają się, to urządzenia te nawzajem przeszkadzają sobie w pracy. Mówimy wtedy o konflikcie adresów we/wy. Konflikt rozwiązuje się nadając jenemu z urządzeń inne adresy we/wy i informując o tym sterownik programowy danego urządzenia.
Rejestry we/wy zapewniają przepływ niewielkich paczek informacji w obie strony (procesor <-> urządzenie). Inicjatorem komunikacji jest zawsze procesor.

Przerwania

Przerwana to sygnały jakie wysyłają sterowniki sprzętowe aby poinformować procesor o istotnym zdarzeniu, które wymaga poświęcenia przez procesor uwagi danemu urządzeniu. Przykładami takich wydarzeń może być wciśnięcie klawisza, zakończenie operacji dyskowej, nadejście pakietu informacji do karty sieciowej itp.
Aby odróżnić zdarzenia pochodzące od różnych urządzeń, poszczególnym sterownikom sprzętowym przypisuje się numery przerwań w podobny sposób jak to było z adresami we/wy, przy czym zakres numerów przerwań sprzętowych jest niewielki i przykładowo wynosi od 0 do 15 dla komputerów o architekturze PC/AT. Konflikt numerów przerwań może być równie katastrofalny w skutkach jak konflikt adresów we/wy. Podobnie jak z adresami we/wy, o ustawieniu numeru przerwania w sterowniku sprzętowym należy poinformować odpowiedni sterownik programowy.
Po otrzymaniu przerwania procesor przerywa aktualnie wykonywany proces, zapisuje część swego kontekstu na stosie (przynajmniej wskaźnik instrukcji i rejestr flagowy) i przechodzi do wykonania podprogramu obsługi przerwania zarejestrowanego dla danego numeru przerwania. Podprogram ten pochodzi ze sterownika programowego danego urządzenia i został zarejestrowany w trakcie inicjacji sterownika. Po zakończeniu obsługi przerwania sterowanie wraca do przerwanego procesu, który wykonuje się dalej tak jakby nie został przerwany.
Istnieje hierarchia przerwań, tzn. pewne przerwania mogą być przerywane przez inne umieszczone wyżej w hierarchii.
Aby zwiększyć szybkość reagowania na przerwania podprogram obsługi przerwania wykonuje się w kontekście procesu, który został przerwany, co pociąga za sobą możliwość manipulowania danymi procesu przez podprogram obsługi przerwania pochodący ze źle lub złośliwie napisanego sterownika programowego.

Adresowalna pamięć

Adresowalna pamięć sterownika to część pamięci RAM lub ROM sterownika sprzętowego, która jest widoczna dla procesora w przestrzeni adresów fizycznych pamięci. Przykłady zastosowań: pamięć obrazu karty graficznej, pamięć ROM zawierająca kod podprogramów wchodzących w skład sterownika programowego danego urządzenia.

Kanały DMA

Kanały DMA (direct memory access - bezpośredni dostęp do pamięci) są to narzędzia jakie udostępniają magistrale sterownikom sprzętowym we/wy, aby te mogły bezpośrednio czytać lub pisać do pamięci operacyjnej (bez pochłaniania uwagi procesora). Podczas gdy sterownik sprzętowy dokonuje operacji przez kanał DMA magistrala stgerująca blokuje procesorowi dostęp do całości lub części pamięci. Z kanałów DMA korzystają sterowniki urządzeń przesyłających dane z wielkimi prędkościami takich jak dyski, karty sieciowe czy kardt dźwiękowe.
Kanały DMA mają swoje numery, do których przydzielania odnoszą się podobne uwagi co do przydziału adresów we/wy.

Sterowniki i urządzenia logiczne

Sterownik programowy (ang. device driver) to zbiór podprogramów pozwalających sterować danym urządzeniem (urządzeniami) fizycznym. Dla poprawnej pracy sterownik musi znać zasoby sterownika sprzętowego urządzenia fizycznego, poprzez które może się z nim komunikować. Jeżeli sam nie potrafi ich znaleźć, należy podać mu je podczas konfiguracji.
Pojedyńczy sterownik może obsługiwać wiele urządzeń fizycznych tego samego typu (np. dysków) lub typów uzupełniających się (np. klawiatura i ekran).
Wyższym warstwom oprogramowania sterownik prezentuje pewną ilość urządzeń logicznych (ang. logical device). Każde urządzenie logiczne ma swoją unikalną nazwę np. "A:", "C:", "COM1:" w MS DOS czy "/dev/fd0", "/dev/hda1", "/dev/cua0" w Linuksie (podobne nazwy są w innych systemach uniksowych).
W MSDOSie nazwy urządzeń logicznych nie mogą być dłuższe niż 9 znaków łącznie z obowiązkowym końcowym znakiem dwukropka ":". W MS Windows NT nazwy urządzeń logicznych umieszczone są w drzewie nazw obiektów systemowych, dodatkowo istnieje mechanizm tłumaczenia nazw MSDOSa na nazwy obiektów MS Windows NT. W uniksie każdemu urządzeniu logicznemu udostępnionemu przez administratora odpowiada plik specjalny w katalogu "/dev", stąd nazwy urządzeń zaczynają się na "/dev/".
Urządzenia logiczne reprezentują abstrakcje urządzeń fizycznych:

Sterownik programowy urządzenia zapewnia m.in.:

Sterowniki programowe urządzeń mogą być dostarczne przez firmy niezależne od producenta systemu operacyjnego w szczególności przez proucentów urządzeń we/wy. Najbardziej fundamentalne sterowniki takie jak sterowniki dysków, klawiatury, karty graficznej i monitora przychodzą razem z systemem operacyjnym. System operacyjny musi dawać się rozszerzać o inne sterowniki oraz definiować i egzekwować normy, których przestrzeganie pozwoli współistnieć w jednym systemie operacyjnym sterownikom programowym pochodzącym od różnych producentów.
Po zainstalowaniu, sterownik programowy staje się częścią systemu operacyjnego, w związku z czym, sterowniki nieznanego pochodzenia mogą stanowić wyłom w bezpieczeństwie systemu.

Urządzenia dyskowe

Budowa urządzeń dyskowych

Dysk jest urządzeniem blokowym przeznaczonym do przechowywania dużych ilości danych. Najmniejszą porcję danych jaka może być odczytana/zapisana na dysk nazywamy sektorem.
Obecnie budowane dyski składają się z pewnej ilości talerzy (ang. plate) na których dwustronnie zapisywana jest informacja przez kolumnę głowic (ang. head) odczytująco-zapisujących. Na każdym talerzu wyodrębnić można ścieżki (ang. track) w postaci koncentrycznych okręgów, na których przy ustalonym położeniu kolumny głowic zapisywana jest informacja. Ścieżki należące do różnych dysków odpowiadające ustalonemu położeniu kolumny głowic nazywa się cylindrem (ang. cylinder). Na każdej ścieżce wyodrębnia się pewną ilość sektorów.
Bezpośredni kontroler dysku jest najczęściej zintegrowany z dyskiem. Do komputera dysk jest przyłączony poprzez magistralę dyskową i adapter - sterownik sprzętowy magistrali dyskowej. Popularnie stosowane są dwa rodzaje magistral dyskowych i związanych z nimi protokołów komunikacji z dyskami:

Wydajność dysku (ang. overall disk speed) charakteryzują parametry:

Organizacja logiczna dysku

Dysk jest charakteryzowany przez następujące zależne od siebie parametry, od których zależy pojemność dysku:

Sektory na dysku można posortować w/g numeru cylindra, numeru głowicy i numeru sektora na ścieżce a następnie w tej kolejności ponumerować. Powstaje w ten sposób płaski numer sektora. Niektóre dyski dopuszczają by do ich sektorów odwoływać się poprzez podanie płaskiego numeru sektora, inne wymagają podania tzw. parametrów geometrycznych tj. numeru głowicy, numeru cylindra i numeru sektora na ścieżce.
Utworzenie na dysku ścieżek i sektorów na ścieżkach nazywamy formatowaniem niskopoziomowym. Formatowanie niskopoziomowe przeprowadzane jest najczęściej u producenta lub jako pierwsza czynność po zainstalowaniu dysku w systemie. W czasie formatowania niskopoziomowego dokonywane jest także sprawdzanie zdatności nośnika magnetycznego. Przeprowadzenie formatowania niskopoziomowego wymazuje z dysku wszelkie informacje (łącznie z tablicą partycji).
Na dysku można wydzielać obszary zwne partycjami, przydzielane różnym systemom plików, być może należących do różnych systemów operacyjnych. Wiele systemów plików wymaga aby ich partycje zawierały pełne cylindry. Opis podziału dysku na partycje znajduje się w tzw. tablicy partycji umieszczonej na początku dysku. Zmiana podziału na partycje niszczy zawartość partycji, których rozmiar lub położenie uległo zmianie. Do manipulacji tablicą partycji służy program fdisk.
Na każdym dysku obsługiwanym przez MSDOS, MS Windows 3.xx lub 95 może istnieć jedna partycja podstawowa FAT16 lub FAT32 oraz jedna partycja rozszerzona z pewną ilością podpartycji FAT16 lub FAT32.
Po utworzeniu partycji należy na każdej z nich zapisać dane niezbędne do poprawnego funkcjonowania systemu plików. Ten proces nazywamy formatowaniem wysokopoziomowym. Formatowanie wyskokpoziomowe może zniszczyć dane zapisane na danej partycji.
Jeżeli system operacyjny startuje z dysku, jedna z partycji, tzw. partycja aktywna powinna zawierać program ładujący jądro systemu operacyjnego oraz wszystkie inne pliki niezbędne do startu systemu. Program ładujący jadro bywa umieszczany w zerowym sektorze dysku, zwierającym też tablicę partycji zwanym sektorem startowym (ang. bootsector).
System operacyjny łączy sektory dyskowe w większe jednostki, które traktuje nierozdzielnie przy przydzielaniu ich plikom. Jednostki te nazywają się w różnych systemach: jednostkami alokacji (ang. allocation unit), blokami (ang. block) klasterami (ang.cluster). Przykładowe rozmiary jednostek alokacji to:

Programowe sterowniki dysków wykorzystują pamięć podręczną przy dostępie do dysków. W pamięci podręcznej przechowywane są jednostki alokacji, na których ostatnio dokonywano operacji (zapis na dysk nie następuje natychmiast) oraz te, o których sądzi się, że w niedługim czasie będą odczytywane. Przyspiesza to czas operacji na często używanych plikach, lub gdy wczytuje się dane z pliku w sposób sekwencyjny. W MSDOSie i MS Windows 3.11 rozmiar dyskowej pamięci podręcznej należało ustawić ręcznie. W nowszych systemach rozmiar ten ustalany jest automatycznie na podstawie ilości dostępnej pamięci i częstości operacji na dysku.

Systemy plików

Pliki

Systemy plików mają zapewnić możliwość przechowywania zbiorów danych na urządzeniach zewnętrznych komputera w sposób pozwalający na późniejsze odwoływanie się do danych, ich przetwarzanie oraz łatwe wyodrębnianie, kopiowanie, przenoszenie i usuwanie do i z systemu.
Plikiem lub zbiorem danych (ang. file) nazywamy ciąg bajtów określonej długości stanowiący dla systemu plików atomiczną całość, wyposażony w nazwę i inne atrybuty zależne od systemu plików takie jak daty utworzenia, ostatniej modyfikacji, dostępu, flagę archiwizacji, czy uprawnienia.
Strumieniem (ang. stream) nazywamy obiekt z którego można czytać lub do którego można zapisywać dane w sposób sekwencyjny (bajt po bajcie). Strumienie stanowią ważną abstrakcję danych, wykorzystywaną m.in. przy dostępie do plików. Przykładami strumieni mogą być poza zwykłymi plikami znakowe urządzenia logiczne (w szczególności terminale).
Wiekszość systemów plików zapewnia do zwykłych plików zarówno dostęp sekwencyjny (tak jak do strumienia) jak i swobodny (w dowolnym momencie można powoływać się na dowolny bajt, lub ciąg bajtów pliku podając adres pierwszego bajtu i długość ciągu).

Katalogi

Aby ułatwić odszukiwanie plików, tworzy się hierarchiczną strukturę zwaną drzewem katalogów.
Katalogiem (ang. directory) nazywamy plik interpretowany przez system plików jako listę odwołań do innych plików. Jako synonimy katalogu stosuje się także nazwy folder i kartoteka.
Wszystkie obecnie spotykane systemy plików dopuszczają aby katalogi zawierały inne katalogi (tzw. podkatalogi ang. subdirectory), przy czym wymaga się, aby graf katalogów był drzewem (ang. tree) skierowanym. Każdy katalog ma co najwyżej jeden nadkataolg (ang. updir). Istnieje dokładnie jeden katalog będący korzeniem drzewa katalogów, który nie posiada swego nadkatalogu (lub sam jest sobie nadkatalogiem, ang. root directory). Niektóre systemy plików (np. uniksowe systemy plików) dopuszczają aby ten sam plik mógł się znajdować w wielu katalogach jednocześnie lub w tym samym katalogu pod różnymi nazwami. W takich systemach plików katalogi i pliki tworzą graf acykliczny. W systemach plików FAT16 i FAT32 stosowanych w MSDOS i MS Windows 3.xx i 95 pliki i katalogi tworzą drzewo.

Nazywanie plików

Jak wcześniej stwierdzono, każdy plik posiada nazwę (ang. file name). Nazwa pliku musi być unikalna w ramach katalogu.
Każdy plik w systemie plików posiada (przynajmniej jedną) pełną (bezwzględną) nazwę, unikalną w ramach całego systemu plików, tworzoną przez połączenie z nazwą pliku tzw. ścieżki bezwzględnej, t.j. nazw wszystkich katalogów, jakie należy przejść aby osiągnąć dany plik poczynając od korzenia drzewa katalogów. Jeśli pliki i katalogi tworzą drzewo to każdy plik posiada dokładnie jedną pełną nazwę.
Między innymi dla uproszczenia nazewnictwa plików wprowadza się pojęcie katalogu bieżcego. Katalog bieżący może być związany z procesem (jak np. w Uniksie) lub być globalnym dla wszystkich procesów systemu (MSDOS). Nazwa utworzona z nazwy pliku i tzw. ścieżki względnej, t.j. nazw katalogów jakie należy przejść aby osiągnąć dany plik poczynając od katalogu bieżącego nosi nazwę nazwy względnej. Przejście do nadkatalogu sygnalizowane jest w ścieżce i nazwie względnej przez człon "..".
Do łączenia nazw katalogów i plików w ścieżki i nazwy względne i bezwzględne używa znaku charakterystycznego dla danego systemu operacyjnego zwanego dalej znakem katalogu:

W MSDOSie, MS Windows XX i systemach zgodnych z uniksem katalog główny nosi nazwę taką jak znak katalogu ("\" w MSDOS, "/" w uniksach), a nazwa bezwzględna różni się tym od nazwy względnej, że nazwa bezwzględna zaczyna się znakiem katalogu, np. "\Windows\Command" - ścieżka bezwzględna, "Command" - nazwa względna, (względem katalogu "\Windows").
System operacyjny z różnych powodów narzuca pewne ograniczenia na nazwy plików, np. długość - 8 znaków nazwy właściwej + 3 znaki rozszerzenia w MSDOS, 14 znaków w niektórych uniksach, 255 znaków w niektórych nowszych systemach operacyjnych. Innym ograniczeniem jest to jakie znaki można stosować w nazwach. Uniksy dopuszczają wszystkie znaki oprócz (co jest oczywiste) znaku katalogu "/" i znaku końca łańcucha (znak o kodzie 0). Systemy te rozróżniają duże/małe litery. MSDOS dopuszczał jesynie litery, cyfry, i kilka znaków nieliterowych, m.in. "_", "$" i "!". MS Windows 95 dopuszczają m.in. odstęp (czyli sację " "), "-" i wiele innych. Systemy te nie rozróżniają dużych/małych liter przy odwołaniach do plików, choć MS Windows 95 rozróżnia je przy wyświetlaniu nazw plików.
Kilku słów komentarza wymaga mechanizm pozwalający korzystać z tego samego systemu plików zarówno przez MS Windows 95 (długie nazwy) jak i starsze wersje systemów Microsoftu. Mechanizm ten zwany jest Virtual FAT (vfat). Każdy plik posiada dwie nazwy, tzw. nazwę długą tworzoną zgodnie z regułami MS Windows 95 i nazwę 8+3 tworzoną zgodnie z regułami MSDOSa na podstawie nazwy długiej. MSDOS widzi w danym katalogu tylko nazwy 8+3, natomiast MS Windows 95 widzi obie nazwy, a domyślnie wyświetla nazwy długie.

Systemy plików a dyski logiczne

Każdej partycji odpowiada urządzenie logiczne i związana z nim nazwa dysku logicznego. Istnieją dwa podejścia do nazywania plików położonych na różnych partycjach:

  1. Globalny system plików. Takie nazewnictwo występuje w uniksach. Istnieje jeden katalog główny dla całego systemu operacyjnego. Katalog ten jest jednocześnie katalogiem głównym wyróżnionej partycji, zwanej partycją korzeniową (ang. root). Katalogi główne pozostałych partycji są montowane do liści drzewa partycji korzeniowej lub wcześniej zamontowanych partycji, rozbudowując drzewo. Rozmieszczenie poszczególnych katalogów i plików na partycjach jest przezroczyste dla użytkowników. Dołożenie nowego dysku lub przemieszczenie całych katalogów pomiędzy partycjami nie musi powodować zmiany nazwy bezwzględnej żadnego pliku. Pomaga w tym mechanizm dowiązań symbolicznych (ang. symbolic link, czyli skrót, ang. shortcut, w terminologi MS Windows ).

  2. Jawne nazwy dysków. Takie nazewnictwo wykorzystują m.in. MS DOS i MS Windows XX. Nie istnieje globalny system plików. Tworząc pełną nazwę pliku należy powołać się na nazwę dysku logicznego. Dyski logiczne mają nazwy składające się z pojedyńczej dużej litery alfabetu łacińskiego i dwukropka (np. "A:", "C:", takich nazw  może być najwyżej 26). Użytkownik musi pamiętać na którym dysku znajdują się jego pliki. Dodanie nowego dysku lub przemieszczenie katalogów między dyskami powoduje zmianę bezwzględnych nazw plików.
    Dla ułatwienia tworzenia nazw względnych pojawia się pojęcie dysku bieżącego. Jeżeli nazwa pliku nie zawiera nazwy dysku, to przyjmuje się że odnosi się do dysku bieżącego.
    Każdy dysk logiczny ma swój katalog bieżcy. Jeśli w nazwie pliku podana będzie nazwa dysku, a po niej nie nastąpi znak "\", to plik jest poszukiwany idąc po ścieżce poczynając od bieżącego katlogu podanego dysku.

Typy plików

Systemy operacyjne wyróżniają typy plików, które są traktowane w sposób specyficzny. Jeden spośród atrybutów pliku zwany typem pliku decyduje o sposobie traktowania pliku przez system operacyjny. Najczęściej spotykane typy plików to:

  1. Katalogi. O katalogach była już mowa.

  2. Pliki specjalne urządzeń - występują w systemach uniksopodobnych, służa do nazywania urządzeń logicznych.

  3. Kolejki FIFO, kolejki komunikatów, gniazda (ang. sockets), strumienie - pliki realizujące bardziej złożone sposoby dostępu. Występują w systemach uniksopodobnych i MS Windows NT.

  4. Dowiązania sybmoliczne (ang. symbolic link) inaczej skróty (ang. shortcut). Pliki które stanowią odwołanie do innych plików lub katalogów. Większość operacji wykonywanych na tych plikach odnosi się w rzeczywistości do plików przez nie wskazywanych.

  5. Pliki wykonywalne (ang. executables): programy, komendy, skrypty (ang. scripts), pliki wsadowe (ang. batch files) - pliki zawierające kod programu do wykonania przez procesor lub komendy do wykonania przez powłokę (lub inny interpreter).
    Programy mogą być wyróżnione jak w systemach uniksopodobnych przez posiadanie specjalnego uprawnienia do wykonania lub przez nadanie odpowiedniego rozszerzenia, np. ".COM", ".EXE " i ".BAT" w MSDOSie.

  6. Zwykłe pliki z danymi. Te dzielą się na podtypy, zależnie od posiadanego rozszerzenia, tj przyrostka nazwy pliku zaczyającego się zazwyczja znakiem kropki lub od tzw. liczby magicznej tj. pierwszych 2 lub 4 bajtów zawartości pliku. Interpretacją zawartości plików z danymi róznych typów zajmują się specjalizowane aplikacje (takie jak MS Word, AutoCAD itp.). System operacyjny nie próbuje interpretować tych plików, co najwyżej powłoki użytkownika dostarczają narzędzi do łatwego uruchamiania odpowiednich aplikacji, rejestrowania nowych typów plików z danymi i kojarzenia z nimi aplikacji.

ASCII

Na osobne omówienie zasługuje plik tekstowy ASCII. Otrzymuje on często rozszerzenia ".txt" lub ".asc". Bajty przechowywane w tym pliku interpretowane są jako znaki alfanumeryczne kodowane w ASCII (Amercan Standard Code for Information Interchange). Kod ten koduje duże i małe litery, cyfry, znaki przestankowe oraz podstawowe symbole matematyczne.
Aby nadać danym przechowywanym w plikach ASCII formę podobną do dokumentów pisanych na dwuwymiarowych kartkach, pewne znaki o kodach mniejszych od 32 oraz znak o kodzie 127 otrzymują specjalne znaczenie sterujące. Na znaczenia przypisane znakom sterującym poważny wpływ miały terminale teletekstowe (ang. teletype) stosowane w początkowych fazach rozwoju informatyki. Ważniejsze znaki sterujące to:

Oryginalny kod ASCII jest siedmiobitowy. Ósmy bit bajtu używany był jako suma kontrolna. Obecnie wykorzystywane jest wszystkie osiem bitów. Tak uzyskane dodatkowe 128 znaków służy do przedstawiania semigrafiki lub znaków narodowych. Ponieważ jest to zamało do przedstawienia znaków narodowych, choćby wszystkich alfabetów łacińskich, wprowadzono strony kodowe, t.j. sposoby kodowania znaków spoza podstawowego alfabetu łacińskiego. W Polsce obowiązuje norma przemysłowa zgodna z normą międzynarodową ISO 8895-2. Popularnie stosowane oprogramowanie Microsoftu z wyjątkiem MS Windows NT stosujących unikody (ang. unicode) nie jest zgodne z powyższymi normami i wprowadza dwie własne strony kodowe CP 852 (MSDOS) i CP 1250 (MS Windows XX).
Pliki ASCII ze wględu na prostotę kodowania informacji są powszechnie wykorzystywane jako pliki konfiguracyjne, dzienniki odnotowujące błedy programów, pliki przenoszące dane między różnymi aplikacjami lub przechowujące dane w sposób ułatwiający użytkownikowi ingerencję niezależnie od aplikacji.

0x01 graphic

Rozdział 5: Zagadnienia bezpieczeństwa

W języku angielskim wyróżnia się dwa terminy, którym odpowiada jedno polskie określenie - bezpieczeństwo:

Są to dwie strony tego samego medalu. System nie będący bezpiecznym w jednym z powyższych znaczeń, przestaje być bezpieczny w drugim.

Autentykacja na przykładzie haseł wielokrotnych

Autentykacja jest to proces, w którym komunikujący się partnerzy potwierdzają swoją tożsamość. Najczęściej autentykacja ogranicza się jedynie do potwierdzenia tożsamości użytkownika. Zakłada się tutaj, że użytkownik pracuje w otoczeniu zaufanych komputerów. Jednak zdarzają się przypadki podszywania się "wrogich" komputerów pod "przyjazne" serwery, aby np. przechwycić hasła nieświadomych użytkowników. Wskazanie sposobów rozwiązania tego problemu znajduje się w punkcie poświęconym kryptografii. Tutaj omówiony będzie najprostszy przypadek, gdy komputery sieci lokalnej są dostatecznie dobrze chronione przed podszywaniem by każdy użytkownik mógł ufać, że każdy komputer jest tym za którego się podaje.
Użytkownik przystępując do pracy (lub łącząc się z kolejnym komputerem), proszony jest to podanie identyfikatora (konta lub profilu).
Identyfikator jest jawny. Pozwala on innym użytkownikom i oprogramowaniu powoływać się na danego użytkownika. Identyfikator ten jest ciągiem znaków, najczęściej małych liter. Zaleca się, aby miał jakiś związek z imieniem, nazwiskiem lub wydziałem, w którym pracuje użytkownik.
Teraz użytkownik musi potwierdzić swoje prawo do posługiwania się identyfikatorem. Najczęściej proszony jest o podanie znanego tylko jemu hasła. Hasło nie pojawia się na ekranie.
Oczywiście, istnieją inne bardziej wyrafinowane sposoby potwierdzania tożsamości użytkownika oparte o biometrię, karty magnetyczne lub procesorowe, czy hasła jednorazowe, ale ich omówienie wykracza poza ramy tego wykładu.
Zaletą haseł wielokrotnych jest "prostota obsługi" i brak konieczności instalowania specjalizowanego sprzętu. Wady są rozliczne:

Wad tych nie można w całości wyeliminować, ale można zrobić wiele aby je zmniejszyć:

Autoryzaja czyli o uprawnieniach

Autoryzacja, oznacza udzielanie dostępu danemu użytkownikowi (reprezentowanemu przez zautentykowany identyfikator) do tych zasobów, które są dla niego przeznaczone. W tym celu system operacyjny danego komputera utrzymuje bazę danych zawierającą informacje o tym które zasoby (pliki, katalogi, urządzenia itp.) mogą być udostępniane poszczególnym użytkownikom i na jakich prawach.
Baza ta zawiera następujące informacje:

  1. Obiekty podlegające ochronie. Najczęściej są to pliki i katalogi, w ogólności są to zasoby danego komputera.

  2. Podmioty uzyskujące prawa dostępu. Podmiotami tymi są użytkownicy. Aby ułatwić zarządzanie prawami dużych zbiorowości użytkownków wprowadza się grupy użytkowników, które są również podmiotami uzyskującymi uprawnienia. Użytkownicy są przypisywani do grup. Dany użytkownik może należeć do wielu grup. Przez fakt przynależności do danej grupy użytkownik zyskuje lub traci takie uprawnienia jakie zostały przypisane grupie.

  3. Uprawnienia. We wszystkich systemach operacyjnych powtarzają się prawa do zapisu i odczytu plików. Wiele systemów rozszerzaja te podstawowe uprawnienia o prawo do uruchamiania programów, prawo do kasowania lub tworzenia plików w katalogu, prawo do powoływania się na katalogi itp.

Na poziomie systemu operacyjnego wyróżnić można kilka klas systemów autoryzacji, dokładną klasyfikację daje "Pomarańczowa księga" Ministerstwa Obrony USA, na potrzeby tego opracowania ograniczę się do krótkiej listy:

  1. Brak autoryzacji. Takie systemy nadają się dla pojedyńczego użytkownika, lub tam gdzie autoryzacja nie jest wymagana. Np. MS DOS.

  2. Profile użytkownika. Komputer rozpoznaje użytkowników, każdemu daje spersonalizowane środowisko pracy, jednak nie zabezpiecza danych jednego użytkownika przed innym użytkownikiem. W praktyce takie systemy są więc równoważne poprzedniej klasie. Nadają się dla niewielkiej grupy zaufanych użytkowników. Np. MS Windows 9x.

  3. Wspólne hasła. System nie wyróżnia użytkowników, wyróżnia natomiast zasoby mające przypisane hasła. Każdy użytkownik, który poda hasło do zasobu, otrzymuje do niego dostęp. Utrzymanie bezpieczeństwa takich systemów jest możliwe tylko w niewielkich grupach zaufanych użytkowników. Np. Microsoft Networks w wersji peer-to-peer tj. bez serwerów Netware i NT.

  4. Klasyczne systemy wieloużytkownikowe. Wyróżniają użytkowników i grupy. Autentykacja użytkownika następuje w momencie rozpoczynania sesji pracy z systemem. Z każdym obiektem związana jest ograniczona liczba podmiotów jakie uzyskują do niego uprawnienia. Np. w standardowym uniksie każdy plik ma dokładnie jednego właściciela-użytkownika, któremu przypisane są pewne uprawnienia, dokładnie jednego właściciela-grupę mającą uprawnienia, oraz uprawnienia stosowane do pozostałych. Podobnie jest w VMSie. Wiele takich systemów jest zgodnych z klasą bezpieczeństwa C2 w sensie "Pomarańczowej księgi". W oparciu o takie systemy uprawnień działa spora część serwerów w internecie. Pewną wadą tego systemu jest to, że jedynie administrator ma swobodę nadawania uprawnień. Zwykły użytkownik ma ograniczone możliwości określania uprawnień dla innych podmiotów do swoich zasobów.

  5. Systemy z ACL (Access Control List - lista kontroli dostępu). Systemy te różnią się tym od klasycznych, że z każdym obiektem można związać dowolnie lub wystarczająco długą (np 32 elementową w Netware) listę podmiotów mających uprawnienia do danego zasobu. Użytkownik może bez pomocy administratora nadawać uprawnienia innym podmiotom do swoich zasobów (z oczywistym ograniczeniem, że nie może nadać większych niż sam ma). Do tej klasy należą takie systemy jak Novel Netware, Windows NT i niektóre uniksy np. Solaris. Są one wystarczające do większości zastosowań cywilnych.

  6. Systemy z określeniem klas poufności. Oprócz istnienia grup i ACL użytkownicy i zasoby komputera są przydzieleni do klas poufności. Żaden użytkownik nie może udzielić uprawnień do zasobów danej klasy poufności innemu użytkownkowi należącemu do klasy gorszej. Utrudnia to przypadkowe przecieki informacji tajnych i z tego powodu jest stosowane w instytucjach o podobnym do wojskowego sposobie zarządzania dostępem do informacji poufnych.

Wiele aplikacji, w szczególności bazy danych ma własne mechanizmy autentykacji i autoryzacji, gdzie wyróżnia się przywileje przypisywane użytkownikom do wykonywania pewnych charakterystycznych dla tych aplikacji operacji (np. nie każdy może dokonać sprzedaży).
Wiele serwerów sieciowych rozszerza podstawowe systemy uprawnień dostarczane przez system operacyjny, aby ograniczyć dostęp z zenątrz do charakterystycznych dla tych serwerów usług, np. serwer WWW Apache określa w których katalogach można umieszczać skrypty CGI, programy umieszczone poza tymi katalogami nie będą uruchamiane przez serwer.
Oprócz uprawnień do pojedyńczych zasobów mogą istnieć w systemie tzw, kwoty (ang. quota) tj. ograniczenia ilości jednocześnie wykorzystywanych zasobów danej klasy. Kwoty zabezpieczają system przed wyczerpaniem zasobów przez zachłannych użytkowników. Np. kwota dyskowa określa jak duży obszar dysku może być jednocześnie zajęty przez pliki danego użytkownika. Kwoty mogą też dotyczyć procentu czasu pracy procesora na rzecz danego użytkownika w jednostce czasu, ilości uruchomionych procesów itp.
W wielu systemach istnieją mechanizmy do ograniczania użytkownikowi dostępu do wydzielonych stanowisk lub określonych godzin pracy.
Wśród użytkowników wyróżnia się administratorów i operatorów, czyli takich, do których zadań należy troska o poprawne działanie systemu. Mają w związku z tym znacznie szersze prawa. W rozbudowanych systemach można wyróżnić kilka klas administratorów:

Osobnym zagadnieniem są prawa głównego administratora. Można tu wyróżnić dwa podejścia:

Audyt

Audyt oznacza śledzenie działania systemu i poczynań użytkowników. Pozwala ustalić przyczyny awarii oraz momenty i sprawców naruszeń bezpieczeństwa. Użytkownicy komputerów powinni sobie zdawać sprawę, że ich prywatność jest w każdej chwili naruszana przez audyt. Jest to zło konieczne, z którego administratorzy nie zgodzą się zrezygnować. Dostęp do dzienników systemowych powinien być ściśle limitowany.

Kopie bezpieczeństwa

Awarii systemu kończących się utratą danych nigdy nie da się wykluczyć. Posiadanie starych wersji dokumentów, które przestały być użyteczne i zostały normalną drogą usunięte z systemu też może być niekiedy cenne. Niekiedy archiwizacja wymuszana jest osobnymi przepisami, np. bazy danych księgowości. Stąd jednym z zadań administratora jest rutynowe wykonywanie kopii bezpieczeństwa plików. Systemy operacyjne i oprogramowanie narzędziowe niezależnych producentów dostarcza mu niezbędnego wsparcia. Istnieją wyspecjalizowane firmy zajmujące się kompleksowo archiwizacją danych komputerowych i tworzeniem elektronicznych baz dokumentów papierowych.

Narzędzia

Do tworzenia kopii bezpieczeństwa służy specjalizowany sprzęt i oprogramowanie.
Ze sprzętu należy wymienić przede wszystkim napędy i nośniki o dużej pojemności (rozmiary nośników podane są orintacyjnie):

Niektórzy zalecają wybierać takie nośniki, by zmieścił się na nich w całości zrzut dysku bez robienia kompresji.
Napędy backupujące można:

Wśród oprogramowania należy wyróżnić:

Do robienia kopii zapasowych należy wybierać narzędzia, które będą dostępne wiele lat po zrobieniu kopii.

Torzenie kopii bezpieczeństwa

Istnieją różne poziomy kopii bezpieczeństwa:

System operacyjny wspiera tworzenie przyrostowych kopii bezpieczeństwa utrzymując informacje o datach modyfikacji plików lub flagi niezbędności archiwizacji.
Przyjmuje się, że kopie poziomu zerowego powinno się robić nie rzadziej niż raz na kwartał a zaleca się raz na miesiąc. Kopie takie powinno się przechowywać przez czas nieokreślony, dobrze sprawdzają się tutaj streamery i CD-ROMy.
Kopie wyższych poziomów powinno sporządzać się w połowie okresów wykonywania kopii poziomów niższych, należy je przechowywać przynajmniej przez dwukrotność okresu jej sporządzania. Po upływie czasu przechowywania kopii, nośnik można wykorzystać powtórnie. Dobrze sprawdzają się tutaj takie nośniki jak streamery i dyski magnetooptyczne.
Nie wszystkie dane w komputerze są równie narażone na możliwośc utraty, można je podzielić pod tym wględem na kilka grup:

Do różnego stopnia wrażliwości i zmienności danych można dostosować częstość robienia kopii zapasowych. I tak, przyrostowe kopie firmowych danych można robić codziennie, a kopie oprogramowania raz na kwartał oraz po większych instalacjach lub uaktualnieniach.
Proste narzędzia wymagają uwagi operatora przy tworzeniu kopii, złożone (np. sysadmsh dla SCO Uniksa) potrafią włączać kopiowanie automatycznie w środku nocy w/g przygotowanego wcześniej przez administratora planu.
Po wykonaniu kopii bezpieczeństwa należy ją zweryfikować. Należy sprawdzać także kopie przechowywanez dłuższy czas w archiwum przez losowe odtwarzanie zawartych w nich plików.
Kopie bezpieczeństwa, przynajmniej te poziomu zerowego należy robić w kilku egzemplażach, z których jeden powinien być przechowywany w miejscu możliwie odległym od tego, w którym pracują objęte kopią komputery.

Kryptografia

Techniki kryptograficzne pozwalają chronić poufność i autentyczność informacji. Poufność oznacza, że informacja może być poprawnie odczytana jedynie przez upoważnione osoby (lub programy). Autentyczność oznacza, że informacja może (mogła) być wygenerowana jedynie przez upoważnione osoby w sposób dający się później poprawnie odczytać. Nieco słabszą cechą jest integralność oznaczająca że informacja nie uległą zmianie w czasie przekazu, nie gwarantuje się natomiast autentyczności jej nadawcy.
Kryptografia nie chroni przed nieupoważnioną modyfikacją danych (jest to zadanie autoryzacji) a jedynie pozwala odbiorcy wykryć i odrzucić nieautentyczne wiadomości (przez co może być wykorzystywana jako jeden z elementów algorytmów autoryzacji).
Aby móc chronić informację wykonuje się na niej przekształcenie zwane szyfrowaniem. Operacja odwrotna zwana jest deszyfrowaniem. Wiadomość początkową nazywamy tekstem jawnym lub otwartym, po zaszyfrowaniu - tekstem zaszyfrowanym lub kryptogramem.
Przekształcenie szyfrujące i deszyfrujące zależą od tzw. kluczy kryptograficznych. Podając niewłaściwy klucz przy deszyfrowaniu nie możemy poprawnie odszyfrować wiadomości. Nie znając klucza szyfrowania nie możemy zaszyfrować tekstu tworząc dający się potem poprawnie odszyfrować właściwym kluczem kryptogram.
W zastosowaniach cywilnych należy stosować jedynie te przekształcenia szyfrujące, które nie pozwalają na systematyczne odgadywanie tekstu jawnego i klucza kryptograficznego osobom, które znają algorytm przekształcenia i dowolną ilość tekstu zaszyfrowanego. Zaleca się stosowanie szyfrów spełniających silniejszy warnek: nie powinno być możliwe systematyczne odgadywanie klucza przez osoby, które mogą wygenerować z dowolnego tekstu jawnego kryptogramy i znają algorytm przekształcenia. W żadnym razie bezpieczeństwo szyfru nie powinno się opierać na utajnieniu algorytmu.
Wszystkie szyfry z wyjątkiem niemożliwego do zastosowania w praktyce szyfru z jednorazowym kluczem są teoretycznie przełamywalne, to znaczy, że w skończonym czasie można odgadnąć klucz (i w konsekwencji tekst jawny). W praktyce stosuje się zazwyczaj szyfry dla których czas potrzebny na przełamanie zależy w sposób wykładniczy od długości klucza. W przypadku wzrostu mocy obliczeniowych komputerów będących w ekonomicznym zasięgu potencjalnego przeciwnika należy wymienić klucze na dłuższe.
Amerykańskie regulacje dotyczące eksportu broni zabraniają wywozu oprogramowania kryptograficznego posługującego się kluczami dłuższymi niż 40 bitowe. Beneficjentem tego ograniczenia miał być wywiad USA dysponujący superkomputerami, jednak obecnie szyfry takie można łamać na PCtach. Powszechnie uważa się, że ograniczenie to poważnie utrudnia powstawanie oprogramowania kryptograficznego dla potrzeb cywilnych i naraża na straty również gospodarkę USA.
Wyróżnia się dwa systemy szyfrowania:

Szyfrowanie symetryczne

Zarówno do szyfrowania, jak i deszyfrowania wiadomości stosuje się ten sam klucz, lub też klucze można łatwo przekształcić jeden w drugi. W tym systemie nie da się rozdzielić ochrony poufności i autentyczności. Dla prowadzenia korespondencji między n podmiotami potrzeba razem n*(n-1)/2 kluczy (każdy podmiot potrzebuje innego klucza dla każdego ze swych n-1 partnerów - innymi słowy każda para potrzebuje osobnego klucza).
Przykłady historyczne: szyfr Cezara, Tablica Vigenere'a i Enigma oraz obecnie powszechnie stosowane: DES i IDEA.
0x01 graphic

Szyfrowanie asymetryczne

Podstawy teoretyczne opracowano dopiero w latach '70 tego stulecia.
Metody te opierają się na parze kluczy. Jeden z nich zwany jest kluczem publicznym, drugi - prywatnym. Wyznaczenie klucza publicznego na podstawie klucza prywatnego jest na ogół obliczeniowo łatwe. Wykonanie operacji w drugą stronę (wyznaczenie klucza prywatnego na podstawie publicznego) w rozsądnym czasie, przy odpowiedniej długości klucza może być poza zasięgiem technicznym.
Jeśli jednego z kluczy użyto do szyfrowania to kryptogram daje się odszyfrować tylko drugim. I na odwrót, jeśli kryptogram daje się odszyfrować pierwszym, to do szyfrowania mógł być użyty tylko drugi.
W tym systemie można chronić osobno poufność, osobno autentyczność lub obie te cechy na raz.
0x01 graphic

Tekst zaszyfrowany kluczem publicznym może być poprawnie odszyfrowany tylko kluczem prywatnym znanym jednej konkretnej osobie. Tak chroni się poufność.
0x01 graphic

Kryptogram dający się poprawnie odszyfrować kluczem publicznym mógł być sporządzony tylko przy użyciu klucza prywatnego będącego w dyspozycji tylko jednej konkretnej osoby. Tak zapewnia się autentyczność.
0x01 graphic

Klucze publiczne można swobodnie rozpowszechniać bez obawy ujawnienia kluczy prywatnych. Do prowadzenia komunikacji między n podmiotami potrzeba razem n par kluczy (po parze kluczy prywatny/publiczny na podmiot). Każdy podmiot pamięta swój klucz prywatny i klucze publiczne swoich partnerów.
Dzięki szyfrowaniu asymetrycznemu możliwe stało się sporządzanie podpisów (sygnatur) cyfrowych. Autor wiadomości sporządza jej skrót znanym algorytmem haszującym i szyfruje ten skrót swoim kluczem prywatnym. Każdy (kto zna klucz publiczny) może sporządzić skrót wiadomości oraz odszyfrować podpis i sprawdzić czy wynikowe ciągi znaków są identyczne. Jednocześnie, jeśli ktoś zmodyfikuje wiadomość, to nie będzie mógł doprowadzić do sytuacji, że będzie ona zgodna z dotychczasową sygnaturą, ani sporządzić sygnatury, która po odszyfrowaniu kluczem publicznym oryginalnego autora byłaby zgodna ze zmodyfikowaną wiadomością. Dokument opatrzony podpisem cyfrowym nazywamy certyfikatem cyfrowym.
Opracowano pewnym mechanizmy pozwalające rozpowszechniać klucze publiczne przez podatne na atak media przy zapewnieniu autentyczności samych kluczy. Oznacza to, każdy podmiot ma możliwość sprawdzenia, czy klucze publiczne które posiada odpowiadają kluczom prywatnym jego partnerów i nie zostały mu podstawione przez przeciwnika.

Przykłady: RSA (oparte na trudności rozkładu dużych liczb na czynniki pierwsze), szyfry oparte na problemie plecakowym, El-Gamal.
Szyfry asymetryczne są najczęściej powolne, dlatego stosuje się techniki hybrydowe - przy pomocy szyfru asymetrycznego partnerzy uzgadniają klucz sesji służacy następnie do szyfrowania szybkim algorytmem symetrycznym. Klucze sesyjne są jednorazowego użytku.

Funkcje jednokierunkowe

W niektórych przypadkach do ochrony autentyczności lub poufności nie jest potrzebne lub wskazane szyfrowanie wiadomości (dające możliwość deszyfrowania). Stosuje się wówczas funkcje jednokierunkowe.
Funkcja jednokierunkowa jest to takie przekształcenie, które daje się obliczać szybko w jedną stronę, ale dla którego wyznaczenie przekształcenia odwrotnego jest bardzo złożone obliczeniowo. Zmiana pojedyńczego bitu argumentu powoduje zmiany wielu bitów wyniku według złożonego schematu. Odgadywanie argumentu dla którego fukcjia przyjmuje zadaną wartość najczęściej polega na przeszukaniu całej dziedziny argumentów funcji.
Funkcje jednokierunkowe służą m.in. do przechowywania haseł, oraz do tworzenia streszczeń wiadomości dla potwierdzania ich integralności i autentyczności (patrz wcześniej - podpisy cyfrowe).

Inne zagadnienia

Inne zagadnienia mające wpływ na bezpieczeństwo komputerów to między innymi pielęgnacja, konserwacja i właściwe przechowywanie sprzętu i oprogramowania, dobór wykwalifikowanego i odpowiedzialnego personelu, szkolenia oraz tworzenie polityki bezpieczeństwa systemu informatycznego.

0x01 graphic

5



Wyszukiwarka

Podobne podstrony:
Podstawy systemow operacyjnych Nieznany
Zestaw E Podstawy Systemów Operacyjnych i systemów grafiki komputerowej (2)
Egzamin, E. Podstawy systemów operacyjnych i systemów grafiki komputerowej, E
E Podstawy systemów operacyjnych i systemów grafiki komputerowej
Abraham Silberschatz Podstawy Systemów Operacyjnych (Edycja 5) Streszczenie
LINUX, SZKOLNE PLIKI-mega zbiory (od podstawówki do magisterki), Systemy operacyjne
Podstawy informatyki, Systemy operacyjne, PODSTAWY INFORMATYKI (KONTYNUACJA SYSTEMÓW OPERACYJNYCH)
Podstawy architektury komputera, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr II
Systemy operacyjne unix polecenia podstawowe
PODSTAWY DZIAŁANIA UKŁADÓW CYFROWYCH, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr
Podstawowe Polecenia Systemu Operacyjnego DOS
Podstawy Informatyki Wykład IV System operacyjny
Rys historyczny i podstawowe pojęcia systemu operacyjnego, technik informatyk, soisk utk
1 Systemy Operacyjne 05 10 2010 Pojęcia Podstawowe
systemy operacyjne cw 09 podstawy administracji cz2
systemy operacyjne cw 08 podstawy administracji cz1

więcej podobnych podstron