sched setscheduler 2






SETSCHEDULER(2) Podręcznik programisty Linuxa SETSCHEDULER(2)


NAZWA
sched_setscheduler, sched_getscheduler - ustaw i pobierz
algorytm/parametry przydzielania

SKŁADNIA
#include <sched.h>

int sched_setscheduler(pid_t pid, int policy, const struct
sched_param *p);

int sched_getscheduler(pid_t pid);

struct sched_param {
...
int sched_priority;
...
};

OPIS
sched_setscheduler ustawia politykę przydzielania oraz
związane z nią parametry. Robi to dla procesu, zidenty
fikowanego przez pid. Jeśli pid jest równy zero, ustawiony
zostanie przydzielacz procesu wołającego. Interpretacja
parametru p zależy od wybranej polityki. Obecnie, pod Lin
uxem obsługiwane są następujące trzy polityki: SCHED_FIFO,
SCHED_RR, i SCHED_OTHER; ich semantyka jest opisana niżej.

sched_getscheduler zapytuje o bieżącą politykę przydziela
nia, z której korzysta proces, wskazany przez pid. Jeśli
pid równa się zero, pobierana jest polityka procesu
wołającego.



Polityki przydzielania
Przydzielacz jest częścią jądra, która decyduje, który z
pracujących procesów zostanie wykonany przez procesor jako
następny. Linuxowy przydzielacz daje trzy różne polityki
przydzielania--jedną dla normalnych procesów oraz dwie dla
aplikacji czasu rzeczywistego. Każdemu procesowi przy
dzielana jest statyczna wartość priorytetu sched_priority,
która może być zmieniana tylko poprzez wywołania syste
mowe. Przydzielacz utrzymuje listę pracujących procesów
dla każdej możliwej wartości sched_priority, która może
być w zakresie 0 do 99. Aby zdecydować, który proces
należy uruchomić jako następny, przydzielacz zagląda na
niepustą listę o najwyższym statycznym priorytecie i
pobiera proces z góry tej listy. Polityka przydzielania
określa, gdzie dany proces będzie wstawiony w liście pro
cesów o tym samym priorytecie statycznym i jak będzie się
w niej przemieszczał.

SCHED_OTHER jest domyślną, uniwersalną polityką dzielenia
czasu, używaną przez większość procesów. SCHED_FIFO i



Linux 1.3.81 1996-04-10 1





SETSCHEDULER(2) Podręcznik programisty Linuxa SETSCHEDULER(2)


SCHED_RR są przeznaczone dla specjalnych aplikacji, w
których czas jest sprawą krytyczną i które muszą mieć
dokładną kontrolę nad sposobem, w którym procesy są
wybierane do wykonania. Proces przydzielany z SCHED_OTHER
musi mieć statyczny priorytet 0, proces SCHED_FIFO lub
SCHED_RR może mieć ten priorytet w zakresie 1 do 99. Prio
rytet wyższy od 0 mogą uzyskiwać tylko procesy
superużytkownika. Do nich więc odnosi się SCHED_FIFO i
SCHED_RR. Wywołania systemowe sched_get_priority_min i
sched_get_priority_max dają informacje o tym, jakie
zakresy priorytetów odpowiadają określonym politykom. Jest
to przenośny sposób, zgodny z POSIX.1b.

Przydzielanie jest wywłaszczające: jeśli proces o wyższym
statycznym priorytecie staje się gotowy do uruchomienia,
proces bieżący zostanie wywłaszczony i zwrócony do swojej
kolejki oczekiwania. Polityka przydzielania określa tylko
porządek w liście działających procesów o tym samym staty
cznym priorytecie.


SCHED_FIFO: Przydzielanie typu First In-First Out
SCHED_FIFO może być używane tylko ze statycznymi prioryte
tami wyższymi niż 0, co oznacza, że gdy proces SCHED_FIFO
stanie się gotowy do uruchomienia, zawsze natychmiast
wywłaszczy wszystkie działające obecnie procesy
SCHED_OTHER. SCHED_FIFO jest prostym algorytmem przy
dzielania bez fragmentowania czasu. Do procesów przy
dzielonych w polityce SCHED_FIFO tyczą się następujące
reguły: Proces SCHED_FIFO, który został wywłaszczony przez
inny proces o wyższym priorytecie pozostanie na szczycie
listy swojego priorytetu i jego wykonywanie zostanie
wznowione gdy tylko procesy o wyższym priorytecie zostaną
znów zablokowane. Gdy proces SCHED_FIFO staje się gotowy
do działania, zostaje wstawiany na koniec listy swojego
priorytetu. Wywołanie sched_setscheduler lub sched_set
param wstawi proces SCHED_FIFO, określony przez pid na
koniec listy (o ile był on uruchamialny). Proces wołający
sched_yield zostanie wstawiony na koniec listy. Żadne
inne zdarzenia nie mogą przesunąć procesu, przydzielanego
w polityce SCHED_FIFO, znajdującego się w liście oczekiwa
nia o jednakowych statycznych priorytetach. Proces
SCHED_FIFO działa dopóki nie zostanie zablokowany przez
żądanie I/O, wywłaszczenie przez proces o wyższym priory
tecie, lub przez wywołanie (samodzielne) funkcji
sched(2).



SCHED_RR: Przydzielanie typu Round Robin
SCHED_RR jest prostym rozszerzeniem SCHED_FIFO. Wszystko,
co powiedziano o SCHED_FIFO, tyczy się także SCHED_RR, z
tym że każdy z procesów może działać tylko przez określony
odcinek czasu. Jeśli proces działający w polityce



