J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Podobne dokumenty
7. Szeregowanie procesów w systemie QNX6 Neutrino

7. Szeregowanie procesów w systemie QNX6 Neutrino

4. Procesy pojęcia podstawowe

przydziału procesora Przykłady implementacji planowania przydziału procesora Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Przykłady implementacji planowania przydziału procesora

Planowanie przydziału procesora CPU scheduling. Koncepcja szeregowania. Planista przydziału procesora (planista krótkoterminowy) CPU Scheduler

Szeregowanie zadań w Linux Kernel 2.6. Daniel Górski Przemysław Jakubowski

4. Procesy pojęcia podstawowe

Prezentacja systemu RTLinux

Planowanie przydziału procesora

1. Szeregowanie w systemach czasu rzeczywistego

Wykład 6. Planowanie (szeregowanie) procesów (ang. process scheduling) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

4. Procesy pojęcia podstawowe

Ogólna koncepcja planowania. Planowanie przydziału procesora. Komponenty jądra w planowaniu. Tryb decyzji. Podejmowanie decyzji o wywłaszczeniu

Wykład 6 Planista procesora funkcja schedule. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Zarządzanie w systemach i sieciach komputerowych. Dr inż. Robert Wójcik. Wykład 3. Zarządzanie przydziałami procesora w systemach komputerowych

Planowanie przydziału procesora

Planowanie przydziału procesora

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

Zarządzanie procesami i wątkami

Zarządzanie procesorem

PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.

Systemy operacyjne III

1.1 Definicja procesu

Przykłady implementacji planowania przydziału procesora. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.

Mogą pracować w środowisku: Scentralizowanym -mikrokontroler Rozproszonym sieć sterująca, systemy hierarchiczne. Komunikacja z syst.

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Fazy procesora i wejścia-wyjścia. Planowanie przydziału procesora. Czasy faz procesora. Planowanie przydziału procesora

Przełączanie kontekstu. Planista średnioterminowy. Diagram kolejek. Kolejki planowania procesów. Planiści

1 Podstawowe definicje i pojęcia współbieżności

Planowanie przydziału procesora

PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1

Informatyka, systemy, sieci komputerowe

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.3

Metody obsługi zdarzeń

Mariusz Rudnicki PROGRAMOWANIE WSPÓŁBIEŻNE I SYSTEMY CZASU RZECZYWISTEGO CZ.3

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Programowanie współbieżne i rozproszone

Mikroprocesor Operacje wejścia / wyjścia

Systemy Czasu Rzeczywistego (SCR)

Planowanie przydziału procesora

BSD - alternatywa dla Linuksa

Szeregowanie procesów w Linuksie - trendy rozwojowe

Programowanie współbieżne Wykład 2. Iwona Kochańska

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

PROGRAMOWANIE SYSTEMÓW WBUDOWANYCH

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Systemy wbudowane - wykład 9. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes.

Jądro systemu operacyjnego

Jadro Linux 2.6. a zadania czasu rzeczywistego. Artur Lewandowski. Jądro Linux 2.6 p.1/14

Szeregowanie zadań we współczesnych systemach operacyjnych. Szeregowanie zadań w Linux Kernel 2.6

Procesy, wątki i zasoby

Przerwania, polling, timery - wykład 9

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Podstawy Informatyki Systemy operacyjne

Systemy Operacyjne - zarządzanie procesami

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Systemy operacyjne. Paweł Pełczyński

Działanie systemu operacyjnego

projektowanie systemu

Mechanizmy pracy równoległej. Jarosław Kuchta

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Zarządzanie wieloserwerowym środowiskiem SAS z wykorzystaniem SAS Grid Managera. Katarzyna Wyszomierska

SYSTEMY OPERACYJNE WYKLAD 6 - wątki

Materiały pomocnicze 1

SOE Systemy Operacyjne Wykład 8 Pamięć wirtualna dr inż. Andrzej Wielgus

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Mikroinformatyka. Wielozadaniowość

Technika mikroprocesorowa. Systemy operacyjne czasu rzeczywistego

5. Model komunikujących się procesów, komunikaty

Podstawy Informatyki Układ przerwań

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Wprowadzenie do systemu Minix

Kurs programowania. Wykład 8. Wojciech Macyna

Planowanie przydziału procesora

Rozdział 5. Administracja kontami użytkowników

Zbigniew S. Szewczak Podstawy Systemów Operacyjnych

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Ustawienia ogólne. Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony

Real-Time Linux. Wprowadzenie

Linux Scheduler Szeregowanie procesów w systemie Linux. Andrzej Ambroziewicz Piotr Marat Mieszko Michalski

Systemy operacyjne Procesy i wątki

Działanie systemu operacyjnego

Wprowadzenie do systemów operacyjnych

Wykład 3: Implementacja programów wbudowanych

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Rysunek 1: Okno z lista

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Systemy czasu rzeczywistego. Systemy czasu rzeczywistego. Systemy czasu rzeczywistego. Systemy czasu rzeczywistego - przykłady

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Systemy czasu rzeczywistego. Systemy czasu rzeczywistego. Systemy czasu rzeczywistego. Systemy czasu rzeczywistego - przykłady

Systemy Operacyjne I: Procesy

Simulator of Operating System

Podstawy techniki cyfrowej Układy wejścia-wyjścia. mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Transkrypt:

J. Ułasiewicz Programowanie aplikacji współbieżnych 1 7. procesów W środowisku systemu pracuje zwykle więcej procesów gotowych do wykonania niż dostępnych jest procesorów. Stąd istnieje potrzeba decydowania który z procesów ma być wykonywany na którym z procesorów. zadania P1 T1 T3 Tn P2 kolejka zadań gotowych szeregowanie Zadania zablokowane procesory P k Rys. 7-1 Obieg zadań w systemie operacyjnym Decyduje o tym procedura szeregująca (ang. scheduler). Jest to szereg funkcji zaimplementowanych w jądrze systemu które decydują które procesy ze zbioru procesów gotowych ma być wykonywany i na którym procesorze. Funkcja procedury szeregującej wybranie ze zbioru procesów gotowych procesu który ma być teraz wykonywany i na którym procesorze. Procedura szeregująca jest aktywowana gdy: 1. Wystąpiło przerwanie zegarowe proces bieżący wykorzystał przydzielony mu kwant czasu. 2. Wystąpiło przerwanie od urządzenia zewnętrznego proces zablokowany na operacji wejścia / wyjścia stał się gotowy. 3. Proces bieżący wykonał wywołanie systemowe na skutek którego inny proces stał się gotowy. 4. Proces bieżący dobrowolnie oddał procesor lub zakończył się 5. Proces bieżący naruszył mechanizm ochrony procesora co spowodowało przerwanie wewnętrzne procesora. Priorytet procesu liczbowa miara ważności procesu względem innego procesu.

J. Ułasiewicz Programowanie aplikacji współbieżnych 2 Ze względu na wymogi szeregowania wyróżnia się trzy klasy procesów: Procesy interaktywne (ang. Interactive) Procesy wsadowe lub tła (ang. batch, background) Procesy czasu rzeczywistego (ang. Real Time) Procesy interaktywne oddziałują interaktywnie z użytkownikiem. Stąd oczekują zablokowane na nacisnięcie klawisza lub kliknięcie myszki. Gdy to nastąpi reakcja programu powinna być szybka (50-150 ms) gdyż inaczej system uznany zostanie jako wolny. Typowe aplikacje: edytory, aplikacje graficzne, interpretery poleceń. Procesy wsadowe lub tła Procesy które nie muszą bezpośrednio oddziaływać z użytkownikiem. Mogą to być procesy systemowe np. serwer WWW serwer bazy danych. Ich pilność zależy od funkcji którą wykonują. Procesy czasu rzeczywistego Czas reakcji tych procesów powinien spełniać rygorystyczne wymagania czasowe i powinien być deterministyczny. Proces taki nie może być blokowany przez proces o niższym priorytecie. Przykład: proces sterujący robotem, aplikacja wideo. Ze względu na wewnętrzną specyfikę zapotrzebowania na zasoby wyróżnia się dwie klasy procesów: Ograniczone przez czas procesora (ang. CPU bounded) Ograniczone przez system wejścia/wyjścia (ang. IO bounded) Ograniczone przez czas procesora większość czasu zajmują funkcje wykonywane przez procesor. Przykładem mogą być programy optymalizacyjne. Ograniczone przez system wejścia/wyjścia większość czasu zajmują funkcje wejścia / wyjścia. Przykładem mogą być bazy danych, aplkacje interaktywne. Decyzja szeregująca pogodzić musi wiele przeciwstawnych celów. Zaliczyć do nich można: Krótki czasu odpowiedzi dla procesów interaktywnych. Duża przepustowość dla procesów wsadowych Uniknięcie zagłodzenia procesów Znalezienie kompromisu między procesami o wysokich i niskich priorytetach

