Administrowanie systemami operacyjnymi
•	Wykład

Część II - wiadomości o systemach operacyjnych

•	© Michał Turek, AGH Kraków
Definicja systemu operacyjnego
•	System operacyjny (OS - Operating system) - zbiór kodów wykonywalnych, które pośredniczą pomiędzy użytkownikiem a sprzętem na którym system pracuje.
•	Cele dla systemu:
•	Stworzyć możliwość wykonywania programów użytkownika
•	Sprawić, aby sprzęt był wygodny w uzytkowaniu
Podział systemów
•	Systemy typu desktop, osobiste
•	Systemy rozproszone
•	Systemy klastrowe
•	Systemy czasu rzeczywistego
•	Systemy podręczne
•	Środowiska obliczeniowe
Struktura systemu
•	Dystrybutor zasobów - przydzielanie, porządkowanie zasobów
•	Proces nadzorujący - sterowanie wykonaniem innych procesów i operacjami wejścia/wyjścia
•	Programy narzędziowe

Struktura - inny podział
•	Sprzęt - najniższe warstwy wykonawcze
•	Jądro systemu - pośredniczy pomiędzy aplikacjami a funkcjonalnością sprzętu
•	Aplikacje uruchomione
•	Użytkownicy
Elementy składowe systemu (I)
•	Zarządzanie procesami - tworzenie i usuwanie, wstrzymywanie i wznawianie, komunikacja między procesami, synchronizacja i mechanizmy obsługi zakleszczeń
•	Zarządzanie zasobami plikowymi  - tworzenie, modyfikacja i usuwanie struktur plików i katalogów
•	Zarządzanie pamięcią operacyjną - utrzymywanie tablic przydzielonych i wolnych segmentów pamięci, przydzielanie i zwalnianie obszarów pamięci

Elementy składowe systemu (II)
•	Zarządzanie systemem WE/WY - mechanizmy realizacji transmisji, w tym interfejs dla warstw wyższych, buforowanie, zarządzanie stanami transmisji
•	Ochrona - izolowanie procesów, nadzorowanie uprawnień procesów w dostępnie do zasobów systemu
•	Zarządzanie siecią - implementacja warstw funkcjonalnych sieci, zarządzanie współdzieleniem zasobów sieciowych
•	Interpreter poleceń

Struktura warstw - diagram
Warstwa sprzętowa
•	Urządzenie fizyczne  - zintegrowany z maszyną układ elektroniczny, posiadający jasno wyodrębnione i zdefiniowane na użytek systemu granice.
•	Mikroprogram - kod, który bezpośrednio kontroluje urządzenia fizyczne, dedykowany tylko do obsługi tych urządzeń (np. umieszczony w ROM)
•	Język maszynowy - wykonywany bezpośrednio przez procesory maszyny,  typowo składający się z kilkudziesięciu instrukcji dotyczących np. skoków, przesyłania danych, operacji arytmetycznych, operacji wejścia i wyjścia niskiego poziomu (zapis i odczyt portów)

Strefy wykonawcze
•	Strefy dotyczyć mogą wszelkich zasobów sprzętowych, takich jak pamięć, przestrzeń I/O, przerwania itp..
•	Podział:
•	Strefy systemu operacyjnego
•	Strefy aplikacji użytkownika
•	Strefy specjalne
Wykonywanie kodu użytkownika
•	Jednozadaniowe - system przekazuje sterowanie do procesu i otrzymuje je ponownie z chwilą zakończenia procesu
•	Wielozadaniowe - system może jednoczenie prowadzić wykonanie wielu procesów, dysponując zasoby pomiędzy nie
System wielozadaniowy - zasoby
•	Konieczne jest wprowadzenie mechanizmów:
•	Zarządzania pamięcią
•	Zarządzania czasem procesora
•	Kontroli zapisu i odczytu portów I/O
•	Kontroli dostępu do urządzeń integralnych
Zadania/procesy
•	Proces - program w czasie wykonywania
•	wykonanie procesu przebiega sekwencyjnie, zgodnie z kolejnością instrukcji w przestrzeni adresowej procesu. 
•	Proces postrzegać można jako abstrakcyjnego agenta, który wykonuje program użytkowy i dostarcza środowisko operacyjne na potrzeby tego wykonania. 

