time(7)

NUME
timp - prezentare generală a timpului și a cronometrelor

DESCRIERE

  Timp real și timp de procesare
Timp real se definește ca fiind timpul măsurat de la un punct fix, fie de la un punct standard din trecut (a se vedea descrierea epocii și a timpului calendaristic de mai jos), fie de la un punct (de exemplu, începutul) din viața unui proces (timp scurs).

Timpul de procesare este definit ca fiind cantitatea de timp de procesor utilizat de un proces. Acesta este uneori împărțit în componentele utilizator și sistem. Timpul CPU de utilizator este timpul petrecut executând cod în modul utilizator. Timpul CPU de sistem este timpul petrecut de nucleu executând în modul sistem în numele procesului (de exemplu, executând apeluri de sistem). Comanda time(1) poate fi utilizată pentru a determina cantitatea de timp CPU consumată în timpul execuției unui program. Un program poate determina cantitatea de timp de procesor pe care a consumat-o folosind times(2), getrusage(2) sau clock(3).

  Ceasul hardware
Majoritatea calculatoarelor au un ceas hardware (alimentat cu baterii) pe care nucleul îl citește în momentul pornirii pentru a inițializa ceasul software. Pentru mai multe detalii, consultați rtc(4) și hwclock(8).

  Ceasul software, HZ și jiffies
Precizia diferitelor apeluri de sistem care stabilesc temporizări (de exemplu, select(2), sigtimedwait(2)) și măsoară timpul de procesare (de exemplu, getrusage(2)) este limitată de rezoluția ceasului software, un ceas întreținut de nucleu care măsoară timpul în jiffies. Dimensiunea unui jiffy este determinată de valoarea constantei HZ a nucleului.

Valoarea lui HZ variază în funcție de versiunile de nucleu și de platformele hardware. Pe i386, situația este următoarea: pe nucleele de până la Linux 2.4.x inclusiv, HZ era 100, ceea ce dădea o valoare a jiffy de 0,01 secunde; începând cu Linux 2.6.0, HZ a fost ridicat la 1000, ceea ce dă o valoare a jiffy de 0,001 secunde. Începând cu Linux 2.6.13, valoarea HZ este un parametru de configurare a nucleului și poate fi 100, 250 (valoarea implicită) sau 1000, ceea ce dă o valoare a jiffy-urilor de, respectiv, 0,01, 0,004 sau 0,001 secunde. Începând cu Linux 2.6.20, este disponibilă o frecvență suplimentară: 300, un număr care se împarte în mod egal pentru frecvențele de cadre video comune (PAL, 25 Hz; NTSC, 30 Hz).

Apelul de sistem times(2) este un caz special. Acesta raportează timpii cu o granularitate (finețe) definită de constanta de nucleu USER_HZ. Aplicațiile din spațiul utilizatorului pot determina valoarea acestei constante folosind sysconf(_SC_CLK_TCK).

  Ceasuri de sistem și de proces; spații de nume de timp
Nucleul suportă o serie de ceasuri care măsoară diferite tipuri de timp scurs și virtual (adică timpul consumat de CPU). Aceste ceasuri sunt descrise în clock_gettime(2). Câteva dintre ceasuri pot fi configurate cu ajutorul clock_settime(2). Valorile anumitor ceasuri sunt virtualizate prin spații de nume de timp; a se vedea time_namespaces(7).

  Temporizatoare de înaltă rezoluție
Înainte de Linux 2.6.21, precizia apelurilor de sistem timer și sleep (a se vedea mai jos) era, de asemenea, limitată de dimensiunea jiffy.

Începând cu Linux 2.6.21, Linux acceptă temporizatoare de înaltă rezoluție (HRT), configurabile opțional prin CONFIG_HIGH_RES_TIMERS. Pe un sistem care suportă HRT-uri, precizia apelurilor de sistem de tip sleep și timer nu mai este constrânsă de jiffy, ci poate fi atât de precisă pe cât permite echipamentul (precizia de microsecunde este tipică pentru echipamentul modern). Puteți determina dacă sunt acceptate temporizatoarele de înaltă rezoluție verificând rezoluția returnată de un apel la clock_getres(2) sau uitându-vă la intrările „resolution” din /proc/timer_list.

HRT-urile nu sunt acceptate pe toate arhitecturile hardware; (suportul este oferit pe x86, ARM și PowerPC, printre altele.)

  Epoca
Sistemele UNIX reprezintă timpul în secunde de la Epocă, 1970-01-01 00:00:00:00 +0000 (UTC).

Un program poate determina timpul calendaristic prin intermediul ceasului clock_gettime(2) CLOCK_REALTIME, care returnează timpul (în secunde și nanosecunde) care s-a scurs de la Epocă; time(2) oferă informații similare, dar numai cu o precizie la cea mai apropiată secundă. Ora sistemului poate fi modificată cu ajutorul clock_settime(2).

  Timpul defalcat
Anumite funcții de bibliotecă utilizează o structură de tip tm pentru a reprezenta timpul defalcat, care stochează valoarea timpului separată în componente distincte (an, lună, zi, oră, minut, secundă etc.). Această structură este descrisă în tm(3type), care descrie, de asemenea, funcțiile care fac conversia între timpul calendaristic și timpul defalcat. Funcțiile de conversie între timpul defalcat și reprezentările de tip șir de caractere imprimabile ale timpului sunt descrise în ctime(3), strftime(3) și strptime(3).

  Adormirea și configurarea temporizatoarelor
Diverse apeluri și funcții de sistem permit unui program să doarmă (să suspende execuția) pentru o anumită perioadă de timp; a se vedea nanosleep(2), clock_nanosleep(2) și sleep(3).

Diverse apeluri de sistem permit unui proces să configureze un temporizator care expiră la un moment dat în viitor și, opțional, la intervale repetate; a se vedea alarm(2), getitimer(2), timerfd_create(2) și timer_create(2).

  Marjă temporizator
Începând cu Linux 2.6.28, este posibil să se controleze valoarea marjei temporizatorului „timer slack” pentru un fir de execuție. Marja temporizatorului este durata de timp cu care nucleul poate întârzia trezirea anumitor apeluri de sistem care se blochează cu un timp de așteptare. Permiterea acestei întârzieri permite nucleului să reunească evenimentele de trezire, reducând astfel numărul de treziri ale sistemului și economisind energie. Pentru mai multe detalii, a se vedea descrierea PR_SET_TIMERSLACK în prctl(2).

CONSULTAȚI ȘI
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)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.