J. Ułasiewicz Programowanie aplikacji współbieżnych 3 Podstawowa zasada szeregowania w systemach czasu rzeczywistego - do wykonania wybierany jest zawsze proces gotowy o najwyższym priorytecie. wywłaszczające (ang. preemptive scheduling) Gdy proces P2 o wyższym priorytecie niż aktualnie wykonywany proces P1 stanie się gotowy, proces P2 bezzwłocznie otrzymuje procesor a proces P1 jest wywłaszczany (ang. preeempted) i zawieszany. Zdarzenie P2 Zawieszony Zawieszony P1 Wywlaszczenie Czas Rys. 7-2 Wywłaszczająca strategia szeregowania Określanie kwantu czasu przez który będzie się wykonywał proces: Gdy za krótki większość czasu procesora zostanie zużyta na przełączanie kontekstu Gdy za długi czas odpowiedzi systemu będzie długi. 7.1 Metody szeregowania - ogólne W systemach operacyjnych popularne są następujące strategie szeregowania wykorzystujące priorytety. 1. karuzelowe (ang. Round Robin scheduling). 2. FIFO (ang. FIFO scheduling). 3. adaptacyjne (ang. Adaptive scheduling). karuzelowe Proces wykonywany jest aż do czasu gdy: 1. Samoistnie zwolni procesor. 2. Zostanie wywłaszczony przez proces o wyższym priorytecie. 3. Wyczerpie swój kwant czasu (ang. timeslice).

J. Ułasiewicz Programowanie aplikacji współbieżnych 4 Kolejka procesów gotowych 31 Proces wykonywany 15 10 P1 P2 P3 P4 P5 P10 P8 P9 8 P6 P7 0 Idler Procesy zablokowane Rys. 7-3 Kolejka procesów gotowych i procesy zablokowane FIFO Proces wykonywany jest aż do czasu gdy: 1. Samoistnie zwolni procesor. 2. Zostanie wywłaszczony przez proces o wyższym priorytecie. Gdy procesy wykonywane z tym samym priorytetem stosują algorytm FIFO i operują na pewnym niepodzielnym zasobie, wzajemne wykluczanie zapewnione jest automatycznie. adaptacyjne adaptacyjne przebiega według następujących zasad: 1. Gdy proces wyczerpie swój kwant czasu i nie zablokuje się sam, jego priorytet obniżany jest o 1. Zjawisko to nazywane jest redukcją priorytetu (ang. priority decay). 2. Gdy proces sam się zablokuje, przywracany jest mu początkowy priorytet. 3. Gdy proces nie zostanie wybrany do wykonania po 1 sekundzie priorytet jego zwiększany jest o 1. adaptacyjne jest domyślną strategią szeregowania dla procesów uruchamianych z interpretera poleceń (ang. shell).

