time(7) Miscellaneous Information Manual time(7) NAZWA time - przeglad czasu i czasomierzy OPIS Czas rzeczywisty i czas procesu Czas rzeczywisty jest definiowany jako czas mierzony od jakiegos okreslonego punktu: albo od standardowego punktu w przeszlosci (zob. opis Epoki i czasu kalendarzowego ponizej), albo jakiegos punktu (np. poczatku) na etapie zycia procesu (czas trwania - ang. elapsed time). Czas procesu jest definiowany jako czas procesora uzyty przez proces. Czasem dzieli sie go na czesc uzytkownika i systemu. Czas procesu przypisany do uzytkownika jest czasem wykonywania kodu w trybie uzytkownika. Systemowy czas procesora jest czasem wykonywania przez jadro w trybie systemowym kodu w imieniu procesu (np. wykonywanie wywolan systemowych). Polecenie time(1) moze posluzyc do okreslenia czasu procesora uzytego do wykonania procesu, natomiast program moze go okreslic za pomoca times(2), getrusage(2) lub clock(3). Zegar sprzetowy Wiekszosc komputerow posiada (zasilany bateryjnie) zegar sprzetowy, odczytywany przez jadro w trakcie rozruchu, w celu zainicjowania zegara programowego. Wiecej szczegolow w podrecznikach rtc(4) i hwclock(8). Zegar programowy, stala HZ i jednostka ,,jiffy" Dokladnosc roznych wywolan systemowych, ktore ustawiaja czasy oczekiwania (np. select(2), sigtimedwait(2)) i mierza czas procesora (np. getrusage(2)) jest ograniczona rozdzielczoscia zegara programowego - zegara zarzadzanego przez jadro, ktory mierzy czas w jednostce zwanej ,,jiffy". Rozmiar jiffy zalezy od wartosci stalej jadra HZ. Wartosc HZ rozni sie pomiedzy wersjami jadra i platformami sprzetowymi. Na architekturze i386 sytuacja wyglada nastepujaco: do Linuksa 2.4 wlacznie HZ wynosilo 100, co dawalo wartosc jiffy wynoszaca 0,01 sekundy, natomiast w Linuksie 2.6.0, zwiekszono wartosc HZ do 1000, co dalo jiffy majace 0,001 sekundy. Od Linuksa 2.6.13, wartosc HZ jest parametrem konfiguracji jadra i moze wynosic 100, 250 (wartosc domyslna) lub 1000, co skutkuje wartosciami jiffy odpowiednio: 0,01 s; 0,004 s lub 0,001 sekundy. Od Linuksa 2.6.20 dodano kolejna dopuszczalna wartosc: 300, gdyz jest to liczba dzielaca bez reszty popularne wartosci liczby klatek na sekunde dla wideo (uzywany w Polsce PAL ma 25 Hz, a amerykanski NTSC - 30 Hz). Wywolanie systemowe times(2) jest szczegolnym przypadkiem. Zwraca czas, z rozdzielczoscia okreslona stala jadra USER_HZ. Aplikacje w przestrzeni uzytkownika moga okreslic wartosc tej stalej za pomoca sysconf(_SC_CLK_TCK). Zegar systemowy i zegar procesu; przestrzenie nazw czasu Jadro obsluguje szeroki zestaw zegarow mierzacych rozne rodzaje czasu, ktory uplynal i wirtualnego (uzytego przez procesor). Zegary te opisano w clock_gettime(2). Kilka zegarow mozna resetowac za pomoca clock_settime(2). Wartosci okreslonych zegarow sa wirtualizowane w przestrzeniach nazw czasu; zob. time_namespaces(7). Czasomierze o wysokiej rozdzielczosci Przed Linuksem 2.6.21, dokladnosc wywolan systemowych czasomierza oraz uspienia (zob. nizej) byla rowniez ograniczona rozmiarem jiffy. Od Linuksa 2.6.21, jadro Linux obsluguje czasomierze o wysokiej rozdzielczosci (ang. high-resolution timer - HRT), konfigurowane opcjonalnie poprzez CONFIG_HIGH_RES_TIMERS. W systemie obslugujacym HRT, dokladnosc wywolan systemowych czasomierza oraz uspienia nie jest juz ograniczona wartoscia jiffy, lecz dokladnoscia na jaka pozwala sprzet (wspolczesny sprzet ma zwykle dokladnosc mikrosekund). Mozna sprawdzic, czy czasomierze o wysokiej rozdzielczosci sa dostepne, sprawdzajac rozdzielczosc zwracana przez wywolanie do clock_getres(2) lub przez sprawdzenie wpisow ,,resolution" w /proc/timer_list. Czasomierze o wysokiej rozdzielczosci nie sa obslugiwane na wszystkich architekturach sprzetowych (obsluga jest zapewniona m.in na x86, ARM i PowerPC). Epoka Systemy Uniksowe reprezentuja czas w sekundach od Epoki tj. 1970-01-01 00:00:00 +0000 (UTC). Program moze okreslic czas kalendarzowy za pomoca zegara CLOCK_REALTIME clock_gettime(2), ktore zwraca czas (w sekundach i nanosekundach), jaki uplynal od Epoki; time(2) udostepnia podobne informacje, ale z dokladnoscia tylko do najblizszej sekundy. Czas systemowy mozna zmienic za pomoca clock_settime(2). Czas rozlozony Okreslone funkcje biblioteczne uzywaja struktury typu tm do reprezentowania czasu rozlozonego (ang. broken-down time), ktory przechowuje wartosci czasu podzielone na ich poszczegolne czesci (rok, miesiac, dzien, godzina, minuta, sekunda itd.). Struktura ta jest opisana w podreczniku tm(3type), razem z opisem funkcji konwertujacych pomiedzy czasem kalendarzowym a czasem rozlozonym. Funkcje konwertujace pomiedzy czasem rozlozonym a wypisywalnymi lancuchami reprezentujacymi czas, opisano w podrecznikach ctime(3), strftime(3) i strptime(3). Usypianie oraz ustawianie czasomierzy Rozne wywolania systemowe i funkcje pozwalaja na uspienie (wstrzymanie wykonania) programu na okreslony czas; zob. nanosleep(2), clock_nanosleep(2) i sleep(3). Rozne wywolania systemowe zezwalaja na ustawienie stopera, ktory uplynie w jakims momencie w przyszlosci i opcjonalnie moze byc powtarzany w okreslonych interwalach; zob. alarm(2), getitimer(2), timerfd_create(2) i timer_create(2). Luz czasomierza Od Linuksa 2.6.28, mozna kontrolowac wartosc ,,luzu czasomierza" (ang. ,,timer slack") dla watku. Luz czasomierza to czas, o jaki jadro moze opoznic wybudzenie pewnych wywolan systemowych, ktore blokuje przy uzyciu czasu oczekiwania. Zezwolenie na to opoznienie pozwala jadru na laczenie zdarzen wybudzenia, potencjalnie redukujac liczbe systemowych wybudzen oraz oszczedzajac energie. Wiecej szczegolow w opisie PR_SET_TIMERSLACK w podreczniku prctl(2). ZOBACZ TAKZE 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) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. time(7)