Linux 1.3.81 1996-04-10 2





SETSCHEDULER(2) Podręcznik programisty Linuxa SETSCHEDULER(2)


SCHED_RR działa przez czas dłuższy, lub równy niż ten
odcinek, zostanie wstawiony na koniec listy swojego prio
rytetu. Proces SCHED_RR, który został wywłaszczony przez
proces o wyższym priorytecie i wznowił wykonywanie,
dokończy niewykorzystany odcinek czasu round robin.
Długość takiego odcinka czasu można odczytać funkcją
sched_rr_get_interval.


SCHED_OTHER: Domyślne przydzielanie linuxowe
SCHED_OTHER może być używany tylko ze statycznym priory
tetem 0. SCHED_OTHER jest standardowym, dzielącym czas
przydzielaczem, przeznaczonym dla wszystkich procesów,
które nie wymagają specjalnych statycznych priorytetów
mechanizmów czasu rzeczywistego. Proces, który ma być
uruchomiony jest wybierany z listy statycznego priorytetu
0 w oparciu o priorytet dynamiczny, który jest określany
jedynie wewnątrz tej listy. Priorytet dynamiczny jest
oparty na wartości nice (ustawianej wywołaniami nice(1)
lub setpriority(1) i zwiększany dla każdego odcinka
czasu, w którym proces jest gotów do wykonania, lecz przy
dzielacz mu tego zabrania. Zapewnia to uczciwy postęp
wszystkim procesom SCHED_OTHER.


Czas odpowiedzi
Blokowany proces o wysokim priorytecie, oczekujący na I/O
ma określony czas odpowiedzi przed ponownym jego przydzie
leniem. Autor sterownika urządzenia może zmniejszyć czas
odpowiedzi, używając procedury obsługi przerwań typu "slow
interrupt", opisanej w request(9).


Różne
Procesy potomne dziedziczą algorytm przydzielania i
parametry poprzez fork(2).

Blokowanie pamięci jest procesom czasu rzeczywistego
zazwyczaj potrzebne do unikania opóźnień stronicowania;
można tego dokonać wywołaniami mlock(2) lub mlockall(2).

Ponieważ nieblokująca nieskończona pętla w procesie, przy
dzielonym w polityce SCHED_FIFO lub SCHED_RR będzie
(wiecznie) blokować wszystkie procesy o niższym prioryte
cie, twórca oprogramowania powinien na konsoli zawsze
trzymać dostępną powłokę, przydzielaną z wyższym staty
cznym priorytetem niż testowana aplikacja. Umożliwi to
awaryjne ubicie testowanych aplikacji czasu rzeczywistego,
które nie blokują, lub nie kończą się zgodnie z oczekiwa
niami. Jako, że procesy SCHED_FIFO i SCHED_RR mogą
wywłaszczać inne procesy na zawsze, tylko procesy roota
mogą włączać te polityki przydzielania.

Systemy POSIX-owe, na których dostępne są



Linux 1.3.81 1996-04-10 3





SETSCHEDULER(2) Podręcznik programisty Linuxa SETSCHEDULER(2)


sched_setscheduler i sched_getscheduler, definiują w
<unistd.h> _POSIX_PRIORITY_SCHEDULING.


WARTOŚĆ ZWRACANA
Po sukcesie, sched_setscheduler zwraca zero. Po sukcesie,
sched_getscheduler zwraca politykę procesu (nieujemna
liczba całkowita). Po błędzie, zwracane jest -1 i ustaw
iane jest errno.

BŁEDY
ESRCH Proces o identyfikatorze pid nie został
znaleziony.

EPERM Proces wołający nie ma odpowiednich uprawnień.
Tylko procesy roota mogą włączać polityki
SCHED_FIFO oraz SCHED_RR. Proces, wołający
sched_setscheduler musi mieć uid równy euid lub
uid procesu identyfikowanego przez pid, lub musi
być procesem superużytkownika.

EINVAL Polityka przydzielania nie jest żadną ze znanych
polityk, lub parametr p nie ma sensu dla danej
polityki.

STANDARDY
POSIX.1b (wcześniej POSIX.4)

USTERKI
W systemie linux-1.3.81, SCHED_R nie został jeszcze
dokładnie przetestowany i może nie zachowywać się
dokładnie tak, jak opisano w POSIX.1b.

ZOBACZ TAKŻE
sched(2), sched(2), sched(2),
sched(2), sched(2),
nice(2), setpriority(2), getpriority(2), mlockall(2),
munlockall(2), mlock(2), munlock(2).

Programming for the real world - POSIX.4 Billa O.
Gallmeistera, O'Reilly & Associates, Inc., ISBN
1-56592-074-0
IEEE Std 1003.1b-1993 (standard POSIX.1b)
ISO/IEC 9945-1:1996 - jest to nowa rewizja (1996) POSIX.1,
która zawiera standard POSIX.1(1990), POSIX.1b(1993),
POSIX.1c(1995) i POSIX.1i(1995).











Linux 1.3.81 1996-04-10 4





Wyszukiwarka

Podobne podstrony:
sched h orig (2)
sched setparam 2
sched h
module sched
SCHED PARAM (2)
sched c (3)
daily sched nov06
sched h orig
sched c
sched h (3)
sched yield 2
sched rr get interval 2

więcej podobnych podstron