Sunteți pe pagina 1din 8

MODULUL DE GESTIUNE A TIMPULUI - TIMEMS

Aßa cum se ßtie, ín conducerea proceselor variabila timp are unul dintre cele mai importante
roluri. Funcþionarea ín timp real a sistemelor de conducere este legatá de posibilitatea de a másura
timpul astronomic, adicá timpul scurs íntre 2 evenimente precum ßi de existenþa unor semnale care
sá marcheze intervale de timp de duratá prestabilitá. Ín cadrul EXECUTIVULUI realizat, toate
aceste facilitáþi sunt ínglobate ín modulul de gestiune a timpului. Modulul posedá o zona proprie de
date care conþine:
• contoarele generale pentru fracþiunile de timp considerate ßi anume:
- tacturi de ceas - a cáror duratá este funcþie de perioada ceasului de timp real a
echipamentului stabilitá la programarea dispozitivului 8253, ín modulul de gestiune a íntreruperilor;
- secunde;
- minute;
- ore;
- zile;
- luni;
- ani;
• cinci liste pentru aßteptare care sunt compuse din mai multe casete organizate pe
principiul "listelor ínlánþuite", adicá primul octet al fiecárei casete dintr-o listá indicá partea LOW a
adresei de offset a urmátoarei casete din aceeaßi listá. Pentru a indica sfärßitul unei liste, ultima
casetá din fiecare listá va conþine codul 0FFh ín locul adresei (datele sunt plasate ín aceeaßi paginá
de memorie ßi este imposibil ca o casetá sá ínceapá la o adresá cu partea LOW avänd aceastá
valoare). Capetele celor 5 liste de aßteptare se pástreazá ín 5 locaþii speciale.
O casetá din aceste liste conþine 4 octeþi, iar numárul casetelor se defineßte la generarea
sistemului, o aceeaßi casetá putänd trece ín mod dinamic dintr-o listá ín alta ín timpul execuþiei
programului.
Cele 5 liste de aßteptare conþin:
- lista 1 - casete libere;
- lista 2 - casete aferente taskurilor ín aßteptare pe tacturi de ceas;
- lista 3 - casete aferente taskurilor ín aßteptare pe secunde;
- lista 4 - casete aferente taskurilor ín aßteptare pe minute;
- lista 5 - casete aferente taskurilor ín aßteptare pe ore.
Modul de organizare a zonei de date aferente modului de gestiune a timpului este prezentat
ín Fig. 6.19.
La iniþializarea modulului, toate casetele sunt incluse ín lista 1 (lista casetelor libere), listele
2 - 5 fiind goale. Introducerea unui task ín mecanismul de reprogramare implicá ínscrierea unor
informaþii ín prima caseta liberá ßi trecerea acestei casete din lista de casete libere ín lista de
aßteptare pe unitatea de másurá corespunzátoare. Structura ßi conþinutul unei casete este prezentatá
ín Fig. 6.20.
Íntreruperile sosite de la ceas produc actualizarea contoarelor. Atunci cänd un contor
general este incrementat, se face ßi o baleiere a listei de aßteptare anexate, decrementänd contoarele
locale incluse ín casetele acestei liste. Ín momentul cänd un contor local al unei casete ajunge la
zero, este reíncárcat cu valoarea iniþialá (valoarea de reprogramare) conþinutá ín octetul urmátor al
casetei, dupá care taskul al cárui numár este specificat ín octetul 4 al casetei (Fig. 6.20) este trecut
ín starea READY ín mod "condiþionat". Astfel, dacá un task nu se terminá ín intervalul de
reprogramare specificat, se aßteaptá sfärßitul sáu logic, prin apelarea din task a directivei ?EXIT
care íl va trece ín substarea OPRIT. Reprogramarea execuþiei lui se va face la iniþializarea primului
interval de timp de dupá terminarea lui logicá.

