procesy i zarządzanie procesami

17
Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Upload: lamkiet

Post on 11-Jan-2017

237 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Procesy i zarządzanie procesami

Projektowanie

oprogramowania

systemów PROCESY I ZARZĄDZANIE PROCESAMI

Page 2: Procesy i zarządzanie procesami

plan

Cechy, właściwości procesów

Multitasking

Scheduling

Fork

Page 3: Procesy i zarządzanie procesami

czym jest proces?

Działającą instancją programu

Program jest kolekcją instrukcji, a

proces aktualnym wykonaniem tych

instrukcji

Może być wiele instancji procesów

dla tego samego programu, każda

wykonująca inną ścieżkę kodu

Page 4: Procesy i zarządzanie procesami

zasoby procesu

Każdy proces jest właścicielem określonych zasobów:

Identyfikator procesu(process id, PID)

Obraz maszynowego kodu wykonalnego (może być współdzielony z

innymi instancjami programu, ale w przypadkach gdy obraz jest

nadpisywalny, jest on kopiowany), zawarty wewnątrz

Izolowanego obszaru pamięci wirtualnej (przestrzeń adresowa)

Zasoby systemu operacyjnego (np. uchwyty/deskryptory plików,

zegary, obiekty synchronizacji, dojścia urządzeń…)

Atrybuty bezpieczeństwa (id właściciela procesu, zestaw uprawnień)

Bieżący stan procesora (kontekst wykonania) – zawartość rejestrów,

mapowanie pamięci wirtualnej do adresów fizycznych

Page 5: Procesy i zarządzanie procesami

pamięć procesu

Każdy proces działa wewnątrz przestrzeni adresowej

izolowanej od innych procesów (AKA sandbox)

Przestrzeń adresowa procesu zawiera

specyficzne dla danego procesu struktury danych systemu

operacyjnego

stosy wywołań wszystkich wątków procesu

stertę

Stos jest fragmentem pamięci przechowującym informacje o

aktywnych procedurach, specyficznych dla każdego wątku

Sterta („pamięć wolna”) jest regionem pamięci dzielonym

pomiędzy wątkami i używanym dla potrzeb dynamicznej

alokacji pamięci

Page 6: Procesy i zarządzanie procesami

wielowątkowość

Nowoczesne systemy operacyjne wspierają

pojęcie wielowątkowości - wielu jednoczesnych

ścieżek wykonania w ramach jednego procesu

Wątki współdzielą zasoby procesu-rodzica (pamięć, deskryptory/uchwyty), ale każdy wątek

posiada własny stos wywołań (i czasami również

atrybuty bezpieczeństwa)

Ponieważ wątki dzielą wspólną przestrzeń

adresową, mogą z łatwością komunikować się

między sobą za pomocą "zwykłych" konstrukcji języka programowania

Procesy z drugiej strony są na ogół izolowane,

więc wymagają pewnych specjalnych zabiegów

do komunikacji: interprocess communication (IPC)

Page 7: Procesy i zarządzanie procesami

wiele wątków vs wiele procesów

Wątki

Wątki są uważane za „lekkie

procesy” – ilość informacji

niezbędna do przetworzenia

podczas tworzenia wątku

wewnątrz istniejącego procesu jest

dużo mniejsza niż podczas

tworzenia nowego procesu

Ponieważ operują na tych

samych, współdzielonych danych,

są generalnie „tańsze” pod

względem zasobów systemowych

niż procesy

Komunikacja międzywątkowa jest

łatwiejsza niż międzyprocesowa

Procesy

Wadliwy wątek może wywalić cały proces, zewnętrzny proces generalnie nie jest w stanie uszkodzić innego

Istnieją techniki współdzielenia regionu pamięci pomiędzy procesami, co ułatwia wymianę danych (ale nie jest równie naturalne jak z wątkami)

Istnieją techniki umożliwiające tworzenie nowych procesów równie tanio jak wątki (fork, copy-on-write)

Page 8: Procesy i zarządzanie procesami

wielozadaniowość (multitasking)

Większość współczesnych systemów operacyjnych

sprawia wrażenie że uruchamia wiele procesów (zadań)

równocześnie, nawet na jednordzeniowym

(jednowątkowym) procesorze

Odbywa się to poprzez podział czasu – każde zadanie

otrzymuje mały przedział czasu procesora, po czym

zostaje wywłaszczone i następuje przełączenie kontekstu

do innego zadania

Szybkie przełączenia kontekstu i niewielkie sloty czasowe

zadań powodują, że zadania zdają się działać

równolegle

Dokładny sposób przełączania zadań zależy od modelu

wielowątkowości

