zarządzanie procesami i wątkami
Proces: uruchomiona program — własna przestrzeń adresowa, deskriptory plików oraz kontekst wykonywania. Wątek: lżejsza jednostka wykonawcza wewnątrz procesu — dzieli przestrzeń adresową, ale ma swoje własne stos i rejestracje. Stan procesu: nowy → gotowy → uruchomiony → czekający → zakończony. Przełączenie kontekstu: zapisanie i przywrócenie stanu CPU podczas przełączania między procesami — typowo 1-10 μs. Tworzenie procesów: fork() (Unix — tworzy kopię procesu rodzica), exec() (zamienia obraz procesu na nowy program). Komunikacja międzyprocesowa (IPC): pikiety, kolejki wiadomości, pamięć udostępniona, gniazda, sygnały. Wątki: wątki POSIX (pthreads), wątki jądrowowe vs użytkownika, wielu do jednego vs jeden do jednego vs wielu do wielu model. Wyzwania współczesności: konkurencja (warunki Coffmana: mutuał ekskluzja, zatrzymanie i czekanie, brak przerwania, okrągła czekanki). Synchronizatory: mutuki, semafor (Dijkstra), monitory, zmiennik kondycji, zasady czytelnika-pisanego. Współczesne techniki współbieżności: async/await (koroindrome), model aktora (Erlang, Akka), CSP (kanapy Go), struktury danych bezblokadowe.
zarządzanie pamięcią
Pamięć wirtualna: każdy proces ma własny przestrzeń adresową wirtualną — mapowana do fizycznej pamięci przez MMU (Unidzetwo Zarządzania Pamięcią). Podział na strony: pamięć wirtualna podzielona jest na stałą wielkości strony (zazwyczaj 4 KB), a fizyczna pamięć na ramki. Tabela stronowa: mapuje strony wirtualne do ramek fizycznych — wielopoziomowe tablice stron zmniejszają obciążenie pamięci. TLB (Bufor Przeskoku Zmiany Adresowej): bufor cache dla wpisów w tabeli stron — krytyczny dla wydajności (strata TLB: ~100 cykli). Algorytmy zastępowania stron: FIFO, LRU (Najrzadziej Używane), algorytm Zegara, Dwa Przeciwległe. Podział na żądanie: strony załadowywane tylko w momencie dostępu (błąd strony) — efektywny, ale powoduje błędy strony. Szaleństwo: system spędza więcej czasu na podstawianiu stron niż wykonywaniu — występuje, gdy zestaw pracy przewyższa pamięć fizyczną. Strony duże: strony o wielkości 2 MB lub 1 GB — zmniejszają straty TLB dla aplikacji intensywnych w wykorzystaniu pamięci. Pamięć mapowana do plików: funkcja mmap() — mapuje zawartość pliku bezpośrednio do przestrzeni adresowej wirtualnej. Losowy układ przestrzeni adresowej (ASLR): losowanie ustawienia pamięci, aby zapobiec wykorzystaniu nadmiernym buforów przepływu danych. Podział na pisanie: fork() dzieli strony do momentu, gdy proces zapisze — efektywna tworzenie procesów.
Systemy plików
System plikowy: organizuje dane na urządzeniach przechowalnych — dostarcza hierarchiczną przestrzeń nazw, kontrolę dostępu i integralność danych. Inody (Unix): struktura danych przechowująca metadane pliku (prawa dostępu, daty i godziny utworzenia, wskaźniki bloków) — oddzielona od nazwy pliku (wpis w katalogu). EXT4: domyślny system plikowy Linux — dziennik operacji, rozszerzone bloki, maksymalny rozmiar tożsamości 1 EB, kompatybilny z przeszłością. XFS: wysokoprzepustowy, 64-bitowy, skalowalny — domyślny w RHEL/CentOS, idealny dla dużych plików. Btrfs: zapis na podstawie kopii, zrzuty systemu, sumki kontrolne, kompresja, RAID — nowoczesny system plikowy Linux. ZFS (OpenZFS): skoncentrowana przechowywania danych, adresowanie 128-bitowe, integralność danych (sumki kontrolne na całej ścieżce), zrzuty systemu, deduplikacja, RAID-Z. NTFS: domyślny system plikowy Windows — dziennik operacji, ACLs, kompresja, szyfrowanie (EFS), symbole linki. APFS: System plików Apple — zapis na podstawie kopii, szyfrowanie, udostępnianie miejsca, zrzuty systemu. Dzienniki operacyjne: dziennik zapisywania przedmiotowy zapobiega uszkodzeniom po awariach — dzienniki metadanych (EXT4) lub pełny dziennik operacji. Systemy plikowe struktury zapisu logowego: wszystkie zapisy są sekwencyjnymi dodawaniem — idealne dla SSDów (F2FS). Systemy plikowe rozproszone: HDFS (Hadoop), GFS (Google), Ceph, GlusterFS — skalowane po wielu maszynach.
Virtualizacja i współczesne systemy operacyjne
Virtualizacja: uruchamianie wielu instancji systemów operacyjnych na udostępnionym sprzęcie — typ 1 ( bezpośredni: VMware ESXi, Hyper-V, KVM) vs. typ 2 (hostowany: VirtualBox, VMware Workstation). Hypervisor: zarządza maszynami wirtuałnymi, oferuje abstrakcję sprzętową. KVM: virtuałizacja oparta na jądrze Linux — konwertuje Linux na hypervisor typu 1. Pomocniczy sprzętowy: Intel VT-x, AMD-V — wsparcie procesora do skutecznej virtualizacji. Kontenery: lekka virtualizacja — dzielą się jąder hosta, izolowane przestrzenie nazw i cgroups. Docker (2013): rewolucja w wdrożeniu oprogramowania — konteneryzowane aplikacje z konsternowanymi środowiskami. Orchestrowanie kontenerów: Kubernetes (Google, 2014) — standard de facto zarządzania obciążeniami kontenerizowanymi na skalę. Microservices: aplikacje dekomponowane w małe, samodzielnie wdrożalne usługi — konteneryzacja jest technologią pozwalającą na to. Serverless: funkcje w chmurze wykonane na żądanie — AWS Lambda, Azure Functions, Google Cloud Functions. Unikernels: minimalne obrazy systemów operacyjnych skompilowane z aplikacji — podejście LibOS, ekstremalnie mała powierzchnia atakowa. eBPF: rozszerzony Berkeley Packet Filter — technologia jądra programowalna do sieciowania, obserwacji i bezpieczeństwa. Ewolucja współczesnych systemów operacyjnych: Unix (1969) → BSD, System V → Linux (1991, Torvalds) → Android (2008), ChromeOS, konteneryzowane systemy operacyjne chmur.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Hash Function Avalanche Visualizer i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Hash Function Avalanche Visualizer