.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" 1999 PTM Przemek Borys .\" Last update: A. Krzysztofowicz , Apr 2003, .\" manpages 1.54 .\" .\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996 .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" 1996-04-01 Tom Bjorkholm .\" First version written .\" 1996-04-10 Markus Kuhn .\" revision .\" 1999-08-18 David A. Wheeler added Note. .\" Modified, 25 Jun 2002, Michael Kerrisk .\" Corrected description of queue placement by sched_setparam() and .\" sched_setscheduler() .\" A couple of grammar clean-ups .\" .TH SETSCHEDULER 2 2002-06-25 "Linux 2.4.18" "Podręcznik programisty Linuksa" .SH NAZWA sched_setscheduler, sched_getscheduler \- ustawienie i pobranie algorytmu/parametrów szeregowania zadań .SH SKŁADNIA .B #include .sp \fBint sched_setscheduler(pid_t \fIpid\fB, int \fIpolicy\fB, const struct sched_param *\fIp\fB); .sp \fBint sched_getscheduler(pid_t \fIpid\fB); .sp .nf .ta 4n \fBstruct sched_param { ... int \fIsched_priority\fB; ... }; .ta .fi .SH OPIS \fI Uwaga! To tłumaczenie może być nieaktualne!\fP .PP .B sched_setscheduler ustawia dla procesu identyfikowanego przez \fIpid\fP politykę szeregowania zadań oraz związane z nią parametry. Jeśli \fIpid\fP jest równe zeru, to skonfigurowane zostanie szeregowanie dla procesu wołającego tę funkcję. Interpretacja parametru \fIp\fP zależy od wybranej polityki. Obecnie, pod Linuksem obsługiwane są następujące trzy polityki: .IR SCHED_FIFO , .I SCHED_RR i .IR SCHED_OTHER ; ich semantyki są opisane poniżej. .B sched_getscheduler zapytuje o bieżącą politykę szeregowania zadań, która dotyczy procesu określonego przez \fIpid\fP. Jeśli \fIpid\fP jest równe zeru, to pobierana jest polityką dotycząca procesu wywołującego tę funkcję. .SS Polityki szeregowania zadań Procedura szeregująca jest częścią jądra, która decyduje o kolejności wykonywania działających procesów przez procesor. Linuksowa procedura szeregująca oferuje trzy różne polityki szeregowania zadań: jedną dla zwykłych procesów oraz dwie dla aplikacji czasu rzeczywistego. Każdemu procesowi przypisywana jest wartość priorytetu statycznego, \fIsched_priority\fP, która może być zmieniana tylko poprzez wywołania systemowe. Koncepcyjnie, procedura szeregująca zarządza listami działających procesów przypisanymi każdej z możliweych wartości \fIsched_priority\fP, która to wartość musi mieścić się w zakresie od 0 do 99. Aby zdecydować, który proces należy uruchomić jako następny, procedura szeregująca poszukuje niepustej listy o najwyższym priorytecie statycznym i bierze proces z początku tej listy. Polityka szeregowania zadań określa dla każdego z procesów o danyej wartości priorytetu statycznego, gdzie zostanie on wstawiony na listę i jak będzie się w jej obrębie przemieszczał. \fISCHED_OTHER\fP jest domyślną, uniwersalną polityką dzielenia czasu, używaną przez większość procesów. \fISCHED_FIFO\fP i \fISCHED_RR\fP są przeznaczone dla specjalnych aplikacji, dla których czas jest sprawą krytyczną i które muszą mieć dokładną kontrolę nad sposobem, w jaki podejmowane są decyzje o wykonywaniu działających procesów. Procesy korzystające z polityki szeregowania \fISCHED_OTHER\fP muszą mieć przypisany priorytet statyczny równy 0, a procesy korzystające z \fISCHED_FIFO\fP lub \fISCHED_RR\fP mogą mieć wartość tego priorytetu z zakresu od 1 do 99. Priorytet statyczny wyższy niż 0 mogą uzyskiwać tylko procesy działające z uprawnieniami superużytkownika i wobec tego tylko one mogą korzystające z polityk szeregowania \fISCHED_FIFO\fP i \fISCHED_RR\fP. Wywołania systemowe \fBsched_get_priority_min\fP i \fBsched_get_priority_max\fP służą do określania zakresów priorytetów odpowiadających określonym politykom w sposób przenośny, właściwy dla systemów zgodnych z POSIX.1b. Szeregowanie zadań jest wywłaszczające: jeśli proces o wyższym priorytecie statycznym staje się gotowy do działania, proces bieżący zostanie wywłaszczony i wróci do swojej kolejki oczekiwania. Polityka szeregowania zadań określa tylko kolejność na liście działających procesów o tym samym priorytecie statycznym. .SS SCHED_FIFO: Szeregowanie typu "pierwszy na wejściu-pierwszy na wyjściu" (First In-First Out), \fISCHED_FIFO\fP, może być używane tylko ze statycznymi priorytetami wyższymi niż 0 oznaczającymi, że gdy proces \fISCHED_FIFO\fP stanie się gotowy do działania, to zawsze i natychmiast wywłaszczy wszystkie aktualnie działające procesy \fISCHED_OTHER\fP. \fISCHED_FIFO\fP jest prostym algorytmem szeregowania bez kwantowania czasu. Procesów szeregowanych według polityki \fISCHED_FIFO\fP dotyczą następujące reguły: Proces \fISCHED_FIFO\fP, który został wywłaszczony przez inny proces o wyższym priorytecie pozostanie na początku listy dla swojego priorytetu i jego wykonywanie zostanie wznowione, gdy tylko procesy o wyższym priorytecie zostaną znów zablokowane. Gdy proces \fISCHED_FIFO\fP staje się gotowy do działania, jest on wstawiany na koniec listy dla swojego priorytetu. Wywołanie \fBsched_setscheduler\fP lub \fBsched_setparam\fP wstawia proces \fISCHED_FIFO\fP (lub \fISCHED_RR\fP), określony przez \fIpid\fP na początek listy (o ile był on uruchamialny). W wyniku tego, może on wywłaszczyć aktualnie działający proces, jeśli oba mają ten sam priorytet. (POSIX 1003.1 określa, że proces powinien trafiać na koniec listy.) .\" W 2.2.x i 2.4.x proces jest umieszczany na czele kolejki .\" W 2.0.x, dzieją się Właściwe Rzeczy: proces idzie na jej koniec -- MTK Proces wywołujący \fBsched_yield\fP zostanie wstawiony na koniec listy. Żadne inne zdarzenia nie mogą przesunąć procesu, szeregowanego wedłu polityki \fISCHED_FIFO\fP, a znajdującego się na liście procesów oczekujących o jednakowych statycznych priorytetach. Proces \fISCHED_FIFO\fP działa dopóki nie zostanie zablokowany przez żądanie we/wy, wywłaszczenie przez proces o wyższym priorytecie, lub przez wywołanie (samodzielne) funkcji \fBsched_yield\fP. .SS SCHED_RR: Szeregowanie typu cyklicznego (Round Robin), \fISCHED_RR\fP, jest prostym rozszerzeniem \fISCHED_FIFO\fP. Wszystko, co powiedziano o \fISCHED_FIFO\fP, dotyczy także \fISCHED_RR\fP, z tym że każdy z procesów może działać tylko przez określony okres (kwant) czasu. Jeśli proces działający według polityki \fISCHED_RR\fP działa przez czas dłuższy lub równy temu okresowi, zostanie on wstawiony na koniec listy dla swojego priorytetu. Proces \fISCHED_RR\fP, który został wywłaszczony przez proces o wyższym priorytecie i wznowił działanie, dokończy niewykorzystaną część cyklicznego kwantu czasu. Długość kwantu czasu można odczytać za pomocą funkcji \fBsched_rr_get_interval\fP. .\" W Linuksie 2.4 na długość of the przedziału RR ma wpływ wartość nice .\" procesu -- MTK .SS SCHED_OTHER: Domyślne szeregowanie linuksowe, \fISCHED_OTHER\fP, może być używane tylko ze statycznym priorytetem równym 0. \fISCHED_OTHER\fP jest standardową linuksową procedurą szeregowania zadań poprzez przydzielanie czasu, przeznaczoną dla wszystkich procesów, które nie mają specjalnych wymagań odnośnie czasu rzeczywistego wymagających wykorzystania mechanizmu priorytetów statycznych. Proces, który ma być uruchomiony, jest wybierany z listy dla priorytetu statycznego 0 w oparciu o określany jedynie wewnątrz tej listy priorytet dynamiczny. Wspomniany priorytet dynamiczny jest oparty na wartości "nice" (ustawianej za pomocą funkcji systemowych \fBnice\fP i \fBsetpriority\fP) i zwiększany w każdym kwancie czasu, w którym proces jest gotów do działania, lecz procedura szeregująca mu tego zabrania. Zapewnia to uczciwy postęp wszystkim procesom polityki \fISCHED_OTHER\fP. .SS Czas odpowiedzi Zablokowany proces o wysokim priorytecie, oczekujący na we/wy ma określony czas odpowiedzi przed ponownym jego szeregowaniem. Autor sterownika urządzenia może znacznie zmniejszyć czas odpowiedzi, używając procedury obsługi przerwań typu "slow interrupt". .\" , opisanej w .\" .BR request_irq (9). .SS Różne Procesy potomne dziedziczą poprzez .BR fork (2) algorytm szeregowania i parametry. Procesom czasu rzeczywistego do unikania opóźnień stronicowania zazwyczaj potrzebne jest blokowanie pamięci. Może ono być wykonane za pomocą .BR mlock (2) lub .BR mlockall (2). Ponieważ nieblokująca nieskończona pętla w procesie, szeregowanym wegług polityki \fISCHED_FIFO\fP lub \fISCHED_RR\fP będzie (wiecznie) blokować wszystkie procesy o niższym priorytecie, twórca oprogramowania powinien na konsoli zawsze trzymać dostępną powłokę, szeregowaną z wyższym priorytetem statycznym niż testowana aplikacja. Umożliwi ona awaryjne ubicie testowanych aplikacji czasu rzeczywistego, które nie blokują, lub nie kończą się zgodnie z oczekiwaniami. Jako że procesy \fISCHED_FIFO\fP i \fISCHED_RR\fP mogą wywłaszczać inne procesy na zawsze, tylko procesy roota mogą włączać te polityki szeregowania zadań. Systemy POSIX-owe, na których dostępne są .B sched_setscheduler i .BR sched_getscheduler , definiują w .IR _POSIX_PRIORITY_SCHEDULING . .SH "WARTOŚĆ ZWRACANA" Po pomyślnym zakończeniu, .BR sched_setscheduler zwraca zero. Po pomyślnym zakończeniu, .BR sched_getscheduler zwraca politykę dla procesu (nieujemna liczba całkowita). Po błędzie, zwracane jest \-1 i odpowiednio ustawiane .IR errno . .SH BŁĘDY .TP .B ESRCH Proces o identyfikatorze \fIpid\fP nie został znaleziony. .TP .B EPERM Proces wołający nie ma odpowiednich uprawnień. Tylko procesy roota mogą włączać polityki \fISCHED_FIFO\fP oraz \fISCHED_RR\fP. Proces wołający .BR sched_setscheduler musi mieć efektywny uid równy euid lub uid procesu identyfikowanego przez .I pid lub musi być procesem superużytkownika. .TP .B EINVAL Polityka szeregowania zadań \fIpolicy\fP nie jest żadną ze znanych polityk lub parametr \fIp\fP nie ma sensu dla danej polityki. .SH "ZGODNE Z" POSIX.1b (wcześniej POSIX.4) .SH USTERKI W systemie linux-1.3.81 polityka \fISCHED_RR\fP nie została jeszcze dokładnie przetestowana i może nie zachowywać się dokładnie tak, jak opisano w POSIX.1b. .SH UWAGA Standardowy Linux jest systemem operacyjnym do ogólnych zastosowań i wspiera: procesy drugoplanowe, aplikacje interakcyjne i aplikacje miękkiego czasu rzeczywisyego (aplikacje, które zazwyczaj napotykają na nieprzekraczalne terminy w przebiegach czasowych). Niniejsza strona podręcznika jest zorientowana na te rodzaje aplikacji. .PP Standardowy Linux .I nie jest zaprojektowany do obsługi aplikacji twardego czasu rzeczywistego, to znaczy aplikacji, w których nieprzekraczalne terminy (często znacznie krótsze niż sekunda) muszą być zagwarantowane lub system zawiedzie katastroficznie. Podobnie, jak wszystkie systemy do ogólnych zastosowań, Linux został zaprojektowany aby zmaksymalizować wydajność dla przypadków przeciętnych, zamiast wydajności dla przypadków najgorszych. Wydajność Linuksa w obsłudze przerwań jest dla przypadków najgorszych znacznie gorsza niż dla przypadków przeciętnych. Jego liczne blokady kernela (takie, jak dla SMP) powodują długie maksymalne czasy oczekiwania, a wiele z zastosowanych w nim technik zwiększających wydajność, zmniejsza średni czas poprzez zwiększenie czasu dla przypadków najgorszych. W większości sytuacji jest to to, czego się oczekuje, lecz gdy rzeczywiście rozwijana jest aplikacja twardego czasu rzeczywistego, należy rozważyć zastosowanie rozszerzeń twardego czasu rzeczywistego dla Linuksa, takich jak RTLinux (http://www.rtlinux.org) lub skorzystać z innego systemu operacyjnego, zaprojektowanego specjalnie dla aplikacji twardego czasu rzeczywistego. .SH "ZOBACZ TAKŻE" .BR sched_setaffinity (2), .BR sched_getaffinity (2), .BR sched_setparam (2), .BR sched_getparam (2), .BR sched_yield (2), .BR sched_get_priority_max (2), .BR sched_get_priority_min (2), .BR sched_rr_get_interval (2), .BR nice (2), .BR setpriority (2), .BR getpriority (2), .BR mlockall (2), .BR munlockall (2), .BR mlock (2), .BR munlock (2) .PP .I Programming for the real world \- POSIX.4 Billa O. Gallmeistera, O'Reilly & Associates, Inc., ISBN 1-56592-074-0 .br .I IEEE Std 1003.1b-1993 (standard POSIX.1b) .br .I ISO/IEC 9945-1:1996 \- jest to nowa rewizja (1996) POSIX.1, która zawiera jako jednolity tekst standardy POSIX.1(1990), POSIX.1b(1993), POSIX.1c(1995) i POSIX.1i(1995). .SH "INFORMACJE O TŁUMACZENIU" Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i \fImoże nie być aktualne\fR. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia: .IP man \-\-locale=C 2 sched_setscheduler .PP Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages\-pl/.