6 - 16
Contor tacturi
de ceas
Contor secunde
Contor minute
CONTOARE Adresa de ínlánþuire
Contor ore
(partea LOW a adresei de
Contor zile GENERALE Octet 1
offset a urmátoarei casete
Contor luni
Contor ani din aceeaßi listá)
Cap listá 1 Valoare contor local
Cap listá 2
(se decrementeazá funcþie Octet 2
Cap listá 3
de íntreruperile de la ceas)
Cap listá 4
Cap listá 5 Valoare iniþialá (fixá)
Octet 3
(Intervalul de reprogramare)

CASETA 1 Nivel de prioritate


Octet 4
al taskului

CASETA 2 CASETA a n - a

Figura 6.19 Figura 6.20


Diagramele de sincronizare ale taskurilor pe condiþii de timp oferite de acest modul sunt
prezentate ín Fig.6.21.a (unde durata de execuþie a taskului este mai micá decät valoarea
intervalului de reprogramare) ßi Fig.6.21.b (unde durata execuþiei taskului este mai mare decät
valoarea intervalului de reprogramare).
Interval de timp de
reprogramare a taskului

Timp
Durata de Interval
execuþie a de (a)
taskului aßteptare Interval de timp de
reprogramare a taskului

Timp
Durata de execuþie a taskului Interval de timp
de aßteptare
(b)
Figura 6.21

Precizám cá contoarele pentru timpul astronomic pot fi scrise ßi citite de programele


utilizatorului.

Directivele modulului de gestiune a timpului


Modulul de gestiune a timpului, ca ßi celelalte module ale EXECUTIVULUI, oferá o serie
de directive ce pot fi apelate ín programele utilizatorului ín vederea conducerii ín timp real a
procesului. Dintre acestea menþionám:
6 - 17
?TIMEINI
- Este o directivá de iniþializare a modulului;
- Nu necesitá parametri;
- Pune pe zero contoarele generale ale timpului astronomic ín afara contoarelor pentru zile ßi
luni care sunt puse pe 1;
- Include ín lista 1 (lista casetelor libere) toate casetele;
- Nu declará eveniment semnificativ.

?nume ?SETTIME / ?ISETTIME


- Aceste directive permit potrivirea ceasului astronomic;
- Structura lor este asemánátoare celei din Fig.6.5;
Dezactiveazá
íntreruperile - Parametru: la apelul acestor directive, registrul SI trebuie sá conþiná adresa
unei zone din memorie unde se gásesc noile valori ale contoarelor ín ordinea:
?Inume orá, minut, secundá, tact de ceas, zi, luná, an;
- Nu declará eveniment semnificativ.

Activeazá ?GETTIME / ?IGETTIME


íntreruperile
- Directivele transferá din contoarele generale íntr-o zoná indicatá din
Figura 6.5 memorie valorile timpului astronomic;
- Structura lor este asemánátoare celei din Fig.6.5;
- Parametru: la apelul acestor directive, registrul DI trebuie sá conþiná adresa unei zone din
memorie unde se vor depune valorile contoarelor interne;
- Nu declará eveniment semnificativ.

?EXC/?IEXC
• Sunt cele mai importante ßi utile directive explicite ale acestui modul, realizänd
reprogramarea execuþiei unui task la intervale de timp dorite;
• Parametri: la apelul acestor directive, urmátoarele registre vor conþine:
(AL) = nivelul de prioritate al taskului (numárul taskului);
(BL) = valoarea intervalului de timp de reprogramare;
(CL) = <mod><unitate de másurá>, cu urmátoarea asamblare:
 0 = mod sincronizat
C7 = bitul de mod 
 1 = mod nesincronizat
