Systemy operacyjne
wykład 2
PROCESY
Proces - fundamentalna jednostka
obliczeń
• Proces jest jednostką pracy systemu
operacyjnego. System składa się ze zbioru
procesów. Procesy S.O. wykonują program
systemu, procesy użytkowe działają wg
programów napisanych przez użytkowników.
• (Przy przetwarzaniu wsadowym mówiło się o zadaniach, w
systemie z podziałem czasu o programach użytkownika lub
pracach, a w obecnych systemach używa się określenia procesy.)
• Proces to realizacja programu. Wykonanie
procesu musi przebiegać w sposób
sekwencyjny.
• (Program jest obiektem pasywnym, proces jest aktywny, ma
licznik rozkazów, określający następny rozkaz do wykonania.
Procesowi może być przydzielony procesor i pamięć (RAM)).
Stan procesu (1)
Stan procesu jest określany przez
bieżącą czynność procesu. Stan
procesu to wszystkie informacje
potrzebne do kontynuowania
zatrzymanego procesu.
Stan procesu (2)
Diagram stanów procesu
Stan procesu (3)
Diagram stanów procesu
Stan procesu (4)
Diagram stanów procesu
Stan procesu (3)
Wykonujący się proces zmienia swój stan;
każdy proces może znajdować się w jednym z
następujących trzech stanów:
•
aktywny
- są wykonywane instrukcje,
•
czekający
- proces czeka na wystąpienie
jakiegoś zdarzenia (np. na zakończenie operacji
WE/WY),
•
gotowy
- proces czeka na przydział procesora.
Blok kontrolny procesu (1)
Każdy proces jest reprezentowany w SO
przez blok kontrolny procesu, zawierający
następujące informacje:
Stan procesu
- stan może być określony jako
gotowy, aktywny, czekający.
Licznik rozkazów
- licznik ten wskazuje adres
następnego rozkazu do wykonania w procesie.
Rejestry procesora
- liczba i typy rejestrów
zależą od architektury komputera; są tu
akumulatory, rejestry indeksowe, wskaźniki stosu,
rejestry ogólnego przeznaczenia oraz rejestry
warunków. Informacje dotyczące tych rejestrów i
licznika rozkazów muszą być przechowywane
podczas przerwań, aby proces mógł być później
poprawnie kontynuowany.
Informacje o planowaniu przydziału
procesora
- należą do nich: priorytet procesu,
wskaźniki do kolejek przyporządkowujących
zamówienia, a także inne parametry planowania.
Informacje o zarządzaniu pamięcią
- mogą
to być informacje takie, jak zawartości rejestrów
granicznych, tablice stron, lub tablice segmentów
- zależnie od systemu pamięci używanej przez SO.
Blok kontrolny procesu (2)
Blok kontrolny procesu (3)
Informacje do rozliczeń
- do tej kategorii
informacji należy ilość zużytego czasu procesora i
czasu rzeczywistego, ograniczenia czasowe,
numery zadań lub procesów itp.
Informacje o stanie WE/WY
- mieszczą się tu
informacje o urządzeniach WE/WY (np.
przewijakach taśmy) przydzielonych do procesu,
wykaz otwartych plików itd.
Blok kontrolny procesu służy jako magazyn
przechowujący każdą informację, która może się
zmieniać w zależności od procesu.
Blok kontrolny procesu (4)
Rys. Fragment bloku kontrolnego procesu
Wykorzystanie bloku kontrolnego
Rys. Przechowywanie stanu procesów w blokach kontrolnych
Działania na procesach
Procesy w systemie mogą być wykonywane
współbieżnie oraz dynamicznie tworzone i
usuwane. System musi zawierać mechanizm
tworzenia i kończenia procesu.
Każdy nowy proces może tworzyć kolejne
procesy, wynikiem czego jest drzewo procesów.
Tworzenie procesu (1)
Proces macierzysty (parent process) tworzy procesy
zwane potomkami (children) ==>drzewo procesów.
dzielenie zasobów
• proces macierzysty i potomkowie dzielą wszystkie
zasoby
lub
• potomkowie dzielą podzbiór procesu macierzystego
lub
• proces macierzysty i potomkowie nie dzielą
wspólnych zasobów;
wykonywanie procesów
• proces macierzysty kontynuuje działanie
współbieżne ze swoimi potomkami
lub
• proces macierzysty oczekuje na zakończenie
działania niektórych lub wszystkich swoich procesów
potomnych.
Tworzenie procesu (2)
przestrzeń adresowa
najczęściej
proces potomny staje się kopią procesu
macierzystego.
Tworzenie procesu (4)
w UNIX-ie
każdemu nowemu procesowi jest
przyporządkowany identyfikator procesu, będący
liczbą całkowitą;
nowy proces tworzy się za pomocą funkcji
systemowej fork; zawiera on kopię przestrzeni
adresowej procesu pierwotnego;
funkcja systemowa execve ładuje plik binarny do
pamięci (zastępuje zawartość pamięci procesu) i
rozpoczyna jego wykonywanie;
proces macierzysty może tworzyć następnych
potomków, lub użyć funkcji systemowej wait aby
usunąć się z kolejki gotowych procesów, do chwili
zakończenia procesu potomnego.
Kończenie procesu (1)
proces wykonuje swoją ostatnią instrukcję i
prosi SO (funkcja systemowa exit), aby go
usunął;
może wtedy przekazać dane do procesu
macierzystego, za pośrednictwem funkcji
systemowej wait;
zasoby procesu (pamięć fizyczna i
wirtualna, otwarte pliki, bufory WE/WY )
zostają odebrane przez SO.
Kończenie procesu (2)
Proces macierzysty może zakończyć
wykonywanie procesu potomnego za pomocą
funkcji systemowej, np. abort.
gdy potomek nadużył któregoś z
przydzielonych mu zasobów
lub
gdy wykonywane przez potomka zadanie stało
się zbędne
lub
gdy proces macierzysty kończy pracę (wtedy,
w wielu SO kończone są procesy potomne –
kończenie kaskadowe)
Związki między procesami
Współbieżne działanie procesów oznacza, że
procesor dzieli swą moc obliczeniową na wiele
procesów jednocześnie. (np. dla równoległego
wykonywania pewnych obliczeń).
Procesy mogą być niezależne lub mogą ze sobą
współpracować.
Procesy współpracujące konkurują o zasoby i
wymieniają między sobą informacje. Pojawia się
problem
zsynchronizowania procesów
.
Proces niezależny
Proces jest
niezależny
(nie dzieli żadnych danych z innym
procesem) jeżeli
• nie może oddziaływać na inne procesy, a one też nie mogą
wpływać na jego działanie;
• jego działanie jest deterministyczne, tzn. wynik jego pracy
zależy wyłącznie od stanu WE;
• jego działanie daje się powielać, tzn. wynik pracy procesu
niezależnego jest zawsze taki sam przy takich samych
danych,
• jego wykonanie może być wstrzymywane i wznawiane bez
żadnych szkodliwych skutków.
Każdy proces, który nie dzieli żadnych danych (tymczasowych
lub trwałych) z żadnym procesem, jest w istocie procesem
niezależnym.
Proces współpracujący
Proces jest
współpracujący
, jeżeli może wpływać na inne
procesy lub inne procesy mogą wpływać na niego.
Proces taki ma następujące własności:
• nie da się określić z góry wyniku działania procesu;
• wynik działania procesu współpracującego jest nie
deterministyczny, gdyż może nie być zawsze taki sam przy
takich samych danych WE.
Zatem dowolny proces, który dzieli jakieś dane z innymi
procesami jest procesem współpracującym.
Procesy współpracujące mogą bezpośrednio dzielić
przestrzeń adresów logicznych (tj. zarówno kod, jak i dane)
lub może im być wolno dzielić dane wyłącznie za
pośrednictwem plików. Pierwszy przypadek dotyczy tzw.
procesów lekkich czyli wątków (thread).
Przykład procesów współpracujących
zagadnienie producenta -
konsumenta
popularny
paradygmat
(wzorzec)
współpracujących
procesów;
producent
wytwarza informację, którą zużywa proces
konsument;
potrzebny jest bufor jednostek informacji,
aby umożliwić producentowi i konsumentowi
działanie współbieżne
nieograniczony bufor,
ograniczony bufor: konsument musi
czekać jeżeli bufor jest pusty, a producent
musi czekać jeżeli bufor jest pełny,
procesy producenta i konsumenta muszą
podlegać synchronizacji, aby konsument nie
próbował korzystać z tego co nie zostało
wyprodukowane.
Wątki
Wątek jest jednostką podstawową wykorzystania
procesora. Stan wątku jest zdefiniowany małą ilością
odrębnych danych. Grupa równoprawnych wątków
dzieli kod, przestrzeń adresową i zasoby S.O.
Środowisko, w którym działa wątek, nazywa się
zadaniem (task).
Tradycyjny (ciężki) proces jest równoważny zadaniu z
tylko jednym wątkiem. Zadanie nic nie robi jeśli nie ma
w nim ani jednego wątku, z kolei wątek może
przebiegać w dokładnie jednym zadaniu.
Pojedynczy wątek ma przynajmniej własny stan
rejestrów i na ogół własny stos. Przełączanie procesora
między równoprawnymi wątkami, jak również tworzenie
wątków jest tanie w porównaniu z przełączaniem
kontekstu między tradycyjnymi procesami.