Adresowanie w procesie
•	Przestrzeń adresowa procesu - zbiór bloków pamięci, do których proces może się odwoływać podczas wykonywania
•	Środowisko fizyczne procesu nazywane jest kontekstem procesu, zawiera:
•	słowa stanu procesora (PSW, processor status word), 
•	licznik rozkazów (PC, program counter), 
•	stos ze wskaźnikiem wierzchołka stosu (SP, stack pointer), 
•	rejestry dostępu do zasobów w pamięci (identyfikatory przydzielonych zasobów)

Systemowe informacje o procesie
•	Oprócz niezbędnych do wykonania procesu informacji środowiskowych system przechowuje:
•	Informacje o przydzielonych zasobach, na które wskazują wspomniane rejestry dostępu do zasobów
•	Informacje do rozliczeń - zużyty czas procesora, ilość operacji I/O, łączna ilość zaalokowanej pamięci
•	Priorytety wykonawcze procesu, priorytety przydziału zasobów
•	Informacje o wejściu i wyjściu: otwarte pliki, porty TCP, zlecone zadania wydruku itp..
Kontekst wykonania
•	Funkcje systemowe są wykonywane w dwóch kontekstach:
•	procesu - jądro działa w imieniu bieżącego procesu (np. wykonuje funkcję usługową dla procesu), 
•	systemu - operacje stymulowane przez system operacyjny

Przestrzeń adresowa systemu
•	Przeważnie odwzorowywana na przestrzeń procesów
•	Chroniona przed niekontrolowaną modyfikacją ze strony procesów
•	Współużytkowana przez funkcje systemowe uruchomione w dowolnym kontekscie

Przełączanie zadania
•	Przełączanie zadania (kontekstu) - zapamiętanie kontekstu bieżącego procesu (w strukturze stanowiącej część przestrzeni adresowej procesu) i załadowanie do rejestrów procesora kontekstu innego procesu. Ten nowy proces będzie teraz wykonywany. 
•	Wsparcie sprzętowe dla przełączania
Przerwania (I)
•	Przerwanie - chwilowe wstrzymanie wykonania bieżącego procesu w celu obsługi funkcjonalności specjalnej
•	Podział:
•	sprzętowe - spowodowane przez czynnik zewnętrzny, np sprzęt
•	programowe - spowodowane przez bieżący proces

Przerwania (II)
•	Procedury obsługi przerwań:
•	krótkie, nie blokujące swojego wykonania
•	utrzymujące spójność stosu procesowa - procedura pozostawia stos niezmieniony
•	umieszczana w systemie w formie elementu kolekcji
•	zapisywana jako shadow funkcji biosu maszyny, biosu urządzeń, instalowana przez oprogramowanie 

Przerwania (III)
•	Tablica wektorów przerwań - uporządkowana tablica adresów w pamięci, pod którymi znajdują się procedury obsługi przerwań
•	Przerwania sprzętowe przeważnie upakowane w tej samej tablicy, jednak pod sztywno przypisami offsetami
•	W przypadku braku procedur o danym numerze, w tablicy pisany jest adres na rozkaz powrotu z procedury obsługi przerwania (IRET)

Przerwania
•	Tablica wektorów przerwań - zapisana z reguły w pamięci pod adresem 0000:0000
Wywołanie przerwania (I)
•	Programowo - rozkaz INT numer_przerwania
•	Sprzętowo - impuls na linii odpowiedniego przerwania do układu kontrolera przerwań
•	Wykonanie:
•	położenie na stosie wszystkich rejestrów procesora wykonującego bieżący proces
•	położenie na stosie adresu powrotu (też rejestr procesora)

Wywołanie przerwania (II)
•	Wykonanie (cd): 
•	pobranie z tablicy adresu procedury - miejsce w tablicy dane jest parametrem rozkazu INT lub ustalone sprzętowo, adres tego miejsca to parametr* 4 (każdy adres w tablicy to 4 bajty)
•	skok pod pobrany adres
•	po napotkani IRET - skok pod adres na stosie (adres powrotu)
•	pobranie rejestrów za stosu i kontynuacja wykonania

Podprogram
•	Podprogram wykonywany jest także na bazie mechanizmu sprzętowego
•	Rozpoczęcie następuje po natrafieniu na rozkaz CALL adres
•	Wykonanie:
•	na stosie kładziony jest tylko adres powrotu i wykonywany jest skok pod wskazany adres
•	wykonanie podprogramu następuje do natrafienia na rozkaz RET, wtedy wykonywany jest skok pod adres na wierzchołku stosu (powrót)