C6 - C2 = 0
C1, C0 = unitate de másurá:
00 = tacturi de ceas
01 = secunde
10 = minute
11 = ore
Modul sincronizat presupune cá prima cerere de intrare ín execuþie a taskului are loc ca ßi
cänd reprogramarea sa ar fi fost fácutá ín momentul trecerii prin zero a contorului general aferent
unitáþii de másurá specificate, dupá care intervalele de timp vor fi másurate normal. Calculul primei
valori de reprogramare ín modul sincronizat se realizeazá astfel:
- se citeßte valoarea curentá a contorului general aferent unitáþii de másurá specificate;
- se compará aceastá valoare cu valoarea de reprogramare (plasatá ín registrul BL);
- dacá valoarea curentá a contorului general este mai micá decät valoarea de reprogramare,
se face diferenþa dintre valoarea de reprogramare ßi cea curentá, iar aceastá diferenþá se ínscrie ín
locaþia a doua a casetei;
6 - 18
- dacá valoarea curentá este mai mare decät valoarea de reprogramare, se aduná valoarea de
reprogramare cu ea ínsáßi de atätea ori päná devine strict mai mare decät valoarea curentá, se face
apoi diferenþa íntre valoarea astfel obþinutá ßi valoarea curentá ßi se ínscrie aceastá diferenþá ín
locaþia a doua a casetei.
Se observá cá, ín ambele situaþii, iniþial, ín casetá se ínscrie diferenþa dintre valoarea de
reprogramare ßi valoarea curentá, modulo valoarea de reprogramare. Ín modul acesta,
reprogramarea taskurilor ín mod sincronizat presupune alocarea aceleiaßi origini de timp tuturor
valorilor de reprogramare aferente unei unitáþi de másurá.
Modul nesincronizat presupune ínceperea másurárii intervalului de timp de reprogramare
din momentul apelárii directivei;
• Dacá toate casetele sunt ocupate, se poziþioneaza bitul de CF pe 1 (CF = 1), ceea ce
specificá faptul cá directiva nu s-a executat; altfel CF = 0;
• Directivele nu declará eveniment semnificativ;
• Structura acestor directive este asemánátoare celei din Fig. 6.5
Exemplu: Sá presupunem cá se doreßte reprogramare un task ín modul sincronizat, la un
interval de 5 sec. (Fig. 6.22.a)

Momentul apelului directivei

2 5 10 15

0
3 τ Contor
general
Interval de secunde
timp de aßteptare
Interval de timp de execuþie a taskului
Prima valoare a contorului local
a) mod SINCRONIZAT

Momentul apelului directivei


5
10 15
8 13
0 3 5 τ Contor
general
Interval de timp secunde
de aßteptare
Interval de timp execuþie a taskului
Prima valoare a contorului local
b) mod NESINCRONIZAT
Figura 6.22
Dacá valoarea contorului general pentru secunde este (ín momentul apelului directivei)
egalá cu 3 secunde, se va ínscrie ín locaþia a 2-a casetei valoarea 5 - 3 = 2, deci prima execuþie a
taskului va avea loc peste 2 secunde, deci ca ßi cum reprogramarea cu 5 secunde ar fi avut loc cänd
contorul general secunde era zero.

6 - 19
Dacá valoarea contorului general este, de exemplu, egalá cu 21, atunci se ínsumeazá
intervalul de reprogramare cu el ínsußi päná la prima valoarea mai mare decät 21, adicá 25. Apoi
din aceastá valoare se scade 21 ßi se ínscrie (25 - 21 = 4) ín locaþia a 2-a casetei. Taskul va intra
deci ín execuþie peste 4 secunde. Ín ambele exemple se observá cá taskul va fi lansat ín execuþie la
valori multiplu de 5 ale contorului general.
Dacá directiva se apeleazá ín mod NESINCRONIZAT cu valoarea de reprogramare 5, iar
contorul general secunde, ín momentul apelului directivei, era la 3 secunde, taskul va fi lansat ín
execuþie la urmátoarele valori ale contorului general 8, 13, 18, 23, ... (Fig. 6.22.b).
Ín concluzie, Fig. 6.22 prezintá momentele de intrare ín executie ale unui task reprogramat a
se executa la fiecare 5 secunde, apelul directivei ?EXC avänd loc cänd contorul general secunde are
valoarea 3, atät ín varianta sincronizatá cät ßi ín cea nesincronizatá.
Structura directivei ?IEXC este prezentatá ín Fig.6.23.

?IEXC

Cautá o casetá liberá ín lista 1

NU DA
Existá casetá liberá ?

CF = 1 Selecteazá unitatea de másurá


