SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

a.Gestiune clock

Funcțiile rutinei de tratare a întreruperilor de ceas sunt:
-reporne?te ceasul;
-planifică apelurile funcțiilor interne ale nucleului pe baza timerelor interne;
-furnizează posibilitatea schițării execuției proceselor în modul nucleu ?i utilizator;
-calculează timpii statistici pentru proces ?i sistem;
-urmăre?te timpul;
-trimite semnale de alarmă la procesele care solicită acest lucru;
-treze?te periodic procesul încărcător (trimite periodic semnale de wake up la procesele depuse în memorie);
-controlează planificarea proceselor;
Unele operații sunt făcute la fiecare întrerupere de ceas, pe când altele sunt făcute după câteva impulsuri de ceas. Rutina de tratare a întreruperii de ceas rulează cu nivelul de execuțtie al procesului setat high, previne apariția altor evenimente (cum ar fi întreruperile de la dispozitivele periferice) atunci când el este activ.Program care utlizează ^apelul alarm:
^#include <sys/types.h>
^ #include<sys/stat.h>
^ #include<sys/signal.h>
^ main( argc, argv)
^ int argc;
^ char *argv[];
{
^extern unsigned alarm();
^extern wakeup();
^struct stat statbuf;
^time_t axtime;
^if(argc!=2)
{
^printf(" doar un argument
");
^exit(); }
^axtime=(time_t) 0;
^for(;;)
{
/* găse?te timpul de acces la fi?ier */
^if(stat(argv[1], [and]statbuf)==-1)
{
^printf(" fi?ierul [procent]s nu este acolo
", argv[1]);
^exit(); }
^if(axtime!=statbuf.st_atime)
{
^printf("fi?ierul [procent]s a fost accesat
", argv[1]);
axtime=statbuf.st_atime;
}
^signal(SIGALRM, wakeup); /* reset pentru alarmă */
^alarm(60);
^pause(); /* stă în sleep până apare un semnal */
}
^}
^wakeup() { }