Zarządzanie procesami
Proces - wykonujący się program, potrzebuje zasobów przydzielanych w chwili powstania lub dynamicznie, jednostka pracy w systemie system składa się ze zbioru procesów: systemu / użytkownika; system operacyjny odpowiada za: tworzenie i usuwanie procesów, planowanie porządku wykonania, dostarczenie mechanizmów synchronizacji, komunikacji i pokonywania blokad procesów. Procesy mogą być współbieżne, podział czasu procesora między wiele procesówzwiększenie wydajności systemu. Proces = zadanie.
Proces sekwencyjny - wykonywany program, musi być sekwencyjnie (w dowolnej chwili na zamówienie danego procesu może być wykonywany co najwyżej jeden rozkaz kodu programu), do procesu należą też: stos (przechowuje dane tymczasowe: parametry procedur, adresu powrotne, zmienne tymczasowe), sekcja danych (zmienne globalne).
Program nie jest procesem (bo program jest pasywny jak plik na dysku, proces jest aktywny, z licznikiem rozkazów). Z jednym programem może być związanych więcej niż jeden proces (np. wielu użytkowników może korzystać z działania 1 kopii na raz).
Stan procesu:
Nowy (został utworzony)
Aktywny (są wykonywane instrukcje) - tylko jeden na raz
Czekający (czeka na jakieś zdarzenie, np. zakończenie operacji we/wy)
Gotowy (czeka na przydział procesora) - wiele ich może być
Zakończony
Blok kontrolny procesu - tak jest reprezentowany każdy proces w systemie, jest to blok danych lub rekord zawierający wiele cząstkowych informacji opisujących dany proces.
Kolejki planowania - wchodzące procesy trafiają do kolejki zadań (wszystkie procesy oczekujące na przydział pamięci operacyjnej). Procesy rezydujące w pamięci są gotowe do wykonania, są w kolejce procesów gotowych (lista z powiązaniami, nagłówek ma wskaźniki na pierwszy i ostatni, każdy blok kontrolny procesu ma wskaźnik na następny). Proces pracuje, aż zaczyna czekać np. na dostęp do dysku (dysk może być zajęty przez inny proces) kolejka do urządzenia . Może być do niektórych urządzeń tylko jeden proces w kolejce.
Stopień wieloprogramowości (liczba procesów w systemie)
Wątki (procesy lekkie) (thread)
Proces jest określony za pomocą używanych zasobów i miejsca. Ale zagospodarowanie zasobów byłoby lepsze, gdyby wiele zadań używało ich wspólnie i współbieżnie, w obrębie tej samej wirtualnej przestrzeni adresowej (np. fork z nową wartością licznika rozkazów powoduje powstanie nowego wątku sterowania w obrębie tej samej pamięci). Robi się to w nowszych systemach operacyjnych (NT). Wątek - podstawowa jednostka wykorzystania procesora, jego stan jest zdefiniowany niewielką ilością danych (licznik rozkazów, zbiór rejestrów, stos). Grupa równoprawnych wątków dzieli kod, przestrzeń adresową i zasoby systemu. Środowisko takie zadanie (task). Tradycyjny (ciężki) proces = zadanie z jednym wątkiem.
Po co to? Przełączanie procesora między wątkami, tworzenie nowych jest tanie (w porównaniu do tradycyjnych procesów), wstrzymanie jednego i włączenie innego wątku efektywne rozwiązanie obsługi przez system wielu zamówień: wiele wątków sterowania jest powiązanych z kilkoma zasobami dzielonymi. Watki poziomu użytkownika - przełączanie za pośrednictwem funkcji bibliotecznych zamiast odwołań do systemu znacznie szybciej, bo przełączanie kontekstu (procesora od jednego procesu do drugiego) wymaga przechowania stanu starego i załadowania przechowanego stanu nowego. Może to być kosztowne (czasowo) i jest daniną na rzecz systemu (może trzeba będzie coś zrobić dodatkowo z pamięcią...) (po za tym samo przełączenie do systemu operacyjnego też kosztuje!)
Planowanie - wieloprogramowanie jak najlepsze, najefektywniejsze wykorzystanie procesora: proces działa, aż musi na coś czekać, wówczas procesor też nic by nie robił gdy wieloprogramowość, to można kilka procesów jednocześnie mieć w pamięci i wtedy zamiast czekać, procesor może wykonywać inny proces, schemat jest powtarzalny: zawsze gdy jakiś proces musi czekać, to system odbiera mu procesor i przekazuje innemu procesowi.
Lepsze wykorzystanie procesora i wyższa przepustowość (ilość pracy wykonanej w jednostce czasu, np. 17 procesów na godz.). Skrajny przypadek: dwa procesy, każdy pracuje przez 1s i czeka następną 1s, tak jest 60 razy; gdy najpierw robimy 1. , potem 2. , to trwa 4min, ale w rzeczywistości 2min to efektywna praca, 2min przestojewykorzystanie procesora 50%.(s110 dół); gdy w trybie wieloprogramowym, to będzie lepsze wykorzystanie: zaczynamy 1. 1s, potem 2. I tak na przemian całość 2min, 100% wykorzystania procesora, ale to skrajny przypadek, praktycznie niespotykany.
Planowanie przydziału procesora - ma kluczowe zagadnienie w projektowaniu systemu operacyjnego (planowanie jest podstawową funkcją, a procesor jest najważniejszym zasobem)
Struktura planowania - kiedy decyzje o przydziale procesora:
Proces przeszedł od stanu wykonywania do czekania (zamówienie na we/wy, rozpoczęcie czekania na zakończenie procesu potomnego)
Proces przeszedł od stanu wykonywania do stanu gotowości (bo przerwanie)
Proces przeszedł od stanu czekania do stanu gotowości (np. zakończył we/wy)
Proces zakończył działanie
Gdy 1,4 - procesor musi dostać nowy proces, gdy planowanie tylko wówczas schemat niewywłaszczeniowy (gdy proces otrzyma procesor, to korzysta, dopóki go nie odda z powodu swego zakończenia lub przejścia do stanu oczekiwania). Win98
Cykl zatrudnień procesor-urządzenie: wykonanie procesu: faza procesora, faza we/wy, faza procesora ... cykle, rozkład czasów faz procesora. dla procesu ograniczonego przez we/wy: dużo krótkich faz procesora, mało długich faz proceora. Dla procesu ograniczonego procesorem (obliczenia!): mało ale bardzo długich faz procesora.
FCFS - pierwszy nadszedł - pierwszy obsłużony (First-Come, First -Served)
Najprostsza metoda: proces, który pierwszy zamówi procesor, pierwszy go otrzyma, kolejka FIFO, blok kontrolny procesu wchodzącego do kolejki jest dołączany do końca kolejki, wolny procesor przydziela się procesowi z czoła kolejki; prosty, łatwy, ale średni czas oczekiwania bywa długi. Niewywłaszczający, kłopotliwy w systemach z podziałem czasu.
Planowanie priorytetowe
SJF jest szczególnym przypadkiem planowania priorytetowego: każdemu procesowi przypisuje się pewien priorytet, po czym procesor przydziela się temu o najwyższym priorytecie, gdy równe to FCFS. W SJF priorytet = odwrotność następnej (przewidywanej) fazy procesora. W różnych systemach różnie: 0 - 7, 0—4096; mniejsza liczba większy priorytet albo odwrotnie.
Definiowanie priorytetów:
wewnętrznie - jakaś mierzalna wielkość: limity czasu, pamięć, liczba otwartych plików, stosunek średniej fazy we/wy do średniej procesora
zewnętrznie - ważność procesu, opłaty, polityka
Priorytet nowego procesu jest porównywany z priorytetem bieżącego wywłaszczający / niewywłaszczający.
Planowanie rotacyjne
Dla systemów z podziałem czasu: ustala się małą jednostkę czasu tzw. kwant (odcinek) czasu. Kolejka gotowych do wykonania jest traktowana jak kolejka cykliczna: każdemu procesowi jest przydzielany czas nie dłuższy od kwantu czasu, działa jak kolejka FIFO: nowe na koniec kolejki, planista bierze pierwszy z kolejki, ustawia czasomierz na przerwanie i przydziela temu procesowi procesor: może on skończyć wcześniej swoją fazę (niekoniecznie wszystko, bo może czekać na we/wy) OK., zwalnia procesor, planista bierze następnego / gdy jednak upłynie kwant czasu, to następuje przerwanie zegarowe , przełączanie kontekstu, proces na koniec kolejki ...
Średni czas oczekiwania może być długi, wyniki zależą od rozmiaru kwantu czasu, istotny czas przełączania kontekstu (tracenie czasu procesora): najlepiej gdy większość procesów kończy swe fazy w jednym kwancie, ale gdy za duży kwant FCFS.
Algorytm wywłaszczający.
Planowanie wielopoziomowych kolejek ze sprzężeniem zwrotnym - możliwe jest przemieszczanie się procesów między kolejkami gdy proces za dużo zużywa czasu procesora, to jest przenoszony do niższej kolejki. W wyższej zostają ograniczone przez we/wy i interaktywne. Podobnie proces zbyt długo czekający w niższej kolejce można przenieść do kolejki wyższej postarzanie procesów. Planista powoduje wykonanie procesów z kolejki 0, gdy już nic nie ma, to z 1..... Gdy nadejdzie proces do 1, to ten z 2 jest wywłaszczany. Nowy proces trafia do 0, dostaje kwant 8, jeśli nie skończy, to przenoszą go dna koniec 1. Jeśli w niej też nie zdąży, to na koniec 2...
Jest to najogólniejszy, najbardziej złożony algorytm, można go łatwo modyfikować, ale trzeba podawać wartości parametrów.
1
4