Systemy operacyjne – notatki do wykładu
Proces.
Proces - program (kod binarny) w czasie wykonania; wykonanie przebiega sekwencyjnie (wyjątek: procesy wielowątkowe – patrz niżej).
Procesy wykonują się współbieżnie (ale niekoniecznie równolegle – podział czasu)
Stany procesu:
- nowy: proces został utworzony
- wykonywany: są wykonywane instrukcje procesu
- oczekujący: proces czeka na wystąpienie zdarzenia
- gotowy: proces czeka na przydzielenie procesora
- zakończony: proces zakończył wykonanie
Reprezentacja procesu w systemie (zawartość bloku kontrolnego procesu):
- stan procesu
- identyfikator (unikalny numer – w UNIX’ie – PID)
- licznik rozkazów
- rejestry procesora
- wskaźnik do kolejki procesów
- informacje o pamięci zajętej przez proces
- wykaz otwartych (używanych plików)
Tworzenie procesu:
za pomocą funkcji systemowej (np. fork() w UNIX)
proces utworzony przez inny proces (macierzysty, ew. rodzic) nazywamy potomnym.
potomek uzyskuje nową pulę zasobów lub korzysta z zasobów rodzica (mniejsze przeciążenie systemu).
Zakończenie procesu:
po ostatniej instrukcji.
specjalna funkcją (np. exit() w UNIX)
na żądania rodzica ( abort() )
niekiedy: zakończenie kaskadowe: po zakończeniu rodzica kończone są procesy potomne.
Wątek
Wątek sterowania (tzw. lekki proces): sekwencja instrukcji; tradycyjnie proces = jeden wątek sterowania, jednak czasami (w niektórych systemach) w przestrzeni adresowej procesu dopuszcza więcej wykonywanych współbieżnie wątków sterowania.
wątek ma te same podst. cechy co proces (stany, możliwość tworzenia wątków potomnych, korzystania z urządzeń zewn. itd...)
między wątkami tego samego procesu nie ma ochrony pamięci.
analogia: maszyna-procesy == proces-wątki
elementy wątku i procesu:
Wątek |
Proces |
licznik rozkazów |
przestrzeń adresowa |
stos |
otwarte pliki, semafory |
rejestry procesora |
zmienne globalne |
lista wątków potomnych |
lista proc. potomnych |
Tradycyjny proces (ciężki) jest równoważny zadaniu z jednym wątkiem
Jeżeli zadanie składa się z wielu wątków, to w czasie gdy jeden wątek jest zablokowany, może się wykonywać inny wątek tego zadania; współpraca wielu wątków w jednym zadaniu pozwala zwiększyć przepustowość i poprawić wydajność
Wątki umożliwiają połączenie równoległości z sekwencyjnym wykonaniem:
(1) model dyspozytor-pracownik
(2) model zespołu
(3) model potoku
Wątki statyczne/dynamiczne:
- struktura wątków procesu jest ustalona (w kodzie źr. procesu) lub też proces może dowolnie tworzyć/usuwać swoje wątki
Implementacja wątków w systemie operacyjnym:
Pakiet wątków : zbiór elementarnych działań na wątkach dostępnych w systemie (np. procedur bibliotecznych.
Implementacja wątków w przestrzeni użytkownika:
jądro nie wie o wątkach, widzi tylko jednowątkowe procesy
zaleta1: można używać wątków w systemie, który ich nie implementuje (np. pierwotnie UNIX)
możliwe szybkie przełączanie wątków – tylko przeładowania wsk. stosu i instrukcji oraz rejestrów (najszybsze działania w syst. komputerowym).
zaleta2:każdy proces może używać własnego alg. planowania dla swoich wątków.
problem1: przy blokowanych odwołaniach wątków do systemu – proces nie może oddać sterowania systemowi, musi czekać na swoje wątki. Używa się kodu sprawdzającego (and. jacket) czy odwołania wątków będą blokować. a wątków używa się głownie w zadaniach z blokującymi odwołaniami, gdzie mają poprawić wydajność...
problem2: nie ma wywłaszczania, wątki muszą same oddawać sterowanie procedurze wykonawczej procesu.
Implementacja wątków w jądrze:
system wykonawczy jest częścią jądra
jądro zakłada tablicę wątków dla każdego procesu
wszystkie funkcje mogące blokować mają postać odwołań do systemu
gdy wątek czka, jądro wybiera następny – wydajność!
wada: koszt odwołań do systemu (czas!)
Ogólne problemy (najtrudniejsze do implementacji) z wątkami:
obsługa przerwań (sygnałów)
niewznawialne procedury systemowe