Bezpośredni dostęp 
do pamięci (I)
•	DMA - Direct Memory Access
•	Transmisje danych do/z pamięci z pominięciem procesora, w czasie gdy procesor nie blokuje pamięci (wykonując na niej operacje)
•	Transmisja danych do/z sterownika np po 1 bajcie z wymuszoną przez urządzenie prędkością
Bezpośredni dostęp 
do pamięci (II)
•	Realizowane w pełni sprzętowo poprzez kontroler DMA
•	Programowanie kontrolera w trybie zamówienia (DMA request) i potwierdzenia (DMA acknowledge)
•	Generowanie sprzętowych przerwań w momencie np. końca transmisji
•	Wiele programowalnych kanałów transmisji w kontrolerze, w tym kanały o zmiennej szerokości magistrali (np. transmisja 16-bitowa, 8-bitowa)
Bezpośredni dostęp 
do pamięci (III)
•	Obsługa:
•	Przygotowanie bufora danych
•	Zaprogramowanie kontrolera do transmisji danych od/z bufora
•	Uruchomienie transmisji
•	Przygotowanie procedury obsługi przerwania,która automatycznie zostanie uruchomiona gdy transmisja dobiegnie końca
Stany procesów
•	Nowy - proces jest w fazie tworzenia, 
•	Gotowy - proces czeka na przydzielenie procesora, 
•	Wykonywany - w chwili obecnej są wykonywane instrukcje tego procesu, 
•	Oczekujący - proces czeka na zajście jakiegoś zdarzenia, 
•	Zakończony - proces jeszcze nie usunięty, lecz już nie wykonywany. 

Proces szeregujący 
•	Proces szeregujący (scheduler) - część jądra zajmująca się przydzielaniem procesom czasu procesora.
•	Proces postępuje zgodnie polityką przydziału czasu procesora
•	Proces stosuje pulę mechanizmów, zależną od typu systemu 

Proces szeregujący - polityka przydziału czasu
•	Zarządzanie priorytetami - priorytet może ulegać zmianie także w trakcie wykonywania procesu 
•	Opcjonalnie:
•	Podział procesów na klasy,
•	Określenie sposobu szeregowania dla każdej klasy,
•	Określenie zasad przydziału procesora pomiędzy klasami,

Proces szeregujący - mechanizmy przydziału czasu
•	Realizacja polityki przydziału czasu za pośrednictwem:
•	procedur przełączających kontekst, 
•	przerwanie zegarowe wywoływanych po odmierzeniu czasu,
•	struktur opisujących proces i kolejkujących podprocedury do wykonywania.
Kolejkowanie procesów
Algorytmy kolejkowania procesów
•	Planowanie rotacyjne (round robin, RR)
•	Najpierw najkrótsze zadanie (shortest job first , SJF)
•	Najpierw najkrótsze zadanie (shortest job first , SJF)
•	Pierwszy zgłoszony-pierwszy obsłużony (first come- first served, FCFS)
•	Planowanie loteryjne (ang. Lottery Scheduling)
•	Planowanie wielopoziomowe - grupowanie procesów np. pierwszoplanowe i drugoplanowe, stosowanie wielu kolejek (każda dla innej grupy), także różnych algorytmów na tych kolejkach
Szczególny przypadek
kolejkowania procesów 
•	Środowiska wieloprocesorowe - procesory mogą być identyczne lub różne co do wydajności, przydział czasu następuje z uwzględnieniem konieczności równoważenia obciążenia procesora (load sharing)
•	Dwie metody:
•	Każdy procesor przetwarza zadania w obrębie swojej kolejki. Zrównoważenie następuje przy tworzeniu nowych procesów 
•	(asymmetric multiprocessing) wyróżniony jeden procesor utrzymujący proces kolejkowania innych zadań

Wątki
•	Wątek (thread) 
•	Wątek jest składnikiem zadania (programu), obejmuje jedynie licznik rozkazów, zbiór rejestrów własny obszar stosu. Wątki współdzielą zasoby w obrębie programu.
•	W programie wyróżniamy wątek główny i poboczne.
•	Wyróżniamy procesy:
•	ciężkie (heavyweight process) - np. proces jednowątkowy
•	lekkie (lightweight process) - np. jeden wątek poboczny zadania

Zarządzanie pamięcią 
- kod w pamięci
•	Wykonywany jest jedynie kod, zawarty w głównej pamięci maszyny - pamięci operacyjnej
•	Wiązanie instrukcji i danych z adresami
•	podczas kompilacji - generowany jest kod absolutny, zmiana położenia kodu wymaga rekompilacji
•	podczas ładowania - kod może być umieszczony w różnych miejscach, adresowanie odnośników w kodzie jest uniwersalne
•	podczas wykonania - proces może się przemieszczać w pamięci podczas wykonania.