Page 9: Procesy i zarządzanie procesami

modele wielowątkowości

Multiprogramming

Przestarzały, nie używany już

Program jest wykonywany tak długo, jak długo nie wymaga dostępu do urządzeń I/O

Podczas dostępu do I/O aktywny program jest przełączany na ten, który ma już przygotowane dane

wielozadaniowość bez wywłaszczania (cooperative)

Program „ochotniczo” oddaje kontrolę nad CPU po wykonaniu części zadania

Wadliwie zaprojektowane programy mogą zająć cały czas procesora dla siebie, OS nie ma możliwości przerwać ich wykonanie

16-bitowy Windows, Mac OS przed X

wielozadaniowość z wywłaszczaniem (preemptive)

OS (scheduler) wywłaszcza (przerywa) wykonanie zadań aby zagwarantować „sprawiedliwy” dostęp do slotów czasowych, za pomocą przerwań sprzętowych

Przydział slotów czasowych zależy od priorytetów zadań i polityki szeregowania

Page 10: Procesy i zarządzanie procesami

szeregowanie zadań (task

scheduling)

Każde zadanie (proces i wątek) ma określony priorytet

Zadania o wyższym priorytecie generalnie mają możliwość uzyskać większy przydział czasu niż te o niższym

Priorytet procesu można ustawić programowo, z wewnątrz lub z zewnątrz

Podnoszenie priorytetu powyżej określonego pułapu zwykle wymaga podwyższonych uprawnień

Intensywne zadania o wysokim priorytecie mogą zagłodzić inne zadania – ostrożnie! ;)

Page 11: Procesy i zarządzanie procesami

ustawianie priorytetu zadań

Windows Unix/POSIX

patrz man 7 sched ;)

Page 12: Procesy i zarządzanie procesami

scheduler (algorytm szeregowania

zadań)

Część jądra systemu operacyjnego

Algorytm, który decyduje które zadanie zostanie uruchomionę w oparciu o priorytety, historię wykonania, stan wejścia/wyjścia i wiele innych czynników

Scheduler może być optymalizowany pod kątem

Maks. przepływności

Min. opóźnień

Sprawiedliwości

Gwarancji wykonania w określonym czasie (systemy realtime)

Page 13: Procesy i zarządzanie procesami

tworzenie nowego procesu

Windows Linux/Unix/POSIX

patrz man 3 exec ;)

Właściwie, exec() zastępuje

aktualny proces (jego przestrzeń

adresową innym), więc…

Będzie najpierw potrzebny fork()

Page 14: Procesy i zarządzanie procesami

fork

Wywłanie systemowe fork() jest unikatową cechą systemów Unix/POSIX

patrz man 2 fork ;)

fork() tworzy nowy proces poprzez skopiowanie procesu wywołującego

Proces potomny jest identyczny z rodzicem, włączając w to używane (otwarte) zasoby systemowe, których dojścia są dziedziczone

Dziedziczenie zasobów i zawartości pamięci sprawia, że komunikacja IPC pomiędzy rodzicem i procesem potomnym jest wyjątkowo prosta, co historycznie było powodem dla którego systemy Unix nie obsługiwały wielowątkowości, tylko używały forków do zapewnienia współbieżności programów

Właśnie dlatego logiem BSD Unixa jest trzymający trójząb diabeł ;)

Page 15: Procesy i zarządzanie procesami

implementacja fork

wywołanie systemowe fork() jest zaimplementowane za

pomocą bardzo wydajnej techniki copy-on-write

Proces potomny początkowo używa dokładnie tych samych

stron pamięci co rodzić (nie są one kopiowane), ale są one dla

niego zabezpieczane przed zapisem

Próba zapisu do takiej strony pamięci powoduje page fault

(rodzaj przerwania sprzętowego), które jest przechwytywane

przez OS i dopiero wtedy, w sposób niewidoczny dla procesu

strona jest kopiowana i zastępowana zapisywalną dla nowego

procesu

To sprawia, że fork() jest wyjątkowo tani w odniesieniu do

zasobów systemowych (i szybki!)

Page 16: Procesy i zarządzanie procesami

jak to działa?

Page 17: Procesy i zarządzanie procesami

IPC po forku

Proces rodzic i potomny współdzielą

dostęp do deskryptorów plików, które

były otwarte przed forkiem

Można więc utworzyć potok (pipe –

parę połączonych gniazd Unix-owych)

przed forkiem, a następnie użyć tego

potoku, aby połączyć obydwa

sforkowane procesy

Dzięki temu IPC na Uniksie jest bardzo

proste – wystarczy przesyłać polecenia

i/lub dane za pomocą potoku