J. Ułasiewicz Programowanie aplikacji współbieżnych 5 7.2 Metody szeregowania w systemie LINUX 7.2.1 Informacje wstępne Wersja jądra 2.6 umożliwia pracę w systemie wieloprocesorowym. Stąd procedura szeregująca musi to uwzględniać i została zmodyfikowana w porównaniu z poprzednimi wersjami. Wymagania na procedurę szeregowania zadań w czasie stałym - wszystkie algorytmy powinny działać w czasie niezależnym od liczby szeregowanych procesów. Osobne kolejki zadań dla każdego procesora. Sprawiedliwość w przydziale czasu procesora. Zabezpieczenie przed zagłodzeniem i blokowaniem. Uwzględnienie wielu procesorów. Zapewnienie wysokiego stopnia interaktywności nawet obciążony system powinien szybko reagować na polecenia użytkownika. Ogólna zasada szeregowania w systemie Linux w systemie jest wywłaszczające i oparte o dynamiczne priorytety i kredyty (czasy wykorzystania procesora). Gdy gotowe zadanie nie otrzymuje procesora jego priorytet stopniowo wzrasta. Gdy przekroczy priorytet bieżącego procesu jest on wywłaszczany. W systemie Linux rozróżnia się następujące klasy szeregowania procesy czasu rzeczywistego szeregowane według algorytmu FIFO - SCHED_FIFO procesy czasu rzeczywistego szeregowane według algorytmu karuzelowego - SCHED_RR procesy zwykłe szeregowane według algorytmu SCHED_OTHER Priorytety Do wyznaczania zadań do wykonania wykorzystuje się priorytety. Mają one zakres od 0 (najwyższy priorytet) do 139 (najniższy priorytet). Zadania czasu rzeczywistego SCHED_FIFO i SCHED_RR mają priorytety w zakresie 0 99 które są im przydzielane przez użytkownika. Zadania zwykłe mają priorytety w zakresie 100 139. Wartość ta zależy od parametru niceval (zakres od 20 do 19) nadawanego w poleceniu i funkcji nice niceval. Standardowo niceval = 0 co odpowiada priorytetowi 120.

J. Ułasiewicz Programowanie aplikacji współbieżnych 6 7.2.2 zadań czasu rzeczywistego Zasady szeregowania zadań czasu rzeczywistego Jeżeli w systemie są zadania czasu rzeczywistego SCHED_FIFO lub SCHED_RR to będą one wykonywane w kolejności priorytetów i zgodnie z algorytmami FIFO lub karuzelowym. Zadania zwykłe SCHED_OTHER są wykonywane tylko wtedy gdy nie ma gotowych zadań czasu rzeczywistego karuzelowe dla procesów czasu rzeczywistego - SCHED_RR Zasady: 1. Wykonywany jest proces gotowy o najwyższym priorytecie. 2. Proces wykonywany jest aż do czasu gdy: Samoistnie zwolni procesor - zażąda niedostępnego zasobu lub wykona funkcję sched_yield(). Zostanie wywłaszczony przez proces o wyższym priorytecie. Wyczerpie swój kwant czasu (ang. timeslice). FIFO - SCHED_FIFO Zasady: 1. Wykonywany jest proces gotowy o najwyższym priorytecie. 2. Proces wykonywany jest aż do czasu gdy: Samoistnie zwolni procesor zażąda niedostępnego zasobu lub wykona funkcję sched_yield(). Zostanie wywłaszczony przez proces o wyższym priorytecie. 7.2.3 zadań zwykłych Kredyty Procesom przydzielane są kredyty związane z ich priorytetem. Gdy zadanie jest wykonywane kredyt zmniejsza się z każdym przerwaniem zegarowym. Proces bieżący będzie wywłaszczony wtedy gdy wyczerpie on swój kredyt (ang. time slice). Po pewnym czasie kredyt będzie odnowiony.

J. Ułasiewicz Programowanie aplikacji współbieżnych 7 Kredyt bazowy Kredyt domyślny definiuje się jak poniżej: #define DEF_PRIORITY (20*HZ/100) Gdzie Hz jest częstotliwością przerwań zegarowych komputera. W PC wynosi ona 100 przerwań na sekundę, stąd DEF_PRIORITY wynosi 20 (jest to ok. 200 ms). Każdy z procesów ma kredyt bazowy (ang. base time quantum) przydzielany mu gdy zaczyna się epoka. Wartość tego kredytu zależy od parametru niceval ustawianego w funkcji nice(...) i setpriority(...). Epoki oparte jest o pojęcie epoki (ang. epoch). Gdy zaczyna się epoka każdemu procesowi przydziela się kredyt bazowy czasu procesora (ang. time slice) który ma do wykorzystania w tej epoce. Gdy kredyt procesu się skończy jest on wywłaszczany i zastępowany przez inny proces. W czasie epoki proces może być wielokrotnie wywłaszczany i szeregowany np. wtedy gdy sam zwalnia procesor. Epoka kończy się gdy wszystkie procesy gotowe wyczerpią swe kredyty. Wtedy zaczyna się nowa epoka i kredyty przydzielane są procesom na nowo. Priorytet statyczny Priorytet statyczny nie jest zmieniany przez procedurę szeregującą. Zdania czasu rzeczywistego: 1 99. Zadania zwykłe: 120 - niceval