Ładowanie programu do pamięci
•	Statyczne - całość kodu programu jest ładowana przed uruchomieniem. 
•	Dynamiczne - ładowana jest tylko cześć kodu. Reszta kodu, użytkowana jedynie w specyficznych sytuacjach jest ładowana dopiero w momencie gdy program ustalił konieczność jej użycia. Technika skraca czas uruchomienia zadania, stosowana jest też w przypadku ograniczonej ilości pamięci operacyjnej na kod
Konsolidacja kodu
•	Statyczna - następuje przeważnie w fazie linkowania kodu po kompilacji. Funkcje narzędziowe uruchamiane na rzecz programu są umieszczane w kodzie programu.
•	Dynamiczna - następuje dopiero po załadowaniu kodu, przed uruchomieniem danego modułu . Funkcje narzędziowe są współdzielone pomiedzy procesy
Logiczna i fizyczna przestrzeń adresowa
•	Adresy logiczne (wirtualne)
•	Są interpretowane przez CPU
•	Przemieszczane fizycznie zależnie od polityki alokacji pamięci
•	Adresy fizyczne
•	Interpretowane przez sprzętowy moduł pamięci (dekoder adresów)

Fizyczna adresacja pamięci (I)
•	Segmenty i przesunięcia
•	Kodowanie w rejestrach przeważnie 16, 32 bitowych
•	W przypadku niewielkiej szerokości adresu segmentu stosowanie mnożnika (przesunięcia bitowego) jego wartości w celu ustalenia fizycznego adresu segmentu
Fizyczna adresacja pamięci (II)
•	Przykład obliczania adresu dla architektury 16 bitowej:
•	adres = 16 * segment = offset
•	segment i offset to słowa (word) - liczby 16-bitowe
•	offset jest zmieniany przy ustalaniu adresu, rzadziej segment
•	offset jest np. wierzchołkiem stosu, licznikiem instrukcji, wskaźnikiem na dane

Fizyczna adresacja pamięci (III)
•	Przykład obliczania adresu dla architektury 16 bitowej (cd):
•	segmenty mogą się dowolnie pokrywać, również częściowo
•	segmenty są spójnymi fragmentami pamięci o wielkości do 64 kB
•	konkretne miejsce w pamięci fizycznej może być adresowane wieloma różnymi kombinacjami segment:offset
•	maksymalna ilość adresowanej pamięci: trochę ponad 1 MB

Stronicowanie pamięci w adresacji logicznej (I)
•	Strona - numerowany zasób pamięci, posiadający stałą wielkość,  ulokowany w fizycznych zasobach pamięci - ramkach o takiej samej wielkości
•	Tablica stron - zawiera informacje o fizycznej lokalizacji stron pamięci
•	Adres logiczny składa się z:
•	numeru strony (page) - jest indeksem w tablicy stron, 
•	przesunięcia w stronie (offet) - jest numerem bajtu w stronie. 

Stronicowanie pamięci w adresacji logicznej (II)
•	Strony pamięci nie muszą zajmować kolejnych ramek w pamięci operacyjnej
•	W przypadku wprowadzania dodatkowego magazynu pamięci (np. plik wymiany) nie użytkowane strony nie muszą znajdować się w pamięci operacyjnej
•	Informacja o wolnych ramkach jest często przechowywana w dodatkowej tablicy ramek
Stronicowanie pamięci w adresacji logicznej (III)
Stronicowanie pamięci w adresacji logicznej (IV)
•	Przyspieszanie translacji - poprzez wprowadzenie buforów translacji bliskiego otoczenia (Translation Lookaside Buffer, TLB)
•	Dodatkowa tablica najczęściej stosowanych ramek, dużo krótsza niż główna tablica ramek
•	Obliczanie adresu rozpoczyna się od sprawdzenia czy ramka ma wpis w TLB - jeśli tak to nie trzeba poszukiwać adresu fizycznego ramki w głównej tablicy

