Lekcja: Wielobieżność, Wielowątkowość, Skalowalność w Systemach Operacyjnych
1. Wprowadzenie do tematu
Współczesne systemy operacyjne i aplikacje muszą sprostać rosnącym wymaganiom związanym z przetwarzaniem dużej liczby operacji jednocześnie. Aby efektywnie wykorzystać dostępne zasoby sprzętowe, takie jak procesory wielordzeniowe, komputery muszą wspierać mechanizmy takie jak wielobieżność, wielowątkowość oraz skalowalność. Każda z tych cech przyczynia się do zwiększenia wydajności i elastyczności systemów informatycznych.
2. Wielobieżność (Multiprogramming)
Definicja: Wielobieżność to zdolność systemu operacyjnego do przechowywania wielu programów w pamięci i wykonywania ich równocześnie. Zamiast czekać, aż jeden program zakończy się, system operacyjny może przerywać jego wykonywanie i przekazać kontrolę innemu programowi, co poprawia efektywność wykorzystania procesora.
Kluczowe cechy wielobieżności:
- Przełączanie kontekstu: System operacyjny przełącza procesor między różnymi programami, tzn. przerywa wykonanie jednego programu, zapisuje jego stan i zaczyna wykonywać inny program. Gdy program otrzyma z powrotem czas procesora, jego stan jest przywracany.
- Zwiększenie efektywności procesora: Zamiast pozwalać procesorowi „nudzić się” podczas czekania na operacje I/O (np. zapis na dysku), wielobieżność pozwala wykonywać inne zadania, co maksymalizuje wykorzystanie zasobów.
Przykłady zastosowania wielobieżności:
- Stare systemy mainframe: W systemach takich jak IBM OS/360, wielobieżność była kluczowym sposobem na efektywne wykorzystanie drogich zasobów komputerowych przez wiele programów jednocześnie.
- Współczesne systemy operacyjne: Wszystkie nowoczesne systemy (Windows, macOS, Linux) wspierają wielobieżność, umożliwiając działanie wielu programów naraz.
Zalety wielobieżności:
- Lepsze wykorzystanie zasobów: Większa liczba programów może być wykonywana w tym samym czasie, co zwiększa efektywność systemu.
- Redukcja czasu bezczynności procesora: Procesor zawsze ma zadanie do wykonania, co minimalizuje marnowanie zasobów.
Wyzwania:
- Zarządzanie pamięcią: Wielobieżność wymaga skutecznego zarządzania pamięcią operacyjną, ponieważ wiele programów konkuruje o jej zasoby.
- Przełączanie kontekstu: Proces przełączania kontekstu może być kosztowny pod względem czasu procesora, zwłaszcza przy dużej liczbie uruchomionych programów.
3. Wielowątkowość (Multithreading)
Definicja: Wielowątkowość to technika, która umożliwia pojedynczemu procesowi wykonywanie wielu „wątków” jednocześnie. Wątek to najmniejsza jednostka przetwarzania w systemie operacyjnym. Każdy wątek może wykonywać różne zadania niezależnie, ale w ramach tego samego procesu współdzielą te same zasoby, takie jak pamięć.
Kluczowe aspekty wielowątkowości:
- Wątki współdzielą zasoby: W przeciwieństwie do procesów, które mają swoje własne zasoby, wątki w jednym procesie współdzielą pamięć i zasoby. Dzięki temu mogą komunikować się i synchronizować szybciej niż osobne procesy.
- Lekkie procesy: Wątki są często nazywane „lekkimi procesami”, ponieważ są mniej kosztowne do stworzenia i zarządzania niż tradycyjne procesy.
- Równoległość: Wątki mogą być wykonywane równocześnie na różnych rdzeniach procesora, co zwiększa wydajność aplikacji.
Przykłady zastosowania wielowątkowości:
- Serwery WWW: Serwery internetowe, takie jak Apache, tworzą nowe wątki dla każdego żądania HTTP. Każdy wątek obsługuje osobne połączenie z użytkownikiem, co pozwala na równoczesną obsługę wielu klientów.
- Gry komputerowe: Nowoczesne gry komputerowe często używają wielu wątków do jednoczesnego renderowania grafiki, obliczania fizyki oraz przetwarzania sztucznej inteligencji.
Zalety wielowątkowości:
- Lepsza wydajność: Wątki mogą wykonywać wiele operacji równocześnie, co przyspiesza działanie aplikacji.
- Oszczędność zasobów: Wielowątkowość pozwala na bardziej efektywne wykorzystanie pamięci, ponieważ wątki współdzielą zasoby.
- Szybsze reakcje: Wątki mogą odpowiadać na różne zdarzenia, co czyni system bardziej responsywnym. Na przykład w aplikacji GUI jeden wątek może zajmować się przetwarzaniem danych, a drugi obsługą interfejsu użytkownika.
Wyzwania wielowątkowości:
- Synchronizacja wątków: Ponieważ wątki współdzielą zasoby, muszą być skutecznie synchronizowane, aby uniknąć błędów takich jak warunki wyścigu (race conditions).
- Złożoność programowania: Pisanie aplikacji wielowątkowych jest trudniejsze niż aplikacji jednowątkowych, ponieważ programista musi zarządzać synchronizacją i komunikacją między wątkami.
4. Skalowalność (Scalability)
Definicja: Skalowalność to zdolność systemu do obsługi coraz większego obciążenia poprzez zwiększenie dostępnych zasobów. Skalowalność może być pionowa (dodanie więcej zasobów, takich jak pamięć czy procesory do jednego systemu) lub pozioma (dodanie większej liczby systemów, które współpracują ze sobą).
Rodzaje skalowalności:
-
Skalowalność pionowa (Vertical scalability)
System może zwiększać swoją wydajność poprzez dodawanie większej ilości zasobów sprzętowych, takich jak pamięć RAM, mocniejsze procesory lub dyski SSD. Przykładem może być rozbudowa serwera o dodatkowe procesory lub moduły pamięci. -
Skalowalność pozioma (Horizontal scalability)
System może zwiększać swoją wydajność poprzez dodanie większej liczby komputerów, które będą działały równolegle, wykonując wspólnie to samo zadanie. Przykładem jest rozbudowa systemu o dodatkowe serwery, które współpracują w klastrze.
Przykłady skalowalności:
- Bazy danych: W systemach takich jak MySQL czy Oracle, skalowalność pozioma oznacza dodawanie nowych serwerów do klastra bazy danych, aby obsłużyć większe ilości zapytań.
- Serwisy streamingowe: Takie usługi jak Netflix czy YouTube stosują skalowalność poziomą, dodając więcej serwerów do obsługi rosnącej liczby użytkowników.
Zalety skalowalności:
- Wydajność: Systemy skalowalne mogą rosnąć w miarę wzrostu potrzeb, co pozwala na obsługę większej liczby użytkowników lub przetwarzanie większej ilości danych.
- Elastyczność: Skalowalność pozioma pozwala na dodawanie zasobów bez konieczności przerywania działania systemu, co jest szczególnie ważne dla usług online.
Wyzwania skalowalności:
- Koszty: Skalowanie systemów, zwłaszcza w pionie (dodawanie droższych komponentów sprzętowych), może być kosztowne.
- Złożoność infrastruktury: Skalowanie poziome wymaga efektywnej synchronizacji i koordynacji między wieloma systemami, co może wprowadzać dodatkowe wyzwania związane z zarządzaniem.
5. Podsumowanie
- Wielobieżność pozwala na równoczesne przechowywanie i wykonywanie wielu programów, zwiększając wydajność i efektywność wykorzystania procesora.
- Wielowątkowość umożliwia procesom uruchamianie wielu równoczesnych wątków, co zwiększa wydajność aplikacji oraz ich responsywność.
- Skalowalność odnosi się do zdolności systemu do obsługi wzrastającego obciążenia poprzez dodanie zasobów sprzętowych lub nowych systemów.
Ćwiczenie w CMD
Ćwiczenie: Sprawdzanie dostępnych zasobów i ich monitorowanie
- Otwórz CMD.
- Wpisz polecenie, aby sprawdzić dostępne zasoby sprzętowe:
systeminfo
Wynik wyświetli szczegółowe informacje o systemie, w tym dane o procesorze, pamięci RAM i wersji systemu operacyjnego.
- Wpisz polecenie, aby uruchomić monitor wydajności systemu:
perfmon
- Wpisz polecenie, aby sprawdzić, które procesy mają najwięcej aktywnych wątków:
wmic process get Name,ThreadCount /format:table
- Wpisz polecenie, aby zobaczyć, które procesy aktualnie wykorzystują najwięcej zasobów:
tasklist /v | sort /R /+65