Na wykładzie skupimy się na poznawaniu funkcji jądra systemu operacyjnego
udostępnianych programiście systemowemu. Tematy omawiające wnętrzności jądra
systemu operacyjnego będą omawiane na przedmiocie „Struktura jądra UNIX”.
#### Wymagania
* Kurs: Podstawowy warsztat informatyka (obsługa wiersza poleceń systemu Linux, GNU Make).
* Kurs: Wstęp do programowania w języku C (pracownia i projekty programistyczne).
* Architektury systemów komputerowych (przerwania, wyjątki, tłumaczenie adresów i pamięć wirtualna, konsolidacja).
#### Podręczniki
* [Modern Operating Systems](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X); 4th Edition; Andrew S. Tanenbaum, Herbert Bos
* [Operating Systems: Internals and Design Principles](http://www.amazon.com/Operating-Systems-Internals-Principles-Edition/dp/0133805913); 8th Edition; William Stallings
* [Operating System Concepts](http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/1118063333); 9th Edition; Abraham Silberschatz, Peter B. Galvin and Greg Gagne
* [Advanced Programming in the UNIX Environment](https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739/); 3rd Edition; Richard Stevens, Stephen Argo
#### Syllabus
W nawiasach kwadratowych podano liczbę wykładów.
1. Wprowadzenie [2]
* Jądro, system operacyjny, dystrybucja.
* Rodzaje systemów operacyjnych (wbudowane, czasu rzeczywistego, rozproszone).
* Najważniejsze osiągnięcia w dziedzinie systemów operacyjnych.
* Wywołania systemowe i komunikacja programów z jądrem.
* Architektura jądra systemu operacyjnego (jądra monolityczne, mikrojądra, exokernel).
2. Procesy i wątki [2]
* Model maszyny procesu.
* Atrybuty, zasoby i stan procesu.
* Zarządzanie procesami i wątkami.
* Sygnały i hierarchia procesów.
* Projektowanie aplikacji z użyciem procesów i wątków.
* Wątki przestrzeni jądra vs. przestrzeni użytkownika (wielowątkowość kooperacyjna).
3. Współbieżność, synchronizacja i komunikacja [2]
* Sytuacja wyścigu, zagłodzenie, uwięzienie, zakleszczenie.
* Problem sekcji krytycznej.
* Ziarnistość blokad, problemy z blokadami (odwrócenie priorytetów).
* Muteksy, zmienne warunkowe, blokady współdzielone, monitory, bariery.
* Potoki, gniazda, skrzynki pocztowe, pamięć dzielona, RPC.
4. Zarządzanie pamięcią w przestrzeni użytkownika [1]
* Biblioteczny menadżer pamięci malloc i free.
* Przydział listowy (polityki przydziału miejsca, scalanie).
* Fragmentacja i kompaktowanie.
* Problemy z zarządzaniem pamięcią (wzorce zachowań, błędy).
5. Zarządzanie pamięcią wirtualną [2]
* Przypomnienie stronicowania (translacja adresów, tabele stron).
* Organizacja wirtualnej przestrzeni adresowej.
* Przełączanie przestrzeni adresowych.
* Obsługa błędu braku strony.
* Zbiór roboczy vs. rezydentny.
* Różne algorytmy zastępowania stron.
* Strategie przydziału, sprowadzania i czyszczenia.
* Pamięć współdzielona – mechanizm kopiowania przy zapisie.
* Pliki odwzorowane na pamięć (ładowanie programów, biblioteki współdzielone).
* Buforowanie stron.
* Wymiana stron do pamięci drugorzędnej.
6. Pliki, systemy plików [2]
* Właściwości i operacje na plikach i katalogach.
* Hierarchia plików, punkty montażowe.
* Uprawnienia dostępu.
* Partycjonowanie dysków.
* Zarządzanie przestrzenią dyskową.
* Organizacja systemów plików (i-węzły, katalogi).
* Migawki, dziennikowanie, kopie zapasowe.
7. Planowanie zadań [1]
* Cele planowania zadań.
* Dyspozytor vs. planista.
* Przykładowe polityki szeregowania zadań.
* Szeregowanie zadań na wieloprocesorach.
8. Bezpieczeństwo [1]
* Zaufana baza obliczeniowa.
* MAC vs. DAC vs. RBAC.
* Autoryzacja i uwierzytelnianie (PAM).
* Zapobieganie cyberatakom.
9. Wirtualizacja [1]
* Rodzaje maszyn wirtualnych.
* Parawritualizacja.
* Zagnieżdżone tabele stron.
* Nadprzydział, balonikowanie, deduplikacja.