Provided by: manpages-pl_4.26.0-1_all 

NAZWA
time - przegląd czasu i czasomierzy
OPIS
Czas rzeczywisty i czas procesu
Czas rzeczywisty jest definiowany jako czas mierzony od jakiegoś określonego punktu: albo od
standardowego punktu w przeszłości (zob. opis Epoki i czasu kalendarzowego poniżej), albo jakiegoś punktu
(np. początku) na etapie życia procesu (czas trwania – ang. elapsed time).
Czas procesu jest definiowany jako czas procesora użyty przez proces. Czasem dzieli się go na część
użytkownika i systemu. Czas procesu przypisany do użytkownika jest czasem wykonywania kodu w trybie
użytkownika. Systemowy czas procesora jest czasem wykonywania przez jądro w trybie systemowym kodu w
imieniu procesu (np. wykonywanie wywołań systemowych). Polecenie time(1) może posłużyć do określenia
czasu procesora użytego do wykonania procesu, natomiast program może go określić za pomocą times(2),
getrusage(2) lub clock(3).
Zegar sprzętowy
Większość komputerów posiada (zasilany bateryjnie) zegar sprzętowy, odczytywany przez jądro w trakcie
rozruchu, w celu zainicjowania zegara programowego. Więcej szczegółów w podręcznikach rtc(4) i
hwclock(8).
Zegar programowy, stała HZ i jednostka „jiffy”
Dokładność różnych wywołań systemowych, które ustawiają czasy oczekiwania (np. select(2),
sigtimedwait(2)) i mierzą czas procesora (np. getrusage(2)) jest ograniczona rozdzielczością zegara
programowego – zegara zarządzanego przez jądro, który mierzy czas w jednostce zwanej „jiffy”. Rozmiar
jiffy zależy od wartości stałej jądra HZ.
Wartość HZ różni się pomiędzy wersjami jądra i platformami sprzętowymi. Na architekturze i386 sytuacja
wygląda następująco: do Linuksa 2.4 włącznie HZ wynosiło 100, co dawało wartość jiffy wynoszącą 0,01
sekundy, natomiast w Linuksie 2.6.0, zwiększono wartość HZ do 1000, co dało jiffy mające 0,001 sekundy.
Od Linuksa 2.6.13, wartość HZ jest parametrem konfiguracji jądra i może wynosić 100, 250 (wartość
domyślna) lub 1000, co skutkuje wartościami jiffy odpowiednio: 0,01 s; 0,004 s lub 0,001 sekundy. Od
Linuksa 2.6.20 dodano kolejną dopuszczalną wartość: 300, gdyż jest to liczba dzieląca bez reszty
popularne wartości liczby klatek na sekundę dla wideo (używany w Polsce PAL ma 25 Hz, a amerykański NTSC
– 30 Hz).
Wywołanie systemowe times(2) jest szczególnym przypadkiem. Zwraca czas, z rozdzielczością określoną stałą
jądra USER_HZ. Aplikacje w przestrzeni użytkownika mogą określić wartość tej stałej za pomocą
sysconf(_SC_CLK_TCK).
Zegar systemowy i zegar procesu; przestrzenie nazw czasu
Jądro obsługuje szeroki zestaw zegarów mierzących różne rodzaje czasu, który upłynął i wirtualnego
(użytego przez procesor). Zegary te opisano w clock_gettime(2). Kilka zegarów można resetować za pomocą
clock_settime(2). Wartości określonych zegarów są wirtualizowane w przestrzeniach nazw czasu; zob.
time_namespaces(7).
Czasomierze o wysokiej rozdzielczości
Przed Linuksem 2.6.21, dokładność wywołań systemowych czasomierza oraz uśpienia (zob. niżej) była również
ograniczona rozmiarem jiffy.
Od Linuksa 2.6.21, jądro Linux obsługuje czasomierze o wysokiej rozdzielczości (ang. high-resolution
timer – HRT), konfigurowane opcjonalnie poprzez CONFIG_HIGH_RES_TIMERS. W systemie obsługującym HRT,
dokładność wywołań systemowych czasomierza oraz uśpienia nie jest już ograniczona wartością jiffy, lecz
dokładnością na jaką pozwala sprzęt (współczesny sprzęt ma zwykle dokładność mikrosekund). Można
sprawdzić, czy czasomierze o wysokiej rozdzielczości są dostępne, sprawdzając rozdzielczość zwracaną
przez wywołanie do clock_getres(2) lub przez sprawdzenie wpisów „resolution” w /proc/timer_list.
Czasomierze o wysokiej rozdzielczości nie są obsługiwane na wszystkich architekturach sprzętowych
(obsługa jest zapewniona m.in na x86, ARM i PowerPC).
Epoka
Systemy Uniksowe reprezentują czas w sekundach od Epoki tj. 1970-01-01 00:00:00 +0000 (UTC).
Program może określić czas kalendarzowy za pomocą zegara CLOCK_REALTIME clock_gettime(2), które zwraca
czas (w sekundach i nanosekundach), jaki upłynął od Epoki; time(2) udostępnia podobne informacje, ale z
dokładnością tylko do najbliższej sekundy. Czas systemowy można zmienić za pomocą clock_settime(2).
Czas rozłożony
Określone funkcje biblioteczne używają struktury typu tm do reprezentowania czasu rozłożonego (ang.
broken-down time), który przechowuje wartości czasu podzielone na ich poszczególne części (rok, miesiąc,
dzień, godzina, minuta, sekunda itd.). Struktura ta jest opisana w podręczniku tm(3type), razem z opisem
funkcji konwertujących pomiędzy czasem kalendarzowym a czasem rozłożonym. Funkcje konwertujące pomiędzy
czasem rozłożonym a wypisywalnymi łańcuchami reprezentującymi czas, opisano w podręcznikach ctime(3),
strftime(3) i strptime(3).
Usypianie oraz ustawianie czasomierzy
Różne wywołania systemowe i funkcje pozwalają na uśpienie (wstrzymanie wykonania) programu na określony
czas; zob. nanosleep(2), clock_nanosleep(2) i sleep(3).
Różne wywołania systemowe zezwalają na ustawienie stopera, który upłynie w jakimś momencie w przyszłości
i opcjonalnie może być powtarzany w określonych interwałach; zob. alarm(2), getitimer(2),
timerfd_create(2) i timer_create(2).
Luz czasomierza
Od Linuksa 2.6.28, można kontrolować wartość „luzu czasomierza” (ang. „timer slack”) dla wątku. Luz
czasomierza to czas, o jaki jądro może opóźnić wybudzenie pewnych wywołań systemowych, które blokuje przy
użyciu czasu oczekiwania. Zezwolenie na to opóźnienie pozwala jądru na łączenie zdarzeń wybudzenia,
potencjalnie redukując liczbę systemowych wybudzeń oraz oszczędzając energię. Więcej szczegółów w opisie
PR_SET_TIMERSLACK w podręczniku prctl(2).
ZOBACZ TAKŻE
date(1), time(1), timeout(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2),
getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2),
timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3),
ntp_adjtime(3), ntp_gettime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3),
timeradd(3), usleep(3), rtc(4), time_namespaces(7), hwclock(8)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 2 maja 2024 r. time(7)