din registrul (CL)

Insereazá caseta ín lista anexatá


unitáþii de másurá specificate

DA
Mod SINCRONIZAT ?
NU
Calculeazá valoarea Pune ín contorul local al casetei
primului interval de valoarea intervalului de
reprogramare ßi o ínscrie reprogramare
ín contorul local al casetei

Scrie ín casetá valoarea iniþialá (fixá)


a intervalului de reprogramare ßi
nivelul de prioritate al taskului

CF = 0

RET
Figura 6.23

6 - 20
?CAN / ?ICAN
- Directive explicite care anuleazá toate reprogramarile unui task (un task poate aparea ín
mai multe liste);
- Parametru: la apelul acestor directive, registrul AL trebuie sá conþiná nivelul de prioritate
al taskului ce trebuie scos din listele de reprogramare;
- Directivele cautá numárul taskului (menþionat ca parametru al directivelor) ín toate
casetele celor 4 liste de aßteptare ßi, ín caz cá íl gásesc, trec caseta respectivá ín lista cu casete
libere;
- Structura celor 2 directive este asemánátoare celei din Fig.6.5;
- Nu declará eveniment semnificativ;
- Organizarea directivei ?ICAN este prezentatá ín Fig. 6.24.
?ICAN

Se intrá ín lista 2 de aßteptare

Se cerceteazá prima casetá din listá

DA NU
Numárul taskului coincide
cu cel menþionat ín casetá?

Pune caseta ín lista


casetelor libere

NU
Sfärßit de listá ?
DA
S-au cercetat toate DA Se trece la caseta
listele ? urmátoare
NU
Se trece la lista RET
urmátoare
Figura 6.24

?TINTR
- Este adresa de intrare a subrutinei de tratare a íntreruperii de la ceas (dupá tratarea primará
care are loc ín modulul de gestiune a íntreruperilor);
- Salveazá starea programului íntrerupt (cu ?MONI);
- Produce incrementarea contoarelor generale ale ceasului de timp astronomic ßi, dupá
incrementarea fiecárui contor, parcurge, prin intermediul unei subrutine - CRUN - (inclusá ín
aceastá subrutiná de tratare a íntreruperii), lista de aßteptare anexatá, decrementänd contoarele
locale (ín afara contoarelor corespunzátoare zilelor, lunilor ßi anilor);
6 - 21
- Dacá un contor local devine zero, subrutina CRUN íl reiniþializeazá ßi lanseazá o directiva
?IRUN conditionat, avänd ca parametru numárul taskului specificat;
- Dá controlul planificatorului de taskuri (declará eveniment semnificativ);
- Modul de organizare al subrutinei ?TINTR este prezentat ín Fig. 6.25, iar ín Fig. 6.26 este
prezentatá structura subrutinei CRUN.

?TINTR

?MONI Se salveazá starea


taskului íntrerupt

Incrementeazá contor general - tacturi de ceas

CRUN

NU
Contorul tacturi de ceas are valoarea maximá ?
DA
Contorul general tacturi de ceas este adus la zero

Incrementeazá contor general - secunde

CRUN

NU
Contorul secunde are valoarea 60 ?
DA
Contorul secunde este adus la zero

Incrementeazá contor general - minute

CRUN
..
.
Incrementeazá contor general luni
NU
Contor general luni are valoarea maximá ?
DA
Contor general luni capátá valoarea 1

Incrementeazá contor general - ani


NU
Contor general ani are valoarea 100 ?
DA
Contor general ani e adus la zero
?SC
Figura 6.25

6 - 22
CRUN

Acceseazá prima casetá din listá

DA
§färßit de listá ? RET
NU
Decrementeazá contorul local al casetei

Contorul local are valoarea zero ? NU


DA
Citeßte valoarea de reiniþializare din casetá
ßi o reintroduce ín contorul local

Citeßte nivelul de prioritate al taskului


din casetá ßi íl introduce ín registrul AL

?IRUN

Se trece la caseta urmátoare

Figura 6.26.

6 - 23

S-ar putea să vă placă și