Stronicowanie dzielone pamięci
•	Modyfikacja utrzymująca tablice stron zorientowane na proces, który jest właścicielem określonego obszaru pamięci
•	Adres logiczny strony składa się z identyfikatora procesu i identyfikatora kolejnej strony, której właścicielem jest proces
•	Technika wykorzystywana zamiennie z segmentacją pamięci z przydziałem określonych segmentów dla procesów 
Stronicowanie - usuwanie stron
•	Problem usuwania stron z pamięci operacyjnej do wolniejszych pamięci masowych
•	Pamięć wirtualna jest większa niż operacyjna, nie wszystkie informacje mogą być przechowywane w pamięci operacyjnej
•	Najlepsze rozwiązanie (cel) : usunąć tę stronę, która najdłużej nie będzie użytkowana
•	Wiele alternatywnych algorytmów wyboru strony do usunięcia, 
Stronicowanie - problemy
 z usuwaniem stron (I)
•	Konieczność minimalizacji nakładów na wymianę stron, skoordynowanej z przełączaniem procesów 
•	Migotanie/szamotanie (ang. thrashing) - procesy wzajemnie “zabierają” sobie strony z pamięci w momencie uzyskania czasu procesora. Dodatkowo nakłady na wymianę nie są traktowane jako zużycie czasu procesora, więc przy nieprzydzielonym procesorze wzrasta aktywność innych zakolejkowanych do wykonania procesów, jeszcze bardziej potęgując zjawisko.

Stronicowanie - problemy
 z usuwaniem stron (II)
•	Konieczność blokowania niektórych stron w pamięci - np. będących składnikami buforów wejścia/wyjścia użytkowanych asynchronicznie - uniknięcie sytuacji, gdzie strona zawierająca bufor danych wymienianych przez urządzenie we/wy zostanie usunięta na dysk
•	Blokowanie zmniejsza liczbę ramek pamięci, dostępnych dla stron
Stronicowanie - algorytmy usuwania stron
•	LRU (zastępowanie najdawniej używanych stron, least recently used)
•	FIFO
•	LIFO
•	Licznikowe (liczniki odwołań do strony)
•	LFU (zastępowanie strony najrzadziej używanej, 
least frequently used)
•	MFU (zastępowanie strony najczęściej używanej, most frequently used)

Segmentacja logiczna  pamięci (I)
•	Proces - zbiór segmentów. 
•	Segment - jednostka logiczna, np. kod programu głównego, stos, tablica symboli, tablica danych, bufor grafiki, bufor I/O. Segmenty mogą posiadać różne wielkości.
•	Adres wirtualny = numer_segmentu + przesunięcie
•	Tablica segmentów - zawiera fizyczne adresy początku segmentu i rozmiary segmentu
•	Rejestr bazowy tablicy segmentów - zawiera adres tablicy
Segmentacja logiczna  pamięci (II)
•	Ochrona - z każdą pozycją w tablicy segmentów są związane bity ochrony
•	Alokacja pamięci - wiele technik, zależnie od typu segmentu, wielkości segmentu itp.:
•	pierwszy wolny dostatecznie duży obszar pamięci
•	największy wolny
•	najmniejszy wolny
•	Procesy realokacji pamięci - przemieszczanie fizyczne segmentów, eliminujące zwolnione i zbyt małe obszary pamięci

Segmentacja logiczna  pamięci (III)
Segmentacja
 i stronicowanie pamięci (I)
•	Procedura translacji:
•	Adres w procesie składa się z selektora segmentu i offsetu w segmencie
•	Translacja na adres składający się z numeru strony i (innego) offsetu w stronie
•	Identyfikacja położenia strony i ewentualne załadowanie strony do pamięci operacyjnej
•	Ustalenie adresu fizycznego i odwołanie do pamięci fizycznej.
Segmentacja
 i stronicowanie pamięci (II)
Interfejs wejścia i wyjścia
•	Cechy / podział:
•	dostęp sekwencyjny (po kolei) lub swobodny
•	dostęp strumieniowy (każdy bajt przetwarzany osobno) lub blokowy
•	dostęp dzielony lub wyłączny
•	typ operacji: czytanie i pisanie, tylko czytanie lub tylko pisanie
•	dostęp synchroniczny lub asynchroniczny
•	efektywna prędkość transmisji
Buforowanie interfejsów przesyłu danych
•	Bufor transmisji - wydzielony obszar pamięci, przeznaczony do chwilowego przechowywania fragmentów strumieni danej transmisji.
•	Przyczyny:
•	problemy związane z dysproporcją między szybkościami producenta i konsumenta danych
•	różne rozmiary przesyłanych jednostek danych w urządzeniach (np. fragmentowanie/składanie bloków zapisu do plików)