J. Ułasiewicz Programowanie aplikacji współbieżnych 8 Kolejki Dla każdego procesora utrzymywane są dwie tablice kolejek. Tablica kolejek procesów aktywnych Tablica kolejek procesów wygasłych Tablica kolejek procesów aktywnych 1 0 Proces wykonywany Tablica kolejek procesów wygaslych 1 0 120 120 CPU1 122 122 130 130 139 139 CPU 2 aktywne 2 wygasle 2 CPU N aktywne N wygasle N Rys. 7-4 Kolejki procesów aktywnych w systemie wieloprocesorowym Tablice zawierają kolejki dla każdego z poziomów priorytetów. Gdy zadanie staje się gotowe otrzymuje priorytet i kredyt bazowy i umieszczane jest w kolejce procesów aktywnych. Z każdym przerwaniem zegarowym kredyt zmniejszany jest o jednostkę i wyczerpuje się. W kolejce procesów aktywnych przebywają procesy które nie wykorzystały swego kredytu. Gdy wykorzystają przenoszone zostają do kolejki procesów wygasłych. Gdy w kolejce zadań aktywnych nie ma już procesów wtedy: Następuje przełączenie kolejek. Przydziela się procesom nowe kredyty.

J. Ułasiewicz Programowanie aplikacji współbieżnych 9 Funkcja schedule() implementuje scheduler. Jej zadaniem jest wyznaczenie procesu który ma być wykonywany jako następny. Funkcja jest wywoływana gdy: W wywołaniach systemowych zmieniających status gotowości procesów Przy powrocie z przerwania i po każdym wywołaniu systemowym gdy ustawiona jest to jest potrzebne. W szczególności funkcja wykonywana jest gdy: Bieżący proces nie może być kontynuowany z powodu braku zasobów. Gdy proces bieżący wyczerpał swój kredyt. Gdy jakiś proces zyskał status gotowości i jego priorytet jest większy niż priorytet procesu bieżącego. Kiedy wywoływane są funkcje sched_setscheduler() lub sched_ yield() Priorytet dynamiczny Wybór procesu do wykonania następuje na podstawie priorytetu dynamicznego. Stosuje się do zwykłych procesów. Zmiany priorytetu dynamicznego: Priorytet dynamiczny zmniejsza się w miarę jak proces wyczerpuje swój kredyt czasu wykonania. Dla procesów które pozostają zablokowane na operacjach we/wy priorytet dynamiczny jest zwiększany. Podstawowa zasada szeregowanie w systemie Linux Do wykonania zostaje wybrany gotowy proces czasu rzeczywistego który ma najwyższy priorytet statyczny. Gdy nie ma takich procesów wybrany zostaje proces zwykły który nie wyczerpał kredytu i ma najwyższy priorytet dynamiczny.

J. Ułasiewicz Programowanie aplikacji współbieżnych 10 7.2.4 Funkcje modyfikujące szeregowanie i priorytet. System dostarcza niezbędnych funkcji do zmiany i testowania priorytetu procesów i strategii szeregowania. Wywołanie systemowe nice() getpriority() setpriority() sched_getscheduler() sched_setscheduler() sched_getparam() sched_setparam() sched_yield() sched_get_ priority_min() sched_get_ priority_max() sched_rr_get_interval() Opis Zmiana priorytetu Testowanie maksymalnego priorytetu procesu lub grupy procesów Ustawienie priorytetu procesu lub grupy procesów Testowanie strategii szeregowania Ustawienie priorytetu i strategii szeregowania Testowanie priorytetu Ustawianie priorytetu Zwolnienie procesora Testowanie minimalnego priorytetu dla klasy szeregowania zadań Testowanie maksymalnego priorytetu dla klasy szeregowania zadań Testowanie kwantu czasu dla strategii SCHED_RR Ustawienie priorytetu funkcja nice: int nice(int inc) inc Modyfikacja parametru niceval z zakresu od -20 do 20. (-20 najwyższy, 20 najniższy) Funkcja zwraca: gdy 0 sukces gdy -1 błąd Funkcja zmienia priorytet procesu. Dodatnia wartość parametru oznacza zmniejszenie priorytetu procesu, natomiast ujemna zwiększenie. Tylko użytkownik root może ustawiać wartości ujemne. Istnieje także polecenie systemowe nice

