CATEGORII DOCUMENTE |
Apeluri sistem pentru timp - UNIX
Exista cateva apeluri sistem legate de timp, stime, time, times si alarm. Primele doua se ocupa cu timpul global al sistemului iar ultimele doua cu timpul proceselor individuale.
Apelul sistem stime permite administratorului de sistem sa seteze o variabila nucleu globala la o valoare ce da timpul curent:
stime(pvalue);
unde pvalue indica un intreg pe 32 de biti care contine timpul masurat in secunde de la 1 ianuarie 1970 ora 00:00:00:, GMT. Rutina de tratare a intreruperii de ceas incrementeaza variabila o data pe secunda.
Apelul sistem time furnizeaza timpul setat de catre apelul stime:
time(tloc);
unde tloc indica o locatie in procesul utilizator pentru valoarea obtinuta. De asemenea, apelul time returneaza aceasta valoare din apelul sistem. Comenzile cum sunt date utilizeaza apelul time pentru a determina timpul curent.
Apelul sistem times furnizeaza timpii cumulati pe care procesul apelant i-a consumat in modurile utilizator si nucleu si timpii cumulati consumati de toate procesele fiu in starea zombie in modurile utilizator si nucleu. Sintaxa apelului este
times(tbuffer)
struct tms *tbuffer;
unde structura tms contine timpii obtinuti si este definita prin
struct tms ;
#include<sys/types.h>
#include<sys/times.h>
extern long times();
main()
child(n)
int n;
Figura 9.7. Program care utilizeaza apelul sistem times
Apelul sistem times returneaza timpul scurs 'de la un moment arbitrar de timp din trecut',in mod obisnuit de la initializarea sistemului.
In programul din figura 9.7, un proces creeaza 10 procese fiu si fiecare din acestia executa un ciclu de 10000 de ori. Procesul parinte apeleaza times inainte de a crea procesele fiu si dupa terminarea acestora si procesele fiu apeleaza times inainte si dupa ciclu. Ne-am putea astepta ca timpii consumati de procesele fiu in modurile utilizator si sistem (contorizati in campurile corespunzatoare ale procesului parinte) sa fie egali cu sumele respective ale timpilor consumati de procesele fiu, si ca timpul real de executie a procesului parinte sa fie egal cu suma timpilor reali de executie ai proceselor fiu. Totusi, timpii consumati de procesele fiu nu includ timpul consumat pentru apelurile sistem fork si exit, si toti timpii pot fi deformati de timpul folosit pentru tratarea intreruperilor sau pentru comutarile de context.
Procesele utilizator pot planifica semnale de alarma folosind apelul sistem alarm De exemplu, programul din figura 9.8 verifica timpul ultimului acces la un fisier in fiecare minut si tipareste un mesaj daca fisierul a fost accesat. Pentru a face aceasta, el intra intr-un ciclu infint: in timpul fiecarei iteratii se apeleaza stat pentru a raporta ultimul moment de timp la care fisierul a fost accesat si tipareste un mesaj daca acesta a fost accesat in ultimul minut. Apoi, procesul apeleaza signal pentru a aranja interceptarea semnalelor de alarma, apeleaza alarm pentru a programa un semnal de alarma la 60 de secunde si apeleaza pause pentru a-si suspenda activitatea pana cand receptioneaza un semnal. Dupa 60 de secunde se genereaza semnalul de alarma; nucleul seteaza stiva utilizator a procesului pentru a apela functia de interceptare a semnalului(wake up), functia intoarce adresa instructiunii dupa apelul pause si procesul reia ciclul.
Factorul comun in toate apelurile sistem de timp prezentate este ceasul sistemului: nucleul diferite contoare de timp cand trateaza intreruperile de ceas si initiaza actiuni corespunzatoare.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 994
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved