Proces – egzemplarz wykonywanego programu. Aplikacja może składać się z większej liczby procesów[1]. Każdy nowo powstały proces otrzymuje unikatowy numer, który go jednoznacznie identyfikuje, tzw. PID (od ang. process identifier).
W celu wykonania programu system operacyjny przydziela procesowi zasoby (pamięć, czas procesora i inne – szczegółowa lista zasobów znajduje się dalej), ale także może być konieczne współbieżne wykonywanie pewnych fragmentów programu. Aby to zrealizować, program może zażądać utworzenia określonej liczby wątków, wykonujących wskazane części programu – o ich współbieżne wykonanie dba system operacyjny (albo sam program, wówczas mówi się o zielonych wątkach). Wątki współdzielą prawie wszystkie zasoby zarezerwowane dla danego procesu, wyjątkiem jest czas procesora, który jest przydzielany indywidualnie każdemu wątkowi.
Za zarządzanie procesami odpowiada jądro systemu operacyjnego, sposób ich obsługi jest różny dla różnych systemów operacyjnych. W systemie operacyjnym każdy proces posiada proces nadrzędny, z kolei każdy proces może, poprzez wywołanie funkcji systemu operacyjnego, utworzyć swoje procesy potomne; w ten sposób tworzy się swego rodzaju drzewo procesów. Każdy proces otrzymuje od systemu operacyjnego odrębne zasoby, w tym odrębną przestrzeń adresową, listę otwartych plików, urządzeń itp.
Skład i zasoby procesu
[edytuj | edytuj kod]W skład procesu wchodzi:
Każdemu procesowi przydzielone zostają zasoby, takie jak:
- czas procesora,
- pamięć,
- dostęp do urządzeń wejścia-wyjścia,
- pliki.
Tworzenie procesów
[edytuj | edytuj kod]- Użytkownik za pomocą powłoki systemowej (ang. system shell) zleca uruchomienie programu, proces wywołujący wykonuje polecenie fork lub jego pochodną.
- System operacyjny tworzy przestrzeń adresową dla procesu oraz strukturę opisującą nowy proces w następujący sposób:
- wypełnia strukturę opisującą proces,
- kopiuje do przestrzeni adresowej procesu dane i kod, zawarte w pliku wykonywalnym,
- mapuje współdzielone zasoby systemowe w przestrzeń adresową procesu,
- ustawia stan procesu na działający,
- dołącza nowy proces do kolejki procesów oczekujących na procesor (ustala jego priorytet),
- zwraca sterowanie powłoce systemowej.
Wykonywanie procesów
[edytuj | edytuj kod]Dany proces rozpoczyna wykonywanie w momencie przełączenia przez jądro systemu operacyjnego przestrzeni adresowej na przestrzeń adresową danego procesu oraz takie zaprogramowanie procesora, by wykonywał kod procesu. Wykonujący się proces może żądać pewnych zasobów, np. większej ilości pamięci. Zlecenia takie są na bieżąco realizowane przez system operacyjny.
Wykonanie procesu musi przebiegać sekwencyjnie. Może przyjmować kilka stanów:
- aktualnie wykonywany przez procesor,
- czekający na udostępnienie przez system operacyjny zasobów,
- uśpiony,
- przeznaczony do zniszczenia,
- proces zombie,
- właśnie tworzony, itd.
Kończenie procesów
[edytuj | edytuj kod]- Proces wykonuje ostatnią instrukcję – zwraca do systemu operacyjnego kod zakończenia. Jeśli proces zakończył się poprawnie, zwraca wartość 0, w przeciwnym wypadku zwraca wartość kodu błędu.
- W momencie zwrotu do systemu operacyjnego kodu zakończenia system operacyjny ustawia stan procesu na przeznaczony do zniszczenia i rozpoczyna zwalnianie wszystkich zasobów, które w czasie działania procesu zostały temu procesowi przydzielone.
- System operacyjny po kolei kończy wszystkie procesy potomne w stosunku do procesu macierzystego.
- System operacyjny zwalnia przestrzeń adresową procesu. Jest to dosłowna śmierć procesu.
- System operacyjny usuwa proces z kolejki procesów gotowych do uruchomienia i szereguje zadania. Jest to ostatnia czynność wykonywana na rzecz procesu.
- Procesor zostaje przydzielony innemu procesowi.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Processes and Threads (Windows) [online], msdn.microsoft.com [dostęp 2017-11-26] (ang.).