J. Ułasiewicz Programowanie aplikacji współbieżnych 11 Ustawienie priorytetu polecenie nice: nice [-n niceval] [-niceval] [polecenie [argumenty]] niceval polecenie Modyfikacja priorytetu z zakresu od -20 do 20. (-20 najwyższy, 20 najniższy). Tylko użytkownik root może ustawiać wartości ujemne. Polecenie które ma być wykonane na tym priorytecie Przykład: nice n 10 tar cvf kopia.tar /home Ustawienie priorytetu polecenie renice: renice niceval [[-p] pid...] [[-g] pgrp...] [[- u] user...] Polecenie to zmienia priorytet aktualnie wykonywanego procesu. Ustawienie priorytetu: int setpriority(int which, int who, int niceval) which PRIO_PROCESS - pojedynczy proces o identyfikatorze who, PRIO_PGRP - grupa procesów o identyfikatorze who PRIO_USER - wszystkie procesy użytkownika o identyfikatorze who who pid procesu lub identyfikator grupy procesów lub identyfikator użytkownika niceval Parametr nice Funkcja zwraca: gdy 0 sukces gdy -1 błąd Funkcja ta ustawia parametr nice i przez to zmienia priorytet wszystkich procesów w zadanym zbiorze lub też pojedynczego procesu.

J. Ułasiewicz Programowanie aplikacji współbieżnych 12 Testowanie parametru nice: int getpriority(int which, int who) gdzie: which who PRIO_PROCESS - pojedynczy proces o identyfikatorze who, PRIO_PGRP - grupa procesów o identyfikatorze who PRIO_USER - wszystkie procesy użytkownika o identyfikatorze who pid procesu lub identyfikator grupy procesów lub identyfikator użytkownika Funkcja zwraca: gdy > 0 wartość gdy -1 błąd Funkcja podaje wartość parametru nice zadanego zbioru procesów, czyli najwyższy priorytet spośród parametrów nice wszystkich procesów należących do tego zbioru. Zbiór zadaje się poprzez odpowiednie wartości parametrów which i who.

J. Ułasiewicz Programowanie aplikacji współbieżnych 13 Ustawienie metody szeregowania: int sched_setscheduler(int pid,int alg, struct sched_param *param) struct sched_param {... int sched_priority;... } pid PID procesu któremu zmieniamy strategię szeregowania priorytet (0 gdy proces bieżący) alg Nowy algorytm szeregowania: SCHED_FIFO, SCHED_RR, SCHED_OTHER, SCHED_BATCH, SCHED_IDLE param W polu param.sched_priority tej struktury ustawiamy nowy priorytet SCHED_FIFO SCHED_RR SCHED_OTHER SCHED_BATCH SCHED_IDLE FIFO czasu rzeczywistego karuzelowe czasu rzeczywistego standardowe wsadowe wsadowe o bardzo niskim priorytecie Tab. 7-1Oznaczenia symboliczne strategii szeregowania Funkcja zwraca: gdy - 0 sukces gdy -1 błąd Funkcja ta ustawia tryb i parametry szeregowania procesu identyfikowanego przez pid lub procesu bieżącego, gdy pid=0. Parametry szeregowania zawarte są w strukturze typu sched_param, ktora w obecnej wersji zawiera tylko jedno pole - statyczny priorytet dla procesów czasu rzeczywistego. Do zmiany parametrów szeregowania procesu uprawniony jest jego właściciel oraz administrator root. Do ustawienia trybów czasu rzeczywistego i zmiany ich parametrów uprawniony jest jedynie administrator systemu.

J. Ułasiewicz Programowanie aplikacji współbieżnych 14 Testowanie metody szeregowania: int sched_getscheduler(int pid) pid PID procesu dla którego testujemy strategię szeregowania (0 proces bieżący) Funkcja zwraca: gdy > 0 aktualną strategię szeregowania procesu (patrz powyższa tabela) gdy -1 błąd Funkcja zwraca tryb szeregowania procesu określonego przez pid lub procesu bieżącego gdy pid=0. Ustawienie parametrów szeregowania: int sched_setparam(pid_t pid, struct sched_param *param) pid param pid testowanego procesu lub 0 (dla procesu biezącego) Struktura z parametrami szeregowania Funkcja zapisuje do struktury *param nowe parametry szeregowania procesu określonego przez pid, lub procesu bieżącego gdy pid=0. Wywołanie funkcji ma sens jedynie dla procesów czasu rzeczywistego i musi być wykonane przez administratora systemu. Funkcja zwraca: gdy - 0 sukces gdy -1 błąd Testowanie parametrów szeregowania: int sched_getparam(pid_t pid, struct sched_param *param) pid param pid testowanego procesu lub 0 (dla procesu biezącego) Struktura z parametrami szeregowania Funkcja zapisuje do struktury *param aktualne parametry szeregowania procesu określonego przez pid, lub procesu bieżącego gdy pid=0. Funkcja zwraca: gdy - 0 sukces gdy -1 błąd

J. Ułasiewicz Programowanie aplikacji współbieżnych 15 Testowanie priorytetu minimalnego i maksymalnego sched_get_priority_min(int policy) sched_get_priority_max(int policy) Gdzie: policy Algorytm szeregowania: SCHED_FIFO, SCHED_RR, SCHED_OTHER, SCHED_BATCH, SCHED_IDLE Funkcja zwraca: gdy > 0 funkcja zwraca maksymalny i minimalny priorytet dla danej metody szeregowania gdy -1 błąd Wywołanie szeregowania int sched_yield(void) Funkcja zwraca 0. Wywołanie funkcji spowoduje wywołanie procedury szeregującej i przesunięcie procesu bieżącego na koniec kolejki. Jest to oddanie procesora na własne życzenie #include <sys.sched.h> void main(void){ struct sched_param param; int prio, alg; // Ustawienie strategii szereg. i priorytetu param.sched_priority = 11; sched_setscheduler(0, SCHED_RR,&param); // Testowanie strategii szereg. i priorytetu } alg = sched_getscheduler(0); printf( Startegia szeregowania: %d\n,alg); Przykład ustawiania i testowania parametrów szeregowania

J. Ułasiewicz Programowanie aplikacji współbieżnych 16 7.3 Miary efektywności systemów czasu rzeczywistego W systemach czasu rzeczywistego stosuje się następujące ilościowe kryteria ich oceny: 1. Zwłoka obsługi przerwania. 2. Czas przełączania kontekstu. 3. Czas szeregowania. Zwłoka obsługi przerwania (ang. Interrupt Latency) Jest to maksymalny czas pomiędzy wystąpieniem przerwania a wykonaniem pierwszej instrukcji procedury obsługi tego przerwania (ang. Interrupt Service Routine ISR). Przerwanie Interrupt Latency ISR - Procedura obslugi przerwania Kontynuacj a procesu P1 P1 ISR P1 Start ISR Stop ISR Rys. 7-5 Ilustracja zwłoki obsługi przerwania Czas przełączania kontekstu (ang. Context Switching Latency) Czas przełączania kontekstu jest to czas potrzebny na zachowanie kontekstu procesu bieżącego P1 i odtworzenie kontekstu procesu P2 podlegającego zaszeregowaniu. Zawieszenie procesu P1 Context Switching Latency Wznowienie procesu P2 P1 P2 Rys. 7-6 Ilustracja czasu przełączenia kontekstu Czas szeregowania (ang. Scheduling Latency) Czas pomiędzy zakończeniem procedury obsługi przerwania a wznowieniem procesu obsługującego przerwanie nazywamy czasem szeregowania. W tym czasie system wykonuje następujące czynności:

J. Ułasiewicz Programowanie aplikacji współbieżnych 17 1. procesów. 2. Zachowanie kontekstu procesu bieżącego P1. 3. Wznowienie procesu obsługującego zdarzenie P2. Przerwanie ISR - Procedura obslugi przerwania Zawiadomienie Mikrojadro Wznowienie procesu P2 P1 ISR P2 Czas szeregowania Rys. 7-7 Ilustracja czasu szeregowania